diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 88c5cabd28..0e4bcf401e 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.10.1 (Latest release) + - 1.10.2 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.10.1 - 1.10.0 - 1.9.4 - 1.9.3 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index e49c54e756..49828dc6a4 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.10.1 (Latest release) + - 1.10.2 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.10.1 - 1.10.0 - 1.9.4 - 1.9.3 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index 02bc0399b1..2183cf7d89 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.10.1 (Latest release) + - 1.10.2 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.10.1 - 1.10.0 - 1.9.4 - 1.9.3 diff --git a/.gitignore b/.gitignore index 5f9172181d..301fc8ca29 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,7 @@ prefabs.json /pokeemerald-*.png src/data/map_group_count.h tools/trainerproc/trainerproc +*.Identifier +*.smol +*.fastSmol +*.smolTM diff --git a/CHANGELOG.md b/CHANGELOG.md index 963e05d7bc..ed2785837a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Pokeemerald-Expansion Changelogs ## 1.10.x +- **[Version 1.10.2](docs/changelogs/1.10.x/1.10.2.md) - 🧹 Bugfix Release** - **[Version 1.10.1](docs/changelogs/1.10.x/1.10.1.md) - 🧹 Bugfix Release** - **[Version 1.10.0](docs/changelogs/1.10.x/1.10.0.md) - ✨ Feature Release** diff --git a/CREDITS.md b/CREDITS.md new file mode 100644 index 0000000000..70203c4f93 --- /dev/null +++ b/CREDITS.md @@ -0,0 +1,4 @@ +## Mega Evolution Overworld Sprite Credits: +- [princess-phoenix](https://www.deviantart.com/princess-phoenix) +- [larryturbo](https://www.deviantart.com/larryturbo) +- [kidkatt](https://www.deviantart.com/kidkatt) diff --git a/README.md b/README.md index 70317fac5c..5b1defe62b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The main advantage of using vanilla pokeemerald as a base is being able to link If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect. You can phrase it as the following: ``` -Based off RHH's pokeemerald-expansion 1.10.1 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.10.2 https://github.com/rh-hideout/pokeemerald-expansion/ ``` #### Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read [this guide](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub) to learn how to fork the repository and clone locally from there. diff --git a/asm/macros/battle_frontier/battle_dome.inc b/asm/macros/battle_frontier/battle_dome.inc index 9adbcc54e7..fe21ca4308 100644 --- a/asm/macros/battle_frontier/battle_dome.inc +++ b/asm/macros/battle_frontier/battle_dome.inc @@ -57,7 +57,7 @@ special CallBattleDomeFunction .endm - @ Sets gTrainerBattleOpponent_A to the trainer ID of the next opponent + @ Sets gTrainerBattleParameter.params.opponentA to the trainer ID of the next opponent .macro dome_setopponent setvar VAR_0x8004, BATTLE_DOME_FUNC_SET_OPPONENT_ID special CallBattleDomeFunction diff --git a/asm/macros/battle_frontier/battle_tower.inc b/asm/macros/battle_frontier/battle_tower.inc index b3c86955dd..6c9e606dde 100644 --- a/asm/macros/battle_frontier/battle_tower.inc +++ b/asm/macros/battle_frontier/battle_tower.inc @@ -115,14 +115,13 @@ .macro multi_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId: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 + trainerbattle TRAINER_BATTLE_SET_TRAINERS_FOR_MULTI_BATTLE, OBJ_ID_NONE, \trainer1Id, NULL, \trainer1LoseText, NULL, OBJ_ID_NONE, \trainer2Id, NULL, \trainer2LoseText, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE multi_do MULTI_BATTLE_2_VS_2, \partnerId .endm .macro multi_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req special SavePlayerParty - trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons + trainerbattle TRAINER_BATTLE_SET_TRAINERS_FOR_MULTI_BATTLE, OBJ_ID_NONE, \trainer1Id, NULL, \trainer1LoseText, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE multi_do MULTI_BATTLE_2_VS_1, \partnerId .endm @@ -145,14 +144,13 @@ .macro multi_fixed_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId: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 + trainerbattle TRAINER_BATTLE_SET_TRAINERS_FOR_MULTI_BATTLE, OBJ_ID_NONE, \trainer1Id, NULL, \trainer1LoseText, NULL, OBJ_ID_NONE, \trainer2Id, NULL, \trainer2LoseText, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE multi_do_fixed MULTI_BATTLE_2_VS_2, \partnerId .endm .macro multi_fixed_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req special SavePlayerParty - trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons + trainerbattle TRAINER_BATTLE_SET_TRAINERS_FOR_MULTI_BATTLE, OBJ_ID_NONE, \trainer1Id, NULL, \trainer1LoseText, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE multi_do_fixed MULTI_BATTLE_2_VS_1, \partnerId .endm diff --git a/asm/macros/battle_frontier/frontier_util.inc b/asm/macros/battle_frontier/frontier_util.inc index e40eccb5e7..4913b0fc15 100644 --- a/asm/macros/battle_frontier/frontier_util.inc +++ b/asm/macros/battle_frontier/frontier_util.inc @@ -133,7 +133,7 @@ special CallFrontierUtilFunc .endm - @ Buffer the name of gTrainerBattleOpponent_A in STR_VAR_1 (0) or STR_VAR_2 (1) + @ Buffer the name of gTrainerBattleParameter.params.opponentA in STR_VAR_1 (0) or STR_VAR_2 (1) .macro frontier_gettrainername stringVar:req setvar VAR_0x8004, FRONTIER_UTIL_FUNC_BUFFER_TRAINER_NAME .if \stringVar == STR_VAR_1 diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 6aa832511d..a169b3580b 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1277,8 +1277,9 @@ .byte 0xef .endm - .macro givecaughtmon + .macro givecaughtmon passInstr:req .byte 0xf0 + .4byte \passInstr .endm .macro trysetcaughtmondexflags failInstr:req @@ -1290,9 +1291,8 @@ .byte 0xf2 .endm - .macro trygivecaughtmonnick successInstr:req + .macro trygivecaughtmonnick .byte 0xf3 - .4byte \successInstr .endm .macro subattackerhpbydmg @@ -1555,13 +1555,43 @@ .4byte \failInstr .endm - .macro trysetstatus1, ptr:req - callnative BS_TrySetStatus1 + .macro trysetparalysis, ptr:req + callnative BS_TrySetParalysis .4byte \ptr .endm - .macro trysetstatus2, ptr:req - callnative BS_TrySetStatus2 + .macro trysetpoison, ptr:req + callnative BS_TrySetPoison + .4byte \ptr + .endm + + .macro trysetpoisonparalysis, ptr:req + callnative BS_TrySetPoisonParalyzis + .4byte \ptr + .endm + + .macro tryseteffectspore, ptr:req + callnative BS_TrySetEffectSpore + .4byte \ptr + .endm + + .macro trysetconfusion, ptr:req + callnative BS_TrySetConfusion + .4byte \ptr + .endm + + .macro trysetinfatuation, ptr:req + callnative BS_TrySetInfatuation + .4byte \ptr + .endm + + .macro trysetescapeprevention, ptr:req + callnative BS_TrySetEscapePrevention + .4byte \ptr + .endm + + .macro trysettorment, ptr:req + callnative BS_TrySetTorment .4byte \ptr .endm @@ -1611,8 +1641,8 @@ callnative BS_TryTriggerStatusForm .endm - .macro setphotongeysercategory - callnative BS_SetPhotonGeyserCategory + .macro setdynamicmovecategory + callnative BS_SetDynamicMoveCategory .endm .macro tryupperhand failInstr:req @@ -1727,11 +1757,6 @@ .4byte \failInstr .endm - .macro tryhitswitchtarget failInstr:req - callnative BS_TryHitSwitchTarget - .4byte \failInstr - .endm - .macro setmagiccoattarget callnative BS_SetMagicCoatTarget .endm @@ -1762,6 +1787,15 @@ callnative BS_RemoveTerrain .endm + .macro tryspectralthiefsteal jumpInstr:req + callnative BS_TrySpectralThiefSteal + .4byte \jumpInstr + .endm + + .macro spectralthiefprintstats + callnative BS_SpectralThiefPrintStats + .endm + .macro setmoveresultflags flags:req callnative BS_SetMoveResultFlags .2byte \flags @@ -2078,10 +2112,6 @@ 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 diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 1c529b0ca7..3a651191de 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -694,59 +694,31 @@ .byte \direction .endm + NULL = 0 + OBJ_ID_NONE = 0 + @ Configures the arguments for a trainer battle, then jumps to the appropriate script in scripts/trainer_battle.inc - .macro trainerbattle type:req, trainer:req, local_id:req, pointer1:req, pointer2, pointer3, pointer4 + .macro trainerbattle type:req localIdA:req, trainer_a:req, intro_text_a:req, lose_text_a:req, event_script_a:req, localIdB:req, trainer_b:req, intro_text_b:req, lose_text_b:req, event_script_b:req, victory_text:req, cannot_battle:req, isDouble:req, playMusicA:req, playMusicB:req, isRematch:req .byte SCR_OP_TRAINERBATTLE - .byte \type - .2byte \trainer - .2byte \local_id - .if \type == TRAINER_BATTLE_SINGLE - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ event script - .elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ event script - .elseif \type == TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT - .4byte \pointer1 @ text - .elseif \type == TRAINER_BATTLE_DOUBLE - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ text - .elseif \type == TRAINER_BATTLE_REMATCH - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ text - .4byte \pointer4 @ event script - .elseif \type == TRAINER_BATTLE_REMATCH_DOUBLE - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ text - .elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ text - .4byte \pointer4 @ event script - .elseif \type == TRAINER_BATTLE_PYRAMID - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .elseif \type == TRAINER_BATTLE_SET_TRAINER_A - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .elseif \type == TRAINER_BATTLE_SET_TRAINER_B - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .elseif \type == TRAINER_BATTLE_HILL - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .endif + .set trainerbattle_flags, 0 + .ifgt \isDouble; .set trainerbattle_flags, trainerbattle_flags | (1 << 0); .endif + .ifgt \isRematch; .set trainerbattle_flags, trainerbattle_flags | (1 << 1); .endif + .ifgt \playMusicA; .set trainerbattle_flags, trainerbattle_flags | (1 << 2); .endif + .ifgt \playMusicB; .set trainerBattle_flags, trainerbattle_flags | (1 << 3); .endif + .ifgt \type; .set trainerbattle_flags, trainerbattle_flags | (\type << 4); .endif + .byte trainerbattle_flags + .byte \localIdA @ objEventLocalIdA + .2byte \trainer_a @ opponentA + .4byte \intro_text_a @ introTextA + .4byte \lose_text_a @ defeatTextA + .4byte \event_script_a @ retAddrA + .byte \localIdB @ objEventLocalIdB + .2byte \trainer_b @ opponentB + .4byte \intro_text_b @ introTextB + .4byte \lose_text_b @ defeatTextB + .4byte \event_script_b @ retAddrB + .4byte \victory_text @ victoryText + .4byte \cannot_battle @ cannotBattle .endm NO_MUSIC = FALSE @@ -755,11 +727,11 @@ @ When used with an event script, you can also pass in an optional flag to disable music .macro trainerbattle_single trainer:req, intro_text:req, lose_text:req, event_script=FALSE, music=TRUE .if \event_script == FALSE - trainerbattle TRAINER_BATTLE_SINGLE, \trainer, 0, \intro_text, \lose_text + trainerbattle TRAINER_BATTLE_SINGLE, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE .elseif \music == TRUE - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, \trainer, 0, \intro_text, \lose_text, \event_script + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, \event_script, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE .else - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC, \trainer, 0, \intro_text, \lose_text, \event_script + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, \event_script, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE .endif .endm @@ -767,38 +739,33 @@ @ and an optional event script. When used with an event script you can pass in an optional flag to disable music .macro trainerbattle_double trainer:req, intro_text:req, lose_text:req, not_enough_pkmn_text:req, event_script=FALSE, music=TRUE .if \event_script == FALSE - trainerbattle TRAINER_BATTLE_DOUBLE, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text + trainerbattle TRAINER_BATTLE_DOUBLE, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, TRUE, TRUE, FALSE, FALSE .elseif \music == TRUE - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text, \event_script + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, \event_script, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, TRUE, TRUE, FALSE, FALSE .else - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text, \event_script + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, \event_script, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, TRUE, FALSE, FALSE, FALSE .endif .endm @ Starts a rematch battle. Takes a trainer, intro text and loss text .macro trainerbattle_rematch trainer:req, intro_text:req, lose_text:req - trainerbattle TRAINER_BATTLE_REMATCH, \trainer, 0, \intro_text, \lose_text + trainerbattle TRAINER_BATTLE_REMATCH, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, TRUE .endm @ Starts a rematch double battle. Takes a trainer, intro text, loss text, and text for when you have too few pokemon .macro trainerbattle_rematch_double trainer:req, intro_text:req, lose_text:req, not_enough_pkmn_text:req - trainerbattle TRAINER_BATTLE_REMATCH_DOUBLE, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text + trainerbattle TRAINER_BATTLE_REMATCH_DOUBLE, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, FALSE, TRUE, FALSE, TRUE .endm @ Starts a trainer battle, skipping intro text. Takes a trainer and loss text .macro trainerbattle_no_intro trainer:req, lose_text:req - trainerbattle TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT, \trainer, 0, \lose_text + trainerbattle TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT, OBJ_ID_NONE, \trainer, NULL, \lose_text, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE .endm @ Starts a double battle with the player against two trainers @ Takes two trainers and defeat text for each .macro trainerbattle_two_trainers trainer_a:req, lose_text_a:req, trainer_b:req, lose_text_b:req - .byte 0x5c - .byte TRAINER_BATTLE_TWO_TRAINERS_NO_INTRO - .2byte \trainer_a - .4byte \lose_text_a - .2byte \trainer_b - .4byte \lose_text_b + trainerbattle TRAINER_BATTLE_TWO_TRAINERS_NO_INTRO, OBJ_ID_NONE, \trainer_a, NULL, \lose_text_a, NULL, OBJ_ID_NONE, \trainer_b, NULL, \lose_text_b, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE .endm @ Starts a trainer battle using the battle information stored in RAM (usually by the scripts in trainer_battle.inc, which @@ -2375,7 +2342,7 @@ @ Stores the position of the given object in destX and destY. Mode CURRENT_POSITION will take the object's current position. Mode TEMPLATE_POSITION will take the object's template position. .macro getobjectxy localId:req, posType:req, destX:req, destY:req - callnative ScrCmd_getobjectxy, request_effects=1 + callnative ScrCmd_getobjectxy, requests_effects=1 .2byte \localId .2byte \posType .2byte \destX @@ -2383,7 +2350,7 @@ .endm .macro getobjecttemplatexy localId:req, posType = TEMPLATE_POSITION, destX:req, destY:req - callnative ScrCmd_getobjectxy, request_effects=1 + callnative ScrCmd_getobjectxy, requests_effects=1 .2byte \localId .2byte \posType .2byte \destX @@ -2391,7 +2358,7 @@ .endm .macro getobjectcurrentxy localId:req, posType = CURRENT_POSITION, destX:req, destY:req - callnative ScrCmd_getobjectxy, request_effects=1 + callnative ScrCmd_getobjectxy, requests_effects=1 .2byte \localId .2byte \posType .2byte \destX @@ -2400,7 +2367,7 @@ @ Return TRUE to dest if there is an object at the position x and y. .macro checkobjectat x:req, y:req, dest = VAR_RESULT - callnative ScrCmd_checkobjectat, request_effects=1 + callnative ScrCmd_checkobjectat, requests_effects=1 .2byte \x .2byte \y .2byte \dest @@ -2408,28 +2375,28 @@ @ Returns the state of the Pokedex Seen Flag to VAR_RESULT for the Pokemon with speciesId .macro getseenmon species:req - callnative Scrcmd_getsetpokedexflag, request_effects=1 + callnative Scrcmd_getsetpokedexflag, requests_effects=1 .2byte \species .2byte FLAG_GET_SEEN .endm @ Returns the state of the Pokedex Caught Flag to VAR_RESULT for the Pokemon with speciesId .macro getcaughtmon species:req - callnative Scrcmd_getsetpokedexflag, request_effects=1 + callnative Scrcmd_getsetpokedexflag, requests_effects=1 .2byte \species .2byte FLAG_GET_CAUGHT .endm @ Sets the Pokedex Seen Flag for the Pokemon with speciesId .macro setseenmon species:req - callnative Scrcmd_getsetpokedexflag, request_effects=1 + callnative Scrcmd_getsetpokedexflag, requests_effects=1 .2byte \species .2byte FLAG_SET_SEEN .endm @ Sets the Pokedex Caught Flag for the Pokemon with speciesId .macro setcaughtmon species:req - callnative Scrcmd_getsetpokedexflag, request_effects=1 + callnative Scrcmd_getsetpokedexflag, requests_effects=1 .2byte \species .2byte FLAG_SET_CAUGHT .endm @@ -2439,10 +2406,10 @@ .if \mode == OPEN_PARTY_SCREEN special ChoosePartyMon waitstate - callnative Scrcmd_checkspecies_choose, request_effects=1 + callnative Scrcmd_checkspecies_choose, requests_effects=1 .2byte \speciesId .else - callnative Scrcmd_checkspecies, request_effects=1 + callnative Scrcmd_checkspecies, requests_effects=1 .2byte \speciesId .endif .endm @@ -2453,11 +2420,17 @@ @ Gets the facing direction of a given event object and stores it in the variable dest. .macro getobjectfacingdirection localId:req, dest:req - callnative Scrcmd_getobjectfacingdirection, request_effects=1 + callnative Scrcmd_getobjectfacingdirection, requests_effects=1 .2byte \localId .2byte \dest .endm + @ Hides any follower Pokémon if present, putting them into their Poké Ball; by default waits for their movement to finish. + .macro hidefollower wait=1 + callnative ScrFunc_hidefollower + .2byte \wait + .endm + .macro increasedifficulty callnative Script_IncreaseDifficulty, requests_effects=1 .endm @@ -2540,11 +2513,3 @@ compare \a, \b cant_see_if 5 .endm - - @ hide any follower pokemon if present, - @ putting them into their pokeball; - @ by default waits for their movement to finish - .macro hidefollower wait=1 - callnative ScrFunc_hidefollower - .2byte \wait - .endm diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index b5f83b2d23..170da041d7 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -2228,7 +2228,7 @@ gBattleAnimMove_ZenHeadbutt:: createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 4, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 1, 2 - createsprite gAquaTailHitSpriteTemplate, ANIM_TARGER, 131, 0, 0, 1, 1 + createsprite gAquaTailHitSpriteTemplate, ANIM_TARGET, 131, 0, 0, 1, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 4, 0, 0 @@ -2246,22 +2246,22 @@ gBattleAnimMove_MirrorShot:: 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, ANIM_TARGER, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGER, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGER, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGER, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGER, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGER, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 10, 0, RGB_WHITEALPHA @@ -11970,7 +11970,7 @@ PrismaticLaserRain: return gBattleAnimMove_SpectralThief:: - choosetwoturnanim SpectralThiefSteal SpectralThiefUnleash + choosetwoturnanim SpectralThiefUnleash SpectralThiefSteal SpectralThiefUnleash: loadspritegfx ANIM_TAG_HANDS_AND_FEET @Black Colour loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour @@ -13238,7 +13238,7 @@ gBattleAnimMove_MagicPowder:: gBattleAnimMove_DragonDarts:: loadspritegfx ANIM_TAG_DREEPY_SHINY loadspritegfx ANIM_TAG_DREEPY - loadspritegfx ANIM_TAG_AIR_WAVE + loadspritegfx ANIM_TAG_AIR_WAVE loadspritegfx ANIM_TAG_EXPLOSION playsewithpan SE_FALL, SOUND_PAN_ATTACKER createdragondartsprite ANIM_TARGET, 2, 0x0, 0x0, 0x19 @@ -14034,9 +14034,9 @@ gBattleAnimMove_ExpandingForce:: createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, F_PAL_ATTACKER, 2, 0, 8, RGB(31, 23, 0) waitforvisualfinish playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET - choosetwoturnanim EXPANDING_FORCE_SINGLE_TARGET EXPANDING_FORCE_BOTH_TARGETS + choosetwoturnanim ExpandingForceSingleTarget ExpandingForceBothTargets -EXPANDING_FORCE_SINGLE_TARGET: +ExpandingForceSingleTarget: createsprite gSpriteTemplate_SpiritBreakChargeBall, ANIM_TARGET, 1, ANIM_TARGET waitforvisualfinish createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 0x2, 0x0, 0x1, 0x18, 0x1, 0x0 @@ -14046,7 +14046,7 @@ EXPANDING_FORCE_SINGLE_TARGET: clearmonbg ANIM_DEF_PARTNER end -EXPANDING_FORCE_BOTH_TARGETS: +ExpandingForceBothTargets: createsprite gSpriteTemplate_SpiritBreakChargeBall, ANIM_TARGET, 1, ANIM_TARGET createsprite gSpriteTemplate_SpiritBreakChargeBall, ANIM_TARGET, 1, ANIM_DEF_PARTNER waitforvisualfinish @@ -14178,9 +14178,9 @@ gBattleAnimMove_MeteorBeam:: loadspritegfx ANIM_TAG_ROCKS fadetobg BG_COSMIC waitbgfadeout - choosetwoturnanim METEOR_BEAM_CHARGE METEOR_BEAM_BLAST + choosetwoturnanim MeteorBeamCharge MeteorBeamBlast -METEOR_BEAM_CHARGE: +MeteorBeamCharge: createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xFC00, FALSE, 0xffff waitbgfadein monbg ANIM_ATK_PARTNER @@ -14193,7 +14193,7 @@ METEOR_BEAM_CHARGE: call UnsetPsychicBg end -METEOR_BEAM_BLAST: +MeteorBeamBlast: createvisualtask AnimTask_StartSlidingBg, 0x5, 0xf700, 0x0, TRUE, 0xffff @;Scroll right/left waitbgfadein monbg ANIM_TARGET @@ -18066,10 +18066,199 @@ PopulationBombContinue: gBattleAnimMove_RevivalBlessing:: goto gBattleAnimMove_LunarBlessing +gBattleAnimMove_TeraStarstorm:: + loadspritegfx ANIM_TAG_STARSTORM + loadspritegfx ANIM_TAG_YELLOW_STAR + loadspritegfx ANIM_TAG_IMPACT + fadetobg BG_COSMIC + waitbgfadein + playsewithpan SE_FALL, SOUND_PAN_ATTACKER + call TeraStarstormCreateBeam + delay 2 + call TeraStarstormCreateBeam + delay 2 + call TeraStarstormCreateBeam + delay 2 + call TeraStarstormCreateBeam + delay 2 + call TeraStarstormCreateBeam + delay 2 + call TeraStarstormCreateBeam + delay 2 + call TeraStarstormCreateBeam + delay 2 + call TeraStarstormCreateBeam + delay 2 + call TeraStarstormCreateBeam + delay 2 + jumpifmovetypeequal TYPE_STELLAR, TeraStarstormStellar + goto TeraStarstormSingle +TeraStarstormStellar: + jumpifdoublebattle TeraStarstormDouble +TeraStarstormSingle: + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 + delay 3 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, -5, 30, 0, 1 + delay 3 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 5, 30, 0, 1 + delay 3 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + delay 5 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + delay 5 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + waitforvisualfinish + restorebg + waitbgfadeout + end +TeraStarstormDouble: + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 1, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 1, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 1, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 1, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 1, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 1, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 10, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 10, 30, 1, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 1, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 1, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 1, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 1, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 1, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 1, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 5 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 5 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 5 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + waitforvisualfinish + restorebg + waitbgfadeout + end + +TeraStarstormCreateBeam:: + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -3, 1, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 1, 0, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 3, -1, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -2, 0, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 0, 1, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -1, -1, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 2, 0, 0, 0, 20 + return + +gBattleAnimMove_TachyonCutter:: + loadspritegfx ANIM_TAG_CUT + loadspritegfx ANIM_TAG_BUBBLE + createsprite gTachyonCutterSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 + createsprite gTachyonCutterSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + waitforvisualfinish + end + +gBattleAnimMove_SaltCure:: + loadspritegfx ANIM_TAG_SALT_PARTICLE + loadspritegfx ANIM_TAG_WATER_ORB + call SaltCureEffect + call SaltCureEffect + call SaltCureEffect + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + waitforvisualfinish + call gBattleAnimGeneral_SaltCureDamage + end + +SaltCureEffect: + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 28, 384, 50, 8, 50, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 32, 240, 40, 11, -46, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 33, 416, 40, 4, 42, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 31, 288, 45, 6, -42, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 28, 448, 45, 11, 46, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 50, 10, -50, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + return + gBattleAnimMove_TeraBlast:: gBattleAnimMove_OrderUp:: gBattleAnimMove_GlaiveRush:: -gBattleAnimMove_SaltCure:: gBattleAnimMove_TripleDive:: gBattleAnimMove_Doodle:: gBattleAnimMove_Ruination:: @@ -18083,9 +18272,7 @@ gBattleAnimMove_CombatTorque:: gBattleAnimMove_MagicalTorque:: gBattleAnimMove_Psyblade:: gBattleAnimMove_MatchaGotcha:: -gBattleAnimMove_TeraStarstorm:: gBattleAnimMove_MightyCleave:: -gBattleAnimMove_TachyonCutter:: gBattleAnimMove_SupercellSlam:: end @to do @@ -28779,7 +28966,41 @@ General_AffectionHangedOn_3Hearts: end gBattleAnimGeneral_SaltCureDamage:: - goto gBattleAnimStatus_Freeze + loadspritegfx ANIM_TAG_SALT_PARTICLE + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -10, -10, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 10, 20, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -29, 0, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 29, -20, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -5, 10, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 17, -12, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -20, 0, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -15, 15, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 26, -5, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 20, 2, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + waitforvisualfinish + end gBattleAnimGeneral_Rainbow:: call RainDrops diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 5f9d79dff0..c8fa0103d6 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -836,8 +836,8 @@ BattleScript_FlingMissed: ppreduce goto BattleScript_MoveMissedPause -BattleScript_EffectPhotonGeyser:: - setphotongeysercategory +BattleScript_EffectDynamicCategory:: + setdynamicmovecategory goto BattleScript_EffectHit BattleScript_EffectAuraWheel:: @ Aura Wheel can only be used by Morpeko @@ -956,15 +956,6 @@ BattleScript_MoveEffectIonDeluge:: waitmessage B_WAIT_TIME_LONG return -BattleScript_EffectSparklySwirl:: - call BattleScript_EffectHit_Ret - tryfaintmon BS_TARGET - healpartystatus - waitstate - updatestatusicon BS_ATTACKER_WITH_PARTNER - waitstate - goto BattleScript_MoveEnd - BattleScript_MoveEffectHaze:: printstring STRINGID_STATCHANGESGONE waitmessage B_WAIT_TIME_LONG @@ -1299,12 +1290,33 @@ BattleScript_VCreateStatLossRet: return BattleScript_SpectralThiefSteal:: + setbyte sB_ANIM_TURN, 1 + playmoveanimation BS_ATTACKER, MOVE_SPECTRAL_THIEF + waitanimation + setbyte sB_ANIM_TURN, 0 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 + flushtextbox + goto BattleScript_EffectSpectralThiefFromDamage + +BattleScript_EffectSpectralThief:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + typecalc + tryspectralthiefsteal BattleScript_SpectralThiefSteal +BattleScript_EffectSpectralThiefFromDamage: + critcalc + damagecalc + adjustdamage + call BattleScript_Hit_RetFromAtkAnimation + tryfaintmon BS_TARGET + moveendall + end BattleScript_EffectPartingShot:: attackcanceler @@ -1806,25 +1818,17 @@ BattleScript_EffectFinalGambit:: tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd -BattleScript_EffectHitSwitchTarget:: - call BattleScript_EffectHit_Ret - tryfaintmon BS_TARGET - jumpiffainted BS_TARGET, TRUE, BattleScript_MoveEnd - jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut - jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_MoveEnd - jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted - jumpiftargetdynamaxed BattleScript_HitSwitchTargetDynamaxed - tryhitswitchtarget BattleScript_MoveEnd +BattleScript_TryHitSwitchTarget:: forcerandomswitch BattleScript_HitSwitchTargetForceRandomSwitchFailed - goto BattleScript_MoveEnd + return -BattleScript_HitSwitchTargetDynamaxed: +BattleScript_HitSwitchTargetDynamaxed:: printstring STRINGID_MOVEBLOCKEDBYDYNAMAX waitmessage B_WAIT_TIME_LONG BattleScript_HitSwitchTargetForceRandomSwitchFailed: hitswitchtargetfailed setbyte sSWITCH_CASE, B_SWITCH_NORMAL - goto BattleScript_MoveEnd + return BattleScript_EffectToxicThread:: setstatchanger STAT_SPEED, 1, TRUE @@ -4083,13 +4087,16 @@ BattleScript_EffectHealBell:: attackcanceler attackstring ppreduce - healpartystatus - waitstate attackanimation waitanimation +BattleScript_EffectHealBell_FromHeal:: + healpartystatus + waitstate printfromtable gPartyStatusHealStringIds waitmessage B_WAIT_TIME_LONG - jumpifnotmove MOVE_HEAL_BELL, BattleScript_PartyHealEnd + jumpifblockedbysoundproof BS_ATTACKER_PARTNER, BattleScript_HealBellSoundproof + goto BattleScript_PartyHealEnd +BattleScript_HealBellSoundproof:: jumpifbyte CMP_NO_COMMON_BITS, cMULTISTRING_CHOOSER, B_MSG_BELL_SOUNDPROOF_ATTACKER, BattleScript_CheckHealBellMon2Unaffected printstring STRINGID_PKMNSXBLOCKSY waitmessage B_WAIT_TIME_LONG @@ -5597,7 +5604,7 @@ BattleScript_LocalBattleLost:: 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 + jumpifhalfword CMP_EQUAL, gTrainerBattleParameter + 2, TRAINER_SECRET_BASE, BattleScript_LocalBattleLostEnd BattleScript_LocalBattleLostPrintWhiteOut:: .if B_WHITEOUT_MONEY >= GEN_4 jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_LocalBattleLostEnd @@ -5960,10 +5967,14 @@ BattleScript_SafeguardEnds:: waitmessage B_WAIT_TIME_LONG end2 +@ Leech Seed end turn effect +@ attacker is the victim +@ target is the leech seeder (recieving HP) BattleScript_LeechSeedTurnDrainLiquidOoze:: call BattleScript_LeechSeedTurnDrain copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp + copybyte gBattlerAttacker, gBattlerTarget @ needed to get liquid ooze message correct goto BattleScript_LeechSeedTurnDrainGainHp BattleScript_LeechSeedTurnDrainHealBlock:: @@ -6722,6 +6733,12 @@ BattleScript_PrintMonIsRooted:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_PrintMonIsRootedRet:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_PKMNANCHOREDITSELF + waitmessage B_WAIT_TIME_LONG + return + BattleScript_AtkDefDown:: setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_ATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS @@ -7766,8 +7783,12 @@ BattleScript_IntimidateEffect: printstring STRINGID_PKMNCUTSATTACKWITH BattleScript_IntimidateEffect_WaitString: waitmessage B_WAIT_TIME_LONG + saveattacker + savetarget copybyte sBATTLER, gBattlerTarget call BattleScript_TryIntimidateHoldEffects + restoreattacker + restoretarget BattleScript_IntimidateLoopIncrement: addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_IntimidateLoop @@ -8196,11 +8217,15 @@ BattleScript_FlashFireBoost:: goto BattleScript_MoveEnd BattleScript_AbilityPreventsPhasingOut:: + call BattleScript_AbilityPreventsPhasingOutRet + goto BattleScript_MoveEnd + +BattleScript_AbilityPreventsPhasingOutRet:: pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget printstring STRINGID_PKMNANCHORSITSELFWITH waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return BattleScript_AbilityNoStatLoss:: pause B_WAIT_TIME_SHORT @@ -9693,7 +9718,7 @@ BattleScript_EffectMaxMove:: resultmessage waitmessage B_WAIT_TIME_LONG tryfaintmon BS_TARGET - setmaxmoveeffect + setadditionaleffects moveendall end @@ -9767,61 +9792,158 @@ BattleScript_EffectTryReducePP:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectStatus1Foes:: +BattleScript_EffectParalyzeSide:: savetarget copybyte sBATTLER, gBattlerTarget -BattleScript_Status1FoesLoop: - jumpifabsent BS_TARGET, BattleScript_Status1FoesIncrement - trysetstatus1 BattleScript_Status1FoesIncrement +BattleScript_ParalyzeSideLoop: + jumpifabsent BS_TARGET, BattleScript_ParalyzeSideIncrement + trysetparalysis BattleScript_ParalyzeSideIncrement statusanimation BS_TARGET updatestatusicon BS_TARGET printfromtable gStatusConditionsStringIds waitmessage B_WAIT_TIME_LONG updatestatusicon BS_EFFECT_BATTLER waitstate -BattleScript_Status1FoesIncrement: - jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_Status1FoesEnd - setallytonexttarget BattleScript_Status1FoesLoop -BattleScript_Status1FoesEnd: +BattleScript_ParalyzeSideIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_ParalyzeSideEnd + setallytonexttarget BattleScript_ParalyzeSideLoop +BattleScript_ParalyzeSideEnd: restoretarget goto BattleScript_MoveEnd -BattleScript_EffectStatus2Foes:: +BattleScript_EffectPoisonSide:: savetarget copybyte sBATTLER, gBattlerTarget -BattleScript_Status2FoesLoop: - jumpifabsent BS_TARGET, BattleScript_Status2FoesIncrement - trysetstatus2 BattleScript_Status2FoesIncrement - jumpifbyte CMP_EQUAL, gBattleCommunication, 1, BattleScript_DoConfuseAnim - jumpifbyte CMP_EQUAL, gBattleCommunication, 2, BattleScript_DoInfatuationAnim -BattleScript_Status2FoesPrintMessage: +BattleScript_PoisonSideLoop: + jumpifabsent BS_TARGET, BattleScript_PoisonSideIncrement + trysetpoison BattleScript_PoisonSideIncrement + statusanimation BS_TARGET + updatestatusicon BS_TARGET + printfromtable gStatusConditionsStringIds + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_EFFECT_BATTLER + waitstate +BattleScript_PoisonSideIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_PoisonSideEnd + setallytonexttarget BattleScript_PoisonSideLoop +BattleScript_PoisonSideEnd: + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectPoisonParalyzeSide:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_PoisonParalyzeSideLoop: + jumpifabsent BS_TARGET, BattleScript_PoisonParalyzeSideIncrement + trysetpoisonparalysis BattleScript_PoisonParalyzeSideIncrement + statusanimation BS_TARGET + updatestatusicon BS_TARGET + printfromtable gStatusConditionsStringIds + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_EFFECT_BATTLER + waitstate +BattleScript_PoisonParalyzeSideIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_PoisonParalyzeSideEnd + setallytonexttarget BattleScript_PoisonParalyzeSideLoop +BattleScript_PoisonParalyzeSideEnd: + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectEffectSporeSide:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_EffectSporeSideLoop: + jumpifabsent BS_TARGET, BattleScript_EffectSporeSideIncrement + tryseteffectspore BattleScript_EffectSporeSideIncrement + statusanimation BS_TARGET + updatestatusicon BS_TARGET + printfromtable gStatusConditionsStringIds + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_EFFECT_BATTLER + waitstate +BattleScript_EffectSporeSideIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_EffectSporeSideEnd + setallytonexttarget BattleScript_EffectSporeSideLoop +BattleScript_EffectSporeSideEnd: + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectConfuseSide:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_ConfuseSideLoop: + jumpifabsent BS_TARGET, BattleScript_ConfuseSideIncrement + trysetconfusion BattleScript_ConfuseSideIncrement + status2animation BS_EFFECT_BATTLER, STATUS2_CONFUSION +BattleScript_ConfuseSidePrintMessage: printfromtable gStatus2StringIds waitmessage B_WAIT_TIME_LONG -BattleScript_Status2FoesIncrement: - jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_Status2FoesEnd - setallytonexttarget BattleScript_Status2FoesLoop -BattleScript_Status2FoesEnd: +BattleScript_ConfuseSideIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_ConfuseSideEnd + setallytonexttarget BattleScript_ConfuseSideLoop +BattleScript_ConfuseSideEnd: restoretarget jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 1, BattleScript_PrintCoinsScattered @ Gold Rush goto BattleScript_MoveEnd -BattleScript_DoConfuseAnim: - status2animation BS_EFFECT_BATTLER, STATUS2_CONFUSION - goto BattleScript_Status2FoesPrintMessage - -BattleScript_DoInfatuationAnim: - status2animation BS_EFFECT_BATTLER, STATUS2_INFATUATION - goto BattleScript_Status2FoesPrintMessage - BattleScript_PrintCoinsScattered: printstring STRINGID_COINSSCATTERED goto BattleScript_MoveEnd +BattleScript_EffectInfatuateSide:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_InfatuateSideLoop: + jumpifabsent BS_TARGET, BattleScript_InfatuateSideIncrement + trysetinfatuation BattleScript_InfatuateSideIncrement + status2animation BS_EFFECT_BATTLER, STATUS2_INFATUATION +BattleScript_InfatuateSidePrintMessage: + printfromtable gStatus2StringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_InfatuateSideIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_InfatuateSideEnd + setallytonexttarget BattleScript_InfatuateSideLoop +BattleScript_InfatuateSideEnd: + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectTormentSide:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_TormentSideLoop: + jumpifabsent BS_TARGET, BattleScript_TormentSideIncrement + trysettorment BattleScript_TormentSideIncrement +BattleScript_TormentSidePrintMessage: + printfromtable gStatus2StringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_TormentSideIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_TormentSideEnd + setallytonexttarget BattleScript_TormentSideLoop +BattleScript_TormentSideEnd: + restoretarget + goto BattleScript_MoveEnd + BattleScript_TormentEnds:: printstring STRINGID_TORMENTEDNOMORE waitmessage B_WAIT_TIME_LONG end2 +BattleScript_EffectMeanLookSide:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_MeanLookSideLoop: + jumpifabsent BS_TARGET, BattleScript_MeanLookSideIncrement + trysetescapeprevention BattleScript_MeanLookSideIncrement +BattleScript_MeanLookSidePrintMessage: + printfromtable gStatus2StringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_MeanLookSideIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_MeanLookSideEnd + setallytonexttarget BattleScript_MeanLookSideLoop +BattleScript_MeanLookSideEnd: + restoretarget + goto BattleScript_MoveEnd + BattleScript_EffectRaiseCritAlliesAnim:: savetarget copybyte gBattlerTarget, gBattlerAttacker @@ -9859,29 +9981,6 @@ BattleScript_HealOneSixthAlliesEnd: restoretarget goto BattleScript_MoveEnd -BattleScript_EffectCureStatusAllies:: - jumpifteamhealthy BS_ATTACKER, BattleScript_MoveEnd - savetarget - copybyte gBattlerTarget, gBattlerAttacker -BattleScript_CureStatusAlliesLoop: - jumpifabsent BS_TARGET, BattleScript_CureStatusAlliesIncrement - jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_CureStatusActivate -BattleScript_CureStatusAlliesIncrement: - jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_CureStatusAlliesEnd - setallytonexttarget BattleScript_CureStatusAlliesLoop -BattleScript_CureStatusAlliesEnd: - restoretarget - goto BattleScript_MoveEnd - -BattleScript_CureStatusActivate: - curestatus BS_TARGET - updatestatusicon BS_TARGET - swapattackerwithtarget - printstring STRINGID_PKMNSTATUSNORMAL - waitmessage B_WAIT_TIME_LONG - swapattackerwithtarget - goto BattleScript_CureStatusAlliesIncrement - BattleScript_EffectRecycleBerriesAllies:: savetarget copybyte gBattlerTarget, gBattlerAttacker @@ -9899,12 +9998,6 @@ BattleScript_RecycleBerriesAlliesEnd: restoretarget goto BattleScript_MoveEnd -BattleScript_EffectStonesurge:: - setstealthrock BattleScript_MoveEnd - printfromtable gDmgHazardsStringIds - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - BattleScript_EffectSteelsurge:: setsteelsurge BattleScript_MoveEnd printfromtable gDmgHazardsStringIds diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index bd87dbf3ef..572d076fab 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -195,13 +195,13 @@ BattleScript_TryNicknameCaughtMon:: printstring STRINGID_GIVENICKNAMECAPTURED waitstate setbyte gBattleCommunication, 0 - trygivecaughtmonnick BattleScript_GiveCaughtMonEnd - givecaughtmon + trygivecaughtmonnick + givecaughtmon BattleScript_SuccessBallThrowEnd printfromtable gCaughtMonStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_SuccessBallThrowEnd BattleScript_GiveCaughtMonEnd:: - givecaughtmon + givecaughtmon BattleScript_SuccessBallThrowEnd BattleScript_SuccessBallThrowEnd:: setbyte gBattleOutcome, B_OUTCOME_CAUGHT finishturn diff --git a/data/event_scripts.s b/data/event_scripts.s index a61d696acc..b887876f6e 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -89,7 +89,7 @@ gSpecialVars:: .4byte gSpecialVar_MonBoxId .4byte gSpecialVar_MonBoxPos .4byte gSpecialVar_Unused_0x8014 - .4byte gTrainerBattleOpponent_A + .4byte gTrainerBattleParameter + 2 // gTrainerBattleParameter.params.opponentA .include "data/specials.inc" diff --git a/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc b/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc index ba9d996706..2b0ed8b9c4 100644 --- a/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc @@ -105,7 +105,7 @@ BattlePyramid_WarpToTop:: @ TRAINER_PHILLIP is used as a placeholder BattlePyramid_TrainerBattle:: - trainerbattle TRAINER_BATTLE_PYRAMID, TRAINER_PHILLIP, 0, BattleFacility_TrainerBattle_PlaceholderText, BattleFacility_TrainerBattle_PlaceholderText + trainerbattle TRAINER_BATTLE_HILL, OBJ_ID_NONE, TRAINER_PHILLIP, BattleFacility_TrainerBattle_PlaceholderText, BattleFacility_TrainerBattle_PlaceholderText, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE pyramid_showhint waitmessage waitbuttonpress diff --git a/data/maps/BattleFrontier_Lounge5/scripts.inc b/data/maps/BattleFrontier_Lounge5/scripts.inc index b81c748e5d..7dc4251fcc 100644 --- a/data/maps/BattleFrontier_Lounge5/scripts.inc +++ b/data/maps/BattleFrontier_Lounge5/scripts.inc @@ -51,138 +51,60 @@ BattleFrontier_Lounge5_Text_NatureGirlNoneShown:: .string "Boo!\n" .string "Cheapie!$" -BattleFrontier_Lounge5_Text_NatureGirlHardy:: +BattleFrontier_Lounge5_Text_NatureGirlAttackHighAttackLow:: .string "Hmhm…\p" .string "This one says it likes to battle!\n" .string "It will battle even if it has a lot\l" .string "of ouchies!$" -BattleFrontier_Lounge5_Text_NatureGirlLonely:: - .string "Hmhm…\p" - .string "This one says it likes to be sneaky!\n" - .string "But if it gets enough ouchies,\l" - .string "it will hit back!$" - -BattleFrontier_Lounge5_Text_NatureGirlBrave:: +BattleFrontier_Lounge5_Text_NatureGirlAttackHighDefenseLow:: .string "Hmhm…\p" .string "This one says it likes to battle!\n" .string "But if it gets enough ouchies,\l" .string "it will worry about itself!$" -BattleFrontier_Lounge5_Text_NatureGirlAdamant:: - .string "Hmhm…\p" - .string "This one says it likes to battle!\n" - .string "It will battle even if it has a lot\l" - .string "of ouchies!$" - -BattleFrontier_Lounge5_Text_NatureGirlNaughty:: - .string "Hmhm…\p" - .string "This one says it looks after itself!\n" - .string "But if it gets enough ouchies,\l" - .string "it will hit back!$" - -BattleFrontier_Lounge5_Text_NatureGirlBold:: - .string "Hmhm…\p" - .string "This one says it likes to be sneaky!\n" - .string "But if it gets enough ouchies,\l" - .string "it will worry about itself!$" - -BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky:: - .string "Hmhm…\p" - .string "This one says it likes to battle!\n" - .string "It will battle even if it has a lot\l" - .string "of ouchies!$" - -BattleFrontier_Lounge5_Text_NatureGirlRelaxed:: - .string "Hmhm…\p" - .string "This one says it likes to be sneaky!\n" - .string "But if it gets enough ouchies,\l" - .string "it will hit back!$" - -BattleFrontier_Lounge5_Text_NatureGirlImpish:: - .string "Hmhm…\p" - .string "This one says it likes to battle!\n" - .string "But if it gets enough ouchies,\l" - .string "it will worry about itself!$" - -BattleFrontier_Lounge5_Text_NatureGirlLax:: - .string "Hmhm…\p" - .string "This one says it likes to be sneaky!\n" - .string "It says it likes to be sneaky even\l" - .string "if it has a lot of ouchies!$" - -BattleFrontier_Lounge5_Text_NatureGirlTimid:: +BattleFrontier_Lounge5_Text_NatureGirlAttackHighSupportLow:: .string "Hmhm…\p" .string "This one says it likes to battle!\n" .string "But if it gets enough ouchies,\l" .string "it will turn sneaky!$" -BattleFrontier_Lounge5_Text_NatureGirlHasty:: +BattleFrontier_Lounge5_Text_NatureGirlDefenseHighAttackLow:: .string "Hmhm…\p" - .string "This one says it likes to battle!\n" - .string "It will battle even if it has a lot\l" - .string "of ouchies!$" - -BattleFrontier_Lounge5_Text_NatureGirlSerious:: - .string "Hmhm…\p" - .string "This one says it likes to be sneaky!\n" - .string "It says it likes to be sneaky even\l" - .string "if it has a lot of ouchies!$" - -BattleFrontier_Lounge5_Text_NatureGirlJolly:: - .string "Hmhm…\p" - .string "This one says it likes to be sneaky!\n" + .string "This one says it looks after itself!\n" .string "But if it gets enough ouchies,\l" - .string "it will worry about itself!$" + .string "it will hit back!$" -BattleFrontier_Lounge5_Text_NatureGirlModest:: +BattleFrontier_Lounge5_Text_NatureGirlDefenseHighDefenseLow:: .string "Hmhm…\p" .string "This one says it looks after itself!\n" .string "It says it worries about itself whether\l" .string "or not it has a lot of ouchies!$" -BattleFrontier_Lounge5_Text_NatureGirlMild:: +BattleFrontier_Lounge5_Text_NatureGirlDefenseHighSupportLow:: .string "Hmhm…\p" .string "This one says it looks after itself!\n" .string "But if it gets enough ouchies,\l" .string "it will turn sneaky!$" -BattleFrontier_Lounge5_Text_NatureGirlBashful:: +BattleFrontier_Lounge5_Text_NatureGirlSupportHighAttackLow:: .string "Hmhm…\p" - .string "This one says it looks after itself!\n" - .string "It says it worries about itself even\l" - .string "if it has a lot of ouchies!$" + .string "This one says it likes to be sneaky!\n" + .string "But if it gets enough ouchies,\l" + .string "it will hit back!$" -BattleFrontier_Lounge5_Text_NatureGirlRash:: +BattleFrontier_Lounge5_Text_NatureGirlSupportHighDefenseLow:: + .string "Hmhm…\p" + .string "This one says it likes to be sneaky!\n" + .string "But if it gets enough ouchies,\l" + .string "it will worry about itself!$" + +BattleFrontier_Lounge5_Text_NatureGirlSupportHighSupportLow:: .string "Hmhm…\p" .string "This one says it likes to be sneaky!\n" .string "It says it likes to be sneaky even\l" .string "if it has a lot of ouchies!$" -BattleFrontier_Lounge5_Text_NatureGirlCalm:: - .string "Hmhm…\p" - .string "This one says it looks after itself!\n" - .string "It says it worries about itself even\l" - .string "if it has a lot of ouchies!$" - -BattleFrontier_Lounge5_Text_NatureGirlGentle:: - .string "Hmhm…\p" - .string "This one says it looks after itself!\n" - .string "But if it gets enough ouchies,\l" - .string "it will hit back!$" - -BattleFrontier_Lounge5_Text_NatureGirlSassy:: - .string "Hmhm…\p" - .string "This one says it likes to battle!\n" - .string "But if it gets enough ouchies,\l" - .string "it will turn sneaky!$" - -BattleFrontier_Lounge5_Text_NatureGirlCareful:: - .string "Hmhm…\p" - .string "This one says it looks after itself!\n" - .string "But if it gets enough ouchies,\l" - .string "it will turn sneaky!$" - BattleFrontier_Lounge5_Text_NatureGirlEgg:: .string "That's silly! An EGG is asleep!\n" .string "I can't talk to it!$" diff --git a/data/maps/LavaridgeTown_Gym_1F/scripts.inc b/data/maps/LavaridgeTown_Gym_1F/scripts.inc index b7db13f54a..e211d08063 100644 --- a/data/maps/LavaridgeTown_Gym_1F/scripts.inc +++ b/data/maps/LavaridgeTown_Gym_1F/scripts.inc @@ -104,7 +104,7 @@ LavaridgeTown_Gym_1F_EventScript_FlanneryRematch:: end LavaridgeTown_Gym_1F_EventScript_Cole:: - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_COLE, LOCALID_COLE, LavaridgeTown_Gym_1F_Text_ColeIntro, LavaridgeTown_Gym_1F_Text_ColeDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_COLE, TRAINER_COLE, LavaridgeTown_Gym_1F_Text_ColeIntro, LavaridgeTown_Gym_1F_Text_ColeDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE msgbox LavaridgeTown_Gym_1F_Text_ColePostBattle, MSGBOX_AUTOCLOSE end @@ -116,37 +116,37 @@ LavaridgeTown_Gym_EventScript_CheckTrainerScript:: end LavaridgeTown_Gym_1F_EventScript_Axle:: - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_AXLE, LOCALID_AXLE, LavaridgeTown_Gym_1F_Text_AxleIntro, LavaridgeTown_Gym_1F_Text_AxleDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_AXLE, TRAINER_AXLE, LavaridgeTown_Gym_1F_Text_AxleIntro, LavaridgeTown_Gym_1F_Text_AxleDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE msgbox LavaridgeTown_Gym_1F_Text_AxlePostBattle, MSGBOX_AUTOCLOSE end LavaridgeTown_Gym_B1F_EventScript_Keegan:: - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_KEEGAN, LOCALID_KEEGAN, LavaridgeTown_Gym_B1F_Text_KeeganIntro, LavaridgeTown_Gym_B1F_Text_KeeganDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_KEEGAN, TRAINER_KEEGAN, LavaridgeTown_Gym_B1F_Text_KeeganIntro, LavaridgeTown_Gym_B1F_Text_KeeganDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE msgbox LavaridgeTown_Gym_B1F_Text_KeeganPostBattle, MSGBOX_AUTOCLOSE end LavaridgeTown_Gym_1F_EventScript_Danielle:: - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_DANIELLE, LOCALID_DANIELLE, LavaridgeTown_Gym_1F_Text_DanielleIntro, LavaridgeTown_Gym_1F_Text_DanielleDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_DANIELLE, TRAINER_DANIELLE, LavaridgeTown_Gym_1F_Text_DanielleIntro, LavaridgeTown_Gym_1F_Text_DanielleDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE msgbox LavaridgeTown_Gym_1F_Text_DaniellePostBattle, MSGBOX_AUTOCLOSE end LavaridgeTown_Gym_1F_EventScript_Gerald:: - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_GERALD, LOCALID_GERALD, LavaridgeTown_Gym_1F_Text_GeraldIntro, LavaridgeTown_Gym_1F_Text_GeraldDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_GERALD, TRAINER_GERALD, LavaridgeTown_Gym_1F_Text_GeraldIntro, LavaridgeTown_Gym_1F_Text_GeraldDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE msgbox LavaridgeTown_Gym_1F_Text_GeraldPostBattle, MSGBOX_AUTOCLOSE end LavaridgeTown_Gym_B1F_EventScript_Jace:: - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_JACE, LOCALID_JACE, LavaridgeTown_Gym_B1F_Text_JaceIntro, LavaridgeTown_Gym_B1F_Text_JaceDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_JACE, TRAINER_JACE, LavaridgeTown_Gym_B1F_Text_JaceIntro, LavaridgeTown_Gym_B1F_Text_JaceDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE msgbox LavaridgeTown_Gym_B1F_Text_JacePostBattle, MSGBOX_AUTOCLOSE end LavaridgeTown_Gym_B1F_EventScript_Jeff:: - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_JEFF, LOCALID_JEFF, LavaridgeTown_Gym_B1F_Text_JeffIntro, LavaridgeTown_Gym_B1F_Text_JeffDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_JEFF, TRAINER_JEFF, LavaridgeTown_Gym_B1F_Text_JeffIntro, LavaridgeTown_Gym_B1F_Text_JeffDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE msgbox LavaridgeTown_Gym_B1F_Text_JeffPostBattle, MSGBOX_AUTOCLOSE end LavaridgeTown_Gym_B1F_EventScript_Eli:: - trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_ELI, LOCALID_ELI, LavaridgeTown_Gym_B1F_Text_EliIntro, LavaridgeTown_Gym_B1F_Text_EliDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript + trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_ELI, TRAINER_ELI, LavaridgeTown_Gym_B1F_Text_EliIntro, LavaridgeTown_Gym_B1F_Text_EliDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE msgbox LavaridgeTown_Gym_B1F_Text_EliPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/scripts/pkmn_center_nurse.inc b/data/scripts/pkmn_center_nurse.inc index ef33e09395..dd27ed80a6 100644 --- a/data/scripts/pkmn_center_nurse.inc +++ b/data/scripts/pkmn_center_nurse.inc @@ -34,7 +34,7 @@ EventScript_PkmnCenterNurse_IllTakeYourPkmn2:: EventScript_PkmnCenterNurse_TakeAndHealPkmn:: hidefollower 0 - applymovement VAR_0x800B, Movement_PkmnCenterNurse_Turn @ Changed from Common_Movement_WalkInPlaceFasterLeft to force the follower to enter their Poké Ball + applymovement VAR_0x800B, Movement_PkmnCenterNurse_Turn waitmovement 0 dofieldeffect FLDEFF_POKECENTER_HEAL .if OW_UNION_DISABLE_CHECK == FALSE && OW_FLAG_MOVE_UNION_ROOM_CHECK != 0 diff --git a/data/scripts/trainer_hill.inc b/data/scripts/trainer_hill.inc index 04bbe05e5a..877b48c3db 100644 --- a/data/scripts/trainer_hill.inc +++ b/data/scripts/trainer_hill.inc @@ -60,7 +60,7 @@ TrainerHill_1F_Movement_SetInvisible:: @ TRAINER_PHILLIP is an actual Trainer on the SS Tidal, but is used as a placeholder here TrainerHill_EventScript_TrainerBattle:: - trainerbattle TRAINER_BATTLE_HILL, TRAINER_PHILLIP, 0, BattleFacility_TrainerBattle_PlaceholderText, BattleFacility_TrainerBattle_PlaceholderText + trainerbattle TRAINER_BATTLE_HILL, OBJ_ID_NONE, TRAINER_PHILLIP, BattleFacility_TrainerBattle_PlaceholderText, BattleFacility_TrainerBattle_PlaceholderText, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE trainerhill_postbattletext waitmessage waitbuttonpress diff --git a/data/specials.inc b/data/specials.inc index 9bf3734491..c95cea9a7e 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -561,3 +561,5 @@ gSpecials:: def_special Script_GetChosenMonOffensiveIVs def_special Script_GetChosenMonDefensiveIVs def_special UseBlankMessageToCancelPokemonPic + def_special EnterCode + def_special GetCodeFeedback diff --git a/data/text/pc_transfer.inc b/data/text/pc_transfer.inc index 3fa255340b..b6995d1111 100644 --- a/data/text/pc_transfer.inc +++ b/data/text/pc_transfer.inc @@ -22,6 +22,12 @@ gText_PkmnTransferredLanettesPCBoxFull:: .string "{STR_VAR_2} was transferred to\n" .string "BOX “{STR_VAR_1}.”$" +gText_PkmnSentToPCAfterCatch:: + .string "{STR_VAR_2} was sent to\n" + .string "{B_PC_CREATOR_NAME} PC.\p" + .string "It was placed in \n" + .string "BOX “{STR_VAR_1}”.$" + gText_NoMoreRoomForPokemon:: .string "There's no more room for POKéMON!\p" .string "The POKéMON BOXES are full and\n" diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index f7bedfbd39..e45a6088f9 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -22,6 +22,7 @@ - [Day/Night System FAQ](tutorials/dns.md) - [Changelog](./CHANGELOG.md) - [1.10.x]() + - [Version 1.10.2](changelogs/1.10.x/1.10.2.md) - [Version 1.10.1](changelogs/1.10.x/1.10.1.md) - [Version 1.10.0](changelogs/1.10.x/1.10.0.md) - [1.9.x]() diff --git a/docs/changelogs/1.10.x/1.10.2.md b/docs/changelogs/1.10.x/1.10.2.md new file mode 100644 index 0000000000..1617fb8e5f --- /dev/null +++ b/docs/changelogs/1.10.x/1.10.2.md @@ -0,0 +1,143 @@ +# Version 1.10.2 + +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.10.2`. +``` + +## 🧬 General 🧬 +### Changed +* Add manual breaking back to "What will (mon) do?" message by @kittenchilly in [#5908](https://github.com/rh-hideout/pokeemerald-expansion/pull/5908) + +### Fixed +* Explicitly specify dependencies for teachable learnset helper by @ravepossum in [#6015](https://github.com/rh-hideout/pokeemerald-expansion/pull/6015) +* Add dependency on json files to learnset helper by @ravepossum in [#6083](https://github.com/rh-hideout/pokeemerald-expansion/pull/6083) + +## 🗺️ Overworld 🗺️ +### Fixed +* Field effect for cutting grass is missing setfieldeffectargument. Issue #5766 by @shachar700 and @kasenn for finding the source of the issue, @hedara90 for the help with github in [#5952](https://github.com/rh-hideout/pokeemerald-expansion/pull/5952) +* Fix Match Call Behavior (#5931) by @MercedesCL in [#6033](https://github.com/rh-hideout/pokeemerald-expansion/pull/6033) +* Fixes HGSS dex not compiling currently by @hedara90 in [#6051](https://github.com/rh-hideout/pokeemerald-expansion/pull/6051) +* Fixed Liquid Voice's dynamic type for normal moves by @fdeblasio in [#6092](https://github.com/rh-hideout/pokeemerald-expansion/pull/6092) +* Fix Crash if something costs 0 in shop by @DizzyEggg in [#6106](https://github.com/rh-hideout/pokeemerald-expansion/pull/6106) +* Fixed Hoenn dex off by 1 issues by @fdeblasio in [#6104](https://github.com/rh-hideout/pokeemerald-expansion/pull/6104) + +## 🐉 Pokémon 🐉 +### Changed +* Add Clodsire second frame and fixed Grookey backsprite + overworld by @kittenchilly in [#6047](https://github.com/rh-hideout/pokeemerald-expansion/pull/6047) +* Duraludon battle animation by @Cafeei in [#6086](https://github.com/rh-hideout/pokeemerald-expansion/pull/6086) + +### Fixed +* Fix Enamorus not changing forms by @Bassoonian in [#6093](https://github.com/rh-hideout/pokeemerald-expansion/pull/6093) + +## ⚔️ Battle General ⚔️ +### Changed +* Adds static assert for `DamageCalculationData` by @AlexOn1ine in [#6063](https://github.com/rh-hideout/pokeemerald-expansion/pull/6063) + +### Fixed +* Fixes Trainer Slide messages causing corruption for recoil damage by @AlexOn1ine in [#5926](https://github.com/rh-hideout/pokeemerald-expansion/pull/5926) +* Fixes broken link battles by @hedara90 and @AsparagusEduardo for finding out that the `gBitTable` removal was the source of the bug. in [#5940](https://github.com/rh-hideout/pokeemerald-expansion/pull/5940) +* fixed interaction between Innards Out and Future Sight by @wiz1989 in [#5966](https://github.com/rh-hideout/pokeemerald-expansion/pull/5966) +* Fixes various Dynamax HP conversions/calculations by @PhallenTree in [#5933](https://github.com/rh-hideout/pokeemerald-expansion/pull/5933) +* Fixes Parting Shot / Eject Pack interaction by @AlexOn1ine in [#5963](https://github.com/rh-hideout/pokeemerald-expansion/pull/5963) +* Fixes Shell Bell including heal amount from Future Sight when triggered by @AlexOn1ine in [#5962](https://github.com/rh-hideout/pokeemerald-expansion/pull/5962) +* Fixes Tera giving boost to dynamic bp moves by @AlexOn1ine in [#6008](https://github.com/rh-hideout/pokeemerald-expansion/pull/6008) +* Fixes Z-Move trigger sprite on B button exit by @AlexOn1ine in [#6009](https://github.com/rh-hideout/pokeemerald-expansion/pull/6009) +* Fixed multiple transform/form change graphical issues by @AsparagusEduardo in [#6005](https://github.com/rh-hideout/pokeemerald-expansion/pull/6005) + - Dynamax and Tera color tinting now stays during Transform/Form Change animations. + - Dynamax no longer resets Transformed mon sprites. + - Transform no longer transforms into a Gigantamax Pokémon unless the transformee has Gigantamax Factor and transforms into a base form with a Gigantamax Form. +* Fixes defrosting if frozen mon is not damaged by opponent by @AlexOn1ine in [#6016](https://github.com/rh-hideout/pokeemerald-expansion/pull/6016) +* Fix Redirection Abilities Not Drawing in Ally Moves by @ghoulslash in [#6026](https://github.com/rh-hideout/pokeemerald-expansion/pull/6026) +* fixed bug giving immunity to full-paralysis when B_MAGIC_GUARD is >= GEN_4 by @AERDU in [#6032](https://github.com/rh-hideout/pokeemerald-expansion/pull/6032) +* Fixes large battle messages being cut off instead of being prompted to advance by @PhallenTree in [#6052](https://github.com/rh-hideout/pokeemerald-expansion/pull/6052) +* Fixes Rapid Spin / Toxic Debris interaction by @AlexOn1ine in [#6023](https://github.com/rh-hideout/pokeemerald-expansion/pull/6023) +* Fixes Eject Pack triggering twice on Intimidate by @AlexOn1ine in [#6072](https://github.com/rh-hideout/pokeemerald-expansion/pull/6072) +* Trainerslide animation fix by @hedara90 in [#6040](https://github.com/rh-hideout/pokeemerald-expansion/pull/6040) + - `B_ENEMY_MON_SHADOW_STYLE` set to `GEN_LATEST` since that setting no longer interferes with trainerslides. Set it to `GEN_3` to use regular Gen 3 shadow style. +* Fixes Charge effect not boosting and tests by @AlexOn1ine in [#6102](https://github.com/rh-hideout/pokeemerald-expansion/pull/6102) +* Fix seeds softlocking the game when a battler with a Surge ability enters the field by @PhallenTree in [#6110](https://github.com/rh-hideout/pokeemerald-expansion/pull/6110) +* Fix MindBlown crash on MyBoy/No Cash by @DizzyEggg in [#6112](https://github.com/rh-hideout/pokeemerald-expansion/pull/6112) +* Fix Double Iron Bash move animation crash on MyBoy/No$ by @DizzyEggg in [#6114](https://github.com/rh-hideout/pokeemerald-expansion/pull/6114) +* Fix safari zone crash on No Cash by @DizzyEggg in [#6132](https://github.com/rh-hideout/pokeemerald-expansion/pull/6132) + +## 🤹 Moves 🤹 +### Fixed +* Fixed a bunch of move anims by @hedara90 in [#5936](https://github.com/rh-hideout/pokeemerald-expansion/pull/5936) + +## 🧶 Items 🧶 +### Changed +* Added the Gen. 4+ berries to gBerryCrush_BerryData by @LOuroboros in [#5937](https://github.com/rh-hideout/pokeemerald-expansion/pull/5937) + +### Fixed +* Reverts wrongly done partial Eject Pack fix by @AlexOn1ine in [#5928](https://github.com/rh-hideout/pokeemerald-expansion/pull/5928) + +## 🤖 Battle AI 🤖 +### Fixed +* Fix Entrainment AI scoring bug by @Pawkkie in [#6056](https://github.com/rh-hideout/pokeemerald-expansion/pull/6056) +* Removed stray semi-colon in AI code by @hedara90 in [#6134](https://github.com/rh-hideout/pokeemerald-expansion/pull/6134) + +## 🧹 Other Cleanup 🧹 +* Clear unneeded braces from 5922 by @Pawkkie in [#5927](https://github.com/rh-hideout/pokeemerald-expansion/pull/5927) +* Removed references to `HANDLE_EXPANDED_MOVE_NAME` in docs by @AsparagusEduardo in [#5955](https://github.com/rh-hideout/pokeemerald-expansion/pull/5955) +* Rename `AI_FLAG_PREFER_STRONGEST_MOVE` by @Pawkkie in [#5972](https://github.com/rh-hideout/pokeemerald-expansion/pull/5972) +* Removed `OW_AUTO_SIGNPOST` by @AlexOn1ine in [#5978](https://github.com/rh-hideout/pokeemerald-expansion/pull/5978) +* `CreateFacilityMon` error: `'personality' may be used uninitialized` by @DizzyEggg in [#5981](https://github.com/rh-hideout/pokeemerald-expansion/pull/5981) +* PlayerHandleStatusXor - change `u8` to `u32` by @DizzyEggg in [#5988](https://github.com/rh-hideout/pokeemerald-expansion/pull/5988) +* Follow up for Innards Out / Future Sight interaction by @AlexOn1ine in [#5967](https://github.com/rh-hideout/pokeemerald-expansion/pull/5967) +* Remove out of bounds `gSprites` access in move relearner by @DizzyEggg in [#5991](https://github.com/rh-hideout/pokeemerald-expansion/pull/5991) +* Use `gCurrentMove` instead of checking `0xFF` move by @AlexOn1ine in [#5999](https://github.com/rh-hideout/pokeemerald-expansion/pull/5999) +* Wrong undefs by @AlexOn1ine in [#6024](https://github.com/rh-hideout/pokeemerald-expansion/pull/6024) +* Fixed whitespace issue with trainerproc by @AsparagusEduardo in [#6042](https://github.com/rh-hideout/pokeemerald-expansion/pull/6042) +* Remove redundant line in `Cmd_setcharge` by @AlexOn1ine in [#6053](https://github.com/rh-hideout/pokeemerald-expansion/pull/6053) +* Put Identifier and smol in gitignore by @DizzyEggg in [#6105](https://github.com/rh-hideout/pokeemerald-expansion/pull/6105) +* Move flag fixes by @fdeblasio in [#6107](https://github.com/rh-hideout/pokeemerald-expansion/pull/6107) +* Remove `formToChangeInto` (Unused) by @AlexOn1ine in [#6137](https://github.com/rh-hideout/pokeemerald-expansion/pull/6137) + +## 🧪 Test Runner 🧪 +### Changed +* Insomnia test used the wrong move in Turn section by @AlexOn1ine in [#5939](https://github.com/rh-hideout/pokeemerald-expansion/pull/5939) +* Updated Makefile to allow for the creation of specific tests by @pkmnsnfrn and @mrgriffin in [#5993](https://github.com/rh-hideout/pokeemerald-expansion/pull/5993) +* Adds Liquid Ooze and Aromatic Mist test by @AlexOn1ine in [#6012](https://github.com/rh-hideout/pokeemerald-expansion/pull/6012) +* Improved Hidden Power test by @AsparagusEduardo and @hedara90, who recommended this implementation. in [#6014](https://github.com/rh-hideout/pokeemerald-expansion/pull/6014) +* Add known failing learnset cap test by @Bassoonian in [#6046](https://github.com/rh-hideout/pokeemerald-expansion/pull/6046) +* Fix Symbiosis Needing battler Argument + Tests by @ghoulslash in [#6039](https://github.com/rh-hideout/pokeemerald-expansion/pull/6039) +* Added some `TO_DO` tests by @hedara90 in [#6140](https://github.com/rh-hideout/pokeemerald-expansion/pull/6140) + +### Fixed +* Fixed Gimmick tests failing when running first by @AsparagusEduardo in [#6001](https://github.com/rh-hideout/pokeemerald-expansion/pull/6001) +* Ported Makefile fix from upcoming by @hedara90 and @mrgriffin Wrote the fix on upcoming in [#6007](https://github.com/rh-hideout/pokeemerald-expansion/pull/6007) + +## 📚 Documentation 📚 +* Fix formatting in `WSL.md` by @Cafeei in [#5942](https://github.com/rh-hideout/pokeemerald-expansion/pull/5942) +* Update scope.md by @Pawkkie in [#5948](https://github.com/rh-hideout/pokeemerald-expansion/pull/5948) +* Removed references to `HANDLE_EXPANDED_MOVE_NAME` in docs by @AsparagusEduardo in [#5955](https://github.com/rh-hideout/pokeemerald-expansion/pull/5955) +* Update scope.md (again) by @Pawkkie and @kithr1 in [#5971](https://github.com/rh-hideout/pokeemerald-expansion/pull/5971) +* Codify new expansion release schedule by @pkmnsnfrn and @Pawkkie in [#5916](https://github.com/rh-hideout/pokeemerald-expansion/pull/5916) +* Workflow for Scope Discussion by @Pawkkie in [#6022](https://github.com/rh-hideout/pokeemerald-expansion/pull/6022) +* Update `constants/pokemon.h` with nature comments by @bassforte123 in [#6133](https://github.com/rh-hideout/pokeemerald-expansion/pull/6133) + +## 📦 Branch Synchronisation 📦 +### pret +* 17 of January in [#6045](https://github.com/rh-hideout/pokeemerald-expansion/pull/6045) + * Slight contest documentation by @AsparagusEduardo in [pret#2078](https://github.com/pret/pokeemerald/pull/2078) + * Update vars.h (cleanup) by @shachar700 in [pret#2082](https://github.com/pret/pokeemerald/pull/2082) + * missing const in extern gBasicHitSplatSpriteTemplate by @DizzyEggg in [pret#2083](https://github.com/pret/pokeemerald/pull/2083) + * extern gAncientPowerRockSpriteTemplate fix by @DizzyEggg in [pret#2084](https://github.com/pret/pokeemerald/pull/2084) + * remove undef TASK_NONE from list_menu by @DizzyEggg in [pret#2085](https://github.com/pret/pokeemerald/pull/2085) + * Fix CaveTransition pals by @DizzyEggg in [pret#2095](https://github.com/pret/pokeemerald/pull/2095) + * Define field script opcode constants by @rayrobdod in [pret#2005](https://github.com/pret/pokeemerald/pull/2005) + * Document bard music by @GriffinRichards in [pret#2053](https://github.com/pret/pokeemerald/pull/2053) + * Extern gSprites and gOamMatrices with known array size by @DizzyEggg in [pret#2090](https://github.com/pret/pokeemerald/pull/2090) + * Fix conflicting types for rotating gate functions by @DizzyEggg in [pret#2087](https://github.com/pret/pokeemerald/pull/2087) + +## New Contributors +* @shachar700 made their first contribution in [#5952](https://github.com/rh-hideout/pokeemerald-expansion/pull/5952) +* @MercedesCL made their first contribution in [#6033](https://github.com/rh-hideout/pokeemerald-expansion/pull/6033) +* @bassforte123 made their first contribution in [#6133](https://github.com/rh-hideout/pokeemerald-expansion/pull/6133) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.10.1...expansion/1.10.2 + + + diff --git a/docs/tutorials/how_to_code_entry.md b/docs/tutorials/how_to_code_entry.md new file mode 100644 index 0000000000..19219835d9 --- /dev/null +++ b/docs/tutorials/how_to_code_entry.md @@ -0,0 +1,395 @@ +## How to use the code entry system + +This system involves using the `EnterCode` special to prompt the player to enter a text string, and then the `GetCodeFeedback` special to perform some function based on the string entered. Using this system to make your own cheat codes or mystery gifts will involve both scripting and editing the `GetCodeFeedback` function itself to include your new functionality, and may involve further changes to the codebase if you want to implement something more far reaching (ie. a grindrunning mode). + +This tutorial will use the example of entering the string "CaughtEmAll" to flag every Pokemon as caught + +### 1. Choose where to initiaze your event scripting + +This can be anywhere or anything, pre-existing or added by you in porymap. I usually like using signs for testing things but this can be anything. I'm going to give the main script a more generic name, and you can attach it to whatever object you like. + +In that object's event script, add the following: +```diff +EventScript_CodeEntry:: + special EnterCode + waitstate + special GetCodeFeedback + end +``` + +This will prompt text entry from the object and prepare it to handle reading the entered text after it's been entered, but it won't do anything yet. Next we need to add our functionality to `GetCodeFeedback`. + +### 2. Add code string and code function to `GetCodeFeedback` + +You can find `GetCodeFeedback` in `src/field_specials.c`. Let's start by taking a look at the function: +``` +void GetCodeFeedback(void) +{ + static const u8 sText_SampleCode[] = _("SampleCode"); + if (!StringCompare(gStringVar2, sText_SampleCode)) + gSpecialVar_Result = 1; + else + gSpecialVar_Result = 0; +} +``` + +What this function does is compare the input string (`gStringVar2`) against a specified string (`sText_SampleCode`) and returns a value depending on whether the strings matched (`gSpecialVar_Result`). Note that due to the way `StringCompare` works, the comparison does need to be negated with `!`. By default, this sample setup returns 1 when the string "SampleCode" is entered by the player. + +Let's leave that functionality alone in case we ever want to reference it again, and just add a brand new code instead. We want to use the string "CaughtEmAll" as our code, so we'll start by making a string for it, and a new conditional that checks if the entered string matches. We'll also want to make sure we return a new unique number for `gSpecialVar_Result` so our event script knows what happened. + +```diff +void GetCodeFeedback(void) +{ + static const u8 sText_SampleCode[] = _("SampleCode"); ++ static const u8 sText_CaughtEmAll_[] = _("CaughtEmAll"); // Mark entire Pokedex as caught + if (!StringCompare(gStringVar2, sText_SampleCode)) + gSpecialVar_Result = 1; ++ else if (!StringCompare(gStringVar2, sText_CaughtEmAll)) ++ { ++ // TODO ++ gSpecialVar_Result = 2; ++ } + else + gSpecialVar_Result = 0; +} +``` + +Great! Now we have a new case to handle our new code, but it still doesn't do anything. This is the part that will change dramatically depending on what you want to do, and you can do anything you want, from setting flags to calling other functions or anything else! Just make sure you do it from within the conditional that matches your code. In our case we want to iterate through the Pokedex to mark everything as caught, which I'll just do here for simplicity. + +```diff +void GetCodeFeedback(void) +{ + static const u8 sText_SampleCode[] = _("SampleCode"); + static const u8 sText_CaughtEmAll_[] = _("CaughtEmAll"); // Mark entire Pokedex as caught + if (!StringCompare(gStringVar2, sText_SampleCode)) + gSpecialVar_Result = 1; + else if (!StringCompare(gStringVar2, sText_CaughtEmAll)) + { ++ u32 i; ++ for (i = 0; i < NATIONAL_DEX_COUNT; i++) ++ { ++ GetSetPokedexFlag(i + 1, FLAG_SET_CAUGHT); ++ } + gSpecialVar_Result = 2; + } + else + gSpecialVar_Result = 0; +} +``` + +Awesome! Now our `GetCodeFeedback` function performs the task we want it to, and returns a 2 to our event script so it can handle the situation appropriately. That's our next and final step! + +### 3. Handle new `GetCodeFeedback` case in event script + +To clarify, this step is *optional*. You don't need to do anything else after `GetCodeFeedback` has run if you don't want to, as all the functionality is there; once that function finishes, everything in the Pokedex will be marked as caught. + +The reason we might want to do this step, and the reason we pass results back to the event script in the first place, is so we can handle providing the player with some dialogue based on what they're doing. + +Let's go back to our event script. + +``` +EventScript_CodeEntry:: + special EnterCode + waitstate + special GetCodeFeedback + end +``` + +Maybe we first want to prompt the player with a message that says something like "Enter a code?" + +```diff +EventScript_CodeEntry:: ++ lockall ++ msgbox EnterCode_EnterCodeText, MSGBOX_YESNO ++ compare VAR_RESULT, 0 ++ goto_if_eq CodeExit + special EnterCode + waitstate + special GetCodeFeedback + end + ++CodeExit:: ++ releaseall ++ end ++ ++EnterCode_EnterCodeText: ++ .string "Enter a code?$" +``` + +This is all straightforward scripting stuff, the sign will first give the player a YES / NO box and ask whether they'd like to enter a code. Let's now add some cases and messages that handle the different results of the code entry from `GetCodeFeedback`. Let's look at the sign first: + +```diff +EventScript_CodeEntry:: + lockall + msgbox EnterCode_EnterCodeText, MSGBOX_YESNO + compare VAR_RESULT, 0 + goto_if_eq CodeExit + special EnterCode + waitstate + special GetCodeFeedback ++ goto_if_eq VAR_RESULT, 0, CodeFailed ++ goto_if_eq VAR_RESULT, 1, CodeSampleCode ++ goto_if_eq VAR_RESULT, 2, CodeCaughtEmAll + end +``` + +Now we're handling cases for each of the possible return values from `GetCodeFeedback`! except we don't have any of those functions, so this will cause errors as the script has nothing to `goto_if_eq`. Let's write those too: + +```diff +CodeFailed:: + msgbox EnterCode_FailedText, MSGBOX_DEFAULT + releaseall + end + +CodeSampleString:: + msgbox EnterCode_SucceededText, MSGBOX_DEFAULT + msgbox CodeSampleCode_Text, MSGBOX_DEFAULT + releaseall + end + +CodeCaughtEmAll:: + msgbox EnterCode_SucceededText, MSGBOX_DEFAULT + msgbox CodeCaughtEmAll_Text, MSGBOX_DEFAULT + releaseall + end +``` + +And lastly, we'll need to add all of the strings we now need to reference: + +``` +EnterCode_FailedText: + .string "...nothing happened.$" + +EnterCode_SucceededText: + .string "The code worked!$" + +CodeSampleCode_Text + .string "You entered the sample code!$" + +CodeCaughtEmAll_Text + .string "Encyclopedic knowledge fills your head.\n" + .string "It's like you've caught 'em all!$" +``` + +So to finish up, our event script file now looks like this, with all said and done: + +``` +EventScript_CodeEntry:: + lockall + msgbox EnterCode_EnterCodeText, MSGBOX_YESNO + compare VAR_RESULT, 0 + goto_if_eq CodeExit + special EnterCode + waitstate + special GetCodeFeedback + goto_if_eq VAR_RESULT, 0, CodeFailed + goto_if_eq VAR_RESULT, 1, CodeSampleCode + goto_if_eq VAR_RESULT, 2, CodeCaughtEmAll + end + +CodeExit:: + releaseall + end + +CodeFailed:: + msgbox EnterCode_FailedText, MSGBOX_DEFAULT + releaseall + end + +CodeSampleString:: + msgbox EnterCode_SucceededText, MSGBOX_DEFAULT + msgbox CodeSampleCode_Text, MSGBOX_DEFAULT + releaseall + end + +CodeCaughtEmAll:: + msgbox EnterCode_SucceededText, MSGBOX_DEFAULT + msgbox CodeCaughtEmAll_Text, MSGBOX_DEFAULT + releaseall + end + +EnterCode_EnterCodeText: + .string "Enter a code?$" + +EnterCode_FailedText: + .string "...nothing happened.$" + +EnterCode_SucceededText: + .string "The code worked!$" + +CodeSampleCode_Text + .string "You entered the sample code!$" + +CodeCaughtEmAll_Text + .string "Encyclopedic knowledge fills your head.\n" + .string "It's like you've caught 'em all!$" + +``` + +And that's it! Feel free to expand this in whatever way you wish, the pattern can just be repeated as much as you like, and you can made the code called from `GetCodeFeedback` do whatever you like. + +## Can I change the icon on the name entry screen? + +Absolutely! In `naming_screen.c`, look for the `NamingScreen_CreateCodeIcon` function. It's very short. There's one relevant line that needs to be changed: + +``` +spriteId = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MYSTERY_GIFT_MAN, SpriteCallbackDummy, 56, 37, 0); +``` + +Just swap out `OBJ_EVENT_GFX_MYSTERY_GIFT_MAN` for whatever event object sprite you'd like to use instead. You may need to adjust the position (the 56 and 37 in this example) depending on your sprite. + +## What about a mystery gift setup? + +I'd like to cover this separately because it's best handled via `givemon` script commands, which means we don't do much in `GetCodeFeedback` other than return a unique identifier. I'm gonna reference @PCG06's mystery gift implementation which is based on this code entry system for a clean and really thorough example. + +### 3. Mystery Gift `GetCodeFeedback` + +Let's say you have two mystery gift mons and no other cases you want to handle, one for Celebi and one for Jirachi. Your `GetCodeFeedback` function will look something like this: + +``` +{ + static const u8 sText_CodeCelebi[] = _("Celebi"); + static const u8 sText_CodeJirachi[] = _("Jirachi"); + if (!StringCompare(gStringVar2, sText_CodeCelebi)) + gSpecialVar_Result = 1; + else if (!StringCompare(gStringVar2, sText_CodeJirachi)) + gSpecialVar_Result = 2; + else + gSpecialVar_Result = 0; +} +``` +and that's it, super simple. All of the other handling will have to be done on the scripting end, as we'll be leaning on `givemon` and its associated handling. + +### 2. Mystery Gift Scripting + +Let's return back to our EventScript_CodeEntry pattern from before, but instead use our new codes. + +``` +EventScript_CodeEntry:: + lockall + msgbox EnterCode_EnterCodeText, MSGBOX_YESNO + compare VAR_RESULT, 0 + goto_if_eq CodeExit + special EnterCode + waitstate + special GetCodeFeedback + goto_if_eq VAR_RESULT, 0, CodeFailed + goto_if_eq VAR_RESULT, 1, MysteryGift_EventScript_Celebi + goto_if_eq VAR_RESULT, 2, MysteryGift_EventScript_Jirachi + end +``` + +Straightforward enough! The actual work is in writing `MysteryGift_EventScript_Celebi` and `MysteryGift_EventScript_Jirachi` to handle their givemons appropriately, prompt nicknaming, send them to the PC if the party is full, etc. We should also keep in mind that each Mystery Gift should only be entered once, so we'll want to track that with a flag; conveniently, expansion already has 15 flags we can use for the purpose. Let's do Celebi first. + +``` +MysteryGift_EventScript_Celebi:: + goto_if_set FLAG_MYSTERY_GIFT_1, MysteryGift_EventScript_Redeemed + bufferspeciesname STR_VAR_1, SPECIES_CELEBI + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_CELEBI + givemon SPECIES_CELEBI, 100, ITEM_LIFE_ORB, ITEM_CHERISH_BALL, NATURE_TIMID, 0, MON_GENDERLESS, 0, 0, 4, 252, 252, 0, 31, 31, 31, 30, 31, 31, MOVE_ENERGY_BALL, MOVE_PSYCHIC, MOVE_NASTY_PLOT, MOVE_CELEBRATE, TRUE, FALSE, TYPE_PSYCHIC + setflag FLAG_MYSTERY_GIFT_1 + call MysteryGift_EventScript_ReceivedMon + releaseall + end +``` + +Walking through this, it's clear we'll need some more scripting. We first check if Celebi's corresponding Mystery Gift flag has been set, and if it has, we need to tell the player they've already redeemed it and can't again. If they haven't though, we get ourselves setup for the givemon, do the givemon, and set the mystery gift flag. Then we need soem more generic handling to prompt nicknaming and some fanfare. + +Two things, then; an event script to handle the case where a mystery gift mon has already been redeemed, and an event script to handle when a mystery gift mon has successfully been received. + +Just for the sake of simplicity, I'm going to handle entering a used mystery gift code the same way I'd handle an incorrect code. You're welcome to add more complex scripting if you prefer. + +``` +MysteryGift_EventScript_Redeemed:: + msgbox EnterCode_FailedText, MSGBOX_DEFAULT + releaseall + end +``` + +And then the scripto handle the player having successfully received a mon: + +``` +MysteryGift_EventScript_ReceivedMon:: + msgbox MysteryGift_Text_SucceededText, MSGBOX_DEFAULT + playfanfare MUS_OBTAIN_ITEM + message MysteryGift_Text_ReceivedGiftMon + waitfanfare + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, MysteryGift_EventScript_NicknamePartyMon + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, MysteryGift_EventScript_NicknamePCMon + goto Common_EventScript_NoMoreRoomForPokemon + msgbox MysteryGift_Text_PleaseVisitAgain, MSGBOX_DEFAULT + end +``` + +Almost done! Just need to handle the specific nicknaming scripts, and then add all of the text. + +``` +MysteryGift_EventScript_NicknamePartyMon:: + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, MysteryGift_EventScript_Exit + call Common_EventScript_GetGiftMonPartySlot + call Common_EventScript_NameReceivedPartyMon + goto MysteryGift_EventScript_Exit + end + +MysteryGift_EventScript_NicknamePCMon:: + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, MysteryGift_EventScript_TransferredToPC + call Common_EventScript_NameReceivedBoxMon + call Common_EventScript_TransferredToPC + releaseall + end + +MysteryGift_EventScript_TransferredToPC:: + call Common_EventScript_TransferredToPC + releaseall + end + +MysteryGift_Text_WelcomeToMysteryGiftSystem: + .string "Hello, {PLAYER}!\p" + .string "Welcome to the Mystery Gift System!\p" + .string "Would you like to enter a code?$" + +MysteryGift_Text_CurrentlyUnavailable: + .string "I'm sorry, but the Mystery Gift System\n" + .string "is currently unavailable.\p" + .string "Please try again later.\p" + .string "Thank you!$" + +MysteryGift_Text_PleaseVisitAgain: + .string "Please visit again!$" + +MysteryGift_Text_EnterCode: + .string "Please enter the code.$" + +MysteryGift_Text_SucceededText: + .string "The code was valid!\p" + .string "Enjoy your gift!$" + +MysteryGift_Text_FailedText: + .string "The code was invalid!\p" + .string "Would you like to enter a new code?$" + +MysteryGift_Text_RedeemedText: + .string "This code was already redeemed!\p" + .string "Would you like you enter a new code?$" + +MysteryGift_Text_ReceivedGiftMon: + .string "{PLAYER} received a {STR_VAR_1}!$" +``` + +Goodness, so much infrastructure scripting! The nice thing is that now that all the infrastructure is set up, much like before, adding new cases becomes really straightforward. With Celebi and all of the skeleton scripting finished, let's add Jirachi. + +``` +MysteryGift_EventScript_Jirachi:: + goto_if_set FLAG_MYSTERY_GIFT_2, MysteryGift_EventScript_Redeemed + bufferspeciesname STR_VAR_1, SPECIES_JIRACHI + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_JIRACHI + givemon SPECIES_JIRACHI, 100, ITEM_LIFE_ORB, ITEM_CHERISH_BALL, NATURE_ADAMANT, 0, MON_GENDERLESS, 0, 252, 4, 252, 0, 0, 31, 31, 31, 31, 31, 31, MOVE_IRON_HEAD, MOVE_ZEN_HEADBUTT, MOVE_PLAY_ROUGH, MOVE_CELEBRATE, TRUE, FALSE, TYPE_STEEL + setflag FLAG_MYSTERY_GIFT_2 + call MysteryGift_EventScript_ReceivedMon + releaseall + end +``` + +And that's it! Super straightforward from here, just make sure to iterate `FLAG_MYSTERY_GIFT` each time you add a new mon, and of course add their code to both `GetCodeFeedback` and the main script controlling code entry. diff --git a/docs/tutorials/how_to_new_trainer_slide.md b/docs/tutorials/how_to_new_trainer_slide.md index f8fa345ba6..67c29a437d 100644 --- a/docs/tutorials/how_to_new_trainer_slide.md +++ b/docs/tutorials/how_to_new_trainer_slide.md @@ -70,11 +70,11 @@ If your new Trainer Slide needs to check for beforen initalized, a function is d ```diff void SetTrainerSlideMessage(enum DifficultyLevel, u32, u32); -void TryInitalizeFirstSTABMoveTrainerSlide(u32, u32, u32); -void TryInitalizeTrainerSlidePlayerLandsFirstCriticalHit(u32); -+ void TryInitalizeTrainerSlideEnemyLandsFirstCriticalHit(u32); -void TryInitalizeTrainerSlidePlayerLandsFirstSuperEffectiveHit(u32); -void TryInitalizeTrainerSlideEnemyMonUnaffected(u32); +void TryInitializeFirstSTABMoveTrainerSlide(u32, u32, u32); +void TryInitializeTrainerSlidePlayerLandsFirstCriticalHit(u32); ++ void TryInitializeTrainerSlideEnemyLandsFirstCriticalHit(u32); +void TryInitializeTrainerSlidePlayerLandsFirstSuperEffectiveHit(u32); +void TryInitializeTrainerSlideEnemyMonUnaffected(u32); bool32 IsTrainerSlideInitialized(enum TrainerSlideType); ``` ### `src/trainer_slide.c` @@ -111,7 +111,7 @@ The function that determines if a Slide should play has different function for m InitalizeTrainerSlide(slideId); } -+void TryInitalizeTrainerSlideEnemyLandsFirstCriticalHit(u32 target) ++void TryInitializeTrainerSlideEnemyLandsFirstCriticalHit(u32 target) +{ + enum TrainerSlideType slideId = TRAINER_SLIDE_ENEMY_LANDS_FIRST_CRITICAL_HIT; + @@ -150,13 +150,13 @@ In `BattleTurnPassed`, most Trainer Slides are checked to see if they should run { PrepareStringBattle(STRINGID_CRITICALHIT, gBattlerAttacker); -+ TryInitalizeTrainerSlideEnemyLandsFirstCriticalHit(gBattlerTarget); - TryInitalizeTrainerSlidePlayerLandsFirstCriticalHit(gBattlerTarget); ++ TryInitializeTrainerSlideEnemyLandsFirstCriticalHit(gBattlerTarget); + TryInitializeTrainerSlidePlayerLandsFirstCriticalHit(gBattlerTarget); gBattleCommunication[MSG_DISPLAY] = 1; ``` -The actual usage of `TryInitalizeTrainerSlideEnemyLandsFirstCriticalHit` is added and is checked whenever a critical hit is scored. +The actual usage of `TryInitializeTrainerSlideEnemyLandsFirstCriticalHit` is added and is checked whenever a critical hit is scored. ### `test/battle/trainer_slides.c` ```diff diff --git a/docs/tutorials/how_to_trainer_class.md b/docs/tutorials/how_to_trainer_class.md deleted file mode 100644 index 3ce0217c28..0000000000 --- a/docs/tutorials/how_to_trainer_class.md +++ /dev/null @@ -1,178 +0,0 @@ -# How to add a new trainer class - -## Content -* [Quick Summary](#quick-summary) -* [The Graphics](#the-graphics) - * [1. Edit the sprites](#2-edit-the-sprites) - * [2. Register the sprites](#2-register-the-sprites) - * [3. The Animation](#2-the-animation) - * [4. Connecting pictures to the data](#2-connecting-pictures-to-the-data) -* [The Data](#the-data) - * [5. Defining the trainer class](#2-defining-the-trainer-class) -* [Usage](#usage) - -## Quick Summary -(Page contains out of date information, [new instructions for Sprites here](https://github.com/rh-hideout/pokeemerald-expansion/pull/3597).) -If you've done this before and just need a quick lookup, here's what files you need: -1. GFX into [graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics) -2. Palette into [graphics/trainers/palettes](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/palettes) -3. Register sprites to [include/graphics.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/graphics.h) -4. Point game to where graphic files are found: [src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h) -5. Add animation to: [src/data/trainer_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_anims.h) -6. Add the trainer to all three structs in: [src/data/trainer_graphics/front_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_table.h) -7. Add trainer to [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h) - -## The Graphics - -### 1. Edit the sprites -We will start with a graphic that we want to use for our new trainer class. Unlike with adding Pokémon, the trainer sprites aren't sorted in individual folders, but rather in one folder: -[graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics) - -**Remember to limit yourself to 16 colors including transparency in the first slot!** - -Export the pallette and place into the same folder. - -### 2. Register the sprites -Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. First, create constants for the file paths. -Edit [include/graphics.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/graphics.h): -```diff -extern const u32 gTrainerFrontPic_RubySapphireMay[]; -+ extern const u32 gTrainerFrontPic_myTrainerClass[]; - -extern const u32 gTrainerPalette_Hiker[]; -... - -... -extern const u32 gTrainerPalette_RubySapphireMay[]; -+ extern const u32 gTrainerPalette_myTrainerClass[]; - -extern const u8 gTrainerBackPic_Brendan[]; -``` - -Now link the graphic files. -[src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h): -```diff -const u32 gTrainerPalette_RubySapphireBrendan[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_brendan.gbapal.lz"); - -const u32 gTrainerFrontPic_RubySapphireMay[] = INCBIN_U32("graphics/trainers/front_pics/ruby_sapphire_may_front_pic.4bpp.lz"); -const u32 gTrainerPalette_RubySapphireMay[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_may.gbapal.lz"); - -+ const u32 gTrainerFrontPic_Sheriff[] = INCBIN_U32("graphics/trainers/front_pics/myTrainerClass_front_pic.4bpp.lz"); -+ const u32 gTrainerPalette_Sheriff[] = INCBIN_U32("graphics/trainers/palettes/myTrainerClass.gbapal.lz"); - -const u8 gTrainerBackPic_Brendan[] = INCBIN_U8("graphics/trainers/back_pics/brendan_back_pic.4 -``` - -### 3. The Animation -Add the Animation of the trainer here: -[src/data/trainer_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_anims.h) - -The trainers don't really move, but in theory they could, it's just that the animation defined for each trainer just shows one frame: - -```diff -static const union AnimCmd *const sAnims_RubySapphireMay[] ={ - sAnim_GeneralFrame0, -}; - -+ static const union AnimCmd *const sAnims_MyTrainerClass[] ={ -+ sAnim_GeneralFrame0, -+ }; - -const union AnimCmd *const *const gTrainerFrontAnimsPtrTable[] = -{ - [TRAINER_PIC_HIKER] = sAnims_Hiker, - [TRAINER_PIC_AQUA_GRUNT_M] = sAnims_AquaGruntM, - [TRAINER_PIC_POKEMON_BREEDER_F] = sAnims_PokemonBreederF, -... - -... - [TRAINER_PIC_RS_BRENDAN] = sAnims_RubySapphireBrendan, - [TRAINER_PIC_RS_MAY] = sAnims_RubySapphireMay, -+ [TRAINER_PIC_MYTRAINERCLASS] = sAnims_MyTrainerClass, -}; -``` - -### 4. Connecting the Pictures to the Data -The last few things we have to do is prepare the graphics for usage. In [src/data/trainer_graphics/front_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_table.h) you'll find the structs, we need to add the trainer to all of these. You can just copy the last trainer type defined and edit it, but as far as I understand, these are what they do: - -1. gTrainerFrontPicCoords: Pretty self explanatory. Coordinates like size and offset on the y-axis to position the sprite on screen. -2. gTrainerFrontPicTable: Connects the trainer type with the image we defined earlier. -3. gTrainerFrontPicPaletteTable: Connects the trainer type with the palette we defined earlier. - -So, finally, it needs to look like this: -```diff -const struct MonCoords gTrainerFrontPicCoords[] = -{ - [TRAINER_PIC_HIKER] = {.size = 8, .y_offset = 1}, - [TRAINER_PIC_AQUA_GRUNT_M] = {.size = 8, .y_offset = 1}, -... - -... - [TRAINER_PIC_RS_BRENDAN] = {.size = 8, .y_offset = 1}, - [TRAINER_PIC_RS_MAY] = {.size = 8, .y_offset = 1}, -+ [TRAINER_PIC_MYTRAINERCLASS] = {.size = 8, .y_offset = 1}, -}; - -#define TRAINER_SPRITE(trainerPic, sprite, size) [TRAINER_PIC_##trainerPic] = {sprite, size, TRAINER_PIC_##trainerPic} - -const struct CompressedSpriteSheet gTrainerFrontPicTable[] = -{ - TRAINER_SPRITE(HIKER, gTrainerFrontPic_Hiker, 0x800), - TRAINER_SPRITE(AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, 0x800), - TRAINER_SPRITE(POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, 0x800), - TRAINER_SPRITE(COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, 0x800), -... - -... - TRAINER_SPRITE(RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, 0x800), - TRAINER_SPRITE(RS_MAY, gTrainerFrontPic_RubySapphireMay, 0x800), -+ TRAINER_SPRITE(MYTRAINERCLASS, gTrainerFrontPic_MyTrainerClass, 0x800), -}; - -#define TRAINER_PAL(trainerPic, pal) [TRAINER_PIC_##trainerPic] = {pal, TRAINER_PIC_##trainerPic} - -const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[] = -{ - TRAINER_PAL(HIKER, gTrainerPalette_Hiker), - TRAINER_PAL(AQUA_GRUNT_M, gTrainerPalette_AquaGruntM), - TRAINER_PAL(POKEMON_BREEDER_F, gTrainerPalette_PokemonBreederF), -... - -... - TRAINER_PAL(RS_BRENDAN, gTrainerPalette_RubySapphireBrendan), - TRAINER_PAL(RS_MAY, gTrainerPalette_RubySapphireMay), -+ TRAINER_PAL(MYTRAINERCLASS, gTrainerPalette_MyTrainerClass), -}; - -``` -### The Data -#### 5. Defining the trainer class -Finally, let's bring it all together by defining our new trainer class in [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h): - -```diff -#define TRAINER_PIC_RS_MAY 92 -+ #define TRAINER_PIC_MYTRAINERCLASS 93 - -#define TRAINER_BACK_PIC_BRENDAN 0 -#define TRAINER_BACK_PIC_MAY 1 -``` -Remember to count the number next to the trainer class up by one! - -## Usage -You can test your trainer type by going to [src/data/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainers.h) and changing a trainer type. For example: -```diff - [TRAINER_BRENDAN_PLACEHOLDER] = - { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_RS_PROTAG, - .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, -- .trainerPic = TRAINER_PIC_RS_BRENDAN, -+ .trainerPic = TRAINER_PIC_MYTRAINERCLASS, - .trainerName = _("BRENDAN"), - .items = {}, - .doubleBattle = FALSE, - .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_BrendanLinkPlaceholder), - .party = {.NoItemDefaultMoves = sParty_BrendanLinkPlaceholder}, - }, -``` diff --git a/docs/tutorials/how_to_trainer_party_pool.md b/docs/tutorials/how_to_trainer_party_pool.md new file mode 100644 index 0000000000..e0e7639de3 --- /dev/null +++ b/docs/tutorials/how_to_trainer_party_pool.md @@ -0,0 +1,122 @@ +# How to use Trainer Party Pools +Trainer Party Pools (TPP) is a way to introduce a bit of unpredictability to trainer battles by allowing trainer to generate parties from pools defined by the user. + +The maximum number of mons that can be in a single trainer's pool is 255. + +## Turning on TPP with `trainer.sparty` +To use TPP with `trainers.party`, all that's needed is to define a `Party Size` that's smaller than than the number of defined mons for the trainer. + +## Turning on TPP with `trainers.h` +To use TPP with `trainers.h`, the trainer need to have the `.poolSize` field set to a value that's larger than the `.partySize` and equal to the number of mons defined in the trainer. + +## How the pool works +When generating a party for a trainer with a pool, the party is picked from the pool randomly according to rules set for the pool and tags assigned to individual mons in the pool. + +### Pool Rules +Pool rules are defined in `src/data/battle_pool_rules.h`. To begin with some default pools are defined, `defaultPoolRules` which any trainer that doesn't otherwise have a specified pool ruleset uses, and some custom rules for common scenarios. + +- `POOL_RULESET_BASIC`, a ruleset that will pick a mon from the pool with the tag `MON_POOL_TAG_LEAD` if possible to put in the first slot and `MON_POOL_TAG_ACE` in the last slot, and not pick mons with those tags for any other position. +- `POOL_RULESET_DOUBLES`, a ruleset that will pick up to two mons from the pool with the tag `MON_POOL_TAG_LEAD` if possible to put in the first two slots and `MON_POOL_TAG_ACE` in the last two slots, and not pick mons with those tags for any other position. +- `POOL_RULESET_WEATHER_SINGLES`, a ruleset that will pick at most one mon with the tag `MON_POOL_TAG_WEATHER_SETTER` if possible, and at least one mon with the tag `MON_POOL_TAG_WEATHER_ABUSER` if possible, in addition to the same conditions as `POOL_RULESET_BASIC`. +- `POOL_RULESET_WEATHER_DOUBLES`, a ruleset that will pick at most one mon with the tag `MON_POOL_TAG_WEATHER_SETTER` if possible, and at least one mon with the tag `MON_POOL_TAG_WEATHER_ABUSER` if possible, in addition to the same conditions as `POOL_RULESET_DOUBLES`. +- `POOL_RULESET_SUPPORT_DOUBLES`, a ruleset that will pick at most one mon with the tag `MON_POOL_TAG_SUPPORT` if possible, in addition to the same conditions as `POOL_RULESET_DOUBLES`. + +All these pools also have the options `.speciesClause`, `.excludeForms`, `.itemClause` and `.itemClauseExclusions` set to the values defined in `include/config/battle.h` under `B_POOL_RULE_`. + +- `.speciesClause` if set to `TRUE` means that the same exact species as defined by `.species` can't be picked twice for the party from the pool. +- `.excludeForms` if set to `FALSE` means that the same exact species as defined by NetDex number can't be picked twice for the party from the pool. +- `.itemClause` if set to `TRUE` means that pokemon with the same held item can't be picked twice for the party from the pool. +- `.itemClauseExclusions` if set to `TRUE` means that multiple pokemon with the same item can be picked for the party if the item is listed in `poolItemClauseExclusions`. By default `ITEM_ORAN_BERRY` and `ITEM_SITRUS_BERRY` are the only items in the list of exclusions. + +Individual tags can have rules which change how they're included. +By setting the `.tagMaxMembers[POOL_TAG_]` field to a number, only that many mons with that tag will at max be part of the party, or if set to `POOL_MEMBER_COUNT_NONE` no mons with this tag will be included, and if set to `POOL_MEMBER_COUNT_UNLIMITED` no restrictions on the number of mons with the tag will apply. + +By setting `.tagRequired[POOL_TAG_]` option field to `TRUE`, this tag will be picked before any tags that are not required, after the tag has been picked for the pool it will be set to `FALSE` for that tag. + +The tags `Lead` and `Ace` has special handling where they will be picked for the first or last party position respectively. + +### Tags +There are currently 8 tags specified in the TPP implementation, `Lead`, `Ace`, `Weather Setter`, `Weather Abuser`, `Support`, `Tag 5`, `Tag 6` and `Tag 7`. + +If using `trainers.party`, these tags are applied to mons with the field `Tags: `, separated by `/`. Example `Tags: Lead / Weather Setter` + +If using `trainers.h`, these tags are applied to mons with the field `.tags`, separated by `|`. Example: `.tags = MON_POOL_TAG_LEAD | MON_POOL_TAG_WEATHER_SETTER` + +Pokemon can have up to 32 different tags, but anything beyond the 8 initial tags has to be implemented. The numbered tags can be renamed too to better signify their purpose for developers. + +## Trainer options +A few more trainer options are introduced in order to further customize how the pool picking process works. + +- `Pool Pick Functions` (`.poolPickIndex`) controls which functons are used to pick mons from the pool, they're split into Lead, Ace, and Other. +By default, only `DefaultPickFunction` and `PickLowest` are implemented. Must be an `enum` value in `enum PoolPickFunctions`. +- `Pool Prune` (`.poolPruneIndex`) controls if members in the pool should be removed before party members are picked from the pool. +By default, only `POOL_PRUNE_NONE`, which doesn't remove anything from the pool, and `POOL_PRUNE_TEST`, which removes Wobbuffet from the pool, are implemented. Must be an `enum` value in `enum PoolPruneOptions`. + +## Example pool +``` +=== TRAINER_TIANA === +Name: TIANA +Class: Lass +Pic: Lass +Gender: Female +Music: Female +Double Battle: Yes +AI: Check Bad Move +Party Size: 4 +Pool Rules: Weather Doubles +Pool Pick Index: Default + +Zigzagoon +Level: 4 +IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe + +Shroomish +Level: 4 +IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe + +Psyduck +Level: 4 +IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe + +Shellder +Level: 4 +IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe + +Mew +Level: 4 +IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe +Tags: Ace + +Giratina +Level: 4 +IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe +Tags: Ace + +Vulpix +Ability: Drought +Level: 4 +Tags: Lead / Weather Setter + +Torkoal +Ability: Drought +Level: 4 +Tags: Lead / Weather Setter + +Bulbasaur +Ability: Chlorophyll +Level: 4 +Tags: Lead / Weather Abuser + +Cherrim +Level: 4 +Tags: Lead / Weather Abuser +``` +Here Tiana has been given a pool that's set up for a double battle with weather. Using the default pool rule `Weather Doubles` it will only pick one of each of the weather setters and abusers which Tiana will lead with. Tiana will also pick either Mew or Giratina as her Ace mon, and the last slot will be filled with one of Zigzagoon, Shroomish, Psyduck or Shellder. + +## Pool settings +If no pool rule is specified in the trainer, the default rules will be used, which sets rules according to some defaults from `include/config/battle.h`. +This file also has settings for other pool options. + +- `B_POOL_SETTING_CONSISTENT_RNG`, `TRUE` or `FALSE`, the party generated will always be the same on a particular save (RNG dependant on trainerId and encountered trainer). +- `B_POOL_SETTING_USE_FIXED_SEED`, `TRUE` or `FALSE`, the party generated will always be the same on a particular compiled ROM (RNG dependant on a chosen seed and encountered trainer). +- `B_POOL_SETTING_FIXED_SEED`, seed to use for fixed seed, does nothing if `B_POOL_SETTING_USE_FIXED_SEED` is `FALSE`. diff --git a/docs/tutorials/how_to_trainer_pic.md b/docs/tutorials/how_to_trainer_pic.md new file mode 100644 index 0000000000..78f8a717e4 --- /dev/null +++ b/docs/tutorials/how_to_trainer_pic.md @@ -0,0 +1,98 @@ +# How to add a new trainer pic + +## Content +* [Quick Summary](#quick-summary) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#2-edit-the-sprites) + * [2. Register the sprites](#2-register-the-sprites) + * [3. Connecting pictures to the data](#2-connecting-pictures-to-the-data) +* [The Data](#the-data) + * [4. Defining the trainer pic](#2-defining-the-trainer-pic) +* [Usage](#usage) + +## Quick Summary +If you've done this before and just need a quick lookup, here's what files you need: +1. GFX into [graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics) +2. Palette into [graphics/trainers/palettes](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/palettes) +3. Point game to where graphic files are found: [src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h) +4. Add trainer to [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h) + +## The Graphics + +### 1. Edit the sprites +We will start with a graphic that we want to use for our new trainer pic. Unlike with adding Pokémon, the trainer sprites aren't sorted in individual folders, but rather in one folder: +[graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics) + +**Remember to limit yourself to 16 colors including transparency in the first slot!** + +Export the palette and place into the same folder. + +### 2. Register the sprites +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them by linking the graphic files. +[src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h): +```diff +const u32 gTrainerPalette_RubySapphireBrendan[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_brendan.gbapal.lz"); + +const u32 gTrainerFrontPic_RubySapphireMay[] = INCBIN_U32("graphics/trainers/front_pics/ruby_sapphire.4bpp.lz"); +const u32 gTrainerPalette_RubySapphireMay[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_may.gbapal.lz"); + ++ const u32 gTrainerFrontPic_myTrainerClass[] = INCBIN_U32("graphics/trainers/front_pics/myTrainerClass.4bpp.lz"); ++ const u32 gTrainerPalette_myTrainerClass[] = INCBIN_U32("graphics/trainers/palettes/myTrainerClass.gbapal.lz"); + +const u8 gTrainerBackPic_Brendan[] = INCBIN_U8("graphics/trainers/back_pics/brendan.4bpp"); +``` + +### 3. Connecting the Pictures to the Data +The last few things we have to do is prepare the graphics for usage. In [src/data/graphics/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h) you'll find the gTrainerSprites struct, we need to add the trainer to this. You can just copy the last trainer type defined and edit it, but this is what it does: Connects the trainer type with the image we defined earlier. + +So, finally, it needs to look like this: +```diff +define TRAINER_SPRITE(trainerPic, picFile, paletteFile, ...) \ + [trainerPic] = \ + { \ + .frontPic = {picFile, TRAINER_PIC_SIZE, trainerPic}, \ + .palette = {paletteFile, trainerPic}, \ + .mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \ + .mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \ + } + +const struct TrainerSprite gTrainerSprites[] = +{ + TRAINER_SPRITE(TRAINER_PIC_HIKER, gTrainerFrontPic_Hiker, gTrainerPalette_Hiker), + TRAINER_SPRITE(TRAINER_PIC_AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, gTrainerPalette_AquaGruntM), + ... + TRAINER_SPRITE(TRAINER_PIC_RS_MAY, gTrainerFrontPic_RubySapphireMay, gTrainerPalette_RubySapphireMay), + TRAINER_SPRITE(TRAINER_PIC_MY_TRAINER_CLASS, gTrainerFrontPic_myTrainerClass, gTrainerPalette_myTrainerClass) +}; +``` +### The Data +#### 4. Defining the trainer pic +Finally, let's bring it all together by defining our new trainer pic in [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h): + +```diff +#define TRAINER_PIC_RS_MAY 92 ++ #define TRAINER_PIC_MY_TRAINER_CLASS 93 + +#define TRAINER_BACK_PIC_BRENDAN 0 +#define TRAINER_BACK_PIC_MAY 1 +``` +Remember to count the number next to the trainer pic up by one! + +## Usage +You can test your trainer type by going to [src/data/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainers.h) and changing a trainer type. For example: +```diff + [TRAINER_BRENDAN_PLACEHOLDER] = + { + .partyFlags = 0, + .trainerClass = TRAINER_CLASS_RS_PROTAG, + .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, +- .trainerPic = TRAINER_PIC_RS_BRENDAN, ++ .trainerPic = TRAINER_PIC_MY_TRAINER_CLASS, + .trainerName = _("BRENDAN"), + .items = {}, + .doubleBattle = FALSE, + .aiFlags = 0, + .partySize = ARRAY_COUNT(sParty_BrendanLinkPlaceholder), + .party = {.NoItemDefaultMoves = sParty_BrendanLinkPlaceholder}, + }, +``` diff --git a/graphics/battle_anims/sprites/salt_particle.png b/graphics/battle_anims/sprites/salt_particle.png new file mode 100644 index 0000000000..a418f0a172 Binary files /dev/null and b/graphics/battle_anims/sprites/salt_particle.png differ diff --git a/graphics/battle_anims/sprites/starstorm_beam.png b/graphics/battle_anims/sprites/starstorm_beam.png new file mode 100644 index 0000000000..f4dced0a35 Binary files /dev/null and b/graphics/battle_anims/sprites/starstorm_beam.png differ diff --git a/graphics/battle_interface/move_info_window_l.png b/graphics/battle_interface/move_info_window_l.png new file mode 100644 index 0000000000..548acf653b Binary files /dev/null and b/graphics/battle_interface/move_info_window_l.png differ diff --git a/graphics/battle_interface/move_info_window_r.png b/graphics/battle_interface/move_info_window_r.png new file mode 100644 index 0000000000..f83e8f7f88 Binary files /dev/null and b/graphics/battle_interface/move_info_window_r.png differ diff --git a/graphics/pokemon/abomasnow/mega/overworld.png b/graphics/pokemon/abomasnow/mega/overworld.png new file mode 100644 index 0000000000..319e37016e Binary files /dev/null and b/graphics/pokemon/abomasnow/mega/overworld.png differ diff --git a/graphics/pokemon/abomasnow/mega/overworld_normal.pal b/graphics/pokemon/abomasnow/mega/overworld_normal.pal new file mode 100644 index 0000000000..124ab1628b --- /dev/null +++ b/graphics/pokemon/abomasnow/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +48 72 56 +48 120 64 +50 86 102 +80 80 80 +122 122 122 +48 152 72 +120 120 152 +0 0 0 +160 168 200 +192 136 208 +184 192 208 +156 233 255 +216 216 232 +201 255 255 +232 232 248 diff --git a/graphics/pokemon/abomasnow/mega/overworld_shiny.pal b/graphics/pokemon/abomasnow/mega/overworld_shiny.pal new file mode 100644 index 0000000000..91c1c05271 --- /dev/null +++ b/graphics/pokemon/abomasnow/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +41 66 79 +26 113 141 +50 86 102 +80 80 80 +122 122 122 +16 141 183 +120 120 152 +0 0 0 +160 168 200 +192 136 208 +184 192 208 +156 233 255 +216 216 232 +201 255 255 +232 232 248 diff --git a/graphics/pokemon/absol/mega/overworld.png b/graphics/pokemon/absol/mega/overworld.png new file mode 100644 index 0000000000..609bcb4ff5 Binary files /dev/null and b/graphics/pokemon/absol/mega/overworld.png differ diff --git a/graphics/pokemon/absol/mega/overworld_normal.pal b/graphics/pokemon/absol/mega/overworld_normal.pal new file mode 100644 index 0000000000..f112d97f63 --- /dev/null +++ b/graphics/pokemon/absol/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +40 48 64 +64 72 88 +64 72 96 +128 32 32 +96 104 128 +120 128 160 +0 0 0 +176 184 200 +208 216 232 +232 232 248 +96 104 128 +120 128 160 +40 48 64 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/absol/mega/overworld_shiny.pal b/graphics/pokemon/absol/mega/overworld_shiny.pal new file mode 100644 index 0000000000..189f1f4771 --- /dev/null +++ b/graphics/pokemon/absol/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +72 32 40 +124 38 38 +64 72 96 +128 32 32 +192 56 56 +240 88 88 +0 0 0 +176 184 200 +208 216 232 +232 232 248 +96 104 128 +120 128 160 +40 48 64 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/aerodactyl/mega/overworld.png b/graphics/pokemon/aerodactyl/mega/overworld.png new file mode 100644 index 0000000000..286e436967 Binary files /dev/null and b/graphics/pokemon/aerodactyl/mega/overworld.png differ diff --git a/graphics/pokemon/aerodactyl/mega/overworld_normal.pal b/graphics/pokemon/aerodactyl/mega/overworld_normal.pal new file mode 100644 index 0000000000..1a4ef75e75 --- /dev/null +++ b/graphics/pokemon/aerodactyl/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +62 62 62 +96 16 16 +92 92 92 +72 64 96 +122 122 122 +128 88 128 +128 112 176 +0 0 0 +144 136 200 +184 136 192 +176 176 224 +200 200 208 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/aerodactyl/mega/overworld_shiny.pal b/graphics/pokemon/aerodactyl/mega/overworld_shiny.pal new file mode 100644 index 0000000000..a2869cb405 --- /dev/null +++ b/graphics/pokemon/aerodactyl/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +62 62 62 +96 16 16 +92 92 92 +72 64 96 +122 122 122 +79 76 138 +169 112 176 +0 0 0 +186 136 200 +112 116 222 +208 176 224 +200 200 208 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/aggron/mega/overworld.png b/graphics/pokemon/aggron/mega/overworld.png new file mode 100644 index 0000000000..fbceb62a39 Binary files /dev/null and b/graphics/pokemon/aggron/mega/overworld.png differ diff --git a/graphics/pokemon/aggron/mega/overworld_normal.pal b/graphics/pokemon/aggron/mega/overworld_normal.pal new file mode 100644 index 0000000000..e7ed20af2a --- /dev/null +++ b/graphics/pokemon/aggron/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +48 40 56 +72 64 80 +104 96 112 +97 97 120 +97 108 120 +208 88 88 +64 96 128 +104 144 200 +128 128 144 +153 153 174 +176 176 192 +0 0 0 +208 208 216 +232 232 248 +104 96 112 diff --git a/graphics/pokemon/aggron/mega/overworld_shiny.pal b/graphics/pokemon/aggron/mega/overworld_shiny.pal new file mode 100644 index 0000000000..8a3048a374 --- /dev/null +++ b/graphics/pokemon/aggron/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +16 56 48 +32 88 88 +48 128 120 +120 110 97 +120 99 97 +208 88 88 +64 96 128 +208 88 88 +64 167 157 +174 164 153 +192 185 176 +0 0 0 +216 212 208 +248 241 232 +108 105 100 diff --git a/graphics/pokemon/alakazam/mega/overworld.png b/graphics/pokemon/alakazam/mega/overworld.png new file mode 100644 index 0000000000..7eecdd28d6 Binary files /dev/null and b/graphics/pokemon/alakazam/mega/overworld.png differ diff --git a/graphics/pokemon/alakazam/mega/overworld_normal.pal b/graphics/pokemon/alakazam/mega/overworld_normal.pal new file mode 100644 index 0000000000..f9858b0bc4 --- /dev/null +++ b/graphics/pokemon/alakazam/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +37 37 40 +71 42 23 +111 79 63 +93 93 99 +144 120 56 +201 65 59 +144 109 96 +216 168 48 +248 216 96 +176 176 184 +176 176 188 +0 0 0 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/alakazam/mega/overworld_shiny.pal b/graphics/pokemon/alakazam/mega/overworld_shiny.pal new file mode 100644 index 0000000000..73211d068e --- /dev/null +++ b/graphics/pokemon/alakazam/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +37 37 40 +71 42 23 +142 72 100 +93 93 99 +144 120 56 +201 65 59 +193 103 130 +216 168 48 +248 216 96 +176 176 184 +176 176 188 +0 0 0 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/altaria/mega/overworld.png b/graphics/pokemon/altaria/mega/overworld.png new file mode 100644 index 0000000000..d85233b8ae Binary files /dev/null and b/graphics/pokemon/altaria/mega/overworld.png differ diff --git a/graphics/pokemon/altaria/mega/overworld_normal.pal b/graphics/pokemon/altaria/mega/overworld_normal.pal new file mode 100644 index 0000000000..af72a688cb --- /dev/null +++ b/graphics/pokemon/altaria/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +0 32 96 +0 64 104 +72 80 104 +40 104 152 +40 128 168 +112 128 144 +64 168 216 +96 192 232 +0 0 0 +168 176 192 +208 224 232 +248 248 248 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/altaria/mega/overworld_shiny.pal b/graphics/pokemon/altaria/mega/overworld_shiny.pal new file mode 100644 index 0000000000..b15eb80b80 --- /dev/null +++ b/graphics/pokemon/altaria/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +77 96 16 +104 95 18 +72 80 104 +151 146 55 +167 149 58 +112 128 144 +215 194 85 +231 209 115 +0 0 0 +168 176 192 +208 224 232 +248 248 248 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/ampharos/mega/overworld.png b/graphics/pokemon/ampharos/mega/overworld.png new file mode 100644 index 0000000000..c96d8e2bec Binary files /dev/null and b/graphics/pokemon/ampharos/mega/overworld.png differ diff --git a/graphics/pokemon/ampharos/mega/overworld_normal.pal b/graphics/pokemon/ampharos/mega/overworld_normal.pal new file mode 100644 index 0000000000..38bd7636cf --- /dev/null +++ b/graphics/pokemon/ampharos/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +104 88 8 +48 56 64 +80 96 112 +128 24 8 +184 56 16 +240 88 80 +152 128 24 +200 160 32 +240 208 88 +112 128 152 +136 152 176 +184 200 224 +0 0 0 +232 232 248 +0 0 0 diff --git a/graphics/pokemon/ampharos/mega/overworld_shiny.pal b/graphics/pokemon/ampharos/mega/overworld_shiny.pal new file mode 100644 index 0000000000..53ddfe807a --- /dev/null +++ b/graphics/pokemon/ampharos/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +98 43 91 +48 56 64 +80 96 112 +8 62 128 +16 74 184 +80 165 240 +147 75 141 +187 98 185 +226 161 225 +112 128 152 +136 152 176 +184 200 224 +0 0 0 +232 232 248 +0 0 0 diff --git a/graphics/pokemon/audino/mega/overworld.png b/graphics/pokemon/audino/mega/overworld.png new file mode 100644 index 0000000000..180d9a788d Binary files /dev/null and b/graphics/pokemon/audino/mega/overworld.png differ diff --git a/graphics/pokemon/audino/mega/overworld_normal.pal b/graphics/pokemon/audino/mega/overworld_normal.pal new file mode 100644 index 0000000000..e7058d01f2 --- /dev/null +++ b/graphics/pokemon/audino/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +112 64 72 +128 88 24 +184 144 24 +216 192 72 +226 115 139 +209 165 186 +0 0 0 +248 224 136 +240 202 222 +248 228 238 +248 248 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/audino/mega/overworld_shiny.pal b/graphics/pokemon/audino/mega/overworld_shiny.pal new file mode 100644 index 0000000000..71b23c24b6 --- /dev/null +++ b/graphics/pokemon/audino/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +112 64 104 +128 88 24 +184 144 24 +216 192 72 +184 144 24 +209 165 186 +0 0 0 +248 224 136 +233 202 240 +245 228 248 +248 248 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/banette/mega/overworld.png b/graphics/pokemon/banette/mega/overworld.png new file mode 100644 index 0000000000..cd5a63078e Binary files /dev/null and b/graphics/pokemon/banette/mega/overworld.png differ diff --git a/graphics/pokemon/banette/mega/overworld_normal.pal b/graphics/pokemon/banette/mega/overworld_normal.pal new file mode 100644 index 0000000000..f98360fa12 --- /dev/null +++ b/graphics/pokemon/banette/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +44 36 58 +72 56 16 +120 96 24 +71 58 87 +100 87 115 +160 128 40 +200 160 48 +178 90 154 +135 115 144 +213 106 188 +243 120 219 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/banette/mega/overworld_shiny.pal b/graphics/pokemon/banette/mega/overworld_shiny.pal new file mode 100644 index 0000000000..1ebf612ac2 --- /dev/null +++ b/graphics/pokemon/banette/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +32 59 58 +72 56 16 +120 96 24 +52 85 89 +81 114 117 +160 128 40 +200 160 48 +178 90 154 +109 135 146 +213 106 188 +243 120 219 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/beedrill/mega/overworld.png b/graphics/pokemon/beedrill/mega/overworld.png new file mode 100644 index 0000000000..8bc2cb6748 Binary files /dev/null and b/graphics/pokemon/beedrill/mega/overworld.png differ diff --git a/graphics/pokemon/beedrill/mega/overworld_normal.pal b/graphics/pokemon/beedrill/mega/overworld_normal.pal new file mode 100644 index 0000000000..660a716519 --- /dev/null +++ b/graphics/pokemon/beedrill/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +51 49 47 +51 50 47 +104 80 40 +80 80 80 +192 40 64 +183 143 49 +245 202 48 +144 144 144 +154 152 145 +245 231 171 +0 0 0 +192 192 192 +210 220 221 +232 232 248 +255 255 255 diff --git a/graphics/pokemon/beedrill/mega/overworld_shiny.pal b/graphics/pokemon/beedrill/mega/overworld_shiny.pal new file mode 100644 index 0000000000..8a6ca6e8e7 --- /dev/null +++ b/graphics/pokemon/beedrill/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +51 49 47 +51 50 47 +69 104 42 +80 80 80 +44 81 173 +100 183 54 +107 245 56 +144 144 144 +154 152 145 +245 231 171 +0 0 0 +192 192 192 +210 220 221 +232 232 248 +255 255 255 diff --git a/graphics/pokemon/blastoise/mega/overworld.png b/graphics/pokemon/blastoise/mega/overworld.png new file mode 100644 index 0000000000..ec3ad397c0 Binary files /dev/null and b/graphics/pokemon/blastoise/mega/overworld.png differ diff --git a/graphics/pokemon/blastoise/mega/overworld_normal.pal b/graphics/pokemon/blastoise/mega/overworld_normal.pal new file mode 100644 index 0000000000..58d6f0db2e --- /dev/null +++ b/graphics/pokemon/blastoise/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +72 40 8 +48 56 88 +80 80 80 +160 8 48 +128 80 8 +176 112 24 +152 136 80 +200 168 80 +240 200 80 +64 120 216 +112 152 224 +136 136 136 +184 184 184 +0 0 0 +232 232 248 diff --git a/graphics/pokemon/blastoise/mega/overworld_shiny.pal b/graphics/pokemon/blastoise/mega/overworld_shiny.pal new file mode 100644 index 0000000000..7bde8b938b --- /dev/null +++ b/graphics/pokemon/blastoise/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +56 67 11 +66 56 79 +80 80 80 +160 8 48 +86 118 14 +128 165 32 +152 136 80 +200 168 80 +240 200 80 +120 96 184 +154 135 200 +136 136 136 +184 184 184 +0 0 0 +232 232 248 diff --git a/graphics/pokemon/blaziken/mega/overworld.png b/graphics/pokemon/blaziken/mega/overworld.png new file mode 100644 index 0000000000..ec68330263 Binary files /dev/null and b/graphics/pokemon/blaziken/mega/overworld.png differ diff --git a/graphics/pokemon/blaziken/mega/overworld_normal.pal b/graphics/pokemon/blaziken/mega/overworld_normal.pal new file mode 100644 index 0000000000..243ecb7697 --- /dev/null +++ b/graphics/pokemon/blaziken/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +97 21 7 +114 42 38 +78 78 78 +112 88 64 +176 38 38 +219 60 53 +238 122 36 +237 106 99 +176 128 80 +208 184 88 +248 208 80 +32 96 184 +240 224 152 +255 242 183 +0 0 0 diff --git a/graphics/pokemon/blaziken/mega/overworld_shiny.pal b/graphics/pokemon/blaziken/mega/overworld_shiny.pal new file mode 100644 index 0000000000..cec00622de --- /dev/null +++ b/graphics/pokemon/blaziken/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +97 48 7 +114 42 38 +78 78 78 +112 88 64 +176 80 38 +219 110 53 +238 122 36 +237 148 99 +176 128 80 +208 184 88 +248 208 80 +32 96 184 +240 224 152 +255 242 183 +0 0 0 diff --git a/graphics/pokemon/camerupt/mega/overworld.png b/graphics/pokemon/camerupt/mega/overworld.png new file mode 100644 index 0000000000..38fd221e92 Binary files /dev/null and b/graphics/pokemon/camerupt/mega/overworld.png differ diff --git a/graphics/pokemon/camerupt/mega/overworld_normal.pal b/graphics/pokemon/camerupt/mega/overworld_normal.pal new file mode 100644 index 0000000000..395fb07c85 --- /dev/null +++ b/graphics/pokemon/camerupt/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +32 37 41 +88 32 32 +48 56 64 +96 85 64 +88 96 96 +178 53 27 +213 77 26 +227 111 51 +128 112 80 +217 132 42 +235 192 61 +160 152 120 +192 184 152 +0 0 0 +248 248 248 diff --git a/graphics/pokemon/camerupt/mega/overworld_shiny.pal b/graphics/pokemon/camerupt/mega/overworld_shiny.pal new file mode 100644 index 0000000000..2de7faa9aa --- /dev/null +++ b/graphics/pokemon/camerupt/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +32 37 41 +57 57 62 +48 56 64 +96 85 64 +88 96 96 +96 94 118 +213 77 26 +142 134 159 +128 112 80 +217 132 42 +235 192 61 +160 152 120 +192 184 152 +0 0 0 +248 248 248 diff --git a/graphics/pokemon/charizard/mega_x/overworld.png b/graphics/pokemon/charizard/mega_x/overworld.png new file mode 100644 index 0000000000..47ef85b671 Binary files /dev/null and b/graphics/pokemon/charizard/mega_x/overworld.png differ diff --git a/graphics/pokemon/charizard/mega_x/overworld_normal.pal b/graphics/pokemon/charizard/mega_x/overworld_normal.pal new file mode 100644 index 0000000000..32de717e27 --- /dev/null +++ b/graphics/pokemon/charizard/mega_x/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +30 31 36 +80 29 52 +126 40 64 +74 78 90 +91 94 103 +107 109 115 +40 96 142 +74 132 189 +57 173 255 +126 178 213 +160 160 160 +0 0 0 +149 209 241 +165 231 255 +216 216 248 diff --git a/graphics/pokemon/charizard/mega_x/overworld_shiny.pal b/graphics/pokemon/charizard/mega_x/overworld_shiny.pal new file mode 100644 index 0000000000..ca80ec4de0 --- /dev/null +++ b/graphics/pokemon/charizard/mega_x/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +30 31 36 +80 29 52 +126 40 64 +45 83 75 +62 116 105 +71 136 123 +142 40 54 +189 74 84 +57 173 255 +126 178 213 +160 160 160 +0 0 0 +149 209 241 +165 231 255 +216 216 248 diff --git a/graphics/pokemon/charizard/mega_y/overworld.png b/graphics/pokemon/charizard/mega_y/overworld.png new file mode 100644 index 0000000000..ec153e5a30 Binary files /dev/null and b/graphics/pokemon/charizard/mega_y/overworld.png differ diff --git a/graphics/pokemon/charizard/mega_y/overworld_normal.pal b/graphics/pokemon/charizard/mega_y/overworld_normal.pal new file mode 100644 index 0000000000..7bf6f4e8ef --- /dev/null +++ b/graphics/pokemon/charizard/mega_y/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +96 48 0 +96 64 0 +40 72 88 +192 16 32 +144 64 32 +200 88 40 +248 120 56 +248 184 16 +216 168 48 +240 208 112 +64 128 128 +160 160 160 +0 0 0 +216 216 248 +0 0 0 diff --git a/graphics/pokemon/charizard/mega_y/overworld_shiny.pal b/graphics/pokemon/charizard/mega_y/overworld_shiny.pal new file mode 100644 index 0000000000..6aedfdfd26 --- /dev/null +++ b/graphics/pokemon/charizard/mega_y/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +53 34 65 +77 76 80 +118 33 45 +192 16 32 +86 72 106 +115 96 142 +146 122 178 +248 184 16 +163 161 167 +196 194 199 +160 61 70 +160 160 160 +0 0 0 +216 216 248 +0 0 0 diff --git a/graphics/pokemon/diancie/mega/overworld.png b/graphics/pokemon/diancie/mega/overworld.png new file mode 100644 index 0000000000..2843e4fc33 Binary files /dev/null and b/graphics/pokemon/diancie/mega/overworld.png differ diff --git a/graphics/pokemon/diancie/mega/overworld_normal.pal b/graphics/pokemon/diancie/mega/overworld_normal.pal new file mode 100644 index 0000000000..004fc37319 --- /dev/null +++ b/graphics/pokemon/diancie/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +45 46 58 +75 77 101 +167 41 91 +198 152 98 +116 120 150 +217 95 170 +182 166 178 +227 199 137 +242 154 218 +0 0 0 +225 213 222 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/diancie/mega/overworld_shiny.pal b/graphics/pokemon/diancie/mega/overworld_shiny.pal new file mode 100644 index 0000000000..32e0636913 --- /dev/null +++ b/graphics/pokemon/diancie/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +45 46 58 +144 36 77 +161 42 109 +198 152 98 +116 120 150 +217 100 143 +211 127 159 +227 199 137 +243 148 184 +0 0 0 +255 177 207 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/duraludon/anim_front.png b/graphics/pokemon/duraludon/anim_front.png new file mode 100644 index 0000000000..32624a4988 Binary files /dev/null and b/graphics/pokemon/duraludon/anim_front.png differ diff --git a/graphics/pokemon/duraludon/front.png b/graphics/pokemon/duraludon/front.png deleted file mode 100644 index fd22d471ee..0000000000 Binary files a/graphics/pokemon/duraludon/front.png and /dev/null differ diff --git a/graphics/pokemon/duraludon/shiny.pal b/graphics/pokemon/duraludon/shiny.pal index 19e7323e31..9ac865c3f3 100644 --- a/graphics/pokemon/duraludon/shiny.pal +++ b/graphics/pokemon/duraludon/shiny.pal @@ -8,7 +8,7 @@ JASC-PAL 16 16 16 81 96 101 226 157 109 -253 248 236 +242 211 111 118 138 154 149 163 164 8 36 82 diff --git a/graphics/pokemon/gallade/mega/overworld.png b/graphics/pokemon/gallade/mega/overworld.png new file mode 100644 index 0000000000..7efa8f18b2 Binary files /dev/null and b/graphics/pokemon/gallade/mega/overworld.png differ diff --git a/graphics/pokemon/gallade/mega/overworld_normal.pal b/graphics/pokemon/gallade/mega/overworld_normal.pal new file mode 100644 index 0000000000..6e6012ba48 --- /dev/null +++ b/graphics/pokemon/gallade/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +88 22 39 +0 72 16 +24 104 96 +72 72 80 +128 32 56 +184 48 72 +222 65 90 +24 144 48 +48 176 64 +23 175 192 +104 200 224 +136 136 152 +0 0 0 +208 208 224 +232 232 248 diff --git a/graphics/pokemon/gallade/mega/overworld_shiny.pal b/graphics/pokemon/gallade/mega/overworld_shiny.pal new file mode 100644 index 0000000000..ba676df6c8 --- /dev/null +++ b/graphics/pokemon/gallade/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +110 43 28 +0 37 72 +54 69 73 +72 72 80 +174 69 44 +229 114 66 +242 135 82 +24 88 144 +48 125 176 +87 112 128 +149 164 178 +136 136 152 +0 0 0 +208 208 224 +232 232 248 diff --git a/graphics/pokemon/garchomp/mega/overworld.png b/graphics/pokemon/garchomp/mega/overworld.png new file mode 100644 index 0000000000..47c06907fc Binary files /dev/null and b/graphics/pokemon/garchomp/mega/overworld.png differ diff --git a/graphics/pokemon/garchomp/mega/overworld_normal.pal b/graphics/pokemon/garchomp/mega/overworld_normal.pal new file mode 100644 index 0000000000..8cb1c3d56f --- /dev/null +++ b/graphics/pokemon/garchomp/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +48 48 80 +72 80 120 +104 104 104 +128 48 16 +184 64 24 +192 152 0 +248 224 8 +96 112 160 +120 152 200 +168 168 168 +0 0 0 +232 232 248 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/garchomp/mega/overworld_shiny.pal b/graphics/pokemon/garchomp/mega/overworld_shiny.pal new file mode 100644 index 0000000000..7b8bc45d81 --- /dev/null +++ b/graphics/pokemon/garchomp/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +80 48 73 +120 72 118 +104 104 104 +122 35 93 +177 52 139 +192 152 0 +248 224 8 +157 96 160 +185 120 200 +168 168 168 +0 0 0 +232 232 248 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/gardevoir/mega/overworld.png b/graphics/pokemon/gardevoir/mega/overworld.png new file mode 100644 index 0000000000..77fbfb4c43 Binary files /dev/null and b/graphics/pokemon/gardevoir/mega/overworld.png differ diff --git a/graphics/pokemon/gardevoir/mega/overworld_normal.pal b/graphics/pokemon/gardevoir/mega/overworld_normal.pal new file mode 100644 index 0000000000..bad96ae0c4 --- /dev/null +++ b/graphics/pokemon/gardevoir/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +16 64 32 +72 72 80 +128 32 56 +184 48 72 +240 104 104 +40 128 56 +72 176 88 +104 200 128 +128 128 144 +168 168 176 +0 0 0 +200 200 216 +232 232 248 +200 200 216 +168 168 176 diff --git a/graphics/pokemon/gardevoir/mega/overworld_shiny.pal b/graphics/pokemon/gardevoir/mega/overworld_shiny.pal new file mode 100644 index 0000000000..471722d4e8 --- /dev/null +++ b/graphics/pokemon/gardevoir/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +48 64 80 +48 48 48 +152 96 48 +216 136 64 +240 176 80 +72 166 198 +122 207 217 +158 217 241 +128 128 144 +208 192 216 +0 0 0 +232 216 248 +248 248 248 +96 104 120 +48 64 80 diff --git a/graphics/pokemon/gengar/mega/overworld.png b/graphics/pokemon/gengar/mega/overworld.png new file mode 100644 index 0000000000..40390d4aa1 Binary files /dev/null and b/graphics/pokemon/gengar/mega/overworld.png differ diff --git a/graphics/pokemon/gengar/mega/overworld_normal.pal b/graphics/pokemon/gengar/mega/overworld_normal.pal new file mode 100644 index 0000000000..baacd711d7 --- /dev/null +++ b/graphics/pokemon/gengar/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +57 42 72 +87 59 107 +96 66 116 +200 16 40 +179 124 91 +213 83 98 +230 160 26 +158 81 143 +130 97 153 +221 97 170 +177 155 189 +0 0 0 +216 202 224 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/gengar/mega/overworld_shiny.pal b/graphics/pokemon/gengar/mega/overworld_shiny.pal new file mode 100644 index 0000000000..69259927f8 --- /dev/null +++ b/graphics/pokemon/gengar/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +108 108 108 +147 147 147 +178 178 178 +200 16 40 +179 124 91 +75 75 75 +230 160 26 +224 139 211 +231 231 231 +251 159 231 +205 183 216 +0 0 0 +236 226 241 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/glalie/mega/overworld.png b/graphics/pokemon/glalie/mega/overworld.png new file mode 100644 index 0000000000..a36606538e Binary files /dev/null and b/graphics/pokemon/glalie/mega/overworld.png differ diff --git a/graphics/pokemon/glalie/mega/overworld_normal.pal b/graphics/pokemon/glalie/mega/overworld_normal.pal new file mode 100644 index 0000000000..e10d60b62e --- /dev/null +++ b/graphics/pokemon/glalie/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +29 29 33 +40 40 56 +57 57 65 +34 82 113 +86 86 90 +80 80 96 +218 21 21 +112 120 136 +40 129 192 +98 189 238 +152 160 176 +169 175 188 +0 0 0 +215 221 220 +197 205 230 diff --git a/graphics/pokemon/glalie/mega/overworld_shiny.pal b/graphics/pokemon/glalie/mega/overworld_shiny.pal new file mode 100644 index 0000000000..da25f12f0b --- /dev/null +++ b/graphics/pokemon/glalie/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +29 29 33 +40 40 56 +57 57 65 +34 82 113 +86 86 90 +80 80 96 +218 21 21 +112 120 136 +186 98 71 +98 189 238 +152 160 176 +169 175 188 +0 0 0 +215 221 220 +197 205 230 diff --git a/graphics/pokemon/groudon/primal/overworld.png b/graphics/pokemon/groudon/primal/overworld.png new file mode 100644 index 0000000000..79dbede948 Binary files /dev/null and b/graphics/pokemon/groudon/primal/overworld.png differ diff --git a/graphics/pokemon/groudon/primal/overworld_normal.pal b/graphics/pokemon/groudon/primal/overworld_normal.pal new file mode 100644 index 0000000000..95041cbb07 --- /dev/null +++ b/graphics/pokemon/groudon/primal/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +19 21 27 +32 40 56 +48 51 59 +114 10 16 +53 57 66 +61 67 72 +66 70 80 +98 98 106 +190 23 38 +234 48 77 +250 94 117 +238 102 102 +229 229 166 +184 200 216 +0 0 0 diff --git a/graphics/pokemon/groudon/primal/overworld_shiny.pal b/graphics/pokemon/groudon/primal/overworld_shiny.pal new file mode 100644 index 0000000000..7f44addd16 --- /dev/null +++ b/graphics/pokemon/groudon/primal/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +19 21 27 +32 40 56 +48 51 59 +37 37 37 +53 57 66 +61 67 72 +66 70 80 +98 98 106 +64 64 64 +84 84 84 +103 103 103 +238 102 102 +229 229 166 +184 200 216 +0 0 0 diff --git a/graphics/pokemon/gyarados/mega/overworld.png b/graphics/pokemon/gyarados/mega/overworld.png new file mode 100644 index 0000000000..e204b06025 Binary files /dev/null and b/graphics/pokemon/gyarados/mega/overworld.png differ diff --git a/graphics/pokemon/gyarados/mega/overworld_normal.pal b/graphics/pokemon/gyarados/mega/overworld_normal.pal new file mode 100644 index 0000000000..88ab19a395 --- /dev/null +++ b/graphics/pokemon/gyarados/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +24 24 24 +48 48 48 +64 0 12 +88 63 20 +48 56 80 +80 72 72 +136 0 24 +190 74 114 +179 138 49 +252 218 116 +32 96 128 +64 120 152 +68 161 233 +0 0 0 +198 198 214 diff --git a/graphics/pokemon/gyarados/mega/overworld_shiny.pal b/graphics/pokemon/gyarados/mega/overworld_shiny.pal new file mode 100644 index 0000000000..06527bc415 --- /dev/null +++ b/graphics/pokemon/gyarados/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +146 124 78 +220 202 148 +64 0 12 +88 63 20 +79 37 49 +239 57 106 +136 0 24 +190 74 114 +179 138 49 +252 218 116 +128 24 56 +159 53 84 +239 57 106 +0 0 0 +198 198 214 diff --git a/graphics/pokemon/heracross/mega/overworld.png b/graphics/pokemon/heracross/mega/overworld.png new file mode 100644 index 0000000000..dc10314d1c Binary files /dev/null and b/graphics/pokemon/heracross/mega/overworld.png differ diff --git a/graphics/pokemon/heracross/mega/overworld_normal.pal b/graphics/pokemon/heracross/mega/overworld_normal.pal new file mode 100644 index 0000000000..f8e603f12d --- /dev/null +++ b/graphics/pokemon/heracross/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +16 16 16 +8 48 64 +16 72 96 +32 96 120 +176 40 48 +224 32 56 +152 88 0 +248 96 120 +216 136 8 +240 176 64 +56 120 144 +80 152 176 +128 192 200 +0 0 0 +248 248 248 diff --git a/graphics/pokemon/heracross/mega/overworld_shiny.pal b/graphics/pokemon/heracross/mega/overworld_shiny.pal new file mode 100644 index 0000000000..520daaa6f0 --- /dev/null +++ b/graphics/pokemon/heracross/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +16 16 16 +70 15 58 +106 27 88 +133 47 115 +176 40 48 +224 32 56 +152 88 0 +248 96 120 +216 136 8 +240 176 64 +160 76 143 +194 104 178 +218 158 215 +0 0 0 +248 248 248 diff --git a/graphics/pokemon/houndoom/mega/overworld.png b/graphics/pokemon/houndoom/mega/overworld.png new file mode 100644 index 0000000000..7cf4de427a Binary files /dev/null and b/graphics/pokemon/houndoom/mega/overworld.png differ diff --git a/graphics/pokemon/houndoom/mega/overworld_normal.pal b/graphics/pokemon/houndoom/mega/overworld_normal.pal new file mode 100644 index 0000000000..8471c56c2c --- /dev/null +++ b/graphics/pokemon/houndoom/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +40 40 48 +56 56 64 +72 56 80 +80 80 88 +104 112 112 +144 24 40 +136 96 64 +184 136 96 +136 128 144 +168 160 184 +224 184 160 +0 0 0 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/houndoom/mega/overworld_shiny.pal b/graphics/pokemon/houndoom/mega/overworld_shiny.pal new file mode 100644 index 0000000000..cc0bf08c9a --- /dev/null +++ b/graphics/pokemon/houndoom/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +38 53 69 +56 56 64 +72 56 80 +45 75 105 +72 100 129 +144 24 40 +162 41 29 +215 68 52 +136 128 144 +168 160 184 +246 128 128 +0 0 0 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/kangaskhan/mega/overworld.png b/graphics/pokemon/kangaskhan/mega/overworld.png new file mode 100644 index 0000000000..de152c74f3 Binary files /dev/null and b/graphics/pokemon/kangaskhan/mega/overworld.png differ diff --git a/graphics/pokemon/kangaskhan/mega/overworld_normal.pal b/graphics/pokemon/kangaskhan/mega/overworld_normal.pal new file mode 100644 index 0000000000..1b696b1769 --- /dev/null +++ b/graphics/pokemon/kangaskhan/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +40 39 45 +104 8 1 +88 72 40 +120 80 56 +56 56 64 +80 56 64 +72 72 72 +112 112 112 +160 120 40 +184 120 112 +208 168 96 +248 200 120 +0 0 0 +168 184 208 +232 232 248 diff --git a/graphics/pokemon/kangaskhan/mega/overworld_shiny.pal b/graphics/pokemon/kangaskhan/mega/overworld_shiny.pal new file mode 100644 index 0000000000..ee394a6ea7 --- /dev/null +++ b/graphics/pokemon/kangaskhan/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +40 39 45 +104 8 1 +88 72 40 +136 120 128 +56 56 64 +80 56 64 +64 88 64 +120 144 96 +160 120 40 +176 168 144 +230 186 109 +230 186 109 +0 0 0 +234 170 223 +232 232 248 diff --git a/graphics/pokemon/kyogre/primal/overworld.png b/graphics/pokemon/kyogre/primal/overworld.png new file mode 100644 index 0000000000..a1da31fd68 Binary files /dev/null and b/graphics/pokemon/kyogre/primal/overworld.png differ diff --git a/graphics/pokemon/kyogre/primal/overworld_normal.pal b/graphics/pokemon/kyogre/primal/overworld_normal.pal new file mode 100644 index 0000000000..7731a6b32e --- /dev/null +++ b/graphics/pokemon/kyogre/primal/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +56 56 56 +24 56 88 +18 82 110 +161 103 64 +227 88 88 +227 144 88 +250 229 87 +56 56 188 +80 80 198 +98 98 201 +75 75 227 +35 132 207 +62 167 255 +0 0 0 +253 254 255 diff --git a/graphics/pokemon/kyogre/primal/overworld_shiny.pal b/graphics/pokemon/kyogre/primal/overworld_shiny.pal new file mode 100644 index 0000000000..b2a123d274 --- /dev/null +++ b/graphics/pokemon/kyogre/primal/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +56 56 56 +32 32 32 +87 74 40 +68 127 160 +118 180 196 +125 194 165 +236 225 154 +69 69 69 +79 79 79 +85 85 85 +86 86 86 +222 205 69 +252 245 121 +0 0 0 +253 254 255 diff --git a/graphics/pokemon/latias/mega/overworld.png b/graphics/pokemon/latias/mega/overworld.png new file mode 100644 index 0000000000..5e768685df Binary files /dev/null and b/graphics/pokemon/latias/mega/overworld.png differ diff --git a/graphics/pokemon/latias/mega/overworld_normal.pal b/graphics/pokemon/latias/mega/overworld_normal.pal new file mode 100644 index 0000000000..a6b47e99d6 --- /dev/null +++ b/graphics/pokemon/latias/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +32 40 40 +51 44 70 +75 61 110 +68 68 68 +168 124 28 +103 81 154 +120 100 169 +144 114 197 +124 142 150 +152 168 176 +0 0 0 +168 128 222 +184 200 208 +232 232 248 +0 0 0 diff --git a/graphics/pokemon/latias/mega/overworld_shiny.pal b/graphics/pokemon/latias/mega/overworld_shiny.pal new file mode 100644 index 0000000000..927ce5aece --- /dev/null +++ b/graphics/pokemon/latias/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +32 40 40 +51 44 70 +44 109 44 +68 68 68 +34 93 135 +63 152 63 +76 165 75 +90 164 92 +124 142 150 +152 168 176 +0 0 0 +98 205 100 +184 200 208 +232 232 248 +0 0 0 diff --git a/graphics/pokemon/latios/mega/overworld.png b/graphics/pokemon/latios/mega/overworld.png new file mode 100644 index 0000000000..cb781b85ef Binary files /dev/null and b/graphics/pokemon/latios/mega/overworld.png differ diff --git a/graphics/pokemon/latios/mega/overworld_normal.pal b/graphics/pokemon/latios/mega/overworld_normal.pal new file mode 100644 index 0000000000..babb8855dc --- /dev/null +++ b/graphics/pokemon/latios/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +32 40 40 +51 44 70 +75 61 110 +68 68 68 +192 32 32 +103 81 154 +120 100 169 +144 114 197 +124 142 150 +152 168 176 +0 0 0 +168 128 222 +184 200 208 +232 232 248 +0 0 0 diff --git a/graphics/pokemon/latios/mega/overworld_shiny.pal b/graphics/pokemon/latios/mega/overworld_shiny.pal new file mode 100644 index 0000000000..016c1dc733 --- /dev/null +++ b/graphics/pokemon/latios/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +32 40 40 +51 44 70 +44 109 44 +68 68 68 +192 32 32 +63 152 63 +76 165 75 +90 164 92 +124 142 150 +152 168 176 +0 0 0 +98 205 100 +184 200 208 +232 232 248 +0 0 0 diff --git a/graphics/pokemon/lopunny/mega/overworld.png b/graphics/pokemon/lopunny/mega/overworld.png new file mode 100644 index 0000000000..d87a196fa4 Binary files /dev/null and b/graphics/pokemon/lopunny/mega/overworld.png differ diff --git a/graphics/pokemon/lopunny/mega/overworld_normal.pal b/graphics/pokemon/lopunny/mega/overworld_normal.pal new file mode 100644 index 0000000000..b5c8981adc --- /dev/null +++ b/graphics/pokemon/lopunny/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +35 27 18 +56 48 32 +60 60 53 +80 80 72 +96 80 64 +128 96 56 +144 120 64 +208 120 120 +168 128 88 +200 168 104 +232 216 168 +0 0 0 +253 199 199 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/lopunny/mega/overworld_shiny.pal b/graphics/pokemon/lopunny/mega/overworld_shiny.pal new file mode 100644 index 0000000000..e86ff95985 --- /dev/null +++ b/graphics/pokemon/lopunny/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +35 27 18 +56 48 32 +60 60 53 +80 80 72 +96 80 64 +128 96 56 +144 120 64 +208 120 120 +168 128 88 +215 88 153 +242 157 194 +0 0 0 +253 199 199 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/lucario/mega/overworld.png b/graphics/pokemon/lucario/mega/overworld.png new file mode 100644 index 0000000000..8ff2fdd478 Binary files /dev/null and b/graphics/pokemon/lucario/mega/overworld.png differ diff --git a/graphics/pokemon/lucario/mega/overworld_normal.pal b/graphics/pokemon/lucario/mega/overworld_normal.pal new file mode 100644 index 0000000000..64a2ed1916 --- /dev/null +++ b/graphics/pokemon/lucario/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +40 40 40 +68 11 21 +120 96 40 +48 56 88 +72 72 72 +96 96 96 +187 30 57 +176 136 56 +232 184 80 +56 104 144 +72 136 192 +112 184 240 +168 184 200 +0 0 0 +232 232 248 diff --git a/graphics/pokemon/lucario/mega/overworld_shiny.pal b/graphics/pokemon/lucario/mega/overworld_shiny.pal new file mode 100644 index 0000000000..5f97d7165f --- /dev/null +++ b/graphics/pokemon/lucario/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +40 40 40 +68 11 21 +120 96 40 +66 80 55 +72 72 72 +96 96 96 +187 30 57 +176 136 56 +232 184 80 +116 127 72 +152 169 94 +200 215 136 +168 184 200 +0 0 0 +232 232 248 diff --git a/graphics/pokemon/manectric/mega/overworld.png b/graphics/pokemon/manectric/mega/overworld.png new file mode 100644 index 0000000000..bc36a99f18 Binary files /dev/null and b/graphics/pokemon/manectric/mega/overworld.png differ diff --git a/graphics/pokemon/manectric/mega/overworld_normal.pal b/graphics/pokemon/manectric/mega/overworld_normal.pal new file mode 100644 index 0000000000..1cfb140de9 --- /dev/null +++ b/graphics/pokemon/manectric/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +96 72 48 +24 48 88 +64 64 72 +152 0 0 +192 56 56 +192 144 32 +224 192 72 +32 120 152 +80 152 184 +248 248 144 +128 184 216 +136 216 248 +0 0 0 +232 232 248 +0 0 0 diff --git a/graphics/pokemon/manectric/mega/overworld_shiny.pal b/graphics/pokemon/manectric/mega/overworld_shiny.pal new file mode 100644 index 0000000000..648a273aac --- /dev/null +++ b/graphics/pokemon/manectric/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +96 72 48 +39 39 39 +64 64 72 +152 0 0 +192 56 56 +192 123 32 +224 171 72 +64 64 64 +92 92 92 +248 234 144 +121 121 121 +134 134 134 +0 0 0 +232 232 248 +0 0 0 diff --git a/graphics/pokemon/mawile/mega/overworld.png b/graphics/pokemon/mawile/mega/overworld.png new file mode 100644 index 0000000000..b65c2c37d7 Binary files /dev/null and b/graphics/pokemon/mawile/mega/overworld.png differ diff --git a/graphics/pokemon/mawile/mega/overworld_normal.pal b/graphics/pokemon/mawile/mega/overworld_normal.pal new file mode 100644 index 0000000000..474b856da6 --- /dev/null +++ b/graphics/pokemon/mawile/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +40 40 40 +126 25 55 +80 72 56 +72 72 72 +118 118 118 +129 63 63 +161 33 71 +128 104 72 +200 168 88 +196 88 145 +242 135 158 +0 0 0 +248 216 128 +176 184 200 +232 232 248 diff --git a/graphics/pokemon/mawile/mega/overworld_shiny.pal b/graphics/pokemon/mawile/mega/overworld_shiny.pal new file mode 100644 index 0000000000..21d02a3d3c --- /dev/null +++ b/graphics/pokemon/mawile/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +68 37 61 +63 35 115 +80 72 56 +113 66 99 +184 112 152 +66 45 105 +82 46 147 +128 104 72 +200 168 88 +109 99 185 +183 146 231 +0 0 0 +248 216 128 +176 184 200 +232 232 248 diff --git a/graphics/pokemon/medicham/mega/overworld.png b/graphics/pokemon/medicham/mega/overworld.png new file mode 100644 index 0000000000..d3f0d04bf5 Binary files /dev/null and b/graphics/pokemon/medicham/mega/overworld.png differ diff --git a/graphics/pokemon/medicham/mega/overworld_normal.pal b/graphics/pokemon/medicham/mega/overworld_normal.pal new file mode 100644 index 0000000000..dad60f896f --- /dev/null +++ b/graphics/pokemon/medicham/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +48 24 32 +56 56 64 +86 88 94 +144 56 88 +184 80 104 +185 159 44 +255 216 49 +200 96 128 +88 144 192 +136 136 152 +232 136 160 +0 0 0 +176 184 200 +216 224 232 +232 232 248 diff --git a/graphics/pokemon/medicham/mega/overworld_shiny.pal b/graphics/pokemon/medicham/mega/overworld_shiny.pal new file mode 100644 index 0000000000..d163e9eff8 --- /dev/null +++ b/graphics/pokemon/medicham/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +24 32 48 +56 56 64 +86 88 94 +56 88 144 +80 104 184 +185 159 44 +255 216 49 +96 128 200 +88 144 192 +136 136 152 +136 160 232 +0 0 0 +208 195 168 +237 223 210 +232 232 248 diff --git a/graphics/pokemon/metagross/mega/overworld.png b/graphics/pokemon/metagross/mega/overworld.png new file mode 100644 index 0000000000..d0a6ae4fb7 Binary files /dev/null and b/graphics/pokemon/metagross/mega/overworld.png differ diff --git a/graphics/pokemon/metagross/mega/overworld_normal.pal b/graphics/pokemon/metagross/mega/overworld_normal.pal new file mode 100644 index 0000000000..cfdfcb38ee --- /dev/null +++ b/graphics/pokemon/metagross/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +39 44 55 +32 64 80 +72 80 96 +64 96 120 +152 40 40 +191 163 12 +227 202 32 +249 221 73 +112 120 136 +88 128 168 +104 144 208 +0 0 0 +144 192 232 +208 208 208 +232 232 248 diff --git a/graphics/pokemon/metagross/mega/overworld_shiny.pal b/graphics/pokemon/metagross/mega/overworld_shiny.pal new file mode 100644 index 0000000000..ee4a5c6018 --- /dev/null +++ b/graphics/pokemon/metagross/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +39 44 55 +72 72 72 +72 80 96 +118 118 118 +152 40 40 +8 107 183 +25 133 227 +55 147 227 +185 133 36 +162 162 162 +192 192 192 +0 0 0 +220 220 220 +245 191 84 +255 220 148 diff --git a/graphics/pokemon/mewtwo/mega_x/overworld.png b/graphics/pokemon/mewtwo/mega_x/overworld.png new file mode 100644 index 0000000000..6adbe5652a Binary files /dev/null and b/graphics/pokemon/mewtwo/mega_x/overworld.png differ diff --git a/graphics/pokemon/mewtwo/mega_x/overworld_normal.pal b/graphics/pokemon/mewtwo/mega_x/overworld_normal.pal new file mode 100644 index 0000000000..6ec07f7967 --- /dev/null +++ b/graphics/pokemon/mewtwo/mega_x/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +50 42 55 +64 48 80 +68 68 68 +129 72 136 +128 120 152 +184 88 208 +176 152 192 +0 0 0 +216 200 216 +232 232 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/mewtwo/mega_x/overworld_shiny.pal b/graphics/pokemon/mewtwo/mega_x/overworld_shiny.pal new file mode 100644 index 0000000000..b1353cc5b1 --- /dev/null +++ b/graphics/pokemon/mewtwo/mega_x/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +50 42 55 +58 80 48 +68 68 68 +72 136 75 +128 120 152 +92 208 88 +176 152 192 +0 0 0 +216 200 216 +232 232 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/mewtwo/mega_y/overworld.png b/graphics/pokemon/mewtwo/mega_y/overworld.png new file mode 100644 index 0000000000..1119dc6ee0 Binary files /dev/null and b/graphics/pokemon/mewtwo/mega_y/overworld.png differ diff --git a/graphics/pokemon/mewtwo/mega_y/overworld_normal.pal b/graphics/pokemon/mewtwo/mega_y/overworld_normal.pal new file mode 100644 index 0000000000..6d3f605307 --- /dev/null +++ b/graphics/pokemon/mewtwo/mega_y/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +94 12 15 +64 48 80 +64 64 64 +96 96 96 +193 98 104 +136 72 136 +128 120 152 +184 88 208 +230 128 132 +0 0 0 +176 152 192 +216 200 216 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/mewtwo/mega_y/overworld_shiny.pal b/graphics/pokemon/mewtwo/mega_y/overworld_shiny.pal new file mode 100644 index 0000000000..6aca25458b --- /dev/null +++ b/graphics/pokemon/mewtwo/mega_y/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +94 12 15 +58 80 48 +64 64 64 +96 96 96 +193 98 104 +72 136 75 +128 120 152 +92 208 88 +230 128 132 +0 0 0 +176 152 192 +216 200 216 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/necrozma/ultra/overworld.png b/graphics/pokemon/necrozma/ultra/overworld.png new file mode 100644 index 0000000000..85d2902dfa Binary files /dev/null and b/graphics/pokemon/necrozma/ultra/overworld.png differ diff --git a/graphics/pokemon/necrozma/ultra/overworld_normal.pal b/graphics/pokemon/necrozma/ultra/overworld_normal.pal new file mode 100644 index 0000000000..28fabb96d9 --- /dev/null +++ b/graphics/pokemon/necrozma/ultra/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 233 127 +53 46 7 +121 109 57 +44 77 106 +194 54 54 +150 133 35 +230 207 53 +235 216 89 +219 199 118 +0 0 0 +125 52 134 +61 168 194 +250 237 207 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/necrozma/ultra/overworld_shiny.pal b/graphics/pokemon/necrozma/ultra/overworld_shiny.pal new file mode 100644 index 0000000000..79f1fc8cdb --- /dev/null +++ b/graphics/pokemon/necrozma/ultra/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 233 127 +53 46 7 +74 106 133 +151 163 36 +189 75 177 +54 107 159 +70 150 232 +115 188 246 +130 181 222 +0 0 0 +46 131 58 +255 214 46 +228 245 253 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/pidgeot/mega/overworld.png b/graphics/pokemon/pidgeot/mega/overworld.png new file mode 100644 index 0000000000..4364335afe Binary files /dev/null and b/graphics/pokemon/pidgeot/mega/overworld.png differ diff --git a/graphics/pokemon/pidgeot/mega/overworld_normal.pal b/graphics/pokemon/pidgeot/mega/overworld_normal.pal new file mode 100644 index 0000000000..c18feb0a77 --- /dev/null +++ b/graphics/pokemon/pidgeot/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +17 48 59 +80 56 24 +126 32 86 +149 91 50 +208 112 40 +242 57 71 +176 64 96 +184 176 99 +29 110 141 +48 150 203 +177 170 153 +244 138 140 +0 0 0 +235 237 171 +242 245 229 diff --git a/graphics/pokemon/pidgeot/mega/overworld_shiny.pal b/graphics/pokemon/pidgeot/mega/overworld_shiny.pal new file mode 100644 index 0000000000..69da1cc4ac --- /dev/null +++ b/graphics/pokemon/pidgeot/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +48 29 88 +76 70 27 +110 77 47 +149 91 50 +196 158 50 +211 208 87 +157 139 82 +184 176 99 +91 48 164 +126 59 215 +233 193 97 +224 226 155 +0 0 0 +235 237 171 +248 255 219 diff --git a/graphics/pokemon/pinsir/mega/overworld.png b/graphics/pokemon/pinsir/mega/overworld.png new file mode 100644 index 0000000000..1c851f84f2 Binary files /dev/null and b/graphics/pokemon/pinsir/mega/overworld.png differ diff --git a/graphics/pokemon/pinsir/mega/overworld_normal.pal b/graphics/pokemon/pinsir/mega/overworld_normal.pal new file mode 100644 index 0000000000..4a7eb110b8 --- /dev/null +++ b/graphics/pokemon/pinsir/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +48 48 48 +88 44 28 +80 64 48 +96 80 56 +120 104 80 +104 104 104 +142 64 34 +221 149 23 +152 128 96 +224 227 91 +144 144 144 +0 0 0 +192 192 208 +232 232 248 +221 149 23 diff --git a/graphics/pokemon/pinsir/mega/overworld_shiny.pal b/graphics/pokemon/pinsir/mega/overworld_shiny.pal new file mode 100644 index 0000000000..4b03f94e57 --- /dev/null +++ b/graphics/pokemon/pinsir/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +48 48 48 +88 44 28 +50 54 93 +62 60 118 +95 93 154 +134 134 93 +142 64 34 +74 135 51 +118 119 194 +131 227 91 +173 173 132 +0 0 0 +217 217 175 +232 232 248 +221 142 23 diff --git a/graphics/pokemon/rayquaza/mega/overworld.png b/graphics/pokemon/rayquaza/mega/overworld.png new file mode 100644 index 0000000000..09bd6792dc Binary files /dev/null and b/graphics/pokemon/rayquaza/mega/overworld.png differ diff --git a/graphics/pokemon/rayquaza/mega/overworld_normal.pal b/graphics/pokemon/rayquaza/mega/overworld_normal.pal new file mode 100644 index 0000000000..59daaaf12f --- /dev/null +++ b/graphics/pokemon/rayquaza/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +48 48 48 +88 16 8 +11 72 54 +63 74 65 +43 111 79 +164 75 24 +255 123 101 +74 150 114 +192 160 40 +240 200 48 +104 190 140 +231 153 184 +152 224 144 +0 0 0 +173 190 198 diff --git a/graphics/pokemon/rayquaza/mega/overworld_shiny.pal b/graphics/pokemon/rayquaza/mega/overworld_shiny.pal new file mode 100644 index 0000000000..82199ef8e0 --- /dev/null +++ b/graphics/pokemon/rayquaza/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +48 48 48 +88 16 8 +41 41 41 +63 74 65 +77 77 77 +148 40 39 +255 151 101 +112 112 112 +175 56 70 +255 89 89 +147 147 147 +231 153 184 +184 184 184 +0 0 0 +173 190 198 diff --git a/graphics/pokemon/sableye/mega/overworld.png b/graphics/pokemon/sableye/mega/overworld.png new file mode 100644 index 0000000000..0439ee4046 Binary files /dev/null and b/graphics/pokemon/sableye/mega/overworld.png differ diff --git a/graphics/pokemon/sableye/mega/overworld_normal.pal b/graphics/pokemon/sableye/mega/overworld_normal.pal new file mode 100644 index 0000000000..7479f563fc --- /dev/null +++ b/graphics/pokemon/sableye/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +64 48 104 +179 15 55 +192 56 56 +216 24 64 +227 56 103 +232 88 112 +24 152 120 +88 64 144 +120 96 176 +255 121 160 +255 150 181 +255 176 181 +144 128 216 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/sableye/mega/overworld_shiny.pal b/graphics/pokemon/sableye/mega/overworld_shiny.pal new file mode 100644 index 0000000000..3b03e34b92 --- /dev/null +++ b/graphics/pokemon/sableye/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +93 90 43 +12 148 31 +192 56 56 +19 187 47 +45 201 62 +232 88 112 +24 152 120 +144 141 64 +176 173 96 +98 255 111 +122 255 133 +145 255 172 +216 202 128 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/salamence/mega/overworld.png b/graphics/pokemon/salamence/mega/overworld.png new file mode 100644 index 0000000000..65e63e5029 Binary files /dev/null and b/graphics/pokemon/salamence/mega/overworld.png differ diff --git a/graphics/pokemon/salamence/mega/overworld_normal.pal b/graphics/pokemon/salamence/mega/overworld_normal.pal new file mode 100644 index 0000000000..2f27627493 --- /dev/null +++ b/graphics/pokemon/salamence/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +96 32 32 +56 56 64 +48 72 112 +160 64 64 +192 80 96 +216 88 120 +40 144 168 +80 184 200 +128 128 144 +160 160 176 +0 0 0 +152 200 208 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/salamence/mega/overworld_shiny.pal b/graphics/pokemon/salamence/mega/overworld_shiny.pal new file mode 100644 index 0000000000..2d9ae90a6b --- /dev/null +++ b/graphics/pokemon/salamence/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +74 48 24 +56 56 64 +40 88 40 +160 101 62 +193 114 78 +214 132 77 +48 168 64 +104 192 112 +128 128 144 +160 160 176 +0 0 0 +136 224 152 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/sceptile/mega/overworld.png b/graphics/pokemon/sceptile/mega/overworld.png new file mode 100644 index 0000000000..fa9b6409cb Binary files /dev/null and b/graphics/pokemon/sceptile/mega/overworld.png differ diff --git a/graphics/pokemon/sceptile/mega/overworld_normal.pal b/graphics/pokemon/sceptile/mega/overworld_normal.pal new file mode 100644 index 0000000000..79c68cf856 --- /dev/null +++ b/graphics/pokemon/sceptile/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +0 34 17 +104 24 24 +40 80 16 +10 69 59 +0 116 58 +120 104 24 +165 43 43 +136 68 0 +204 102 0 +80 144 48 +200 160 56 +128 176 72 +160 208 104 +248 216 88 +0 0 0 diff --git a/graphics/pokemon/sceptile/mega/overworld_shiny.pal b/graphics/pokemon/sceptile/mega/overworld_shiny.pal new file mode 100644 index 0000000000..0fa6a06d4b --- /dev/null +++ b/graphics/pokemon/sceptile/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +0 34 17 +124 77 3 +24 64 56 +10 69 59 +0 116 79 +120 104 24 +231 157 15 +136 68 0 +204 102 0 +72 120 112 +200 160 56 +96 152 128 +136 216 192 +206 53 49 +0 0 0 diff --git a/graphics/pokemon/scizor/mega/overworld.png b/graphics/pokemon/scizor/mega/overworld.png new file mode 100644 index 0000000000..1a72458fc7 Binary files /dev/null and b/graphics/pokemon/scizor/mega/overworld.png differ diff --git a/graphics/pokemon/scizor/mega/overworld_normal.pal b/graphics/pokemon/scizor/mega/overworld_normal.pal new file mode 100644 index 0000000000..d6c5a61f64 --- /dev/null +++ b/graphics/pokemon/scizor/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +27 32 44 +88 16 8 +40 48 64 +57 68 91 +80 88 112 +160 32 32 +208 56 56 +104 112 136 +58 128 152 +167 164 150 +144 152 176 +191 189 179 +0 0 0 +184 200 216 +232 232 248 diff --git a/graphics/pokemon/scizor/mega/overworld_shiny.pal b/graphics/pokemon/scizor/mega/overworld_shiny.pal new file mode 100644 index 0000000000..b3c240401a --- /dev/null +++ b/graphics/pokemon/scizor/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +12 64 33 +48 93 8 +36 118 56 +71 154 57 +80 88 112 +110 170 34 +150 219 59 +104 112 136 +58 128 152 +167 164 150 +144 152 176 +191 189 179 +0 0 0 +184 200 216 +232 232 248 diff --git a/graphics/pokemon/sharpedo/mega/overworld.png b/graphics/pokemon/sharpedo/mega/overworld.png new file mode 100644 index 0000000000..28409873c0 Binary files /dev/null and b/graphics/pokemon/sharpedo/mega/overworld.png differ diff --git a/graphics/pokemon/sharpedo/mega/overworld_normal.pal b/graphics/pokemon/sharpedo/mega/overworld_normal.pal new file mode 100644 index 0000000000..a6e3ea418e --- /dev/null +++ b/graphics/pokemon/sharpedo/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +112 24 48 +96 80 16 +60 69 78 +32 64 104 +192 88 112 +208 168 48 +248 208 80 +32 88 136 +64 112 160 +88 144 192 +128 136 144 +160 168 176 +0 0 0 +184 200 240 +232 232 248 diff --git a/graphics/pokemon/sharpedo/mega/overworld_shiny.pal b/graphics/pokemon/sharpedo/mega/overworld_shiny.pal new file mode 100644 index 0000000000..5fdd9eab63 --- /dev/null +++ b/graphics/pokemon/sharpedo/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +112 24 48 +96 80 16 +60 69 78 +104 32 92 +192 88 112 +208 168 48 +248 208 80 +136 32 129 +160 64 150 +192 88 185 +128 136 144 +160 168 176 +0 0 0 +184 200 240 +232 232 248 diff --git a/graphics/pokemon/slowbro/mega/overworld.png b/graphics/pokemon/slowbro/mega/overworld.png new file mode 100644 index 0000000000..1569737877 Binary files /dev/null and b/graphics/pokemon/slowbro/mega/overworld.png differ diff --git a/graphics/pokemon/slowbro/mega/overworld_normal.pal b/graphics/pokemon/slowbro/mega/overworld_normal.pal new file mode 100644 index 0000000000..f447c1383d --- /dev/null +++ b/graphics/pokemon/slowbro/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +34 34 34 +112 48 56 +68 68 68 +176 96 104 +216 192 88 +208 120 128 +152 152 152 +240 168 176 +0 0 0 +240 240 168 +192 200 208 +232 232 248 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/slowbro/mega/overworld_shiny.pal b/graphics/pokemon/slowbro/mega/overworld_shiny.pal new file mode 100644 index 0000000000..14445e3628 --- /dev/null +++ b/graphics/pokemon/slowbro/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +34 34 34 +75 48 112 +82 71 58 +132 96 176 +216 192 88 +149 121 187 +177 160 109 +200 168 240 +0 0 0 +240 240 168 +247 222 152 +232 232 248 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/steelix/mega/overworld.png b/graphics/pokemon/steelix/mega/overworld.png new file mode 100644 index 0000000000..d2c39bbd09 Binary files /dev/null and b/graphics/pokemon/steelix/mega/overworld.png differ diff --git a/graphics/pokemon/steelix/mega/overworld_normal.pal b/graphics/pokemon/steelix/mega/overworld_normal.pal new file mode 100644 index 0000000000..98d4f25b85 --- /dev/null +++ b/graphics/pokemon/steelix/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +55 56 59 +60 65 72 +96 105 118 +86 171 190 +150 162 178 +220 174 232 +182 195 214 +152 221 234 +0 0 0 +239 245 205 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/steelix/mega/overworld_shiny.pal b/graphics/pokemon/steelix/mega/overworld_shiny.pal new file mode 100644 index 0000000000..b319f73ee4 --- /dev/null +++ b/graphics/pokemon/steelix/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +55 56 59 +74 71 50 +131 126 83 +86 171 190 +202 193 116 +220 174 232 +223 218 157 +152 221 234 +0 0 0 +239 245 205 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/swampert/mega/overworld.png b/graphics/pokemon/swampert/mega/overworld.png new file mode 100644 index 0000000000..5c958759c0 Binary files /dev/null and b/graphics/pokemon/swampert/mega/overworld.png differ diff --git a/graphics/pokemon/swampert/mega/overworld_normal.pal b/graphics/pokemon/swampert/mega/overworld_normal.pal new file mode 100644 index 0000000000..b25f6a76d8 --- /dev/null +++ b/graphics/pokemon/swampert/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +28 36 40 +127 55 55 +48 64 72 +48 72 112 +67 78 90 +160 72 16 +167 71 71 +247 114 64 +240 128 16 +87 119 156 +74 156 210 +105 177 241 +0 0 0 +160 160 192 +200 200 224 diff --git a/graphics/pokemon/swampert/mega/overworld_shiny.pal b/graphics/pokemon/swampert/mega/overworld_shiny.pal new file mode 100644 index 0000000000..fda8f013c0 --- /dev/null +++ b/graphics/pokemon/swampert/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +136 245 178 +28 36 40 +127 55 55 +48 64 72 +127 55 129 +67 78 90 +160 72 16 +167 71 71 +247 114 64 +240 128 16 +103 117 133 +198 86 229 +234 121 249 +0 0 0 +160 160 192 +200 200 224 diff --git a/graphics/pokemon/tyranitar/mega/overworld.png b/graphics/pokemon/tyranitar/mega/overworld.png new file mode 100644 index 0000000000..9452e416be Binary files /dev/null and b/graphics/pokemon/tyranitar/mega/overworld.png differ diff --git a/graphics/pokemon/tyranitar/mega/overworld_normal.pal b/graphics/pokemon/tyranitar/mega/overworld_normal.pal new file mode 100644 index 0000000000..2c15c90a73 --- /dev/null +++ b/graphics/pokemon/tyranitar/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +32 40 40 +120 32 32 +40 72 48 +88 120 80 +184 48 48 +112 160 88 +136 184 104 +176 216 120 +120 136 144 +160 184 200 +0 0 0 +232 232 248 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tyranitar/mega/overworld_shiny.pal b/graphics/pokemon/tyranitar/mega/overworld_shiny.pal new file mode 100644 index 0000000000..c4a90c104c --- /dev/null +++ b/graphics/pokemon/tyranitar/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +34 42 42 +84 28 131 +74 65 43 +124 119 85 +143 93 186 +169 151 98 +191 164 113 +222 198 130 +126 143 152 +169 194 210 +0 0 0 +239 239 250 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/venusaur/mega/overworld.png b/graphics/pokemon/venusaur/mega/overworld.png new file mode 100644 index 0000000000..45ddccb401 Binary files /dev/null and b/graphics/pokemon/venusaur/mega/overworld.png differ diff --git a/graphics/pokemon/venusaur/mega/overworld_normal.pal b/graphics/pokemon/venusaur/mega/overworld_normal.pal new file mode 100644 index 0000000000..5092c7a73f --- /dev/null +++ b/graphics/pokemon/venusaur/mega/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +35 59 35 +104 32 40 +64 96 48 +144 64 32 +96 168 16 +64 152 96 +192 128 40 +136 224 32 +248 224 8 +232 192 112 +200 72 128 +240 120 160 +104 216 192 +0 0 0 +232 232 248 diff --git a/graphics/pokemon/venusaur/mega/overworld_shiny.pal b/graphics/pokemon/venusaur/mega/overworld_shiny.pal new file mode 100644 index 0000000000..938d061579 --- /dev/null +++ b/graphics/pokemon/venusaur/mega/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +179 226 255 +35 59 35 +104 77 32 +50 96 49 +144 64 32 +96 168 16 +135 152 64 +192 128 40 +136 224 32 +248 224 8 +232 192 112 +182 160 42 +240 219 120 +147 216 104 +0 0 0 +232 232 248 diff --git a/include/battle.h b/include/battle.h index 5e435a9a5b..f43659020f 100644 --- a/include/battle.h +++ b/include/battle.h @@ -17,6 +17,7 @@ #include "battle_dynamax.h" #include "battle_terastal.h" #include "battle_gimmick.h" +#include "generational_changes.h" #include "move.h" #include "random.h" // for rng_value_t #include "trainer_slide.h" @@ -128,7 +129,7 @@ struct DisableStruct u16 overwrittenAbility; // abilities overwritten during battle (keep separate from battle history in case of switching) u8 boosterEnergyActivates:1; u8 roostActive:1; - u8 unbrudenActive:1; + u8 unburdenActive:1; u8 startEmergencyExit:1; u8 neutralizingGas:1; u8 iceFaceActivationPrevention:1; // fixes hit escape move edge case @@ -238,49 +239,49 @@ struct SpecialStatus struct SideTimer { - u8 reflectTimer; + u16 reflectTimer; u8 reflectBattlerId; - u8 lightscreenTimer; + u16 lightscreenTimer; u8 lightscreenBattlerId; - u8 mistTimer; + u16 mistTimer; u8 mistBattlerId; - u8 safeguardTimer; + u16 safeguardTimer; u8 safeguardBattlerId; - u8 spikesAmount; - u8 toxicSpikesAmount; - u8 stealthRockAmount; - u8 stickyWebAmount; + u16 spikesAmount; // debug menu complains. might be better to solve there instead if possible + u16 toxicSpikesAmount; + u16 stealthRockAmount; + u16 stickyWebAmount; u8 stickyWebBattlerId; u8 stickyWebBattlerSide; // Used for Court Change - u8 auroraVeilTimer; + u16 auroraVeilTimer; u8 auroraVeilBattlerId; - u8 tailwindTimer; + u16 tailwindTimer; u8 tailwindBattlerId; - u8 luckyChantTimer; + u16 luckyChantTimer; u8 luckyChantBattlerId; - u8 steelsurgeAmount; + u16 steelsurgeAmount; // Timers below this point are not swapped by Court Change - u8 followmeTimer; + u16 followmeTimer; u8 followmeTarget:3; u8 followmePowder:1; // Rage powder, does not affect grass type pokemon. - u8 retaliateTimer; - u8 damageNonTypesTimer; + u16 retaliateTimer; + u16 damageNonTypesTimer; u8 damageNonTypesType; - u8 rainbowTimer; - u8 seaOfFireTimer; - u8 swampTimer; + u16 rainbowTimer; + u16 seaOfFireTimer; + u16 swampTimer; }; struct FieldTimer { - u8 mudSportTimer; - u8 waterSportTimer; - u8 wonderRoomTimer; - u8 magicRoomTimer; - u8 trickRoomTimer; - u8 terrainTimer; - u8 gravityTimer; - u8 fairyLockTimer; + u16 mudSportTimer; + u16 waterSportTimer; + u16 wonderRoomTimer; + u16 magicRoomTimer; + u16 trickRoomTimer; + u16 terrainTimer; + u16 gravityTimer; + u16 fairyLockTimer; }; struct WishFutureKnock @@ -289,7 +290,7 @@ struct WishFutureKnock u8 futureSightBattlerIndex[MAX_BATTLERS_COUNT]; u8 futureSightPartyIndex[MAX_BATTLERS_COUNT]; u16 futureSightMove[MAX_BATTLERS_COUNT]; - u8 wishCounter[MAX_BATTLERS_COUNT]; + u16 wishCounter[MAX_BATTLERS_COUNT]; u8 wishPartyId[MAX_BATTLERS_COUNT]; u8 weatherDuration; u8 knockedOffMons[NUM_BATTLE_SIDES]; // Each battler is represented by a bit. @@ -350,7 +351,7 @@ struct AiLogicData u16 partnerMove; u16 speedStats[MAX_BATTLERS_COUNT]; // Speed stats for all battles, calculated only once, same way as damages struct SimulatedDamage 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 + uq4_12_t effectiveness[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex u8 moveAccuracy[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex u8 moveLimitations[MAX_BATTLERS_COUNT]; u8 monToSwitchInId[MAX_BATTLERS_COUNT]; // ID of the mon to switch in. @@ -685,7 +686,6 @@ struct BattleStruct u8 safariCatchFactor; u8 linkBattleVsSpriteId_V; // The letter "V" u8 linkBattleVsSpriteId_S; // The letter "S" - u8 formToChangeInto; u8 chosenMovePositions[MAX_BATTLERS_COUNT]; u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT]; u8 prevSelectedPartySlot; @@ -783,6 +783,7 @@ struct BattleStruct u8 ballSwapped:1; // Used for the last used ball feature u8 throwingPokeBall:1; u8 ballSpriteIds[2]; // item gfx, window gfx + u8 moveInfoSpriteId; // move info, window gfx 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. // When using a move which hits multiple opponents which is then bounced by a target, we need to make sure, the move hits both opponents, the one with bounce, and the one without. @@ -806,8 +807,6 @@ struct BattleStruct u8 dauntlessShieldBoost[NUM_BATTLE_SIDES]; u8 supersweetSyrup[NUM_BATTLE_SIDES]; u8 supremeOverlordCounter[MAX_BATTLERS_COUNT]; - u8 quickClawRandom[MAX_BATTLERS_COUNT]; - u8 quickDrawRandom[MAX_BATTLERS_COUNT]; u8 shellSideArmCategory[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; u8 speedTieBreaks; // MAX_BATTLERS_COUNT! values. u8 categoryOverride; // for Z-Moves and Max Moves @@ -820,6 +819,7 @@ struct BattleStruct u8 pursuitSwitchByMove:1; u8 pursuitStoredSwitch; // Stored id for the Pursuit target's switch s32 battlerExpReward; + u16 prevTurnSpecies[MAX_BATTLERS_COUNT]; // Stores species the AI has in play at start of turn // Simultaneous hp reduction for spread moves s32 moveDamage[MAX_BATTLERS_COUNT]; @@ -1169,6 +1169,7 @@ extern u16 gBattleMovePower; extern u16 gMoveToLearn; extern u32 gFieldStatuses; extern struct FieldTimer gFieldTimers; +extern u16 gBattleTurnCounter; extern u8 gBattlerAbility; extern struct QueuedStatBoost gQueuedStatBoosts[MAX_BATTLERS_COUNT]; @@ -1187,6 +1188,18 @@ extern bool8 gLastUsedBallMenuPresent; extern u8 gPartyCriticalHits[PARTY_SIZE]; extern u8 gCategoryIconSpriteId; +static inline bool32 IsBattlerAlive(u32 battler) +{ + if (gBattleMons[battler].hp == 0) + return FALSE; + else if (battler >= gBattlersCount) + return FALSE; + else if (gAbsentBattlerFlags & (1u << battler)) + return FALSE; + else + return TRUE; +} + static inline bool32 IsBattlerTurnDamaged(u32 battler) { return gSpecialStatuses[battler].physicalDmg != 0 @@ -1204,11 +1217,42 @@ static inline u32 GetBattlerPosition(u32 battler) return gBattlerPositions[battler]; } +static inline u32 GetBattlerAtPosition(u32 position) +{ + u32 battler; + for (battler = 0; battler < gBattlersCount; battler++) + { + if (GetBattlerPosition(battler) == position) + break; + } + return battler; +} + +static inline u32 GetPartnerBattler(u32 battler) +{ + return GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); +} + +static inline u32 GetOppositeBattler(u32 battler) +{ + return GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); +} + static inline u32 GetBattlerSide(u32 battler) { return GetBattlerPosition(battler) & BIT_SIDE; } +static inline bool32 IsBattlerAlly(u32 battlerAtk, u32 battlerDef) +{ + return (GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef)); +} + +static inline u32 GetOpposingSideBattler(u32 battler) +{ + return GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerSide(battler))); +} + static inline struct Pokemon* GetPartyBattlerData(u32 battler) { u32 index = gBattlerPartyIndexes[battler]; @@ -1249,10 +1293,5 @@ static inline bool32 IsBattlerInvalidForSpreadMove(u32 battlerAtk, u32 battlerDe || (battlerDef == BATTLE_PARTNER(battlerAtk) && (moveTarget == MOVE_TARGET_BOTH)); } -static inline bool32 MoveResultHasEffect(u32 battler) -{ - return !(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT); -} - #endif // GUARD_BATTLE_H diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h index 3617be910f..b21b20751d 100644 --- a/include/battle_ai_main.h +++ b/include/battle_ai_main.h @@ -35,7 +35,7 @@ typedef s32 (*AiScoreFunc)(u32, u32, u32, s32); #define POWERFUL_STATUS_MOVE 10 // Moves with this score will be chosen over a move that faints target #define NO_DAMAGE_OR_FAILS -20 // Move fails or does no damage -// Scores given in AI_CalcMoveEffectScore +// Scores given in AI_CalcMoveEffectScore and AI_CalcHoldEffectMoveScore #define NO_INCREASE 0 #define WEAK_EFFECT 1 #define DECENT_EFFECT 2 @@ -57,21 +57,30 @@ typedef s32 (*AiScoreFunc)(u32, u32, u32, s32); #define SET_SCORE(battler, movesetIndex, val) \ do \ { \ - TestRunner_Battle_AISetScore(__FILE__, __LINE__, battler, movesetIndex, val); \ + if (TESTING) \ + { \ + TestRunner_Battle_AISetScore(__FILE__, __LINE__, battler, movesetIndex, val); \ + } \ AI_THINKING_STRUCT->score[movesetIndex] = val; \ } while (0) \ #define ADJUST_SCORE(val) \ do \ { \ - TestRunner_Battle_AIAdjustScore(__FILE__, __LINE__, sBattler_AI, AI_THINKING_STRUCT->movesetIndex, val); \ + if (TESTING) \ + { \ + TestRunner_Battle_AIAdjustScore(__FILE__, __LINE__, battlerAtk, AI_THINKING_STRUCT->movesetIndex, val); \ + } \ score += val; \ } while (0) \ #define ADJUST_AND_RETURN_SCORE(val) \ do \ { \ - TestRunner_Battle_AIAdjustScore(__FILE__, __LINE__, sBattler_AI, AI_THINKING_STRUCT->movesetIndex, val); \ + if (TESTING) \ + { \ + TestRunner_Battle_AIAdjustScore(__FILE__, __LINE__, battlerAtk, AI_THINKING_STRUCT->movesetIndex, val); \ + } \ score += val; \ return score; \ } while (0) \ @@ -79,7 +88,10 @@ typedef s32 (*AiScoreFunc)(u32, u32, u32, s32); #define ADJUST_SCORE_PTR(val) \ do \ { \ - TestRunner_Battle_AIAdjustScore(__FILE__, __LINE__, sBattler_AI, AI_THINKING_STRUCT->movesetIndex, val); \ + if (TESTING) \ + { \ + TestRunner_Battle_AIAdjustScore(__FILE__, __LINE__, battlerAtk, AI_THINKING_STRUCT->movesetIndex, val); \ + } \ (*score) += val; \ } while (0) \ @@ -98,13 +110,11 @@ typedef s32 (*AiScoreFunc)(u32, u32, u32, s32); void BattleAI_SetupItems(void); void BattleAI_SetupFlags(void); void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler); -u32 BattleAI_ChooseMoveOrAction(void); +u32 BattleAI_ChooseMoveOrAction(u32 battler); void Ai_InitPartyStruct(void); void Ai_UpdateSwitchInData(u32 battler); void Ai_UpdateFaintData(u32 battler); void SetAiLogicDataForTurn(struct AiLogicData *aiData); void ResetDynamicAiFunc(void); -extern u8 sBattler_AI; - #endif // GUARD_BATTLE_AI_MAIN_H diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index 28eb318b2f..f6cabcc684 100644 --- a/include/battle_ai_switch_items.h +++ b/include/battle_ai_switch_items.h @@ -1,9 +1,48 @@ #ifndef GUARD_BATTLE_AI_SWITCH_ITEMS_H #define GUARD_BATTLE_AI_SWITCH_ITEMS_H +enum ShouldSwitchScenario +{ + SHOULD_SWITCH_WONDER_GUARD, + SHOULD_SWITCH_ABSORBS_MOVE, + SHOULD_SWITCH_TRAPPER, + SHOULD_SWITCH_FREE_TURN, + SHOULD_SWITCH_TRUANT, + SHOULD_SWITCH_ALL_MOVES_BAD, + SHOULD_SWITCH_PERISH_SONG, + SHOULD_SWITCH_YAWN, + SHOULD_SWITCH_BADLY_POISONED, + SHOULD_SWITCH_BADLY_POISONED_STATS_RAISED, + SHOULD_SWITCH_CURSED, + SHOULD_SWITCH_CURSED_STATS_RAISED, + SHOULD_SWITCH_NIGHTMARE, + SHOULD_SWITCH_NIGHTMARE_STATS_RAISED, + SHOULD_SWITCH_SEEDED, + SHOULD_SWITCH_SEEDED_STATS_RAISED, + SHOULD_SWITCH_INFATUATION, + SHOULD_SWITCH_HASBADODDS, + SHOULD_SWITCH_NATURAL_CURE_STRONG, + SHOULD_SWITCH_NATURAL_CURE_STRONG_STATS_RAISED, + SHOULD_SWITCH_NATURAL_CURE_WEAK, + SHOULD_SWITCH_NATURAL_CURE_WEAK_STATS_RAISED, + SHOULD_SWITCH_REGENERATOR, + SHOULD_SWITCH_REGENERATOR_STATS_RAISED, + SHOULD_SWITCH_ENCORE_STATUS, + SHOULD_SWITCH_ENCORE_DAMAGE, + SHOULD_SWITCH_CHOICE_LOCKED, + SHOULD_SWITCH_ATTACKING_STAT_MINUS_TWO, + SHOULD_SWITCH_ATTACKING_STAT_MINUS_THREE_PLUS, +}; + +enum SwitchType +{ + SWITCH_AFTER_KO, + SWITCH_MID_BATTLE, +}; + void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId); void AI_TrySwitchOrUseItem(u32 battler); -u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd); +u32 GetMostSuitableMonToSwitchInto(u32 battler, enum SwitchType switchType); bool32 ShouldSwitch(u32 battler); bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2); diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 552faa1306..6ea9660168 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -56,8 +56,8 @@ bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits) bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dmgMod); s32 AI_DecideKnownAbilityForTurn(u32 battlerId); u32 AI_DecideHoldEffectForTurn(u32 battlerId); -bool32 DoesBattlerIgnoreAbilityChecks(u32 atkAbility, u32 move); -u32 AI_GetWeather(struct AiLogicData *aiData); +bool32 DoesBattlerIgnoreAbilityChecks(u32 battlerAtk, u32 atkAbility, u32 move); +u32 AI_GetWeather(void); bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits); bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, u32 numHits); bool32 HasDamagingMove(u32 battlerId); @@ -84,7 +84,7 @@ u32 AI_GetBattlerAbility(u32 battler); // stat stage checks bool32 AnyStatIsRaised(u32 battlerId); -bool32 ShouldLowerStat(u32 battler, u32 battlerAbility, u32 stat); +bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 battlerAbility, u32 stat); bool32 BattlerStatCanRise(u32 battler, u32 battlerAbility, u32 stat); bool32 AreBattlersStatsMaxed(u32 battler); u32 CountPositiveStatStages(u32 battlerId); @@ -101,15 +101,14 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility); bool32 IsAffectedByPowder(u32 battler, u32 ability, u32 holdEffect); bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category); s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo); -struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType); -struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType); +struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType); +struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType); bool32 AI_IsDamagedByRecoil(u32 battler); u32 GetNoOfHitsToKO(u32 dmg, s32 hp); u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef); u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex); u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef); -uq4_12_t AI_GetTypeEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef); -u32 AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef); +uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef); u16 *GetMovesArray(u32 battler); bool32 IsConfusionMoveEffect(u32 moveEffect); bool32 HasMove(u32 battlerId, u32 move); @@ -126,7 +125,7 @@ bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool bool32 HasAnyKnownMove(u32 battlerId); bool32 IsAromaVeilProtectedEffect(u32 moveEffect); bool32 IsNonVolatileStatusMoveEffect(u32 moveEffect); -bool32 IsMoveRedirectionPrevented(u32 move, u32 atkAbility); +bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, u32 atkAbility); bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move); bool32 IsHazardMoveEffect(u32 moveEffect); bool32 IsTwoTurnNotSemiInvulnerableMove(u32 battlerAtk, u32 move); diff --git a/include/battle_anim.h b/include/battle_anim.h index ef933a1c08..ce94f667e3 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -165,7 +165,6 @@ void Trade_MoveSelectedMonToTarget(struct Sprite *sprite); void DestroyAnimVisualTaskAndDisableBlend(u8 taskId); void DestroySpriteAndFreeResources_(struct Sprite *sprite); void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId); -u8 GetBattlerAtPosition(u8 position); void ConvertPosDataToTranslateLinearData(struct Sprite *sprite); void InitAnimFastLinearTranslationWithSpeedAndPos(struct Sprite *sprite); @@ -267,6 +266,7 @@ void AnimConversion(struct Sprite *sprite); void AnimCuttingSlice(struct Sprite *sprite); void AnimThoughtBubble(struct Sprite *sprite); void AnimTranslateLinearSingleSineWave(struct Sprite *sprite); +void AnimTeraStarstormStars(struct Sprite *sprite); void AnimGrantingStars(struct Sprite *sprite); void AnimFollowMeFinger(struct Sprite *sprite); extern const union AnimCmd *const gRazorLeafParticleAnimTable[]; diff --git a/include/battle_dynamax.h b/include/battle_dynamax.h index 9957c37a10..0762601c89 100644 --- a/include/battle_dynamax.h +++ b/include/battle_dynamax.h @@ -3,59 +3,6 @@ #define DYNAMAX_TURNS_COUNT 3 -enum MaxMoveEffect -{ - MAX_EFFECT_NONE, - MAX_EFFECT_RAISE_TEAM_ATTACK, - MAX_EFFECT_RAISE_TEAM_DEFENSE, - MAX_EFFECT_RAISE_TEAM_SPEED, - MAX_EFFECT_RAISE_TEAM_SP_ATK, - MAX_EFFECT_RAISE_TEAM_SP_DEF, - MAX_EFFECT_LOWER_ATTACK, - MAX_EFFECT_LOWER_DEFENSE, - MAX_EFFECT_LOWER_SPEED, - MAX_EFFECT_LOWER_SP_ATK, - MAX_EFFECT_LOWER_SP_DEF, - MAX_EFFECT_SUN, - MAX_EFFECT_RAIN, - MAX_EFFECT_SANDSTORM, - MAX_EFFECT_HAIL, - MAX_EFFECT_MISTY_TERRAIN, - MAX_EFFECT_GRASSY_TERRAIN, - MAX_EFFECT_ELECTRIC_TERRAIN, - MAX_EFFECT_PSYCHIC_TERRAIN, - MAX_EFFECT_VINE_LASH, - MAX_EFFECT_WILDFIRE, - MAX_EFFECT_CANNONADE, - MAX_EFFECT_EFFECT_SPORE_FOES, - MAX_EFFECT_PARALYZE_FOES, - MAX_EFFECT_CONFUSE_FOES_PAY_DAY, - MAX_EFFECT_CRIT_PLUS, - MAX_EFFECT_MEAN_LOOK, - MAX_EFFECT_AURORA_VEIL, - MAX_EFFECT_INFATUATE_FOES, - MAX_EFFECT_RECYCLE_BERRIES, - MAX_EFFECT_POISON_FOES, - MAX_EFFECT_STEALTH_ROCK, - MAX_EFFECT_DEFOG, - MAX_EFFECT_POISON_PARALYZE_FOES, - MAX_EFFECT_HEAL_TEAM, - MAX_EFFECT_SPITE, - MAX_EFFECT_GRAVITY, - MAX_EFFECT_VOLCALITH, - MAX_EFFECT_SANDBLAST_FOES, - MAX_EFFECT_YAWN_FOE, - MAX_EFFECT_LOWER_EVASIVENESS_FOES, - MAX_EFFECT_AROMATHERAPY, - MAX_EFFECT_CONFUSE_FOES, - MAX_EFFECT_STEELSURGE, - MAX_EFFECT_TORMENT_FOES, - MAX_EFFECT_LOWER_SPEED_2_FOES, - MAX_EFFECT_FIRE_SPIN_FOES, - MAX_EFFECT_FIXED_POWER, - MAX_EFFECT_BYPASS_PROTECT, -}; - bool32 CanDynamax(u32 battler); bool32 IsGigantamaxed(u32 battler); void ApplyDynamaxHPMultiplier(struct Pokemon* mon); @@ -67,12 +14,11 @@ bool32 IsMoveBlockedByMaxGuard(u32 move); bool32 IsMoveBlockedByDynamax(u32 move); u16 GetMaxMove(u32 battler, u32 baseMove); -u8 GetMaxMovePower(u32 move); +u32 GetMaxMovePower(u32 move); bool32 IsMaxMove(u32 move); void ChooseDamageNonTypesString(u8 type); void BS_UpdateDynamax(void); -void BS_SetMaxMoveEffect(void); void BS_SetSteelsurge(void); void BS_TrySetStatus1(void); void BS_TrySetStatus2(void); diff --git a/include/battle_interface.h b/include/battle_interface.h index 3280826ff7..600a9a956d 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -128,5 +128,7 @@ void SwapBallToDisplay(bool32 sameBall); void ArrowsChangeColorLastBallCycle(bool32 showArrows); void UpdateAbilityPopup(u8 battlerId); void CategoryIcons_LoadSpritesGfx(void); +void TryToAddMoveInfoWindow(void); +void TryToHideMoveInfoWindow(void); #endif // GUARD_BATTLE_INTERFACE_H diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index 7326647d41..72f3773fdd 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -22,8 +22,7 @@ struct PickupItem u8 percentage[10]; }; -s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk); -s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility); +s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk); s32 GetCritHitOdds(s32 critChanceIndex); u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect); u8 GetBattlerTurnOrderNum(u8 battlerId); @@ -42,9 +41,9 @@ 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); +u32 IsLeafGuardProtected(u32 battler, u32 ability); +bool32 IsShieldsDownProtected(u32 battler, u32 ability); +u32 IsAbilityStatusProtected(u32 battler, u32 ability); bool32 TryResetBattlerStatChanges(u8 battler); bool32 CanCamouflage(u8 battlerId); u32 GetNaturePowerMove(u32 battler); diff --git a/include/battle_scripts.h b/include/battle_scripts.h index f4cfab02ee..ffa18d0343 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -337,7 +337,7 @@ 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_EffectSpectralThief[]; extern const u8 BattleScript_StatUpMsg[]; extern const u8 BattleScript_AbilityRaisesDefenderStat[]; extern const u8 BattleScript_PowderMoveNoEffect[]; @@ -543,12 +543,17 @@ extern const u8 BattleScript_EffectAuroraVeilSuccess[]; extern const u8 BattleScript_EffectGravitySuccess[]; extern const u8 BattleScript_EffectYawnSuccess[]; extern const u8 BattleScript_EffectTryReducePP[]; -extern const u8 BattleScript_EffectStatus1Foes[]; -extern const u8 BattleScript_EffectStatus2Foes[]; +extern const u8 BattleScript_EffectParalyzeSide[]; +extern const u8 BattleScript_EffectPoisonSide[]; +extern const u8 BattleScript_EffectPoisonParalyzeSide[]; +extern const u8 BattleScript_EffectEffectSporeSide[]; +extern const u8 BattleScript_EffectConfuseSide[]; +extern const u8 BattleScript_EffectInfatuateSide[]; +extern const u8 BattleScript_EffectTormentSide[]; +extern const u8 BattleScript_EffectMeanLookSide[]; extern const u8 BattleScript_TormentEnds[]; extern const u8 BattleScript_EffectRaiseCritAlliesAnim[]; extern const u8 BattleScript_EffectHealOneSixthAllies[]; -extern const u8 BattleScript_EffectCureStatusAllies[]; extern const u8 BattleScript_EffectRecycleBerriesAllies[]; extern const u8 BattleScript_RemoveGenericType[]; @@ -638,6 +643,7 @@ extern const u8 BattleScript_EffectSleepTalk[]; extern const u8 BattleScript_EffectDestinyBond[]; extern const u8 BattleScript_EffectSpite[]; extern const u8 BattleScript_EffectHealBell[]; +extern const u8 BattleScript_EffectHealBell_FromHeal[]; extern const u8 BattleScript_EffectMeanLook[]; extern const u8 BattleScript_EffectNightmare[]; extern const u8 BattleScript_EffectMinimize[]; @@ -770,7 +776,10 @@ extern const u8 BattleScript_EffectDefenseUp3[]; extern const u8 BattleScript_EffectNobleRoar[]; extern const u8 BattleScript_EffectVenomDrench[]; extern const u8 BattleScript_EffectToxicThread[]; -extern const u8 BattleScript_EffectHitSwitchTarget[]; +extern const u8 BattleScript_TryHitSwitchTarget[]; +extern const u8 BattleScript_HitSwitchTargetDynamaxed[]; +extern const u8 BattleScript_AbilityPreventsPhasingOutRet[]; +extern const u8 BattleScript_PrintMonIsRootedRet[]; extern const u8 BattleScript_EffectFinalGambit[]; extern const u8 BattleScript_EffectAutotomize[]; extern const u8 BattleScript_EffectCopycat[]; @@ -813,11 +822,10 @@ extern const u8 BattleScript_MoveEffectLightScreen[]; extern const u8 BattleScript_MoveEffectReflect[]; extern const u8 BattleScript_MoveEffectLeechSeed[]; extern const u8 BattleScript_MoveEffectHaze[]; -extern const u8 BattleScript_EffectSparklySwirl[]; extern const u8 BattleScript_MoveEffectIonDeluge[]; extern const u8 BattleScript_EffectHyperspaceFury[]; extern const u8 BattleScript_EffectAuraWheel[]; -extern const u8 BattleScript_EffectPhotonGeyser[]; +extern const u8 BattleScript_EffectDynamicCategory[]; extern const u8 BattleScript_EffectNoRetreat[]; extern const u8 BattleScript_EffectTarShot[]; extern const u8 BattleScript_EffectPoltergeist[]; diff --git a/include/battle_setup.h b/include/battle_setup.h index a2009eea41..f8eda0d8dc 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -12,12 +12,43 @@ struct RematchTrainer u16 mapNum; }; +/* +the layout of the first byte can be confusing here +isDoubleBattle is the least lsb. msb is in the mode. +*/ +typedef union PACKED TrainerBattleParameter +{ + struct PACKED _TrainerBattleParameter + { + u8 isDoubleBattle:1; + u8 isRematch:1; + u8 playMusicA:1; + u8 playMusicB:1; + u8 mode:4; + u8 objEventLocalIdA; + u16 opponentA; + u8 *introTextA; + u8 *defeatTextA; + u8 *battleScriptRetAddrA; + u8 objEventLocalIdB; + u16 opponentB; + u8 *introTextB; + u8 *defeatTextB; + u8 *battleScriptRetAddrB; + u8 *victoryText; + u8 *cannotBattleText; + } params; + u8 data[sizeof(struct _TrainerBattleParameter)]; +} TrainerBattleParameter; + + extern const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES]; -extern u16 gTrainerBattleOpponent_A; -extern u16 gTrainerBattleOpponent_B; +extern TrainerBattleParameter gTrainerBattleParameter; extern u16 gPartnerTrainerId; +#define TRAINER_BATTLE_PARAM gTrainerBattleParameter.params + void BattleSetup_StartWildBattle(void); void BattleSetup_StartDoubleWildBattle(void); void BattleSetup_StartBattlePikeWildBattle(void); @@ -35,7 +66,8 @@ u8 GetTrainerBattleTransition(void); u8 GetSpecialBattleTransition(s32 id); void ChooseStarter(void); void ResetTrainerOpponentIds(void); -void SetMapVarsToTrainer(void); +void SetMapVarsToTrainerA(void); +void SetMapVarsToTrainerB(void); const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data); void ConfigureAndSetUpOneTrainerBattle(u8 trainerObjEventId, const u8 *trainerScript); void ConfigureTwoTrainersBattle(u8 trainerObjEventId, const u8 *trainerScript); @@ -67,6 +99,10 @@ bool8 ShouldTryRematchBattle(void); bool8 IsTrainerReadyForRematch(void); void ShouldTryGetTrainerScript(void); u16 CountBattledRematchTeams(u16 trainerId); +void TrainerBattleLoadArgs(const u8 *data); +void TrainerBattleLoadArgsTrainerA(const u8 *data); +void TrainerBattleLoadArgsTrainerB(const u8 *data); +void TrainerBattleLoadArgsSecondTrainer(const u8 *data); void DoStandardWildBattle_Debug(void); void BattleSetup_StartTrainerBattle_Debug(void); diff --git a/include/battle_util.h b/include/battle_util.h index 0dd0d9ce81..eeb3f89135 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -22,13 +22,10 @@ #define MOVE_LIMITATION_PLACEHOLDER (1 << 15) #define MOVE_LIMITATIONS_ALL 0xFFFF -enum MoveBlocked +enum AbilityEffectOptions { - MOVE_BLOCKED_BY_NO_ABILITY, - MOVE_BLOCKED_BY_SOUNDPROOF_OR_BULLETPROOF, - MOVE_BLOCKED_BY_DAZZLING, - MOVE_BLOCKED_BY_PARTNER_DAZZLING, - MOVE_BLOCKED_BY_GOOD_AS_GOLD, + ABILITY_CHECK_TRIGGER, + ABILITY_RUN_SCRIPT, }; enum MoveAbsorbed @@ -216,9 +213,8 @@ u32 AtkCanceller_MoveSuccessOrder(void); void SetAtkCancellerForCalledMove(void); bool32 HasNoMonsToSwitch(u32 battler, u8 r1, u8 r2); bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, bool32 viaAbility); -u32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef); -u32 CanPartnerAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef); -u32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 move, u32 moveType); +bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef, enum AbilityEffectOptions option); +bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 move, u32 moveType, enum AbilityEffectOptions option); u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg); bool32 TryPrimalReversion(u32 battler); bool32 IsNeutralizingGasOnField(void); @@ -245,7 +241,6 @@ u32 GetBattlerHoldEffectInternal(u32 battler, bool32 checkNegating, bool32 check u32 GetBattlerHoldEffectParam(u32 battler); bool32 IsMoveMakingContact(u32 move, u32 battlerAtk); bool32 IsBattlerGrounded(u32 battler); -bool32 IsBattlerAlive(u32 battler); u32 GetMoveSlot(u16 *moves, u32 move); u32 GetBattlerWeight(u32 battler); u32 CalcRolloutBasePower(u32 battlerAtk, u32 basePower, u32 rolloutTimer); diff --git a/include/config/ai.h b/include/config/ai.h new file mode 100644 index 0000000000..48205b733e --- /dev/null +++ b/include/config/ai.h @@ -0,0 +1,52 @@ +#ifndef GUARD_CONFIG_AI_H +#define GUARD_CONFIG_AI_H + +// For the details on what specific factors the switching functions are considering, go read the corresponding function inside ShouldSwitch in src/battle_ai_switch_items.c +// These configuration options control how likely the AI is to switch if it determines that a switch meets all of its criteria +// Think of them almost like success rates; if the AI has determined that it needs to switch out to hit Wonder Guard, how often do you want it to actually take that course of action? Etc. + +// AI switch chances; if you want more complex behaviour, modify GetSwitchChance +#define SHOULD_SWITCH_WONDER_GUARD_PERCENTAGE 100 +#define SHOULD_SWITCH_TRUANT_PERCENTAGE 100 +#define SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE 100 + +// AI smart switching chances; if you want more complex behaviour, modify GetSwitchChance +#define SHOULD_SWITCH_ABSORBS_MOVE_PERCENTAGE 100 +#define SHOULD_SWITCH_TRAPPER_PERCENTAGE 100 +#define SHOULD_SWITCH_FREE_TURN_PERCENTAGE 100 +#define STAY_IN_ABSORBING_PERCENTAGE 66 // Chance to stay in if outgoing mon has super effective move against player, will prevent switching out for an absorber with this likelihood +#define SHOULD_SWITCH_HASBADODDS_PERCENTAGE 50 +#define SHOULD_SWITCH_ENCORE_STATUS_PERCENTAGE 100 +#define SHOULD_SWITCH_ENCORE_DAMAGE_PERCENTAGE 50 +#define SHOULD_SWITCH_CHOICE_LOCKED_PERCENTAGE 100 // Only if locked into status move +#define SHOULD_SWITCH_ATTACKING_STAT_MINUS_TWO_PERCENTAGE 50 +#define SHOULD_SWITCH_ATTACKING_STAT_MINUS_THREE_PLUS_PERCENTAGE 100 + +// AI smart switching chances for bad statuses +#define SHOULD_SWITCH_PERISH_SONG_PERCENTAGE 100 +#define SHOULD_SWITCH_YAWN_PERCENTAGE 100 +#define SHOULD_SWITCH_BADLY_POISONED_PERCENTAGE 50 +#define SHOULD_SWITCH_BADLY_POISONED_STATS_RAISED_PERCENTAGE 20 +#define SHOULD_SWITCH_CURSED_PERCENTAGE 50 +#define SHOULD_SWITCH_CURSED_STATS_RAISED_PERCENTAGE 20 +#define SHOULD_SWITCH_NIGHTMARE_PERCENTAGE 33 +#define SHOULD_SWITCH_NIGHTMARE_STATS_RAISED_PERCENTAGE 15 +#define SHOULD_SWITCH_SEEDED_PERCENTAGE 25 +#define SHOULD_SWITCH_SEEDED_STATS_RAISED_PERCENTAGE 10 +#define SHOULD_SWITCH_INFATUATION_PERCENTAGE 100 + +// AI smart switching chances for beneficial abilities +#define SHOULD_SWITCH_NATURAL_CURE_STRONG_PERCENTAGE 66 +#define SHOULD_SWITCH_NATURAL_CURE_STRONG_STATS_RAISED_PERCENTAGE 10 +#define SHOULD_SWITCH_NATURAL_CURE_WEAK_PERCENTAGE 25 +#define SHOULD_SWITCH_NATURAL_CURE_WEAK_STATS_RAISED_PERCENTAGE 10 +#define SHOULD_SWITCH_REGENERATOR_PERCENTAGE 50 +#define SHOULD_SWITCH_REGENERATOR_STATS_RAISED_PERCENTAGE 20 + +// AI held item-based move scoring +#define BLUNDER_POLICY_ACCURACY_THRESHOLD 75 // Moves with accuracy equal below this value are prioritized when holding Blunder Policy + +// AI prediction chances +#define PREDICT_SWITCH_CHANCE 50 + +#endif // GUARD_CONFIG_AI_H diff --git a/include/config/battle.h b/include/config/battle.h index 27e13e3d1c..bacdc770d9 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -89,6 +89,7 @@ #define B_CHARGE_SPDEF_RAISE GEN_LATEST // In Gen5+, Charge raises the user's Special Defense by 1 stage. #define B_MINIMIZE_EVASION GEN_LATEST // In Gen5+, Minimize raises evasion by 2 stages instead of 1. #define B_GROWTH_STAT_RAISE GEN_LATEST // 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. +#define B_FOCUS_ENERGY_CRIT_RATIO GEN_LATEST // In Gen3+, Focus Energy increases critical hit ratio by 2 instead of 1. // Other move settings #define B_INCINERATE_GEMS GEN_LATEST // In Gen6+, Incinerate can destroy Gems. @@ -250,6 +251,8 @@ #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. #define B_LAST_USED_BALL_CYCLE TRUE // If TRUE, then holding B_LAST_USED_BALL_BUTTON while pressing the D-Pad cycles through the balls +#define B_CATCH_SWAP_INTO_PARTY GEN_LATEST // In Gen 7+, the option to swap the caught wild mon to the party will appear, allowing you to send a different mon to the box. +#define B_CATCH_SWAP_CHECK_HMS TRUE // If TRUE, the catch swap feature above will prevent returning mons to the box if they know HMs. // Other settings #define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. @@ -302,4 +305,12 @@ // Battle UI settings #define B_MOVE_REARRANGEMENT_IN_BATTLE GEN_LATEST // In Gen 4+ move slots cannot be rearranged in battle +#define B_POOL_SETTING_CONSISTENT_RNG FALSE // If set to true, the same trainer will always generate the same pool on the same save file +#define B_POOL_SETTING_USE_FIXED_SEED FALSE // If set to true, will use the fixed seed defined in B_POOL_SETTING_FIXED_SEED +#define B_POOL_SETTING_FIXED_SEED 0x1D4127 // "Random" number, unless a mistake was made, it's へだら in Emerald charmap which should spell he-da-ra +#define B_POOL_RULE_SPECIES_CLAUSE FALSE // Only pick a single pokemon of a unique NatDex number +#define B_POOL_RULE_EXCLUDE_FORMS FALSE // Exclude different forms from the Species Clause +#define B_POOL_RULE_ITEM_CLAUSE FALSE // Only allow each item to be picked once +#define B_POOL_RULES_USE_ITEM_EXCLUSIONS FALSE // Exclude items listed in poolItemClauseExclusions + #endif // GUARD_CONFIG_BATTLE_H diff --git a/include/config/item.h b/include/config/item.h index dce2682959..96156b0db8 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -41,6 +41,7 @@ // Fishing #define I_FISHING_BITE_ODDS GEN_LATEST // In Gen 1 and Gen 2, the Old Rod has a 100% chance for a bite, Good Rod has a 66% chance for a bite, and Super Rod has a 50% chance for a bite. In Gen 3, all rods have a base 50% chance for a bite. In Gen 4 onwards, the Old Rod has a base 25% chance for a bite, Good Rod has a 50% chance for a bite, and Super Rod has a 75% chance for a bite. #define I_FISHING_MINIGAME GEN_3 // Each generation uses a variation of reeling in Pokémon once they have been hooked. NOTE: Only the Gen 1/2 and Gen 3 minigames are implemented right now! +#define I_FISHING_ENVIRONMENT GEN_LATEST // In Gen 3, the battle environment when fighting a hooked Pokémon is based on the tile the player is standing on. In Gen 4 onwards, the environment is based on tile that is being fished in, resulting in it usually being a water environment. #define I_FISHING_STICKY_BOOST GEN_LATEST // In Gen 3, a Pokemon with Suction Cups or Sticky Hold in the first slot of the party causes the chance for a bite to increase by about 35%. In Gen 4 onwards, it doubles the base bite chance. #define I_FISHING_FOLLOWER_BOOST FALSE // In HGSS, fishing bite odds are increased depending on the friendship of the current following Pokémon. #define I_FISHING_CHAIN FALSE // Introduced in XY, hooking the same Pokémon repeatedly will increase the odds of that mon being shiny. NOTE: This implementation is an approximation of the actual feature, as XY have not been throughoutly documented or datamined. diff --git a/include/config/overworld.h b/include/config/overworld.h index d5a98df830..278318e76c 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -59,6 +59,8 @@ #define OW_FOLLOWERS_POKEBALLS TRUE // If TRUE, follower Pokémon will emerge from the Poké Ball they are stored in, instead of a normal Poké Ball #define OW_FOLLOWERS_WEATHER_FORMS FALSE // If TRUE, Castform and Cherrim gain FORM_CHANGE_OVERWORLD_WEATHER, which will make them transform in the overworld based on the weather. #define OW_FOLLOWERS_COPY_WILD_PKMN FALSE // If TRUE, follower Pokémon that know Transform or have Illusion/Imposter will copy wild Pokémon at random. +#define OW_BATTLE_ONLY_FORMS TRUE // If TRUE, loads overworld sprites for battle-only forms like Mega Evos. Requires OW_POKEMON_OBJECT_EVENTS. +#define B_FLAG_FOLLOWERS_DISABLED 0 // Enables / Disables followers by using a flag. Helpful to disable followers for a period of time. #define OW_FOLLOWERS_SCRIPT_MOVEMENT TRUE // If TRUE, follower Pokémon only go back to their Poké Ball if a non-player collides with them by setting the FLAG_SAFE_FOLLOWER_MOVEMENT flag by default. // Follower Pokémon Restrictions // If set, the only pokemon allowed to follow you will be those matching species, met location, and/or met level; These accept vars, too: VAR_TEMP_1, etc diff --git a/include/constants/battle.h b/include/constants/battle.h index b361e90060..66927bf294 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -86,7 +86,7 @@ #define WILD_DOUBLE_BATTLE ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER)))) #define RECORDED_WILD_BATTLE ((gBattleTypeFlags & BATTLE_TYPE_RECORDED) && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FRONTIER))) -#define BATTLE_TWO_VS_ONE_OPPONENT ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gTrainerBattleOpponent_B == 0xFFFF)) +#define BATTLE_TWO_VS_ONE_OPPONENT ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && TRAINER_BATTLE_PARAM.opponentB == 0xFFFF)) #define BATTLE_TYPE_HAS_AI (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER | BATTLE_TYPE_INGAME_PARTNER) // Battle Outcome defines @@ -322,102 +322,149 @@ enum BattleWeather #define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS | B_WEATHER_SNOW | B_WEATHER_FOG) #define B_WEATHER_PRIMAL_ANY (B_WEATHER_RAIN_PRIMAL | B_WEATHER_SUN_PRIMAL | B_WEATHER_STRONG_WINDS) -// 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_FROSTBITE 7 +enum MoveEffects +{ + MOVE_EFFECT_NONE, + MOVE_EFFECT_SLEEP, + MOVE_EFFECT_POISON, + MOVE_EFFECT_BURN, + MOVE_EFFECT_FREEZE, + MOVE_EFFECT_PARALYSIS, + MOVE_EFFECT_TOXIC, + MOVE_EFFECT_FROSTBITE, + MOVE_EFFECT_CONFUSION, + MOVE_EFFECT_FLINCH, + MOVE_EFFECT_TRI_ATTACK, + MOVE_EFFECT_UPROAR, + MOVE_EFFECT_PAYDAY, + MOVE_EFFECT_CHARGING, + MOVE_EFFECT_WRAP, + MOVE_EFFECT_ATK_PLUS_1, + MOVE_EFFECT_DEF_PLUS_1, + MOVE_EFFECT_SPD_PLUS_1, + MOVE_EFFECT_SP_ATK_PLUS_1, + MOVE_EFFECT_SP_DEF_PLUS_1, + MOVE_EFFECT_ACC_PLUS_1, + MOVE_EFFECT_EVS_PLUS_1, + MOVE_EFFECT_ATK_MINUS_1, + MOVE_EFFECT_DEF_MINUS_1, + MOVE_EFFECT_SPD_MINUS_1, + MOVE_EFFECT_SP_ATK_MINUS_1, + MOVE_EFFECT_SP_DEF_MINUS_1, + MOVE_EFFECT_ACC_MINUS_1, + MOVE_EFFECT_EVS_MINUS_1, + MOVE_EFFECT_REMOVE_ARG_TYPE, + MOVE_EFFECT_RECHARGE, + MOVE_EFFECT_RAGE, + MOVE_EFFECT_STEAL_ITEM, + MOVE_EFFECT_PREVENT_ESCAPE, + MOVE_EFFECT_NIGHTMARE, + MOVE_EFFECT_ALL_STATS_UP, + MOVE_EFFECT_REMOVE_STATUS, + MOVE_EFFECT_ATK_DEF_DOWN, + MOVE_EFFECT_ATK_PLUS_2, + MOVE_EFFECT_DEF_PLUS_2, + MOVE_EFFECT_SPD_PLUS_2, + MOVE_EFFECT_SP_ATK_PLUS_2, + MOVE_EFFECT_SP_DEF_PLUS_2, + MOVE_EFFECT_ACC_PLUS_2, + MOVE_EFFECT_EVS_PLUS_2, + MOVE_EFFECT_ATK_MINUS_2, + MOVE_EFFECT_DEF_MINUS_2, + MOVE_EFFECT_SPD_MINUS_2, + MOVE_EFFECT_SP_ATK_MINUS_2, + MOVE_EFFECT_SP_DEF_MINUS_2, + MOVE_EFFECT_ACC_MINUS_2, + MOVE_EFFECT_EVS_MINUS_2, + MOVE_EFFECT_SCALE_SHOT, + MOVE_EFFECT_THRASH, + MOVE_EFFECT_KNOCK_OFF, + MOVE_EFFECT_DEF_SPDEF_DOWN, + MOVE_EFFECT_CLEAR_SMOG, + MOVE_EFFECT_SMACK_DOWN, + MOVE_EFFECT_FLAME_BURST, + MOVE_EFFECT_FEINT, + MOVE_EFFECT_V_CREATE, + MOVE_EFFECT_HAPPY_HOUR, + MOVE_EFFECT_CORE_ENFORCER, + MOVE_EFFECT_THROAT_CHOP, + MOVE_EFFECT_INCINERATE, + MOVE_EFFECT_BUG_BITE, + MOVE_EFFECT_RECOIL_HP_25, + MOVE_EFFECT_TRAP_BOTH, + MOVE_EFFECT_ROUND, + MOVE_EFFECT_STOCKPILE_WORE_OFF, + MOVE_EFFECT_DIRE_CLAW, + MOVE_EFFECT_STEALTH_ROCK, + MOVE_EFFECT_SPIKES, + MOVE_EFFECT_SYRUP_BOMB, + MOVE_EFFECT_FLORAL_HEALING, + MOVE_EFFECT_SECRET_POWER, + MOVE_EFFECT_PSYCHIC_NOISE, + MOVE_EFFECT_TERA_BLAST, + MOVE_EFFECT_ORDER_UP, + MOVE_EFFECT_ION_DELUGE, + MOVE_EFFECT_HAZE, + MOVE_EFFECT_LEECH_SEED, + MOVE_EFFECT_REFLECT, + MOVE_EFFECT_LIGHT_SCREEN, + MOVE_EFFECT_SALT_CURE, + MOVE_EFFECT_EERIE_SPELL, + MOVE_EFFECT_RAISE_TEAM_ATTACK, + MOVE_EFFECT_RAISE_TEAM_DEFENSE, + MOVE_EFFECT_RAISE_TEAM_SPEED, + MOVE_EFFECT_RAISE_TEAM_SP_ATK, + MOVE_EFFECT_RAISE_TEAM_SP_DEF, + MOVE_EFFECT_LOWER_ATTACK_SIDE, + MOVE_EFFECT_LOWER_DEFENSE_SIDE, + MOVE_EFFECT_LOWER_SPEED_SIDE, + MOVE_EFFECT_LOWER_SP_ATK_SIDE, + MOVE_EFFECT_LOWER_SP_DEF_SIDE, + MOVE_EFFECT_SUN, + MOVE_EFFECT_RAIN, + MOVE_EFFECT_SANDSTORM, + MOVE_EFFECT_HAIL, + MOVE_EFFECT_MISTY_TERRAIN, + MOVE_EFFECT_GRASSY_TERRAIN, + MOVE_EFFECT_ELECTRIC_TERRAIN, + MOVE_EFFECT_PSYCHIC_TERRAIN, + MOVE_EFFECT_VINE_LASH, + MOVE_EFFECT_WILDFIRE, + MOVE_EFFECT_CANNONADE, + MOVE_EFFECT_EFFECT_SPORE_SIDE, + MOVE_EFFECT_PARALYZE_SIDE, + MOVE_EFFECT_CONFUSE_PAY_DAY_SIDE, + MOVE_EFFECT_CRIT_PLUS_SIDE, + MOVE_EFFECT_PREVENT_ESCAPE_SIDE, + MOVE_EFFECT_AURORA_VEIL, + MOVE_EFFECT_INFATUATE_SIDE, + MOVE_EFFECT_RECYCLE_BERRIES, + MOVE_EFFECT_POISON_SIDE, + MOVE_EFFECT_DEFOG, + MOVE_EFFECT_POISON_PARALYZE_SIDE, + MOVE_EFFECT_HEAL_TEAM, + MOVE_EFFECT_SPITE, + MOVE_EFFECT_GRAVITY, + MOVE_EFFECT_VOLCALITH, + MOVE_EFFECT_SANDBLAST_SIDE, + MOVE_EFFECT_YAWN_FOE, + MOVE_EFFECT_LOWER_EVASIVENESS_SIDE, + MOVE_EFFECT_AROMATHERAPY, + MOVE_EFFECT_CONFUSE_SIDE, + MOVE_EFFECT_STEELSURGE, + MOVE_EFFECT_TORMENT_SIDE, + MOVE_EFFECT_LOWER_SPEED_2_SIDE, + MOVE_EFFECT_FIRE_SPIN_SIDE, + MOVE_EFFECT_FIXED_POWER, + NUM_MOVE_EFFECTS +}; + #define PRIMARY_STATUS_MOVE_EFFECT MOVE_EFFECT_FROSTBITE // All above move effects apply primary status #if B_USE_FROSTBITE == TRUE #define MOVE_EFFECT_FREEZE_OR_FROSTBITE MOVE_EFFECT_FROSTBITE #else #define MOVE_EFFECT_FREEZE_OR_FROSTBITE MOVE_EFFECT_FREEZE #endif -#define MOVE_EFFECT_CONFUSION 8 -#define MOVE_EFFECT_FLINCH 9 -#define MOVE_EFFECT_TRI_ATTACK 10 -#define MOVE_EFFECT_UPROAR 11 -#define MOVE_EFFECT_PAYDAY 12 -#define MOVE_EFFECT_CHARGING 13 -#define MOVE_EFFECT_WRAP 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_REMOVE_ARG_TYPE 29 -#define MOVE_EFFECT_RECHARGE 30 -#define MOVE_EFFECT_RAGE 31 -#define MOVE_EFFECT_STEAL_ITEM 32 -#define MOVE_EFFECT_PREVENT_ESCAPE 33 -#define MOVE_EFFECT_NIGHTMARE 34 -#define MOVE_EFFECT_ALL_STATS_UP 35 -#define MOVE_EFFECT_REMOVE_STATUS 36 -#define MOVE_EFFECT_ATK_DEF_DOWN 37 -#define MOVE_EFFECT_ATK_PLUS_2 38 -#define MOVE_EFFECT_DEF_PLUS_2 39 -#define MOVE_EFFECT_SPD_PLUS_2 40 -#define MOVE_EFFECT_SP_ATK_PLUS_2 41 -#define MOVE_EFFECT_SP_DEF_PLUS_2 42 -#define MOVE_EFFECT_ACC_PLUS_2 43 -#define MOVE_EFFECT_EVS_PLUS_2 44 -#define MOVE_EFFECT_ATK_MINUS_2 45 -#define MOVE_EFFECT_DEF_MINUS_2 46 -#define MOVE_EFFECT_SPD_MINUS_2 47 -#define MOVE_EFFECT_SP_ATK_MINUS_2 48 -#define MOVE_EFFECT_SP_DEF_MINUS_2 49 -#define MOVE_EFFECT_ACC_MINUS_2 50 -#define MOVE_EFFECT_EVS_MINUS_2 51 -#define MOVE_EFFECT_SCALE_SHOT 52 -#define MOVE_EFFECT_THRASH 53 -#define MOVE_EFFECT_KNOCK_OFF 54 -#define MOVE_EFFECT_DEF_SPDEF_DOWN 55 -#define MOVE_EFFECT_CLEAR_SMOG 56 -#define MOVE_EFFECT_SMACK_DOWN 57 -#define MOVE_EFFECT_FLAME_BURST 58 -#define MOVE_EFFECT_FEINT 59 -#define MOVE_EFFECT_SPECTRAL_THIEF 60 -#define MOVE_EFFECT_V_CREATE 61 -#define MOVE_EFFECT_HAPPY_HOUR 62 -#define MOVE_EFFECT_CORE_ENFORCER 63 -#define MOVE_EFFECT_THROAT_CHOP 64 -#define MOVE_EFFECT_INCINERATE 65 -#define MOVE_EFFECT_BUG_BITE 66 -#define MOVE_EFFECT_RECOIL_HP_25 67 -#define MOVE_EFFECT_TRAP_BOTH 68 -#define MOVE_EFFECT_ROUND 69 -#define MOVE_EFFECT_STOCKPILE_WORE_OFF 70 -#define MOVE_EFFECT_DIRE_CLAW 71 -#define MOVE_EFFECT_STEALTH_ROCK 72 -#define MOVE_EFFECT_SPIKES 73 -#define MOVE_EFFECT_SYRUP_BOMB 74 -#define MOVE_EFFECT_FLORAL_HEALING 75 -#define MOVE_EFFECT_SECRET_POWER 76 -#define MOVE_EFFECT_PSYCHIC_NOISE 77 -#define MOVE_EFFECT_TERA_BLAST 78 -#define MOVE_EFFECT_ORDER_UP 79 -#define MOVE_EFFECT_ION_DELUGE 80 -#define MOVE_EFFECT_AROMATHERAPY 81 // No functionality yet -#define MOVE_EFFECT_HAZE 82 -#define MOVE_EFFECT_LEECH_SEED 83 -#define MOVE_EFFECT_REFLECT 84 -#define MOVE_EFFECT_LIGHT_SCREEN 85 -#define MOVE_EFFECT_SALT_CURE 86 -#define MOVE_EFFECT_EERIE_SPELL 87 - -#define NUM_MOVE_EFFECTS 88 #define MOVE_EFFECT_AFFECTS_USER 0x2000 #define MOVE_EFFECT_CERTAIN 0x4000 diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index e4cf747818..8ba2c72096 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -14,16 +14,6 @@ #define AI_TYPE2_USER 3 #define AI_TYPE_MOVE 4 -// type effectiveness -#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 Flags. Most run specific functions to update score, new flags are used for internal logic in other scripts // See docs/ai_flags.md for more details. #define AI_FLAG_CHECK_BAD_MOVE (1 << 0) // AI will avoid using moves that are likely to fail or be ineffective in the current situation. diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 0025364247..b5ccb7bf25 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -417,6 +417,8 @@ #define ANIM_TAG_RED_EXPLOSION (ANIM_SPRITES_START + 403) #define ANIM_TAG_PURPLE_CHAIN (ANIM_SPRITES_START + 404) #define ANIM_TAG_PINKVIO_ORB (ANIM_SPRITES_START + 405) +#define ANIM_TAG_STARSTORM (ANIM_SPRITES_START + 406) +#define ANIM_TAG_SALT_PARTICLE (ANIM_SPRITES_START + 407) // battlers #define ANIM_ATTACKER 0 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 4d2ccef9ac..6525cf1544 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -295,7 +295,6 @@ enum { EFFECT_RECOIL_HP_25, EFFECT_STUFF_CHEEKS, EFFECT_GRAV_APPLE, - EFFECT_SPARKLY_SWIRL, EFFECT_HYPERSPACE_FURY, EFFECT_AURA_WHEEL, EFFECT_PHOTON_GEYSER, @@ -352,6 +351,7 @@ enum { EFFECT_SHELL_SIDE_ARM, EFFECT_ORDER_UP, EFFECT_RAPID_SPIN, + EFFECT_SPECTRAL_THIEF, NUM_BATTLE_MOVE_EFFECTS, }; diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index bcf11683a1..2cbc25b003 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -2,7 +2,7 @@ #define GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H // The following correspond to the struct members of BattleScripting by adding their offset -#define sPAINSPLIT_HP (gBattleScripting + 0x00) // painSplitHp +#define sUNUSED_0x00 (gBattleScripting + 0x00) // unused_0x00 #define sUNUSED_0x04 (gBattleScripting + 0x04) // unused_0x04 #define sMULTIHIT_STRING (gBattleScripting + 0x08) // multihitString #define sEXP_CATCH (gBattleScripting + 0x0E) // expOnCatch @@ -153,7 +153,6 @@ enum CmdVarious VARIOUS_TRY_THIRD_TYPE, VARIOUS_ACUPRESSURE, VARIOUS_SET_POWDER, - VARIOUS_SPECTRAL_THIEF, VARIOUS_GRAVITY_ON_AIRBORNE_MONS, VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS, VARIOUS_JUMP_IF_ROAR_FAILS, @@ -274,6 +273,7 @@ enum MoveEndEffects MOVEEND_ITEM_EFFECTS_TARGET, MOVEEND_MOVE_EFFECTS2, MOVEEND_ITEM_EFFECTS_ALL, + MOVEEND_HIT_SWITCH_TARGET, MOVEEND_KINGSROCK, // These item effects will occur each strike of a multi-hit move MOVEEND_NUM_HITS, MOVEEND_SUBSTITUTE, diff --git a/include/constants/battle_setup.h b/include/constants/battle_setup.h index bb7f9adefa..91c89d0631 100644 --- a/include/constants/battle_setup.h +++ b/include/constants/battle_setup.h @@ -11,8 +11,7 @@ #define TRAINER_BATTLE_REMATCH_DOUBLE 7 #define TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC 8 #define TRAINER_BATTLE_PYRAMID 9 -#define TRAINER_BATTLE_SET_TRAINER_A 10 -#define TRAINER_BATTLE_SET_TRAINER_B 11 +#define TRAINER_BATTLE_SET_TRAINERS_FOR_MULTI_BATTLE 10 #define TRAINER_BATTLE_HILL 12 #define TRAINER_BATTLE_TWO_TRAINERS_NO_INTRO 13 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index a70ccbe5e8..3ba637c690 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -727,8 +727,10 @@ #define STRINGID_SUPEREFFECTIVETWOFOES 725 #define STRINGID_NOTVERYEFFECTIVETWOFOES 726 #define STRINGID_ITDOESNTAFFECTTWOFOES 727 +#define STRINGID_SENDCAUGHTMONPARTYORBOX 728 +#define STRINGID_PKMNSENTTOPCAFTERCATCH 729 -#define BATTLESTRINGS_COUNT 728 +#define BATTLESTRINGS_COUNT 730 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, @@ -892,10 +894,12 @@ #define B_MSG_WEAKEN_FIRE 1 // gCaughtMonStringIds -#define B_MSG_SENT_SOMEONES_PC 0 -#define B_MSG_SENT_LANETTES_PC 1 -#define B_MSG_SOMEONES_BOX_FULL 2 -#define B_MSG_LANETTES_BOX_FULL 3 +#define B_MSG_NO_MESSSAGE_SKIP 0 +#define B_MSG_SENT_SOMEONES_PC 1 +#define B_MSG_SENT_LANETTES_PC 2 +#define B_MSG_SOMEONES_BOX_FULL 3 +#define B_MSG_LANETTES_BOX_FULL 4 +#define B_MSG_SWAPPED_INTO_PARTY 5 // gPrimalWeatherBlocksStringIds #define B_MSG_PRIMAL_WEATHER_FIZZLED_BY_RAIN 0 diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index 7f2adbaae6..0d66215be9 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -271,19 +271,23 @@ #define OBJ_EVENT_GFX_VAR_E (OBJ_EVENT_GFX_VARS + 0xE) #define OBJ_EVENT_GFX_VAR_F (OBJ_EVENT_GFX_VARS + 0xF) -#define OBJ_EVENT_GFX_MON_BASE 0x200 // 512 -#define OBJ_EVENT_GFX_SPECIES_BITS 12 // This will need to be updated when NUM_SPECIES is > ~3.5k -#define OBJ_EVENT_GFX_SPECIES_MASK ((1 << OBJ_EVENT_GFX_SPECIES_BITS) - 1) +#define OBJ_EVENT_MON (1u << 15) +#define OBJ_EVENT_MON_SHINY (1u << 14) +#define OBJ_EVENT_MON_FEMALE (1u << 13) +#define OBJ_EVENT_MON_SPECIES_MASK (~(7u << 13)) // Used to call a specific species' follower graphics. Useful for static encounters. -#define OBJ_EVENT_GFX_SPECIES(name) (SPECIES_##name + OBJ_EVENT_GFX_MON_BASE) -#define OBJ_EVENT_GFX_SPECIES_SHINY(name) (SPECIES_##name + OBJ_EVENT_GFX_MON_BASE + SPECIES_SHINY_TAG) +#define OBJ_EVENT_GFX_SPECIES(name) (SPECIES_##name + OBJ_EVENT_MON) +#define OBJ_EVENT_GFX_SPECIES_SHINY(name) (SPECIES_##name + OBJ_EVENT_MON + OBJ_EVENT_MON_SHINY) +#define OBJ_EVENT_GFX_SPECIES_FEMALE(name) (SPECIES_##name + OBJ_EVENT_MON + OBJ_EVENT_MON_FEMALE) +#define OBJ_EVENT_GFX_SPECIES_SHINY_FEMALE(name) (SPECIES_##name + OBJ_EVENT_MON + OBJ_EVENT_MON_SHINY + OBJ_EVENT_MON_FEMALE) -#define OW_SPECIES(x) (((x)->graphicsId & OBJ_EVENT_GFX_SPECIES_MASK) - OBJ_EVENT_GFX_MON_BASE) -#define OW_FORM(x) ((x)->graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS) +#define OW_SPECIES(x) ((x)->graphicsId & OBJ_EVENT_MON_SPECIES_MASK) +#define OW_SHINY(x) ((x)->graphicsId & OBJ_EVENT_MON_SHINY) +#define OW_FEMALE(x) ((x)->graphicsId & OBJ_EVENT_MON_FEMALE) // Whether Object Event is an OW pokemon -#define IS_OW_MON_OBJ(obj) ((obj)->graphicsId >= OBJ_EVENT_GFX_MON_BASE) +#define IS_OW_MON_OBJ(obj) ((obj)->graphicsId & OBJ_EVENT_MON) #define SHADOW_SIZE_S 0 #define SHADOW_SIZE_M 1 diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 6b3a5ace78..dee4a3bea1 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,7 +1,7 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// Last version: 1.10.1 +// Last version: 1.10.2 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 11 #define EXPANSION_VERSION_PATCH 0 diff --git a/include/constants/flags.h b/include/constants/flags.h index 9450c6de1c..8685faca6f 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1647,9 +1647,8 @@ #define FLAG_ENABLE_MULTI_CORRIDOR_DOOR (SPECIAL_FLAGS_START + 0x2) #define FLAG_SPECIAL_FLAG_UNUSED_0x4003 (SPECIAL_FLAGS_START + 0x3) // Unused Flag #define FLAG_STORING_ITEMS_IN_PYRAMID_BAG (SPECIAL_FLAGS_START + 0x4) -// When set, `applymovement` does not hide follower pokemon; -// Also, scripted movements on the player will move follower(s), too -#define FLAG_SAFE_FOLLOWER_MOVEMENT (SPECIAL_FLAGS_START + 0x5) +#define FLAG_SAFE_FOLLOWER_MOVEMENT (SPECIAL_FLAGS_START + 0x5) // When set, applymovement does not put the follower inside a pokeball + // Also, scripted movements on the player will move follower(s), too // FLAG_SPECIAL_FLAG_0x4005 - 0x407F also exist and are unused #define SPECIAL_FLAGS_END (SPECIAL_FLAGS_START + 0x7F) #define NUM_SPECIAL_FLAGS (SPECIAL_FLAGS_END - SPECIAL_FLAGS_START + 1) diff --git a/include/constants/generational_changes.h b/include/constants/generational_changes.h index 557b34b653..f80db1c1a7 100644 --- a/include/constants/generational_changes.h +++ b/include/constants/generational_changes.h @@ -3,7 +3,14 @@ enum GenConfigTag { + GEN_CONFIG_CRIT_CHANCE, + GEN_CONFIG_CRIT_MULTIPLIER, + GEN_CONFIG_FOCUS_ENERGY_CRIT_RATIO, + GEN_CONFIG_PARALYSIS_SPEED, + GEN_CONFIG_CONFUSION_SELF_DMG_CHANCE, + GEN_CONFIG_MULTI_HIT_CHANCE, GEN_CONFIG_GALE_WINGS, + GEN_CONFIG_HEAL_BELL_SOUNDPROOF, GEN_CONFIG_COUNT }; diff --git a/include/constants/global.h b/include/constants/global.h index 9adb46db23..8ca3861709 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -10,6 +10,7 @@ #include "config/overworld.h" #include "config/dexnav.h" #include "config/summary_screen.h" +#include "config/ai.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. @@ -123,6 +124,7 @@ #define TYPE_NAME_LENGTH 8 #define ABILITY_NAME_LENGTH 16 #define TRAINER_NAME_LENGTH 10 +#define CODE_NAME_LENGTH 11 #define MAX_STAMP_CARD_STAMPS 7 diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h index e997dd566d..76360d8ee8 100644 --- a/include/constants/party_menu.h +++ b/include/constants/party_menu.h @@ -48,7 +48,7 @@ #define PARTY_ACTION_CHOOSE_AND_CLOSE 11 #define PARTY_ACTION_MOVE_TUTOR 12 #define PARTY_ACTION_MINIGAME 13 -#define PARTY_ACTION_REUSABLE_ITEM 14 // Unused. The only reusable items are handled separately +#define PARTY_ACTION_SEND_MON_TO_BOX 14 #define PARTY_ACTION_CHOOSE_FAINTED_MON 15 // IDs for DisplayPartyMenuStdMessage, to display the message at the bottom of the party menu @@ -82,6 +82,8 @@ #define PARTY_MSG_WHICH_APPLIANCE 27 #define PARTY_MSG_CHOOSE_SECOND_FUSION 28 #define PARTY_MSG_NO_POKEMON 29 +#define PARTY_MSG_CHOOSE_MON_FOR_BOX 30 + #define PARTY_MSG_NONE 127 // IDs for DisplayPartyPokemonDescriptionText, to display a message in the party pokemon's box diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 4883077a93..dc6d399acf 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -46,31 +46,31 @@ #define EGG_GROUPS_PER_MON 2 // Pokémon natures -#define NATURE_HARDY 0 -#define NATURE_LONELY 1 -#define NATURE_BRAVE 2 -#define NATURE_ADAMANT 3 -#define NATURE_NAUGHTY 4 -#define NATURE_BOLD 5 -#define NATURE_DOCILE 6 -#define NATURE_RELAXED 7 -#define NATURE_IMPISH 8 -#define NATURE_LAX 9 -#define NATURE_TIMID 10 -#define NATURE_HASTY 11 -#define NATURE_SERIOUS 12 -#define NATURE_JOLLY 13 -#define NATURE_NAIVE 14 -#define NATURE_MODEST 15 -#define NATURE_MILD 16 -#define NATURE_QUIET 17 -#define NATURE_BASHFUL 18 -#define NATURE_RASH 19 -#define NATURE_CALM 20 -#define NATURE_GENTLE 21 -#define NATURE_SASSY 22 -#define NATURE_CAREFUL 23 -#define NATURE_QUIRKY 24 +#define NATURE_HARDY 0 // Neutral +#define NATURE_LONELY 1 // +Atk -Def +#define NATURE_BRAVE 2 // +Atk -Speed +#define NATURE_ADAMANT 3 // +Atk -SpAtk +#define NATURE_NAUGHTY 4 // +Atk -SpDef +#define NATURE_BOLD 5 // +Def -Atk +#define NATURE_DOCILE 6 // Neutral +#define NATURE_RELAXED 7 // +Def -Speed +#define NATURE_IMPISH 8 // +Def -SpAtk +#define NATURE_LAX 9 // +Def -SpDef +#define NATURE_TIMID 10 // +Speed -Atk +#define NATURE_HASTY 11 // +Speed -Def +#define NATURE_SERIOUS 12 // Neutral +#define NATURE_JOLLY 13 // +Speed -SpAtk +#define NATURE_NAIVE 14 // +Speed - SpDef +#define NATURE_MODEST 15 // +SpAtk -Atk +#define NATURE_MILD 16 // +SpAtk -Def +#define NATURE_QUIET 17 // +SpAtk -Speed +#define NATURE_BASHFUL 18 // Neutral +#define NATURE_RASH 19 // +SpAtk -SpDef +#define NATURE_CALM 20 // +SpDef -Atk +#define NATURE_GENTLE 21 // +SpDef -Def +#define NATURE_SASSY 22 // +SpDef -Speed +#define NATURE_CAREFUL 23 // +SpDef -SpAtk +#define NATURE_QUIRKY 24 // Neutral #define NUM_NATURES 25 // Pokémon Stats diff --git a/include/constants/regions.h b/include/constants/regions.h new file mode 100644 index 0000000000..3f7397ced6 --- /dev/null +++ b/include/constants/regions.h @@ -0,0 +1,21 @@ +#ifndef GUARD_CONSTANTS_REGIONS_H +#define GUARD_CONSTANTS_REGIONS_H + +// Core-series regions +enum Region +{ + REGION_NONE, + REGION_KANTO, + REGION_JOHTO, + REGION_HOENN, + REGION_SINNOH, + REGION_UNOVA, + REGION_KALOS, + REGION_ALOLA, + REGION_GALAR, + REGION_HISUI, + REGION_PALDEA, + REGIONS_COUNT, +}; + +#endif // GUARD_CONSTANTS_REGIONS_H diff --git a/include/constants/trainer_slide.h b/include/constants/trainer_slide.h index 5ddab7be00..26635b164b 100644 --- a/include/constants/trainer_slide.h +++ b/include/constants/trainer_slide.h @@ -13,6 +13,7 @@ enum ComparisonOperators enum TrainerSlideType { + TRAINER_SLIDE_NONE, TRAINER_SLIDE_BEFORE_FIRST_TURN, TRAINER_SLIDE_PLAYER_LANDS_FIRST_CRITICAL_HIT, TRAINER_SLIDE_ENEMY_LANDS_FIRST_CRITICAL_HIT, diff --git a/include/constants/vars.h b/include/constants/vars.h index 1b71134593..5ce02c1467 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -301,7 +301,7 @@ #define VAR_MON_BOX_ID 0x8012 #define VAR_MON_BOX_POS 0x8013 #define VAR_UNUSED_0x8014 0x8014 -#define VAR_TRAINER_BATTLE_OPPONENT_A 0x8015 // Alias of gTrainerBattleOpponent_A +#define VAR_TRAINER_BATTLE_OPPONENT_A 0x8015 // Alias of TRAINER_BATTLE_PARAM.opponentA #define SPECIAL_VARS_END 0x8015 diff --git a/include/contest.h b/include/contest.h index acd12a4ebc..a10ec5babd 100644 --- a/include/contest.h +++ b/include/contest.h @@ -111,6 +111,7 @@ struct ContestPokemon u8 unused1:7; u32 personality; u32 otId; + u8 filter; }; struct ContestTempSave diff --git a/include/data.h b/include/data.h index 1d2a1291f9..8b1e9c22d1 100644 --- a/include/data.h +++ b/include/data.h @@ -76,6 +76,7 @@ struct TrainerMon u8 padding1:1; u8 dynamaxLevel:4; u8 padding2:4; + u32 tags; }; #define TRAINER_PARTY(partyArray) partyArray, .partySize = ARRAY_COUNT(partyArray) @@ -94,6 +95,10 @@ struct Trainer u8 startingStatus:6; // this trainer starts a battle with a given status. see include/constants/battle.h for values /*0x1F*/ u8 mugshotColor; /*0x20*/ u8 partySize; + /*0x21*/ u8 poolSize; + /*0x22*/ u8 poolRuleIndex; + /*0x23*/ u8 poolPickIndex; + /*0x24*/ u8 poolPruneIndex; }; struct TrainerClass @@ -163,7 +168,7 @@ extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteContest[]; extern const union AnimCmd sAnim_GeneralFrame0[]; extern const union AnimCmd sAnim_GeneralFrame3[]; extern const union AnimCmd *const gAnims_MonPic[]; -extern const union AnimCmd *const sAnims_Trainer[]; +extern const union AnimCmd *const gAnims_Trainer[]; extern const struct TrainerSprite gTrainerSprites[]; extern const struct TrainerBacksprite gTrainerBacksprites[]; diff --git a/include/daycare.h b/include/daycare.h index a7ef5581f9..3023c87af0 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -34,6 +34,7 @@ void ShowDaycareLevelMenu(void); void ChooseSendDaycareMon(void); u8 GetEggMovesBySpecies(u16 species, u16 *eggMoves); bool8 SpeciesCanLearnEggMove(u16 species, u16 move); +void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycareMon); u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves); #endif // GUARD_DAYCARE_H diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 81db48d3a9..4f3bb5d287 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -107,13 +107,6 @@ struct LockedAnimObjectEvents u8 count; }; -struct FollowerSpriteVisualizerData -{ - u16 currentmonId; - bool8 isShiny; - bool8 isFemale; -}; - extern const struct OamData gObjectEventBaseOam_32x8; extern const struct OamData gObjectEventBaseOam_32x32; extern const struct OamData gObjectEventBaseOam_64x64; @@ -157,7 +150,6 @@ void UpdateLightSprite(struct Sprite *); void TrySpawnObjectEvents(s16 cameraX, s16 cameraY); u8 CreateObjectGraphicsSpriteWithTag(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u16 paletteTag); u8 CreateObjectGraphicsSprite(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority); -u8 CreateObjectGraphicsFollowerSpriteForVisualizer(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority, struct FollowerSpriteVisualizerData *data); u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup); u8 SpawnSpecialObjectEventParameterized(u16 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation); u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *); diff --git a/include/gba/defines.h b/include/gba/defines.h index 0bf7110810..2a68042421 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -12,6 +12,7 @@ #define EWRAM_INIT __attribute__((section(".ewram"))) #define COMMON_DATA __attribute__((section("common_data"))) #define UNUSED __attribute__((unused)) +#define USED __attribute__((used)) #define ARM_FUNC __attribute__((target("arm"))) diff --git a/include/generational_changes.h b/include/generational_changes.h index 5a726007c3..540b51e20b 100644 --- a/include/generational_changes.h +++ b/include/generational_changes.h @@ -6,7 +6,14 @@ static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] = { - [GEN_CONFIG_GALE_WINGS] = B_GALE_WINGS, + [GEN_CONFIG_CRIT_CHANCE] = B_CRIT_CHANCE, + [GEN_CONFIG_CRIT_MULTIPLIER] = B_CRIT_MULTIPLIER, + [GEN_CONFIG_FOCUS_ENERGY_CRIT_RATIO] = B_FOCUS_ENERGY_CRIT_RATIO, + [GEN_CONFIG_PARALYSIS_SPEED] = B_PARALYSIS_SPEED, + [GEN_CONFIG_CONFUSION_SELF_DMG_CHANCE] = B_CONFUSION_SELF_DMG_CHANCE, + [GEN_CONFIG_MULTI_HIT_CHANCE] = B_MULTI_HIT_CHANCE, + [GEN_CONFIG_GALE_WINGS] = B_GALE_WINGS, + [GEN_CONFIG_HEAL_BELL_SOUNDPROOF] = B_HEAL_BELL_SOUNDPROOF, }; #if TESTING diff --git a/include/graphics.h b/include/graphics.h index 527f793d37..e0109f8b20 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2893,6 +2893,10 @@ extern const u32 gBattleAnimSpritePal_IvyCudgelRock[]; extern const u32 gBattleAnimSpritePal_IvyCudgelWater[]; extern const u32 gBattleAnimSpriteGfx_PinkVioletOrb[]; extern const u32 gBattleAnimSpritePal_PinkVioletOrb[]; +extern const u32 gBattleAnimSpriteGfx_TeraStarstormBeam[]; +extern const u32 gBattleAnimSpritePal_TeraStarstormBeam[]; +extern const u32 gBattleAnimSpriteGfx_SaltParticle[]; +extern const u32 gBattleAnimSpritePal_SaltParticle[]; extern const u32 gBattleAnimBgImage_Dark[]; extern const u32 gBattleAnimBgImage_Ghost[]; diff --git a/include/move.h b/include/move.h index 67206d9ba2..5537840703 100644 --- a/include/move.h +++ b/include/move.h @@ -104,7 +104,9 @@ struct MoveInfo bool32 parentalBondBanned:1; bool32 skyBattleBanned:1; bool32 sketchBanned:1; - u32 padding:19; + //Other + bool32 validApprenticeMove:1; + u32 padding:3; // end of word union { @@ -122,7 +124,6 @@ struct MoveInfo u16 type; u16 fixedDamage; u16 absorbPercentage; - u16 maxEffect; } argument; // primary/secondary effects @@ -489,11 +490,6 @@ static inline u32 GetMoveAbsorbPercentage(u32 moveId) return gMovesInfo[moveId].argument.absorbPercentage; } -static inline u32 GetMoveMaxEffect(u32 moveId) -{ - return gMovesInfo[SanitizeMoveId(moveId)].argument.maxEffect; -} - static inline const struct AdditionalEffect *GetMoveAdditionalEffectById(u32 moveId, u32 effect) { return &gMovesInfo[SanitizeMoveId(moveId)].additionalEffects[effect]; diff --git a/include/naming_screen.h b/include/naming_screen.h index 93527640e5..315868c3ab 100644 --- a/include/naming_screen.h +++ b/include/naming_screen.h @@ -9,8 +9,11 @@ enum { NAMING_SCREEN_CAUGHT_MON, NAMING_SCREEN_NICKNAME, NAMING_SCREEN_WALDA, + NAMING_SCREEN_CODE, }; +extern void BattleMainCB2(void); + void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGender, u32 monPersonality, MainCallback returnCallback); #endif // GUARD_NAMING_SCREEN_H diff --git a/include/pokemon.h b/include/pokemon.h index bc92b73c75..1326e81329 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -3,6 +3,7 @@ #include "sprite.h" #include "constants/items.h" +#include "constants/regions.h" #include "constants/region_map_sections.h" #include "constants/map_groups.h" #include "contest_effect.h" @@ -806,5 +807,7 @@ void UpdateDaysPassedSinceFormChange(u16 days); void TrySetDayLimitToFormChange(struct Pokemon *mon); u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler); uq4_12_t GetDynamaxLevelHPMultiplier(u32 dynamaxLevel, bool32 inverseMultiplier); +u32 GetRegionalFormByRegion(u32 species, u32 region); +bool32 IsSpeciesForeignRegionalForm(u32 species, u32 currentRegion); #endif // GUARD_POKEMON_H diff --git a/include/random.h b/include/random.h index 1a735097d3..c8b4a039b5 100644 --- a/include/random.h +++ b/include/random.h @@ -30,7 +30,7 @@ struct Sfc32State { typedef struct Sfc32State rng_value_t; -#define RNG_VALUE_EMPTY {} +#define RNG_VALUE_EMPTY {0} // Calling this function directly is discouraged. // Use LocalRandom() instead. @@ -43,9 +43,14 @@ static inline u32 _SFC32_Next(struct Sfc32State *state) return result; } +static inline u32 LocalRandom32(rng_value_t *val) +{ + return _SFC32_Next(val); +} + static inline u16 LocalRandom(rng_value_t *val) { - return _SFC32_Next(val) >> 16; + return LocalRandom32(val) >> 16; } u32 Random32(void); @@ -166,12 +171,22 @@ enum RandomTag RNG_AI_SWITCH_CURSED, RNG_AI_SWITCH_NIGHTMARE, RNG_AI_SWITCH_SEEDED, + RNG_AI_SWITCH_YAWN, + RNG_AI_SWITCH_PERISH_SONG, + RNG_AI_SWITCH_INFATUATION, RNG_AI_SWITCH_ABSORBING, + RNG_AI_SWITCH_ABSORBING_STAY_IN, RNG_AI_SWITCH_NATURAL_CURE, RNG_AI_SWITCH_REGENERATOR, RNG_AI_SWITCH_ENCORE, + RNG_AI_SWITCH_CHOICE_LOCKED, RNG_AI_SWITCH_STATS_LOWERED, RNG_AI_SWITCH_SE_DEFENSIVE, + RNG_AI_SWITCH_TRUANT, + RNG_AI_SWITCH_WONDER_GUARD, + RNG_AI_SWITCH_TRAPPER, + RNG_AI_SWITCH_FREE_TURN, + RNG_AI_SWITCH_ALL_MOVES_BAD, RNG_SHELL_SIDE_ARM, RNG_RANDOM_TARGET, RNG_AI_PREDICT_ABILITY, diff --git a/include/regions.h b/include/regions.h new file mode 100644 index 0000000000..2f44896ea2 --- /dev/null +++ b/include/regions.h @@ -0,0 +1,12 @@ +#ifndef GUARD_REGIONS_H +#define GUARD_REGIONS_H + +#include "constants/regions.h" + +static inline u32 GetCurrentRegion(void) +{ + // TODO: Since there's no current multi-region support, we have this constant for the purposes of regional form comparisons. + return REGION_HOENN; +} + +#endif // GUARD_REGIONS_H diff --git a/include/reshow_battle_screen.h b/include/reshow_battle_screen.h index 07958bf6c0..59f9c79106 100644 --- a/include/reshow_battle_screen.h +++ b/include/reshow_battle_screen.h @@ -3,6 +3,7 @@ void ReshowBattleScreenDummy(void); void ReshowBattleScreenAfterMenu(void); +void ReshowBlankBattleScreenAfterMenu(void); void CreateBattlerSprite(u32 battler); #endif // GUARD_RESHOW_BATTLE_SCREEN_H diff --git a/include/script.h b/include/script.h index 1546d15dd4..4fc2189035 100644 --- a/include/script.h +++ b/include/script.h @@ -133,7 +133,7 @@ static inline bool32 Script_IsAnalyzingEffects(void) /* Optimize 'Script_RequestEffects' to a no-op if it would have no * effect. 'Script_RequestEffects' must be called in all commands and - * natives/specials with 'request_effects=TRUE' even if it would have + * natives/specials with 'requests_effects=TRUE' even if it would have * no effect to future-proof against new effects. */ #define Script_RequestEffects(effects) \ ({ \ diff --git a/include/strings.h b/include/strings.h index 06a3a658a2..588d513d4b 100644 --- a/include/strings.h +++ b/include/strings.h @@ -553,28 +553,15 @@ extern const u8 BattleFrontier_Lounge2_Text_PyramidKingSilverMons[]; extern const u8 BattleFrontier_Lounge2_Text_PyramidKingGoldMons[]; // Battle Frontier Nature Girl -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlHardy[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlLonely[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlBrave[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlAdamant[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlNaughty[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlBold[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlRelaxed[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlImpish[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlLax[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlTimid[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlHasty[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlSerious[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlJolly[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlModest[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlMild[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlBashful[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlRash[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlCalm[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlGentle[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlSassy[]; -extern const u8 BattleFrontier_Lounge5_Text_NatureGirlCareful[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlAttackHighAttackLow[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlAttackHighDefenseLow[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlAttackHighSupportLow[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlDefenseHighAttackLow[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlDefenseHighDefenseLow[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlDefenseHighSupportLow[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlSupportHighAttackLow[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlSupportHighDefenseLow[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlSupportHighSupportLow[]; // Battle Frontier Gambler extern const u8 BattleFrontier_Lounge3_Text_ChallengeBattleTowerSingle[]; @@ -1551,6 +1538,7 @@ extern const u8 gText_PkmnTransferredSomeonesPCBoxFull[]; extern const u8 gText_PkmnTransferredLanettesPCBoxFull[]; extern const u8 gText_PkmnTransferredSomeonesPC[]; extern const u8 gText_PkmnTransferredLanettesPC[]; +extern const u8 gText_PkmnSentToPCAfterCatch[]; // hall of fame extern const u8 gText_LeagueChamp[]; @@ -1584,6 +1572,7 @@ extern const u8 gDaycareText_PlayOther[]; extern const u8 gText_ChoosePokemon[]; extern const u8 gText_ChoosePokemonCancel[]; extern const u8 gText_ChoosePokemonConfirm[]; +extern const u8 gText_SendWhichMonToPC[]; extern const u8 gText_MoveToWhere[]; extern const u8 gText_TeachWhichPokemon[]; extern const u8 gText_UseOnWhichPokemon[]; @@ -2429,4 +2418,7 @@ extern const u8 gText_PlayerScurriedBackHome[]; extern const u8 gText_Relearn[]; // move relearner from summary screen extern const u8 gText_Rename[]; // change nickname from summary screen +// Switch Caught Mon into Party +extern const u8 gText_CannotSendMonToBoxHM[]; + #endif // GUARD_STRINGS_H diff --git a/include/trainer_pools.h b/include/trainer_pools.h new file mode 100644 index 0000000000..196657a55f --- /dev/null +++ b/include/trainer_pools.h @@ -0,0 +1,76 @@ +#ifndef GUARD_TRAINER_POOLS_H +#define GUARD_TRAINER_POOLS_H + +#include "pokemon.h" +#include "data.h" +#include "global.h" + +#define POOL_SLOT_DISABLED 0xff + +// Unlimited is set to 0 so that the default is unlimited +#define POOL_MEMBER_COUNT_UNLIMITED 0 +#define POOL_MEMBER_COUNT_NONE 0xff + +enum PoolRulesets { + POOL_RULESET_BASIC, + POOL_RULESET_DOUBLES, + POOL_RULESET_WEATHER_SINGLES, + POOL_RULESET_WEATHER_DOUBLES, + POOL_RULESET_SUPPORT_DOUBLES, +}; + +enum PoolPickFunctions { + POOL_PICK_DEFAULT, + POOL_PICK_LOWEST, +}; + +enum PoolPruneOptions { + POOL_PRUNE_NONE, + POOL_PRUNE_TEST, + POOL_PRUNE_RANDOM_TAG, +}; + +enum PoolTags { + // Lead and Ace has special handling, leave them be + POOL_TAG_LEAD = 0, + POOL_TAG_ACE = 1, + // No special handling for these + POOL_TAG_WEATHER_SETTER = 2, + POOL_TAG_WEATHER_ABUSER = 3, + POOL_TAG_SUPPORT = 4, + POOL_TAG_TAG6 = 5, + POOL_TAG_TAG7 = 6, + POOL_TAG_TAG8 = 7, + // Must be the last element + POOL_NUM_TAGS = 8 +}; + +#define MON_POOL_TAG_LEAD 1 << POOL_TAG_LEAD +#define MON_POOL_TAG_ACE 1 << POOL_TAG_ACE +#define MON_POOL_TAG_WEATHER_SETTER 1 << POOL_TAG_WEATHER_SETTER +#define MON_POOL_TAG_WEATHER_ABUSER 1 << POOL_TAG_WEATHER_ABUSER +#define MON_POOL_TAG_SUPPORT 1 << POOL_TAG_SUPPORT +#define MON_POOL_TAG_TAG6 1 << POOL_TAG_TAG6 +#define MON_POOL_TAG_TAG7 1 << POOL_TAG_TAG7 +#define MON_POOL_TAG_TAG8 1 << POOL_TAG_TAG8 + +struct PoolRules +{ + bool8 speciesClause; + bool8 excludeForms; + bool8 itemClause; + bool8 itemClauseExclusions; + u8 tagMaxMembers[POOL_NUM_TAGS]; + bool8 tagRequired[POOL_NUM_TAGS]; +}; + +struct PickFunctions +{ + u32 (*LeadFunction)(const struct Trainer *, u8 *, u32, u32, u32, struct PoolRules *); + u32 (*AceFunction)(const struct Trainer *, u8 *, u32, u32, u32, struct PoolRules *); + u32 (*OtherFunction)(const struct Trainer *, u8 *, u32, u32, u32, struct PoolRules *); +}; + +void DoTrainerPartyPool(const struct Trainer *trainer, u32 *monIndices, u8 monsCount, u32 battleTypeFlags); + +#endif diff --git a/include/trainer_slide.h b/include/trainer_slide.h index c6f7b745e8..19fdf7c24a 100644 --- a/include/trainer_slide.h +++ b/include/trainer_slide.h @@ -12,11 +12,11 @@ struct MessageStatus void SetTrainerSlideMessage(enum DifficultyLevel difficulty, u32 trainerId, u32 slideId); enum TrainerSlideTargets ShouldDoTrainerSlide(u32 battler, enum TrainerSlideType slideId); -void TryInitalizeFirstSTABMoveTrainerSlide(u32 battlerDef, u32 battlerAtk, u32 moveType); -void TryInitalizeTrainerSlidePlayerLandsFirstCriticalHit(u32 target); -void TryInitalizeTrainerSlideEnemyLandsFirstCriticalHit(u32 target); -void TryInitalizeTrainerSlidePlayerLandsFirstSuperEffectiveHit(u32 target); -void TryInitalizeTrainerSlideEnemyMonUnaffected(u32 target); +void TryInitializeFirstSTABMoveTrainerSlide(u32 battlerDef, u32 battlerAtk, u32 moveType); +void TryInitializeTrainerSlidePlayerLandsFirstCriticalHit(u32 target); +void TryInitializeTrainerSlideEnemyLandsFirstCriticalHit(u32 target); +void TryInitializeTrainerSlidePlayerLandsFirstSuperEffectiveHit(u32 target); +void TryInitializeTrainerSlideEnemyMonUnaffected(u32 target); bool32 IsTrainerSlideInitialized(enum TrainerSlideType slideId); bool32 IsTrainerSlidePlayed(enum TrainerSlideType slideId); void InitalizeTrainerSlide(enum TrainerSlideType slideId); diff --git a/migration_scripts/1.11/consolidate_contest_opponent_filters.py b/migration_scripts/1.11/consolidate_contest_opponent_filters.py new file mode 100644 index 0000000000..240152cea2 --- /dev/null +++ b/migration_scripts/1.11/consolidate_contest_opponent_filters.py @@ -0,0 +1,45 @@ +import glob +import re +import os + +if not os.path.exists("Makefile"): + print("Please run this script from your root folder.") + quit() + +# Read contest_opponents.h +for file in glob.glob('./src/data/contest_opponents.h'): + with open(file, 'r') as f: + source_content = f.read() + +# Extract party info from contest_opponents.h +source_pattern = re.compile(r'(\[CONTEST_OPPONENT_.*\])\s*=\s(CONTEST_FILTER_.*)*') +source_data = {} +for match in source_pattern.findall(source_content): + if len(match) == 2: + trainer_name, contest_filter = match + source_data[trainer_name] = (contest_filter) + +# Read contest_opponents.h content +for file in glob.glob('./src/data/contest_opponents.h'): + with open(file, 'r') as f: + destination_content = f.read() + +# Modify contest_opponents.h content +def add_filter_data(match): + trainer_name = match.group(1) + if trainer_name in source_data: + contest_filter = source_data[trainer_name] + print(f"Updating {trainer_name}: adding {contest_filter}") + #return f'{trainer_name} = {{\n .filter = {contest_filter}' + return f'{match.group(0)}\n .filter = {contest_filter}' + else: + return match.group(0) + +destination_pattern = re.compile(r'(\[CONTEST_OPPONENT_[A-Z_0-9]+\])\s*=\s*{') +modified_content = destination_pattern.sub(add_filter_data, destination_content) + +# Write the modified content back to contest_opponents.h +for file in glob.glob('./src/data/contest_opponents.h'): + with open(file, 'w') as f: + f.write(modified_content) + print("contest_opponents.h has been updated") diff --git a/migration_scripts/1.11/convert_battle_frontier_trainers.py b/migration_scripts/1.11/convert_battle_frontier_trainers.py new file mode 100644 index 0000000000..b218c79e31 --- /dev/null +++ b/migration_scripts/1.11/convert_battle_frontier_trainers.py @@ -0,0 +1,44 @@ +import glob +import re +import os + +if not os.path.exists("Makefile"): + print("Please run this script from your root folder.") + quit() + +# Read battle_frontier_trainer_mons.h and extract the party information +for file in glob.glob('./src/data/battle_frontier/battle_frontier_trainer_mons.h'): + with open(file, 'r') as f: + source_content = f.read() + +# Extract party info from battle_frontier_trainer_mons.h +source_pattern = re.compile(r'gBattleFrontierTrainerMons_(.*)\[\]\s*=\s*\n\{\n\s*(FRONTIER.*)') +source_data = {} +for match in source_pattern.findall(source_content): + if len(match) == 2: + trainer_name, party_group = match + source_data[trainer_name] = (party_group) + +# Read battle_frontier_trainers.h content +for file in glob.glob('./src/data/battle_frontier/battle_frontier_trainers.h'): + with open(file, 'r') as f: + destination_content = f.read() + +# Modify battle_frontier_trainers.h content +def add_party_data(match): + trainer_name = match.group(1) + if trainer_name in source_data: + party_group = source_data[trainer_name] + print(f"Updating {trainer_name}: adding {party_group}") + return f'(const u16[]){{{party_group}}}' + else: + return match.group(0) + +destination_pattern = re.compile(r'gBattleFrontierTrainerMons_(.*)') +modified_content = destination_pattern.sub(add_party_data, destination_content) + +# Write the modified content back to battle_frontier_trainers.h +for file in glob.glob('./src/data/battle_frontier/battle_frontier_trainers.h'): + with open(file, 'w') as f: + f.write(modified_content) + print("battle_frontier_trainers.h has been updated") diff --git a/migration_scripts/README.md b/migration_scripts/README.md index 696f146f14..0b1eb50583 100644 --- a/migration_scripts/README.md +++ b/migration_scripts/README.md @@ -17,6 +17,48 @@ python3 migration_scripts/*.py ; #run the migration script `*` will need to be replaced with the name of the appropriate script. +## 1.10.x to 1.11.x+ + +### Contest Opponents + +* Filepath [`migration_scripts/1.11/consolidate_contest_opponent_filters.py`](1.11/consolidate_contest_opponent_filters.py) +* Introduced in [Consolidated contest opponent filters into gContestOpponents #6119](https://github.com/rh-hideout/pokeemerald-expansion/pull/6119) + +Moves the contest opponent filters in src/data/contest_opponents.h from gPostgameContestOpponentFilter to gContestOpponents + +#### [src/data/contest_opponents.h](../src/data/contest_opponents.h) +```diff +const struct ContestPokemon gContestOpponents[] = +{ + [CONTEST_OPPONENT_JIMMY] = { ++ .filter = CONTEST_FILTER_NONE, +... +- const u8 gPostgameContestOpponentFilter[] = +- { +- [CONTEST_OPPONENT_JIMMY] = CONTEST_FILTER_NONE, +``` + +### Battle Frontier Trainers + +* Filepath [`migration_scripts/1.11/convert_battle_frontier_trainers.py`](1.11/convert_battle_frontier_trainers.py) +* Introduced in [Consolidated Frontier teams into battle_frontier_trainers.h #5892](https://github.com/rh-hideout/pokeemerald-expansion/pull/5892) + +Moves the Battle Frontier trainer parties from battle_frontier_trainer_mons.h to battle_frontier_trainers.h + +#### [src/data/battle_frontier/battle_frontier_trainer_mons.h](../src/data/battle_frontier/battle_frontier_trainer_mons.h) +```diff +- const u16 gBattleFrontierTrainerMons_Brady[] = +- { +- FRONTIER_MONS_YOUNGSTER_LASS_1 +- }; +``` + +#### [src/data/battle_frontier/battle_frontier_trainers.h](../src/data/battle_frontier/battle_frontier_trainers.h) +```diff +- .monSet = gBattleFrontierTrainerMons_Brady ++ .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_1} +``` + ## 1.8.x to 1.9.x+ ### Battle Anim Moves diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk index b1cc2ac025..37074cb048 100644 --- a/spritesheet_rules.mk +++ b/spritesheet_rules.mk @@ -747,6 +747,9 @@ $(POKEMONGFXDIR)/venusaur/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/venusaur/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/venusaur/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/charmander/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -756,6 +759,12 @@ $(POKEMONGFXDIR)/charmeleon/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/charizard/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/charizard/mega_x/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/charizard/mega_y/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/squirtle/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -765,6 +774,9 @@ $(POKEMONGFXDIR)/wartortle/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/blastoise/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/blastoise/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/caterpie/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -786,6 +798,9 @@ $(POKEMONGFXDIR)/kakuna/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/beedrill/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/beedrill/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/pidgey/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -795,6 +810,9 @@ $(POKEMONGFXDIR)/pidgeotto/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/pidgeot/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/pidgeot/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/rattata/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -963,6 +981,9 @@ $(POKEMONGFXDIR)/kadabra/overworldf.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/alakazam/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/alakazam/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/alakazam/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1011,6 +1032,9 @@ $(POKEMONGFXDIR)/slowpoke/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/slowbro/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/slowbro/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/magnemite/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1059,6 +1083,9 @@ $(POKEMONGFXDIR)/haunter/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/gengar/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/gengar/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/onix/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1131,6 +1158,9 @@ $(POKEMONGFXDIR)/tangela/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/kangaskhan/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/kangaskhan/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/horsea/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1176,6 +1206,9 @@ $(POKEMONGFXDIR)/magmar/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/pinsir/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/pinsir/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/tauros/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1191,6 +1224,9 @@ $(POKEMONGFXDIR)/gyarados/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/gyarados/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/gyarados/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/lapras/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1230,6 +1266,9 @@ $(POKEMONGFXDIR)/kabutops/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/aerodactyl/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/aerodactyl/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/snorlax/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1254,6 +1293,12 @@ $(POKEMONGFXDIR)/dragonite/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/mewtwo/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/mewtwo/mega_x/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/mewtwo/mega_y/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/mew/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1359,6 +1404,9 @@ $(POKEMONGFXDIR)/flaaffy/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/ampharos/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/ampharos/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/bellossom/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1551,6 +1599,9 @@ $(POKEMONGFXDIR)/steelix/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/steelix/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 8 -mheight 8 +$(POKEMONGFXDIR)/steelix/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + $(POKEMONGFXDIR)/snubbull/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1566,6 +1617,9 @@ $(POKEMONGFXDIR)/scizor/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/scizor/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/scizor/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/shuckle/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1575,6 +1629,9 @@ $(POKEMONGFXDIR)/heracross/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/heracross/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/heracross/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/sneasel/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1635,6 +1692,9 @@ $(POKEMONGFXDIR)/houndoom/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/houndoom/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/houndoom/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/kingdra/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1695,6 +1755,9 @@ $(POKEMONGFXDIR)/pupitar/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/tyranitar/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/tyranitar/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/lugia/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 8 -mheight 8 @@ -1713,6 +1776,9 @@ $(POKEMONGFXDIR)/grovyle/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/sceptile/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/sceptile/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/torchic/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1731,6 +1797,9 @@ $(POKEMONGFXDIR)/blaziken/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/blaziken/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/blaziken/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/mudkip/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1740,6 +1809,9 @@ $(POKEMONGFXDIR)/marshtomp/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/swampert/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/swampert/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/poochyena/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1821,6 +1893,9 @@ $(POKEMONGFXDIR)/kirlia/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/gardevoir/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/gardevoir/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/surskit/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1881,9 +1956,15 @@ $(POKEMONGFXDIR)/delcatty/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/sableye/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/sableye/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/mawile/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/mawile/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/aron/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1893,6 +1974,9 @@ $(POKEMONGFXDIR)/lairon/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/aggron/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/aggron/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/meditite/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1905,12 +1989,18 @@ $(POKEMONGFXDIR)/medicham/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/medicham/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/medicham/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/electrike/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(POKEMONGFXDIR)/manectric/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/manectric/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/plusle/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1947,6 +2037,9 @@ $(POKEMONGFXDIR)/carvanha/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/sharpedo/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/sharpedo/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/wailmer/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1965,6 +2058,9 @@ $(POKEMONGFXDIR)/camerupt/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/camerupt/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/camerupt/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/torkoal/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2001,6 +2097,9 @@ $(POKEMONGFXDIR)/swablu/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/altaria/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/altaria/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/zangoose/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2073,6 +2172,9 @@ $(POKEMONGFXDIR)/shuppet/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/banette/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/banette/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/duskull/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2088,6 +2190,9 @@ $(POKEMONGFXDIR)/chimecho/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/absol/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/absol/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/wynaut/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2097,6 +2202,9 @@ $(POKEMONGFXDIR)/snorunt/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/glalie/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/glalie/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/spheal/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2133,6 +2241,9 @@ $(POKEMONGFXDIR)/shelgon/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/salamence/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/salamence/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/beldum/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2142,6 +2253,9 @@ $(POKEMONGFXDIR)/metang/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/metagross/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/metagross/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/regirock/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2154,18 +2268,33 @@ $(POKEMONGFXDIR)/registeel/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/latias/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/latias/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + $(POKEMONGFXDIR)/latios/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/latios/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + $(POKEMONGFXDIR)/kyogre/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 8 -mheight 8 +$(POKEMONGFXDIR)/kyogre/primal/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + $(POKEMONGFXDIR)/groudon/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 8 -mheight 8 +$(POKEMONGFXDIR)/groudon/primal/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + $(POKEMONGFXDIR)/rayquaza/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 8 -mheight 8 +$(POKEMONGFXDIR)/rayquaza/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + $(POKEMONGFXDIR)/jirachi/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2346,6 +2475,9 @@ $(POKEMONGFXDIR)/buneary/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/lopunny/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/lopunny/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/mismagius/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2406,6 +2538,9 @@ $(POKEMONGFXDIR)/garchomp/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/garchomp/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/garchomp/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/munchlax/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2415,6 +2550,9 @@ $(POKEMONGFXDIR)/riolu/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/lucario/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/lucario/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/hippopotas/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2475,6 +2613,9 @@ $(POKEMONGFXDIR)/abomasnow/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/abomasnow/overworldf.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/abomasnow/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/weavile/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2532,6 +2673,9 @@ $(POKEMONGFXDIR)/porygon_z/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/gallade/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/gallade/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/probopass/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2703,6 +2847,9 @@ $(POKEMONGFXDIR)/excadrill/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/audino/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/audino/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/timburr/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -3282,6 +3429,9 @@ $(POKEMONGFXDIR)/zygarde/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/diancie/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/diancie/mega/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/hoopa/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -3537,6 +3687,9 @@ $(POKEMONGFXDIR)/necrozma/dawn_wings/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/necrozma/dusk_mane/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/necrozma/ultra/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/magearna/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 diff --git a/src/agb_flash_1m.c b/src/agb_flash_1m.c index 6fc4f3d600..037f7a964d 100644 --- a/src/agb_flash_1m.c +++ b/src/agb_flash_1m.c @@ -1,7 +1,7 @@ #include "gba/gba.h" #include "gba/flash_internal.h" -static const char AgbLibFlashVersion[] = "FLASH1M_V103"; +USED static const char AgbLibFlashVersion[] = "FLASH1M_V103"; static const struct FlashSetupInfo * const sSetupInfos[] = { diff --git a/src/apprentice.c b/src/apprentice.c index 66011fe76c..7769dde6e3 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -339,7 +339,7 @@ static u16 GetRandomAlternateMove(u8 monId) numLearnsetMoves = j; i = 0; - // i < 5 here is arbitrary, i isnt used and is only incremented when the selected move isnt in sValidApprenticeMoves + // i < 5 here is arbitrary, i isn't used and is only incremented when the selected move isn't valid (determined by the validApprenticeMove value) // This while loop contains 3 potential infinite loops, though none of them would occur in the base game while (i < 5) { @@ -411,7 +411,7 @@ static u16 GetRandomAlternateMove(u8 monId) if (TrySetMove(monId, moveId)) { - if (sValidApprenticeMoves[moveId]) + if (gMovesInfo[moveId].validApprenticeMove) break; i++; } diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 66774d1afe..efda602fef 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -40,7 +40,6 @@ static bool32 IsPinchBerryItemEffect(u32 holdEffect); // ewram EWRAM_DATA const u8 *gAIScriptPtr = NULL; // Still used in contests -EWRAM_DATA u8 sBattler_AI = 0; EWRAM_DATA AiScoreFunc sDynamicAiFunc = NULL; // const rom data @@ -101,7 +100,7 @@ void BattleAI_SetupItems(void) { s32 i; u8 *data = (u8 *)BATTLE_HISTORY; - const u16 *items = GetTrainerItemsFromId(gTrainerBattleOpponent_A); + const u16 *items = GetTrainerItemsFromId(TRAINER_BATTLE_PARAM.opponentA); for (i = 0; i < sizeof(struct BattleHistory); i++) data[i] = 0; @@ -216,9 +215,9 @@ void BattleAI_SetupFlags(void) } else { - AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_LEFT] = GetAiFlags(gTrainerBattleOpponent_A); - if (gTrainerBattleOpponent_B != 0) - AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_RIGHT] = GetAiFlags(gTrainerBattleOpponent_B); + AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_LEFT] = GetAiFlags(TRAINER_BATTLE_PARAM.opponentA); + if (TRAINER_BATTLE_PARAM.opponentB != 0) + AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_RIGHT] = GetAiFlags(TRAINER_BATTLE_PARAM.opponentB); else AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_RIGHT] = AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_LEFT]; } @@ -268,25 +267,24 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) SET_SCORE(battler, i, 0); } - //sBattler_AI = battler; - gBattlerTarget = SetRandomTarget(sBattler_AI); - gBattleStruct->aiChosenTarget[sBattler_AI] = gBattlerTarget; + gBattlerTarget = SetRandomTarget(battler); + gBattleStruct->aiChosenTarget[battler] = gBattlerTarget; } -u32 BattleAI_ChooseMoveOrAction(void) +u32 BattleAI_ChooseMoveOrAction(u32 battler) { u32 ret; if (!IsDoubleBattle()) - ret = ChooseMoveOrAction_Singles(sBattler_AI); + ret = ChooseMoveOrAction_Singles(battler); else - ret = ChooseMoveOrAction_Doubles(sBattler_AI); + ret = ChooseMoveOrAction_Doubles(battler); // Clear protect structures, some flags may be set during AI calcs // e.g. pranksterElevated from GetBattleMovePriority memset(&gProtectStructs, 0, MAX_BATTLERS_COUNT * sizeof(struct ProtectStruct)); #if TESTING - TestRunner_Battle_CheckAiMoveScores(sBattler_AI); + TestRunner_Battle_CheckAiMoveScores(battler); #endif // TESTING return ret; } @@ -421,7 +419,7 @@ static void CalcBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { struct SimulatedDamage dmg = {0}; - u8 effectiveness = AI_EFFECTIVENESS_x0; + uq4_12_t effectiveness = Q_4_12(0.0); move = moves[moveIndex]; if (move != MOVE_NONE @@ -469,7 +467,7 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData) gBattleStruct->aiDelayTimer = gMain.vblankCounter1; aiData->weatherHasEffect = HasWeatherEffect(); - weather = AI_GetWeather(aiData); + weather = AI_GetWeather(); // get/assume all battler data and simulate AI damage battlersCount = gBattlersCount; @@ -583,7 +581,7 @@ static u32 ChooseMoveOrAction_Doubles(u32 battlerAi) AI_DATA->partnerMove = GetAllyChosenMove(battlerAi); AI_THINKING_STRUCT->aiLogicId = 0; AI_THINKING_STRUCT->movesetIndex = 0; - flags = AI_THINKING_STRUCT->aiFlags[sBattler_AI]; + flags = AI_THINKING_STRUCT->aiFlags[battlerAi]; while (flags != 0) { @@ -722,14 +720,14 @@ static inline void BattleAI_DoAIProcessing(struct AI_ThinkingStruct *aiThink, u3 void BattleAI_DoAIProcessing_PredictedSwitchin(struct AI_ThinkingStruct *aiThink, struct AiLogicData *aiData, u32 battlerAtk, u32 battlerDef) { struct BattlePokemon switchoutCandidate = gBattleMons[battlerDef]; - struct SimulatedDamage simulatedDamageSwitchout[4]; - u8 effectivenessSwitchout[4]; - u8 moveAccuracySwitchout[4]; + struct SimulatedDamage simulatedDamageSwitchout[MAX_MON_MOVES]; + uq4_12_t effectivenessSwitchout[MAX_MON_MOVES]; + u8 moveAccuracySwitchout[MAX_MON_MOVES]; struct BattlePokemon switchinCandidate; - struct SimulatedDamage simulatedDamageSwitchin[4]; - u8 effectivenessSwitchin[4]; - u8 moveAccuracySwitchin[4]; + struct SimulatedDamage simulatedDamageSwitchin[MAX_MON_MOVES]; + uq4_12_t effectivenessSwitchin[MAX_MON_MOVES]; + u8 moveAccuracySwitchin[MAX_MON_MOVES]; struct Pokemon *party = GetBattlerParty(battlerDef); struct BattlePokemon *savedBattleMons = AllocSaveBattleMons(); @@ -747,7 +745,7 @@ void BattleAI_DoAIProcessing_PredictedSwitchin(struct AI_ThinkingStruct *aiThink PokemonToBattleMon(&party[aiData->mostSuitableMonId[battlerDef]], &switchinCandidate); gBattleMons[battlerDef] = switchinCandidate; SetBattlerAiData(battlerDef, aiData); - CalcBattlerAiMovesData(aiData, battlerAtk, battlerDef, AI_GetWeather(aiData)); + CalcBattlerAiMovesData(aiData, battlerAtk, battlerDef, AI_GetWeather()); // Regular processing with new battler do @@ -762,7 +760,7 @@ void BattleAI_DoAIProcessing_PredictedSwitchin(struct AI_ThinkingStruct *aiThink && aiThink->score[aiThink->movesetIndex] > 0 && ShouldConsiderMoveForBattler(battlerAtk, battlerDef, aiThink->moveConsidered)) { - if (IsChaseEffect(gMovesInfo[aiThink->moveConsidered].effect)) + if (IsChaseEffect(GetMoveEffect(aiThink->moveConsidered))) { // Save new switchin data simulatedDamageSwitchin[aiThink->movesetIndex] = aiData->simulatedDmg[battlerAtk][battlerDef][aiThink->movesetIndex]; @@ -839,7 +837,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) s32 moveType; u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); struct AiLogicData *aiData = AI_DATA; - u32 effectiveness = aiData->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; + uq4_12_t effectiveness = aiData->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk); u32 i; u32 weather; @@ -863,14 +861,12 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (gBattleStruct->battlerState[battlerDef].commandingDondozo) RETURN_SCORE_MINUS(20); - // check if negates type - switch (effectiveness) + if (effectiveness == UQ_4_12(0.0)) { - case AI_EFFECTIVENESS_x0: RETURN_SCORE_MINUS(20); - break; - case AI_EFFECTIVENESS_x0_125: - case AI_EFFECTIVENESS_x0_25: + } + else if (effectiveness < UQ_4_12(0.5)) + { switch (moveEffect) { case EFFECT_FIXED_DAMAGE_ARG: @@ -889,19 +885,18 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) default: RETURN_SCORE_MINUS(10); } - break; } // check non-user target if (!(moveTarget & MOVE_TARGET_USER)) { // target ability checks - if (!DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) + if (!DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move)) { - if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef])) + if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef], ABILITY_CHECK_TRIGGER)) RETURN_SCORE_MINUS(20); - if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType)) + if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType, ABILITY_CHECK_TRIGGER)) RETURN_SCORE_MINUS(20); switch (aiData->abilities[battlerDef]) @@ -922,7 +917,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case ABILITY_WONDER_GUARD: - if (effectiveness < AI_EFFECTIVENESS_x2) + if (effectiveness < UQ_4_12(2.0)) RETURN_SCORE_MINUS(20); break; case ABILITY_JUSTIFIED: @@ -988,11 +983,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_MINUS(10); break; case ABILITY_SHIELDS_DOWN: - if (IsShieldsDownProtected(battlerAtk) && IsNonVolatileStatusMoveEffect(moveEffect)) + if (IsShieldsDownProtected(battlerAtk, aiData->abilities[battlerAtk]) && IsNonVolatileStatusMoveEffect(moveEffect)) RETURN_SCORE_MINUS(10); break; case ABILITY_LEAF_GUARD: - if ((AI_GetWeather(aiData) & B_WEATHER_SUN) + if ((AI_GetWeather() & B_WEATHER_SUN) && aiData->holdEffects[battlerDef] != HOLD_EFFECT_UTILITY_UMBRELLA && IsNonVolatileStatusMoveEffect(moveEffect)) RETURN_SCORE_MINUS(10); @@ -1002,17 +997,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // target partner ability checks & not attacking partner if (isDoubleBattle) { - if (CanPartnerAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[BATTLE_PARTNER(battlerDef)])) - RETURN_SCORE_MINUS(20); - switch (aiData->abilities[BATTLE_PARTNER(battlerDef)]) { case ABILITY_LIGHTNING_ROD: - if (moveType == TYPE_ELECTRIC && !IsMoveRedirectionPrevented(move, aiData->abilities[battlerAtk])) + if (moveType == TYPE_ELECTRIC && !IsMoveRedirectionPrevented(battlerAtk, move, aiData->abilities[battlerAtk])) RETURN_SCORE_MINUS(20); break; case ABILITY_STORM_DRAIN: - if (moveType == TYPE_WATER && !IsMoveRedirectionPrevented(move, aiData->abilities[battlerAtk])) + if (moveType == TYPE_WATER && !IsMoveRedirectionPrevented(battlerAtk, move, aiData->abilities[battlerAtk])) RETURN_SCORE_MINUS(20); break; case ABILITY_MAGIC_BOUNCE: @@ -1070,7 +1062,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) return 0; // Can't even select heal blocked move // primal weather check - weather = AI_GetWeather(aiData); + weather = AI_GetWeather(); if (weather & B_WEATHER_PRIMAL_ANY) { switch (moveEffect) @@ -1117,11 +1109,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (!(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_WILL_SUICIDE)) ADJUST_SCORE(-2); - if (effectiveness == AI_EFFECTIVENESS_x0) + if (effectiveness == UQ_4_12(0.0)) { ADJUST_SCORE(-10); } - else if (IsAbilityOnField(ABILITY_DAMP) && !DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) + else if (IsAbilityOnField(ABILITY_DAMP) && !DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move)) { ADJUST_SCORE(-10); } @@ -1360,36 +1352,36 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // stat lowering effects case EFFECT_ATTACK_DOWN: case EFFECT_ATTACK_DOWN_2: - if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) + if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) ADJUST_SCORE(-10); else if (aiData->abilities[battlerDef] == ABILITY_HYPER_CUTTER) ADJUST_SCORE(-10); break; case EFFECT_DEFENSE_DOWN: case EFFECT_DEFENSE_DOWN_2: - if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_DEF)) + if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_DEF)) ADJUST_SCORE(-10); break; case EFFECT_SPEED_DOWN: case EFFECT_SPEED_DOWN_2: - if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) + if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) ADJUST_SCORE(-10); else if (aiData->abilities[battlerDef] == ABILITY_SPEED_BOOST) ADJUST_SCORE(-10); break; case EFFECT_SPECIAL_ATTACK_DOWN: case EFFECT_SPECIAL_ATTACK_DOWN_2: - if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) + if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) ADJUST_SCORE(-10); break; case EFFECT_SPECIAL_DEFENSE_DOWN: case EFFECT_SPECIAL_DEFENSE_DOWN_2: - if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPDEF)) + if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPDEF)) ADJUST_SCORE(-10); break; case EFFECT_ACCURACY_DOWN: case EFFECT_ACCURACY_DOWN_2: - if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ACC)) + if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ACC)) ADJUST_SCORE(-10); else if (aiData->abilities[battlerDef] == ABILITY_KEEN_EYE || aiData->abilities[battlerDef] == ABILITY_MINDS_EYE || (B_ILLUMINATE_EFFECT >= GEN_9 && aiData->abilities[battlerDef] == ABILITY_ILLUMINATE)) @@ -1398,9 +1390,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_EVASION_DOWN: case EFFECT_EVASION_DOWN_2: case EFFECT_TICKLE: - if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ATK)) + if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK)) ADJUST_SCORE(-10); - else if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_DEF)) + else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_DEF)) ADJUST_SCORE(-8); break; case EFFECT_VENOM_DRENCH: @@ -1410,18 +1402,18 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } else { - if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) + if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) ADJUST_SCORE(-10); - else if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) + else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) ADJUST_SCORE(-8); - else if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ATK)) + else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK)) ADJUST_SCORE(-6); } break; case EFFECT_NOBLE_ROAR: - if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) + if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) ADJUST_SCORE(-10); - else if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ATK)) + else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK)) ADJUST_SCORE(-8); break; case EFFECT_CAPTIVATE: @@ -1452,7 +1444,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_FIXED_DAMAGE_ARG: case EFFECT_FOCUS_PUNCH: // AI_CBM_HighRiskForDamage - if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < AI_EFFECTIVENESS_x2) + if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < UQ_4_12(2.0)) ADJUST_SCORE(-10); if (HasDamagingMove(battlerDef) && !((gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE) || IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) @@ -1482,7 +1474,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_TOXIC_THREAD: - if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) + if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) ADJUST_SCORE(-1); // may still want to just poison //fallthrough case EFFECT_POISON: @@ -1897,7 +1889,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_STRENGTH_SAP: if (aiData->abilities[battlerDef] == ABILITY_CONTRARY) ADJUST_SCORE(-10); - else if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ATK)) + else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK)) ADJUST_SCORE(-10); break; case EFFECT_COPYCAT: @@ -1946,7 +1938,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_MORNING_SUN: case EFFECT_SYNTHESIS: case EFFECT_MOONLIGHT: - if ((AI_GetWeather(aiData) & (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_HAIL | B_WEATHER_SNOW | B_WEATHER_FOG))) + if ((AI_GetWeather() & (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_HAIL | B_WEATHER_SNOW | B_WEATHER_FOG))) ADJUST_SCORE(-3); else if (AI_BattlerAtMaxHp(battlerAtk)) ADJUST_SCORE(-10); @@ -2102,8 +2094,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) 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 + & (SIDE_STATUS_SCREEN_ANY | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST) || gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY) { if (PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) @@ -2201,7 +2192,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-4); break; case EFFECT_WISH: - if (gWishFutureKnock.wishCounter[battlerAtk] != 0) + if (gWishFutureKnock.wishCounter[battlerAtk] > gBattleTurnCounter) ADJUST_SCORE(-10); break; case EFFECT_ASSIST: @@ -2614,13 +2605,13 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_TAILWIND: - if (gSideTimers[GetBattlerSide(battlerAtk)].tailwindTimer != 0 - || PartnerMoveEffectIs(BATTLE_PARTNER(battlerAtk), aiData->partnerMove, EFFECT_TAILWIND) - || (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer > 1)) // Trick Room active and not ending this turn + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_TAILWIND + || PartnerMoveEffectIs(BATTLE_PARTNER(battlerAtk), aiData->partnerMove, EFFECT_TAILWIND) + || gFieldStatuses & STATUS_FIELD_TRICK_ROOM) ADJUST_SCORE(-10); break; case EFFECT_LUCKY_CHANT: - if (gSideTimers[GetBattlerSide(battlerAtk)].luckyChantTimer != 0 + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_LUCKY_CHANT || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) ADJUST_SCORE(-10); break; @@ -2720,7 +2711,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // Don't use user-target moves ie. Swords Dance, with exceptions if ((moveTarget & MOVE_TARGET_USER) && moveEffect != EFFECT_DESTINY_BOND && moveEffect != EFFECT_WISH && moveEffect != EFFECT_HEALING_WISH - && !(moveEffect == EFFECT_AURORA_VEIL && (AI_GetWeather(aiData) & (B_WEATHER_SNOW | B_WEATHER_HAIL)))) + && !(moveEffect == EFFECT_AURORA_VEIL && (AI_GetWeather() & (B_WEATHER_SNOW | B_WEATHER_HAIL)))) ADJUST_SCORE(-30); // Don't use a status move if the mon is the last one in the party, has no good switchin, or is trapped else if (GetBattleMoveCategory(move) == DAMAGE_CATEGORY_STATUS @@ -2841,7 +2832,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) 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 + && (AI_GetMoveEffectiveness(MOVE_EARTHQUAKE, battlerAtk, battlerAtkPartner) != UQ_4_12(0.0))) // Doesn't resist ground move { RETURN_SCORE_PLUS(DECENT_EFFECT); // partner has earthquake or magnitude -> good idea to use magnet rise } @@ -2899,7 +2890,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) { // partner ability checks - if (!partnerProtecting && moveTarget != MOVE_TARGET_BOTH && !DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) + if (!partnerProtecting && moveTarget != MOVE_TARGET_BOTH && !DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move)) { switch (atkPartnerAbility) { @@ -3304,13 +3295,41 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId) return score; } +static u32 AI_CalcHoldEffectMoveScore(u32 battlerAtk, u32 battlerDef, u32 move) +{ + struct AiLogicData *aiData = AI_DATA; + u32 holdEffect = aiData->holdEffects[battlerAtk]; + + s32 score = 0; + + switch (holdEffect) + { + case HOLD_EFFECT_BLUNDER_POLICY: + { + u32 moveAcc = aiData->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; + + if (moveAcc <= BLUNDER_POLICY_ACCURACY_THRESHOLD) + { + ADJUST_SCORE(GOOD_EFFECT); + } + else + { + ADJUST_SCORE(-DECENT_EFFECT); + } + } + break; + } + + return score; +} + static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) { // move data u32 moveEffect = GetMoveEffect(move); struct AiLogicData *aiData = AI_DATA; u32 movesetIndex = AI_THINKING_STRUCT->movesetIndex; - u32 effectiveness = aiData->effectiveness[battlerAtk][battlerDef][movesetIndex]; + uq4_12_t effectiveness = aiData->effectiveness[battlerAtk][battlerDef][movesetIndex]; s32 score = 0; u32 predictedMove = aiData->lastUsedMove[battlerDef]; @@ -3324,7 +3343,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) moveEffect = EFFECT_PROTECT; // check status move preference - if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_PREFER_STATUS_MOVES && IsBattleMoveStatus(move) && effectiveness != AI_EFFECTIVENESS_x0) + if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_PREFER_STATUS_MOVES && IsBattleMoveStatus(move) && effectiveness != UQ_4_12(0.0)) ADJUST_SCORE(10); // check thawing moves @@ -3347,7 +3366,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) IncreaseSleepScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_ABSORB: - if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT && effectiveness >= AI_EFFECTIVENESS_x1) + if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT && effectiveness >= UQ_4_12(1.0)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_EXPLOSION: @@ -3601,7 +3620,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) || HasMoveEffect(EFFECT_SNORE, battlerAtk) || aiData->abilities[battlerAtk] == ABILITY_SHED_SKIN || aiData->abilities[battlerAtk] == ABILITY_EARLY_BIRD - || (AI_GetWeather(aiData) & B_WEATHER_RAIN && gWishFutureKnock.weatherDuration != 1 && aiData->abilities[battlerAtk] == ABILITY_HYDRATION && aiData->holdEffects[battlerAtk] != HOLD_EFFECT_UTILITY_UMBRELLA)) + || (AI_GetWeather() & B_WEATHER_RAIN && gWishFutureKnock.weatherDuration != 1 && aiData->abilities[battlerAtk] == ABILITY_HYDRATION && aiData->holdEffects[battlerAtk] != HOLD_EFFECT_UTILITY_UMBRELLA)) ADJUST_SCORE(GOOD_EFFECT); } break; @@ -3811,7 +3830,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_STEALTH_ROCK: case EFFECT_STICKY_WEB: case EFFECT_TOXIC_SPIKES: - if (AI_ShouldSetUpHazards(battlerAtk, battlerDef, aiData)); + if (AI_ShouldSetUpHazards(battlerAtk, battlerDef, aiData)) { if (gDisableStructs[battlerAtk].isFirstTurn) ADJUST_SCORE(BEST_EFFECT); @@ -3958,7 +3977,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_FLATTER: if (HasMoveEffect(battlerAtk, EFFECT_FOUL_PLAY) || HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP) - || HasMoveWithAdditionalEffect(battlerAtk, MOVE_EFFECT_SPECTRAL_THIEF)) + || HasMoveEffect(battlerAtk, EFFECT_SPECTRAL_THIEF)) ADJUST_SCORE(DECENT_EFFECT); if (aiData->abilities[battlerDef] == ABILITY_CONTRARY) ADJUST_SCORE(GOOD_EFFECT); @@ -4074,12 +4093,12 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) switch (aiData->abilities[battlerDef]) { case ABILITY_SWIFT_SWIM: - if (AI_GetWeather(aiData) & B_WEATHER_RAIN) + if (AI_GetWeather() & B_WEATHER_RAIN) ADJUST_SCORE(DECENT_EFFECT); // Slow 'em down break; case ABILITY_CHLOROPHYLL: case ABILITY_FLOWER_GIFT: - if (AI_GetWeather(aiData) & B_WEATHER_SUN) + if (AI_GetWeather() & B_WEATHER_SUN) ADJUST_SCORE(DECENT_EFFECT); // Slow 'em down break; } @@ -4489,7 +4508,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_MAGNET_RISE: if (IsBattlerGrounded(battlerAtk) && HasDamagingMoveOfType(battlerDef, TYPE_ELECTRIC) - && !(AI_GetMoveEffectiveness(MOVE_EARTHQUAKE, battlerDef, battlerAtk) == AI_EFFECTIVENESS_x0)) // Doesn't resist ground move + && !(effectiveness == UQ_4_12(0.0))) // Doesn't resist ground move { if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker goes first { @@ -4507,7 +4526,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_CAMOUFLAGE: if (predictedMove != MOVE_NONE && AI_IsFaster(battlerAtk, battlerDef, move) // Attacker goes first - && !IsBattleMoveStatus(move) && AI_GetMoveEffectiveness(predictedMove, battlerDef, battlerAtk) != AI_EFFECTIVENESS_x0) + && !IsBattleMoveStatus(move) && effectiveness != UQ_4_12(0.0)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_TOXIC_THREAD: @@ -4527,7 +4546,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_SHORE_UP: - if ((AI_GetWeather(aiData) & B_WEATHER_SANDSTORM) && ShouldRecover(battlerAtk, battlerDef, move, 67)) + if ((AI_GetWeather() & B_WEATHER_SANDSTORM) && ShouldRecover(battlerAtk, battlerDef, move, 67)) ADJUST_SCORE(DECENT_EFFECT); else if (ShouldRecover(battlerAtk, battlerDef, move, 50)) ADJUST_SCORE(DECENT_EFFECT); @@ -4565,8 +4584,9 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if ((gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerAtk) != 0) || (gStatuses3[battlerAtk] & STATUS3_LEECHSEED || gBattleMons[battlerAtk].status2 & STATUS2_WRAPPED)) ADJUST_SCORE(GOOD_EFFECT); + case EFFECT_SPECTRAL_THIEF: + ADJUST_SCORE(AI_ShouldCopyStatChanges(battlerAtk, battlerDef)); break; - } // move effect checks u32 additionalEffectCount = GetMoveAdditionalEffectCount(move); @@ -4692,9 +4712,6 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case MOVE_EFFECT_CLEAR_SMOG: score += AI_TryToClearStats(battlerAtk, battlerDef, FALSE); break; - case MOVE_EFFECT_SPECTRAL_THIEF: - score += AI_ShouldCopyStatChanges(battlerAtk, battlerDef); - break; case MOVE_EFFECT_BUG_BITE: // And pluck if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD) break; @@ -4842,6 +4859,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score } ADJUST_SCORE(AI_CalcMoveEffectScore(battlerAtk, battlerDef, move)); + ADJUST_SCORE(AI_CalcHoldEffectMoveScore(battlerAtk, battlerDef, move)); return score; } @@ -5320,7 +5338,7 @@ static s32 AI_PowerfulStatus(u32 battlerAtk, u32 battlerDef, u32 move, s32 score switch (moveEffect) { case EFFECT_TAILWIND: - if (!gSideTimers[GetBattlerSide(battlerAtk)].tailwindTimer && !(gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer > 1)) + if (!gSideTimers[GetBattlerSide(battlerAtk)].tailwindTimer && !(gFieldStatuses & STATUS_FIELD_TRICK_ROOM)) ADJUST_SCORE(POWERFUL_STATUS_MOVE); break; case EFFECT_TRICK_ROOM: @@ -5377,23 +5395,23 @@ static s32 AI_PowerfulStatus(u32 battlerAtk, u32 battlerDef, u32 move, s32 score ADJUST_SCORE(POWERFUL_STATUS_MOVE); break; case EFFECT_SANDSTORM: - if (!(AI_GetWeather(AI_DATA) & (B_WEATHER_SANDSTORM | B_WEATHER_PRIMAL_ANY))) + if (!(AI_GetWeather() & (B_WEATHER_SANDSTORM | B_WEATHER_PRIMAL_ANY))) ADJUST_SCORE(POWERFUL_STATUS_MOVE); break; case EFFECT_SUNNY_DAY: - if (!(AI_GetWeather(AI_DATA) & (B_WEATHER_SUN | B_WEATHER_PRIMAL_ANY))) + if (!(AI_GetWeather() & (B_WEATHER_SUN | B_WEATHER_PRIMAL_ANY))) ADJUST_SCORE(POWERFUL_STATUS_MOVE); break; case EFFECT_RAIN_DANCE: - if (!(AI_GetWeather(AI_DATA) & (B_WEATHER_RAIN | B_WEATHER_PRIMAL_ANY))) + if (!(AI_GetWeather() & (B_WEATHER_RAIN | B_WEATHER_PRIMAL_ANY))) ADJUST_SCORE(POWERFUL_STATUS_MOVE); break; case EFFECT_HAIL: - if (!(AI_GetWeather(AI_DATA) & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY))) + if (!(AI_GetWeather() & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY))) ADJUST_SCORE(POWERFUL_STATUS_MOVE); break; case EFFECT_SNOWSCAPE: - if (!(AI_GetWeather(AI_DATA) & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY))) + if (!(AI_GetWeather() & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY))) ADJUST_SCORE(POWERFUL_STATUS_MOVE); } @@ -5407,9 +5425,9 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 ability = gBattleMons[battlerAtk].ability; u32 opposingHazardFlags = gSideStatuses[GetBattlerSide(battlerDef)] & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_TOXIC_SPIKES); u32 aiHazardFlags = gSideStatuses[GetBattlerSide(battlerAtk)] & (SIDE_STATUS_HAZARDS_ANY); - u32 moveEffect = gMovesInfo[move].effect; + u32 moveEffect = GetMoveEffect(move); struct AiLogicData *aiData = AI_DATA; - u32 effectiveness = aiData->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; + uq4_12_t effectiveness = aiData->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; // Switch benefit switch (moveEffect) @@ -5430,7 +5448,7 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(DECENT_EFFECT); if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_CHECK_BAD_MOVE) { - if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < AI_EFFECTIVENESS_x2) + if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < UQ_4_12(2.0)) ADJUST_SCORE(10); if (HasDamagingMove(battlerDef) && !((gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE) || IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) @@ -5527,9 +5545,9 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } // Additional effects - for (i = 0; i < gMovesInfo[move].numAdditionalEffects; i++) + for (i = 0; i < GetMoveAdditionalEffectCount(move); i++) { - switch (gMovesInfo[move].additionalEffects[i].moveEffect) + switch (GetMoveAdditionalEffectById(move, i)->moveEffect) { case MOVE_EFFECT_WRAP: ADJUST_SCORE(-GOOD_EFFECT); diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 24fafaf8bd..fcd8b5ce71 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -37,6 +37,74 @@ static void InitializeSwitchinCandidate(struct Pokemon *mon) AI_DATA->switchinCandidate.hypotheticalStatus = FALSE; } +u32 GetSwitchChance(enum ShouldSwitchScenario shouldSwitchScenario) +{ + // Modify these cases if you want unique behaviour based on other data (trainer class, difficulty, etc.) + switch(shouldSwitchScenario) + { + case SHOULD_SWITCH_WONDER_GUARD: + return SHOULD_SWITCH_WONDER_GUARD_PERCENTAGE; + case SHOULD_SWITCH_ABSORBS_MOVE: + return SHOULD_SWITCH_ABSORBS_MOVE_PERCENTAGE; + case SHOULD_SWITCH_TRAPPER: + return SHOULD_SWITCH_TRAPPER_PERCENTAGE; + case SHOULD_SWITCH_FREE_TURN: + return SHOULD_SWITCH_FREE_TURN_PERCENTAGE; + case SHOULD_SWITCH_TRUANT: + return SHOULD_SWITCH_TRUANT_PERCENTAGE; + case SHOULD_SWITCH_ALL_MOVES_BAD: + return SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE; + case SHOULD_SWITCH_PERISH_SONG: + return SHOULD_SWITCH_PERISH_SONG_PERCENTAGE; + case SHOULD_SWITCH_YAWN: + return SHOULD_SWITCH_YAWN_PERCENTAGE; + case SHOULD_SWITCH_BADLY_POISONED: + return SHOULD_SWITCH_BADLY_POISONED_PERCENTAGE; + case SHOULD_SWITCH_BADLY_POISONED_STATS_RAISED: + return SHOULD_SWITCH_BADLY_POISONED_STATS_RAISED_PERCENTAGE; + case SHOULD_SWITCH_CURSED: + return SHOULD_SWITCH_CURSED_PERCENTAGE; + case SHOULD_SWITCH_CURSED_STATS_RAISED: + return SHOULD_SWITCH_CURSED_STATS_RAISED_PERCENTAGE; + case SHOULD_SWITCH_NIGHTMARE: + return SHOULD_SWITCH_NIGHTMARE_PERCENTAGE; + case SHOULD_SWITCH_NIGHTMARE_STATS_RAISED: + return SHOULD_SWITCH_NIGHTMARE_STATS_RAISED_PERCENTAGE; + case SHOULD_SWITCH_SEEDED: + return SHOULD_SWITCH_SEEDED_PERCENTAGE; + case SHOULD_SWITCH_SEEDED_STATS_RAISED: + return SHOULD_SWITCH_SEEDED_STATS_RAISED_PERCENTAGE; + case SHOULD_SWITCH_INFATUATION: + return SHOULD_SWITCH_INFATUATION_PERCENTAGE; + case SHOULD_SWITCH_HASBADODDS: + return SHOULD_SWITCH_HASBADODDS_PERCENTAGE; + case SHOULD_SWITCH_NATURAL_CURE_STRONG: + return SHOULD_SWITCH_NATURAL_CURE_STRONG_PERCENTAGE; + case SHOULD_SWITCH_NATURAL_CURE_STRONG_STATS_RAISED: + return SHOULD_SWITCH_NATURAL_CURE_STRONG_STATS_RAISED_PERCENTAGE; + case SHOULD_SWITCH_NATURAL_CURE_WEAK: + return SHOULD_SWITCH_NATURAL_CURE_WEAK_PERCENTAGE; + case SHOULD_SWITCH_NATURAL_CURE_WEAK_STATS_RAISED: + return SHOULD_SWITCH_NATURAL_CURE_WEAK_STATS_RAISED_PERCENTAGE; + case SHOULD_SWITCH_REGENERATOR: + return SHOULD_SWITCH_REGENERATOR_PERCENTAGE; + case SHOULD_SWITCH_REGENERATOR_STATS_RAISED: + return SHOULD_SWITCH_REGENERATOR_STATS_RAISED_PERCENTAGE; + case SHOULD_SWITCH_ENCORE_STATUS: + return SHOULD_SWITCH_ENCORE_STATUS_PERCENTAGE; + case SHOULD_SWITCH_ENCORE_DAMAGE: + return SHOULD_SWITCH_ENCORE_DAMAGE_PERCENTAGE; + case SHOULD_SWITCH_CHOICE_LOCKED: + return SHOULD_SWITCH_CHOICE_LOCKED_PERCENTAGE; + case SHOULD_SWITCH_ATTACKING_STAT_MINUS_TWO: + return SHOULD_SWITCH_ATTACKING_STAT_MINUS_TWO_PERCENTAGE; + case SHOULD_SWITCH_ATTACKING_STAT_MINUS_THREE_PLUS: + return SHOULD_SWITCH_ATTACKING_STAT_MINUS_THREE_PLUS_PERCENTAGE; + default: + return 100; + } +} + u32 GetThinkingBattler(u32 battler) { if (AI_DATA->aiSwitchPredictionInProgress) @@ -88,11 +156,12 @@ static inline bool32 SetSwitchinAndSwitch(u32 battler, u32 switchinId) static bool32 ShouldSwitchIfHasBadOdds(u32 battler) { //Variable initialization - u8 opposingPosition, atkType1, atkType2, defType1, defType2, effectiveness; + u8 opposingPosition, atkType1, atkType2, defType1, defType2; s32 i, damageDealt = 0, maxDamageDealt = 0, damageTaken = 0, maxDamageTaken = 0; - u32 aiMove, playerMove, aiBestMove = MOVE_NONE, aiAbility = AI_DATA->abilities[battler], opposingBattler, weather = AI_GetWeather(AI_DATA); + u32 aiMove, playerMove, aiBestMove = MOVE_NONE, aiAbility = AI_DATA->abilities[battler], opposingBattler, weather = AI_GetWeather(); bool32 getsOneShot = FALSE, hasStatusMove = FALSE, hasSuperEffectiveMove = FALSE; u16 typeEffectiveness = UQ_4_12(1.0), aiMoveEffect; //baseline typing damage + uq4_12_t effectiveness; // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer if (!(AI_THINKING_STRUCT->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) @@ -133,7 +202,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) if (!IsBattleMoveStatus(aiMove)) { // Check if mon has a super effective move - if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0)) hasSuperEffectiveMove = TRUE; // Get maximum damage mon can deal @@ -163,7 +232,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) for (i = 0; i < MAX_MON_MOVES; i++) { playerMove = gBattleMons[opposingBattler].moves[i]; - if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && gMovesInfo[playerMove].effect != EFFECT_FOCUS_PUNCH) + if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH) { damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected; if (damageTaken > maxDamageTaken) @@ -197,7 +266,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 4))) { // 50% chance to stay in regardless - if (RandomPercentage(RNG_AI_SWITCH_HASBADODDS, 50) && !AI_DATA->aiSwitchPredictionInProgress) + if (RandomPercentage(RNG_AI_SWITCH_HASBADODDS, (100 - GetSwitchChance(SHOULD_SWITCH_HASBADODDS))) && !AI_DATA->aiSwitchPredictionInProgress) return FALSE; // Switch mon out @@ -217,7 +286,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) return FALSE; // 50% chance to stay in regardless - if (RandomPercentage(RNG_AI_SWITCH_HASBADODDS, 50) && !AI_DATA->aiSwitchPredictionInProgress) + if (RandomPercentage(RNG_AI_SWITCH_HASBADODDS, (100 - GetSwitchChance(SHOULD_SWITCH_HASBADODDS))) && !AI_DATA->aiSwitchPredictionInProgress) return FALSE; // Switch mon out @@ -236,7 +305,8 @@ static bool32 ShouldSwitchIfTruant(u32 battler) && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2 && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) { - return SetSwitchinAndSwitch(battler, PARTY_SIZE); + if (RandomPercentage(RNG_AI_SWITCH_TRUANT, GetSwitchChance(SHOULD_SWITCH_TRUANT))) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } return FALSE; } @@ -244,7 +314,7 @@ static bool32 ShouldSwitchIfTruant(u32 battler) static bool32 ShouldSwitchIfAllMovesBad(u32 battler) { u32 moveIndex; - u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + u32 opposingBattler = GetOppositeBattler(battler); u32 aiMove; // Switch if no moves affect opponents @@ -254,8 +324,8 @@ static bool32 ShouldSwitchIfAllMovesBad(u32 battler) for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { aiMove = gBattleMons[battler].moves[moveIndex]; - if ((AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > AI_EFFECTIVENESS_x0 - || AI_GetMoveEffectiveness(aiMove, battler, opposingPartner) > AI_EFFECTIVENESS_x0) + if ((AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > UQ_4_12(0.0) + || AI_GetMoveEffectiveness(aiMove, battler, opposingPartner) > UQ_4_12(0.0)) && aiMove != MOVE_NONE) return FALSE; } @@ -265,17 +335,19 @@ static bool32 ShouldSwitchIfAllMovesBad(u32 battler) for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { aiMove = gBattleMons[battler].moves[moveIndex]; - if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > AI_EFFECTIVENESS_x0 && aiMove != MOVE_NONE) + if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > UQ_4_12(0.0) && aiMove != MOVE_NONE) return FALSE; } } - return SetSwitchinAndSwitch(battler, PARTY_SIZE); + if (RandomPercentage(RNG_AI_SWITCH_ALL_MOVES_BAD, GetSwitchChance(SHOULD_SWITCH_ALL_MOVES_BAD))) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); + return FALSE; } static bool32 FindMonThatHitsWonderGuard(u32 battler) { - u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + u32 opposingBattler = GetOppositeBattler(battler); s32 i, j; s32 firstId; s32 lastId; // + 1 @@ -294,7 +366,7 @@ static bool32 FindMonThatHitsWonderGuard(u32 battler) move = gBattleMons[battler].moves[i]; if (move != MOVE_NONE) { - if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0)) return FALSE; } } @@ -319,7 +391,7 @@ static bool32 FindMonThatHitsWonderGuard(u32 battler) if (move != MOVE_NONE) { // Found a mon - if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0) && RandomPercentage(RNG_AI_SWITCH_WONDER_GUARD, GetSwitchChance(SHOULD_SWITCH_WONDER_GUARD))) return SetSwitchinAndSwitch(battler, i); } } @@ -337,7 +409,7 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) s32 lastId; struct Pokemon *party; u16 monAbility; - u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + u32 opposingBattler = GetOppositeBattler(battler); u32 incomingMove = AI_DATA->lastUsedMove[opposingBattler]; u32 incomingType = GetMoveType(incomingMove); u32 predictedMove = incomingMove; // Update for move prediction @@ -347,16 +419,19 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) if (!(AI_THINKING_STRUCT->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) return FALSE; - if (HasSuperEffectiveMoveAgainstOpponents(battler, TRUE) && (RandomPercentage(RNG_AI_SWITCH_ABSORBING, 66) || AI_DATA->aiSwitchPredictionInProgress)) + if (gBattleStruct->prevTurnSpecies[battler] != gBattleMons[battler].species) // AI mon has changed, player's behaviour no longer reliable; note to override this if using AI_FLAG_PREDICT_MOVE + return FALSE; + + if (HasSuperEffectiveMoveAgainstOpponents(battler, TRUE) && (RandomPercentage(RNG_AI_SWITCH_ABSORBING_STAY_IN, STAY_IN_ABSORBING_PERCENTAGE) || AI_DATA->aiSwitchPredictionInProgress)) return FALSE; if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) + if (gAbsentBattlerFlags & (1u << GetPartnerBattler(battler))) battlerIn2 = battler; else - battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); + battlerIn2 = GetPartnerBattler(battler); } else { @@ -432,7 +507,7 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) for (j = 0; j < numAbsorbingAbilities; j++) { // Found a mon - if (absorbingTypeAbilities[j] == monAbility) + if (absorbingTypeAbilities[j] == monAbility && RandomPercentage(RNG_AI_SWITCH_ABSORBING, GetSwitchChance(SHOULD_SWITCH_ABSORBS_MOVE))) return SetSwitchinAndSwitch(battler, i); } } @@ -441,14 +516,14 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) static bool32 ShouldSwitchIfOpponentChargingOrInvulnerable(u32 battler) { - u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + u32 opposingBattler = GetOppositeBattler(battler); u32 incomingMove = AI_DATA->lastUsedMove[opposingBattler]; bool32 isOpposingBattlerChargingOrInvulnerable = (IsSemiInvulnerable(opposingBattler, incomingMove) || IsTwoTurnNotSemiInvulnerableMove(opposingBattler, incomingMove)); if (IsDoubleBattle() || !(AI_THINKING_STRUCT->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) return FALSE; - if (isOpposingBattlerChargingOrInvulnerable && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) + if (isOpposingBattlerChargingOrInvulnerable && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && RandomPercentage(RNG_AI_SWITCH_FREE_TURN, GetSwitchChance(SHOULD_SWITCH_FREE_TURN))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); return FALSE; @@ -461,7 +536,7 @@ static bool32 ShouldSwitchIfTrapperInParty(u32 battler) struct Pokemon *party; s32 i; u16 monAbility; - s32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + s32 opposingBattler = GetOppositeBattler(battler); // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer if (!(AI_THINKING_STRUCT->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) @@ -485,7 +560,7 @@ static bool32 ShouldSwitchIfTrapperInParty(u32 battler) if (CanAbilityTrapOpponent(monAbility, opposingBattler) || (CanAbilityTrapOpponent(AI_GetBattlerAbility(opposingBattler), opposingBattler) && monAbility == ABILITY_TRACE)) { // If mon in slot i is the most suitable switchin candidate, then it's a trapper than wins 1v1 - if (i == AI_DATA->mostSuitableMonId[battler]) + if (i == AI_DATA->mostSuitableMonId[battler] && RandomPercentage(RNG_AI_SWITCH_FREE_TURN, GetSwitchChance(SHOULD_SWITCH_FREE_TURN))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } } @@ -504,18 +579,24 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler) //Perish Song if (gStatuses3[battler] & STATUS3_PERISH_SONG && gDisableStructs[battler].perishSongTimer == 0 - && monAbility != ABILITY_SOUNDPROOF) - switchMon = TRUE; + && monAbility != ABILITY_SOUNDPROOF + && RandomPercentage(RNG_AI_SWITCH_PERISH_SONG, GetSwitchChance(SHOULD_SWITCH_PERISH_SONG))) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); if (AI_THINKING_STRUCT->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING) { //Yawn if (gStatuses3[battler] & STATUS3_YAWN && CanBeSlept(battler, monAbility, BLOCKED_BY_SLEEP_CLAUSE) - && gBattleMons[battler].hp > gBattleMons[battler].maxHP / 3) + && gBattleMons[battler].hp > gBattleMons[battler].maxHP / 3 + && RandomPercentage(RNG_AI_SWITCH_YAWN, GetSwitchChance(SHOULD_SWITCH_YAWN))) { switchMon = TRUE; + // If we don't have a good switchin, not worth switching + if (AI_DATA->mostSuitableMonId[battler] == PARTY_SIZE) + switchMon = FALSE; + // Check if Active Pokemon can KO opponent instead of switching // Will still fall asleep, but take out opposing Pokemon first if (AiExpectsToFaintPlayer(battler)) @@ -527,7 +608,7 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler) || monAbility == ABILITY_EARLY_BIRD) || holdEffect == (HOLD_EFFECT_CURE_SLP | HOLD_EFFECT_CURE_STATUS) || HasMove(battler, MOVE_SLEEP_TALK) - || (HasMoveEffect(battler, MOVE_SNORE) && AI_GetMoveEffectiveness(MOVE_SNORE, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + || (HasMoveEffect(battler, MOVE_SNORE) && AI_GetMoveEffectiveness(MOVE_SNORE, battler, opposingBattler) >= UQ_4_12(2.0)) || (IsBattlerGrounded(battler) && (HasMove(battler, MOVE_MISTY_TERRAIN) || HasMove(battler, MOVE_ELECTRIC_TERRAIN))) ) @@ -542,45 +623,48 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler) && !(gBattleMons[battler].status2 & STATUS2_FORESIGHT) && !(gStatuses3[battler] & STATUS3_MIRACLE_EYED)) switchMon = FALSE; + + if (switchMon) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } // Secondary Damage if (monAbility != ABILITY_MAGIC_GUARD - && !AiExpectsToFaintPlayer(battler)) + && !AiExpectsToFaintPlayer(battler) + && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) { //Toxic if (((gBattleMons[battler].status1 & STATUS1_TOXIC_COUNTER) >= STATUS1_TOXIC_TURN(2)) && gBattleMons[battler].hp >= (gBattleMons[battler].maxHP / 3) && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE - && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_BADLY_POISONED, 20) : RandomPercentage(RNG_AI_SWITCH_BADLY_POISONED, 50))) - switchMon = TRUE; + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_BADLY_POISONED, GetSwitchChance(SHOULD_SWITCH_BADLY_POISONED_STATS_RAISED)) : RandomPercentage(RNG_AI_SWITCH_BADLY_POISONED, GetSwitchChance(SHOULD_SWITCH_BADLY_POISONED)))) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); //Cursed if (gBattleMons[battler].status2 & STATUS2_CURSED - && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_CURSED, 20) : RandomPercentage(RNG_AI_SWITCH_CURSED, 50))) - switchMon = TRUE; + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_CURSED, GetSwitchChance(SHOULD_SWITCH_CURSED_STATS_RAISED)) : RandomPercentage(RNG_AI_SWITCH_CURSED, GetSwitchChance(SHOULD_SWITCH_CURSED)))) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); //Nightmare if (gBattleMons[battler].status2 & STATUS2_NIGHTMARE - && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_NIGHTMARE, 15) : RandomPercentage(RNG_AI_SWITCH_NIGHTMARE, 33))) - switchMon = TRUE; + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_NIGHTMARE, GetSwitchChance(SHOULD_SWITCH_NIGHTMARE_STATS_RAISED)) : RandomPercentage(RNG_AI_SWITCH_NIGHTMARE, GetSwitchChance(SHOULD_SWITCH_NIGHTMARE)))) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); //Leech Seed if (gStatuses3[battler] & STATUS3_LEECHSEED - && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_SEEDED, 10) : RandomPercentage(RNG_AI_SWITCH_SEEDED, 25))) - switchMon = TRUE; + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_SEEDED, GetSwitchChance(SHOULD_SWITCH_SEEDED_STATS_RAISED)) : RandomPercentage(RNG_AI_SWITCH_SEEDED, GetSwitchChance(SHOULD_SWITCH_SEEDED)))) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } // Infatuation if (gBattleMons[battler].status2 & STATUS2_INFATUATION - && !AiExpectsToFaintPlayer(battler)) - switchMon = TRUE; + && !AiExpectsToFaintPlayer(battler) + && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE + && RandomPercentage(RNG_AI_SWITCH_INFATUATION, GetSwitchChance(SHOULD_SWITCH_INFATUATION))) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } - if (switchMon) - return SetSwitchinAndSwitch(battler, PARTY_SIZE); - else - return FALSE; + return FALSE; } static bool32 ShouldSwitchIfAbilityBenefit(u32 battler) @@ -598,13 +682,13 @@ static bool32 ShouldSwitchIfAbilityBenefit(u32 battler) //Attempt to cure bad ailment if (gBattleMons[battler].status1 & (STATUS1_SLEEP | STATUS1_FREEZE | STATUS1_TOXIC_POISON) && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE - && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, 10) : RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, 66))) + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, GetSwitchChance(SHOULD_SWITCH_NATURAL_CURE_STRONG_STATS_RAISED)) : RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, GetSwitchChance(SHOULD_SWITCH_NATURAL_CURE_STRONG)))) break; //Attempt to cure lesser ailment if ((gBattleMons[battler].status1 & STATUS1_ANY) && (gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2) && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE - && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, 10) : RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, 25))) + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, GetSwitchChance(SHOULD_SWITCH_NATURAL_CURE_WEAK_STATS_RAISED)) : RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, GetSwitchChance(SHOULD_SWITCH_NATURAL_CURE_WEAK)))) break; return FALSE; @@ -615,7 +699,7 @@ static bool32 ShouldSwitchIfAbilityBenefit(u32 battler) return FALSE; if ((gBattleMons[battler].hp <= ((gBattleMons[battler].maxHP * 2) / 3)) && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE - && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_REGENERATOR, 20) : RandomPercentage(RNG_AI_SWITCH_REGENERATOR, 50))) + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_REGENERATOR, GetSwitchChance(SHOULD_SWITCH_REGENERATOR_STATS_RAISED)) : RandomPercentage(RNG_AI_SWITCH_REGENERATOR, GetSwitchChance(SHOULD_SWITCH_REGENERATOR)))) break; return FALSE; @@ -643,7 +727,7 @@ static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) if (move == MOVE_NONE) continue; - if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0)) { if (noRng) return TRUE; @@ -665,7 +749,7 @@ static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) if (move == MOVE_NONE) continue; - if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0)) { if (noRng) return TRUE; @@ -717,10 +801,10 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 perc if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) + if (gAbsentBattlerFlags & (1u << GetPartnerBattler(battler))) battlerIn2 = battler; else - battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); + battlerIn2 = GetPartnerBattler(battler); } else { @@ -764,7 +848,7 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 perc if (move == 0) continue; - if (AI_GetMoveEffectiveness(move, battler, battlerIn1) >= AI_EFFECTIVENESS_x2 && (RandomPercentage(RNG_AI_SWITCH_SE_DEFENSIVE, percentChance) || AI_DATA->aiSwitchPredictionInProgress)) + if (AI_GetMoveEffectiveness(move, battler, battlerIn1) >= UQ_4_12(2.0) && (RandomPercentage(RNG_AI_SWITCH_SE_DEFENSIVE, percentChance) || AI_DATA->aiSwitchPredictionInProgress)) return SetSwitchinAndSwitch(battler, i); } } @@ -792,10 +876,10 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler) if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) + if (gAbsentBattlerFlags & (1u << GetPartnerBattler(battler))) battlerIn2 = battler; else - battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); + battlerIn2 = GetPartnerBattler(battler); } else { @@ -843,7 +927,7 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler) static bool32 ShouldSwitchIfEncored(u32 battler) { u32 encoredMove = gDisableStructs[battler].encoredMove; - u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + u32 opposingBattler = GetOppositeBattler(battler); // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer if (!(AI_THINKING_STRUCT->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) @@ -854,15 +938,15 @@ static bool32 ShouldSwitchIfEncored(u32 battler) return FALSE; // Switch out if status move - if (GetMoveCategory(encoredMove) == DAMAGE_CATEGORY_STATUS) + if (GetMoveCategory(encoredMove) == DAMAGE_CATEGORY_STATUS && RandomPercentage(RNG_AI_SWITCH_ENCORE, GetSwitchChance(SHOULD_SWITCH_ENCORE_STATUS))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); // Stay in if effective move - else if (AI_GetMoveEffectiveness(encoredMove, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + else if (AI_GetMoveEffectiveness(encoredMove, battler, opposingBattler) >= UQ_4_12(2.0)) return FALSE; // Switch out 50% of the time otherwise - else if ((RandomPercentage(RNG_AI_SWITCH_ENCORE, 50) || AI_DATA->aiSwitchPredictionInProgress) && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) + else if ((RandomPercentage(RNG_AI_SWITCH_ENCORE, GetSwitchChance(SHOULD_SWITCH_ENCORE_DAMAGE)) || AI_DATA->aiSwitchPredictionInProgress) && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) return SetSwitchinAndSwitch(battler, PARTY_SIZE); return FALSE; @@ -874,7 +958,7 @@ static bool32 ShouldSwitchIfBadChoiceLock(u32 battler) if (HOLD_EFFECT_CHOICE(holdEffect) && gBattleMons[battler].ability != ABILITY_KLUTZ) { - if (GetMoveCategory(gLastUsedMove) == DAMAGE_CATEGORY_STATUS) + if (GetMoveCategory(AI_DATA->lastUsedMove[battler]) == DAMAGE_CATEGORY_STATUS && RandomPercentage(RNG_AI_SWITCH_CHOICE_LOCKED, GetSwitchChance(SHOULD_SWITCH_CHOICE_LOCKED))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } @@ -900,11 +984,11 @@ static bool32 ShouldSwitchIfAttackingStatsLowered(u32 battler) // 50% chance if attack at -2 and have a good candidate mon else if (attackingStage == DEFAULT_STAT_STAGE - 2) { - if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && (RandomPercentage(RNG_AI_SWITCH_STATS_LOWERED, 50) || AI_DATA->aiSwitchPredictionInProgress)) + if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && (RandomPercentage(RNG_AI_SWITCH_STATS_LOWERED, GetSwitchChance(SHOULD_SWITCH_ATTACKING_STAT_MINUS_TWO)) || AI_DATA->aiSwitchPredictionInProgress)) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } // If at -3 or worse, switch out regardless - else if (attackingStage < DEFAULT_STAT_STAGE - 2) + else if ((attackingStage < DEFAULT_STAT_STAGE - 2) && RandomPercentage(RNG_AI_SWITCH_STATS_LOWERED, GetSwitchChance(SHOULD_SWITCH_ATTACKING_STAT_MINUS_THREE_PLUS))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } @@ -917,11 +1001,11 @@ static bool32 ShouldSwitchIfAttackingStatsLowered(u32 battler) // 50% chance if attack at -2 and have a good candidate mon else if (spAttackingStage == DEFAULT_STAT_STAGE - 2) { - if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && (RandomPercentage(RNG_AI_SWITCH_STATS_LOWERED, 50) || AI_DATA->aiSwitchPredictionInProgress)) + if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && (RandomPercentage(RNG_AI_SWITCH_STATS_LOWERED, GetSwitchChance(SHOULD_SWITCH_ATTACKING_STAT_MINUS_TWO)) || AI_DATA->aiSwitchPredictionInProgress)) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } // If at -3 or worse, switch out regardless - else if (spAttackingStage < DEFAULT_STAT_STAGE - 2) + else if ((spAttackingStage < DEFAULT_STAT_STAGE - 2) && RandomPercentage(RNG_AI_SWITCH_STATS_LOWERED, GetSwitchChance(SHOULD_SWITCH_ATTACKING_STAT_MINUS_THREE_PLUS))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } return FALSE; @@ -1210,7 +1294,7 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, for (i = 0; i < MAX_MON_MOVES; i++) { u32 move = GetMonData(&party[bestMonId], MON_DATA_MOVE1 + i); - if (move != MOVE_NONE && AI_GetMoveEffectiveness(move, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + if (move != MOVE_NONE && AI_GetMoveEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0)) break; } @@ -1311,9 +1395,9 @@ static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon && ability != ABILITY_IMMUNITY && ability != ABILITY_POISON_HEAL && ability != ABILITY_COMATOSE && status == 0 && !(hazardFlags & SIDE_STATUS_SAFEGUARD) - && !(IsAbilityOnSide(battler, ABILITY_PASTEL_VEIL)) - && !(IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) - && !(IsAbilityStatusProtected(battler)) + && !IsAbilityOnSide(battler, ABILITY_PASTEL_VEIL) + && !IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN) + && !IsAbilityStatusProtected(battler, ability) && heldItemEffect != HOLD_EFFECT_CURE_PSN && heldItemEffect != HOLD_EFFECT_CURE_STATUS && IsMonGrounded(heldItemEffect, ability, defType1, defType2))) { @@ -1550,7 +1634,7 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) u32 hitsToKO = 0, singleUseItemHeal = 0; u16 maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, item = AI_DATA->switchinCandidate.battleMon.item, heldItemEffect = ItemId_GetHoldEffect(item); u8 weatherDuration = gWishFutureKnock.weatherDuration, holdEffectParam = ItemId_GetHoldEffectParam(item); - u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + u32 opposingBattler = GetOppositeBattler(battler); u32 opposingAbility = gBattleMons[opposingBattler].ability, ability = AI_DATA->switchinCandidate.battleMon.ability; bool32 usedSingleUseHealingItem = FALSE, opponentCanBreakMold = IsMoldBreakerTypeAbility(opposingBattler, opposingAbility); s32 currentHP = startingHP; @@ -1702,7 +1786,7 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle for (i = 0; i < MAX_MON_MOVES; i++) { playerMove = gBattleMons[opposingBattler].moves[i]; - if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && gMovesInfo[playerMove].effect != EFFECT_FOCUS_PUNCH) + if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH) { damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, FALSE, DMG_ROLL_HIGHEST); if (damageTaken > maxDamageTaken) @@ -1731,7 +1815,7 @@ static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent) return FALSE; } -static inline bool32 IsFreeSwitch(bool32 isSwitchAfterKO, u32 battlerSwitchingOut, u32 opposingBattler) +static inline bool32 IsFreeSwitch(enum SwitchType switchType, u32 battlerSwitchingOut, u32 opposingBattler) { bool32 movedSecond = GetBattlerTurnOrderNum(battlerSwitchingOut) > GetBattlerTurnOrderNum(opposingBattler) ? TRUE : FALSE; @@ -1744,8 +1828,9 @@ static inline bool32 IsFreeSwitch(bool32 isSwitchAfterKO, u32 battlerSwitchingOu return TRUE; if (AI_DATA->ejectPackSwitch) { + u32 opposingAbility = AI_GetBattlerAbility(opposingBattler); // If faster, not a free switch; likely lowered own stats - if (!movedSecond) + if (!movedSecond && opposingAbility != ABILITY_INTIMIDATE && opposingAbility != ABILITY_SUPERSWEET_SYRUP) // Intimidate triggers switches before turn starts return FALSE; // Otherwise, free switch return TRUE; @@ -1753,7 +1838,7 @@ static inline bool32 IsFreeSwitch(bool32 isSwitchAfterKO, u32 battlerSwitchingOu } // Post KO check has to be last because the GetMostSuitableMonToSwitchInto call in OpponentHandleChoosePokemon assumes a KO rather than a forced switch choice - if (isSwitchAfterKO) + if (switchType == SWITCH_AFTER_KO) return TRUE; else return FALSE; @@ -1775,7 +1860,7 @@ static inline bool32 CanSwitchinWin1v1(u32 hitsToKOAI, u32 hitsToKOPlayer, bool3 // This function splits switching behaviour depending on whether the switch is free. // Everything runs in the same loop to minimize computation time. This makes it harder to read, but hopefully the comments can guide you! -static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, u32 battler, u32 opposingBattler, u32 battlerIn1, u32 battlerIn2, bool32 isSwitchAfterKO) +static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, u32 battler, u32 opposingBattler, u32 battlerIn1, u32 battlerIn2, enum SwitchType switchType) { int revengeKillerId = PARTY_SIZE, slowRevengeKillerId = PARTY_SIZE, fastThreatenId = PARTY_SIZE, slowThreatenId = PARTY_SIZE, damageMonId = PARTY_SIZE; int batonPassId = PARTY_SIZE, typeMatchupId = PARTY_SIZE, typeMatchupEffectiveId = PARTY_SIZE, defensiveMonId = PARTY_SIZE, aceMonId = PARTY_SIZE, trapperId = PARTY_SIZE; @@ -1784,7 +1869,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, s32 playerMonHP = gBattleMons[opposingBattler].hp, maxDamageDealt = 0, damageDealt = 0; u32 aiMove, hitsToKOAI, maxHitsToKO = 0; u16 bestResist = UQ_4_12(1.0), bestResistEffective = UQ_4_12(1.0), typeMatchup; - bool32 isFreeSwitch = IsFreeSwitch(isSwitchAfterKO, battlerIn1, opposingBattler), isSwitchinFirst, canSwitchinWin1v1; + bool32 isFreeSwitch = IsFreeSwitch(switchType, battlerIn1, opposingBattler), isSwitchinFirst, canSwitchinWin1v1; // Iterate through mons for (i = firstId; i < lastId; i++) @@ -1865,7 +1950,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, { if (typeMatchup < bestResistEffective) { - if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0)) { if (canSwitchinWin1v1) { @@ -1949,8 +2034,9 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, else if (defensiveMonId != PARTY_SIZE) return defensiveMonId; else if (batonPassId != PARTY_SIZE) return batonPassId; } - // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. - if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount && IsSwitchOutEffect(GetMoveEffect(gLastUsedMove))) + // If ace mon is the last available Pokemon and U-Turn/Volt Switch or Eject Pack/Button was used - switch to the mon. + if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount + && (IsSwitchOutEffect(GetMoveEffect(gLastUsedMove)) || AI_DATA->ejectButtonSwitch || AI_DATA->ejectPackSwitch)) return aceMonId; return PARTY_SIZE; @@ -1976,7 +2062,7 @@ static u32 GetNextMonInParty(struct Pokemon *party, int firstId, int lastId, u32 return PARTY_SIZE; } -u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) +u32 GetMostSuitableMonToSwitchInto(u32 battler, enum SwitchType switchType) { u32 opposingBattler = 0; u32 bestMonId = PARTY_SIZE; @@ -1993,10 +2079,10 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) + if (gAbsentBattlerFlags & (1u << GetPartnerBattler(battler))) battlerIn2 = battler; else - battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); + battlerIn2 = GetPartnerBattler(battler); opposingBattler = BATTLE_OPPOSITE(battlerIn1); if (gAbsentBattlerFlags & (1u << opposingBattler)) @@ -2004,7 +2090,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) } else { - opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + opposingBattler = GetOppositeBattler(battler); battlerIn1 = battler; battlerIn2 = battler; } @@ -2021,7 +2107,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) // Only use better mon selection if AI_FLAG_SMART_MON_CHOICES is set for the trainer. if (AI_THINKING_STRUCT->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_MON_CHOICES && !IsDoubleBattle()) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic { - bestMonId = GetBestMonIntegrated(party, firstId, lastId, battler, opposingBattler, battlerIn1, battlerIn2, switchAfterMonKOd); + bestMonId = GetBestMonIntegrated(party, firstId, lastId, battler, opposingBattler, battlerIn1, battlerIn2, switchType); return bestMonId; } @@ -2065,8 +2151,9 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) if (bestMonId != PARTY_SIZE) return bestMonId; - // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. - if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount && IsSwitchOutEffect(gMovesInfo[gLastUsedMove].effect)) + // If ace mon is the last available Pokemon and U-Turn/Volt Switch or Eject Pack/Button was used - switch to the mon. + if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount + && (IsSwitchOutEffect(GetMoveEffect(gLastUsedMove)) || AI_DATA->ejectButtonSwitch || AI_DATA->ejectPackSwitch)) return aceMonId; return PARTY_SIZE; @@ -2174,7 +2261,7 @@ static bool32 ShouldUseItem(u32 battler) break; case EFFECT_ITEM_SET_MIST: battlerSide = GetBattlerSide(battler); - if (gDisableStructs[battler].isFirstTurn && gSideTimers[battlerSide].mistTimer == 0) + if (gDisableStructs[battler].isFirstTurn && !(gSideStatuses[battlerSide] & SIDE_STATUS_MIST)) shouldUse = TRUE; break; case EFFECT_ITEM_REVIVE: diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index d3a427890c..a122807293 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -23,8 +23,6 @@ #include "constants/moves.h" #include "constants/items.h" -static u32 AI_GetEffectiveness(uq4_12_t multiplier); - // Functions u32 GetDmgRollType(u32 battlerAtk) { @@ -387,7 +385,7 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) } // To save computation time this function has 2 variants. One saves, sets and restores battlers, while the other doesn't. -struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType) +struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType) { struct SimulatedDamage dmg; @@ -395,7 +393,7 @@ struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 b SaveBattlerData(battlerDef); SetBattlerData(battlerAtk); SetBattlerData(battlerDef); - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerZPower, AI_GetWeather(AI_DATA), rollType); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerZPower, AI_GetWeather(), rollType); RestoreBattlerData(battlerAtk); RestoreBattlerData(battlerDef); return dmg; @@ -426,18 +424,11 @@ bool32 IsDamageMoveUnusable(u32 battlerAtk, u32 battlerDef, u32 move, u32 moveTy { struct AiLogicData *aiData = AI_DATA; u32 battlerDefAbility; - u32 partnerBattlerDefAbility; - if (DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) - { + if (DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move)) battlerDefAbility = ABILITY_NONE; - partnerBattlerDefAbility = ABILITY_NONE; - } else - { battlerDefAbility = aiData->abilities[battlerDef]; - partnerBattlerDefAbility = aiData->abilities[BATTLE_PARTNER(battlerDef)]; - } if (battlerDef == BATTLE_PARTNER(battlerAtk)) battlerDefAbility = aiData->abilities[battlerDef]; @@ -445,13 +436,10 @@ bool32 IsDamageMoveUnusable(u32 battlerAtk, u32 battlerDef, u32 move, u32 moveTy if (gBattleStruct->battlerState[battlerDef].commandingDondozo) return TRUE; - if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef])) + if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef], ABILITY_CHECK_TRIGGER)) return TRUE; - if (CanPartnerAbilityBlockMove(battlerAtk, battlerDef, move, partnerBattlerDefAbility)) - return TRUE; - - if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType)) + if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType, ABILITY_CHECK_TRIGGER)) return TRUE; switch (GetMoveEffect(move)) @@ -631,7 +619,7 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal *minimumDamage = minimum; } -struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType) +struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType) { struct SimulatedDamage simDamage; s32 moveType; @@ -682,7 +670,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u damageCalcData.randomFactor = FALSE; damageCalcData.updateFlags = FALSE; - critChanceIndex = CalcCritChanceStageArgs(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); + critChanceIndex = CalcCritChanceStage(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); if (critChanceIndex > 1) // Consider crit damage only if a move has at least +2 crit chance { damageCalcData.isCrit = FALSE; @@ -755,7 +743,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u } // convert multiper to AI_EFFECTIVENESS_xX - *typeEffectiveness = AI_GetEffectiveness(effectivenessMultiplier); + *typeEffectiveness = effectivenessMultiplier; // Undo temporary settings gBattleStruct->dynamicMoveType = 0; @@ -789,7 +777,11 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 return TRUE; break; case EFFECT_FELL_STINGER: - if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK)) + if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK) && noOfHitsToKo == 1) + return TRUE; + break; + case EFFECT_PURSUIT: + if(noOfHitsToKo == 1) return TRUE; break; } @@ -879,7 +871,7 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 case MOVE_EFFECT_SP_DEF_MINUS_1: case MOVE_EFFECT_ACC_MINUS_1: case MOVE_EFFECT_EVS_MINUS_1: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_1)) && noOfHitsToKo != 1) + if (ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK + (additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_1)) && noOfHitsToKo != 1) return TRUE; break; case MOVE_EFFECT_ATK_MINUS_2: @@ -889,7 +881,7 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 case MOVE_EFFECT_SP_DEF_MINUS_2: case MOVE_EFFECT_ACC_MINUS_2: case MOVE_EFFECT_EVS_MINUS_2: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_2)) && noOfHitsToKo != 1) + if (ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK + (additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_2)) && noOfHitsToKo != 1) return TRUE; break; } @@ -946,7 +938,7 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s case MOVE_EFFECT_ATK_DEF_DOWN: case MOVE_EFFECT_DEF_SPDEF_DOWN: if ((additionalEffect->self && abilityAtk != ABILITY_CONTRARY) - || (noOfHitsToKo != 1 && abilityDef == ABILITY_CONTRARY && !DoesBattlerIgnoreAbilityChecks(abilityAtk, move))) + || (noOfHitsToKo != 1 && abilityDef == ABILITY_CONTRARY && !DoesBattlerIgnoreAbilityChecks(battlerAtk, abilityAtk, move))) return TRUE; break; case MOVE_EFFECT_RECHARGE: @@ -967,7 +959,7 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s case MOVE_EFFECT_ACC_PLUS_2: case MOVE_EFFECT_ALL_STATS_UP: if ((additionalEffect->self && abilityAtk == ABILITY_CONTRARY) - || (noOfHitsToKo != 1 && !(abilityDef == ABILITY_CONTRARY && !DoesBattlerIgnoreAbilityChecks(abilityAtk, move)))) + || (noOfHitsToKo != 1 && !(abilityDef == ABILITY_CONTRARY && !DoesBattlerIgnoreAbilityChecks(battlerAtk, abilityAtk, move)))) return TRUE; break; } @@ -1040,7 +1032,7 @@ u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef) return (bestDmg * 100) / gBattleMons[battlerDef].maxHP; } -uq4_12_t AI_GetTypeEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef) +uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef) { uq4_12_t typeEffectiveness; u32 moveType; @@ -1062,35 +1054,6 @@ uq4_12_t AI_GetTypeEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef) return typeEffectiveness; } -u32 AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef) -{ - return AI_GetEffectiveness(AI_GetTypeEffectiveness(move, battlerAtk, battlerDef)); -} - -static u32 AI_GetEffectiveness(uq4_12_t 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 * The function uses a stripped down version of the checks from GetWhichBattlerFasterArgs * Output: @@ -1153,7 +1116,7 @@ static bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move) if (AI_DATA->holdEffects[battlerTarget] == HOLD_EFFECT_FOCUS_SASH) return TRUE; - if (!DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battler], move)) + if (!DoesBattlerIgnoreAbilityChecks(battler, AI_DATA->abilities[battler], move)) { if (B_STURDY >= GEN_5 && AI_DATA->abilities[battlerTarget] == ABILITY_STURDY) return TRUE; @@ -1408,30 +1371,31 @@ u32 AI_DecideHoldEffectForTurn(u32 battlerId) return holdEffect; } -bool32 DoesBattlerIgnoreAbilityChecks(u32 atkAbility, u32 move) +bool32 DoesBattlerIgnoreAbilityChecks(u32 battlerAtk, u32 atkAbility, u32 move) { - if (AI_THINKING_STRUCT->aiFlags[sBattler_AI] & AI_FLAG_NEGATE_UNAWARE) + if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_NEGATE_UNAWARE) return FALSE; // AI handicap flag: doesn't understand ability suppression concept - if (IsMoldBreakerTypeAbility(sBattler_AI, atkAbility) || MoveIgnoresTargetAbility(move)) + if (IsMoldBreakerTypeAbility(battlerAtk, atkAbility) || MoveIgnoresTargetAbility(move)) return TRUE; return FALSE; } -static inline bool32 AI_WeatherHasEffect(struct AiLogicData *aiData) +static inline bool32 AI_WeatherHasEffect(void) { - if (AI_THINKING_STRUCT->aiFlags[sBattler_AI] & AI_FLAG_NEGATE_UNAWARE) + if (AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_LEFT] & AI_FLAG_NEGATE_UNAWARE + || AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_RIGHT] & AI_FLAG_NEGATE_UNAWARE) return TRUE; // AI doesn't understand weather supression (handicap) - return aiData->weatherHasEffect; // weather damping abilities are announced + return AI_DATA->weatherHasEffect; // weather damping abilities are announced } -u32 AI_GetWeather(struct AiLogicData *aiData) +u32 AI_GetWeather(void) { if (gBattleWeather == B_WEATHER_NONE) return B_WEATHER_NONE; - if (!AI_WeatherHasEffect(aiData)) + if (!AI_WeatherHasEffect()) return B_WEATHER_NONE; return gBattleWeather; } @@ -1495,9 +1459,9 @@ bool32 IsHazardMoveEffect(u32 moveEffect) } } -bool32 IsMoveRedirectionPrevented(u32 move, u32 atkAbility) +bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, u32 atkAbility) { - if (AI_THINKING_STRUCT->aiFlags[sBattler_AI] & AI_FLAG_NEGATE_UNAWARE) + if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_NEGATE_UNAWARE) return FALSE; u32 effect = GetMoveEffect(move); @@ -1545,7 +1509,7 @@ bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move) return TRUE; // discouraged from hitting - weather = AI_GetWeather(AI_DATA); + weather = AI_GetWeather(); if ((weather & B_WEATHER_SUN) && effect == EFFECT_THUNDER) return FALSE; @@ -1573,7 +1537,7 @@ bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbil else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && AI_BattlerAtMaxHp(battlerDef)) return FALSE; - if (!DoesBattlerIgnoreAbilityChecks(atkAbility, move) && defAbility == ABILITY_STURDY) + if (!DoesBattlerIgnoreAbilityChecks(battlerAtk, atkAbility, move) && defAbility == ABILITY_STURDY) return FALSE; if ((((gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS) @@ -1596,7 +1560,7 @@ bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbil bool32 ShouldSetSandstorm(u32 battler, u32 ability, u32 holdEffect) { - u32 weather = AI_GetWeather(AI_DATA); + u32 weather = AI_GetWeather(); if (weather & B_WEATHER_SANDSTORM) return FALSE; @@ -1617,7 +1581,7 @@ bool32 ShouldSetSandstorm(u32 battler, u32 ability, u32 holdEffect) bool32 ShouldSetHail(u32 battler, u32 ability, u32 holdEffect) { - u32 weather = AI_GetWeather(AI_DATA); + u32 weather = AI_GetWeather(); if (weather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) return FALSE; @@ -1640,7 +1604,7 @@ bool32 ShouldSetHail(u32 battler, u32 ability, u32 holdEffect) bool32 ShouldSetRain(u32 battlerAtk, u32 atkAbility, u32 holdEffect) { - u32 weather = AI_GetWeather(AI_DATA); + u32 weather = AI_GetWeather(); if (weather & B_WEATHER_RAIN) return FALSE; @@ -1661,7 +1625,7 @@ bool32 ShouldSetRain(u32 battlerAtk, u32 atkAbility, u32 holdEffect) bool32 ShouldSetSun(u32 battlerAtk, u32 atkAbility, u32 holdEffect) { - u32 weather = AI_GetWeather(AI_DATA); + u32 weather = AI_GetWeather(); if (weather & B_WEATHER_SUN) return FALSE; @@ -1687,7 +1651,7 @@ bool32 ShouldSetSun(u32 battlerAtk, u32 atkAbility, u32 holdEffect) bool32 ShouldSetSnow(u32 battler, u32 ability, u32 holdEffect) { - u32 weather = AI_GetWeather(AI_DATA); + u32 weather = AI_GetWeather(); if (weather & (B_WEATHER_SNOW | B_WEATHER_HAIL)) return FALSE; @@ -1745,11 +1709,11 @@ void ProtectChecks(u32 battlerAtk, u32 battlerDef, u32 move, u32 predictedMove, } // stat stages -bool32 ShouldLowerStat(u32 battler, u32 battlerAbility, u32 stat) +bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 battlerAbility, u32 stat) { - if (gBattleMons[battler].statStages[stat] > MIN_STAT_STAGE && battlerAbility != ABILITY_CONTRARY) + if (gBattleMons[battlerDef].statStages[stat] > MIN_STAT_STAGE && battlerAbility != ABILITY_CONTRARY) { - if (AI_DATA->holdEffects[battler] == HOLD_EFFECT_CLEAR_AMULET + if (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CLEAR_AMULET || battlerAbility == ABILITY_CLEAR_BODY || battlerAbility == ABILITY_WHITE_SMOKE || battlerAbility == ABILITY_FULL_METAL_BODY) @@ -1763,9 +1727,9 @@ bool32 ShouldLowerStat(u32 battler, u32 battlerAbility, u32 stat) return !(battlerAbility == ABILITY_BIG_PECKS); case STAT_SPEED: // If AI is faster and doesn't have any mons left, lowering speed doesn't give any - return !(AI_IsFaster(sBattler_AI, battler, AI_THINKING_STRUCT->moveConsidered) - && CountUsablePartyMons(sBattler_AI) == 0 - && !HasMoveEffect(sBattler_AI, EFFECT_ELECTRO_BALL)); + return !(AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + && CountUsablePartyMons(battlerAtk) == 0 + && !HasMoveEffect(battlerAtk, EFFECT_ELECTRO_BALL)); case STAT_ACC: return !(battlerAbility == ABILITY_KEEN_EYE || (B_ILLUMINATE_EFFECT >= GEN_9 && battlerAbility == ABILITY_ILLUMINATE)); } @@ -2428,8 +2392,9 @@ static inline bool32 IsMoveSleepClauseTrigger(u32 move) const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); switch (additionalEffect->moveEffect) { - case MAX_EFFECT_EFFECT_SPORE_FOES: - case MAX_EFFECT_YAWN_FOE: + // Skip MOVE_EFFECT_SLEEP as moves with a secondary chance of applying sleep are allowed by Smogon's rules (ie. Relic Song) + case MOVE_EFFECT_EFFECT_SPORE_SIDE: + case MOVE_EFFECT_YAWN_FOE: return TRUE; } } @@ -2522,7 +2487,7 @@ bool32 IsTwoTurnNotSemiInvulnerableMove(u32 battlerAtk, u32 move) case EFFECT_SOLAR_BEAM: case EFFECT_TWO_TURNS_ATTACK: return !(AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB - || (AI_GetWeather(AI_DATA) & GetMoveTwoTurnAttackWeather(move))); + || (AI_GetWeather() & GetMoveTwoTurnAttackWeather(move))); default: return FALSE; } @@ -2634,7 +2599,7 @@ static u32 GetWeatherDamage(u32 battlerId) u32 ability = AI_DATA->abilities[battlerId]; u32 holdEffect = AI_DATA->holdEffects[battlerId]; u32 damage = 0; - u32 weather = AI_GetWeather(AI_DATA); + u32 weather = AI_GetWeather(); if (!weather) return 0; @@ -2724,19 +2689,9 @@ static bool32 AnyUsefulStatIsRaised(u32 battler) return FALSE; } -struct Pokemon *GetPartyBattlerPartyData(u32 battlerId, u32 switchBattler) -{ - struct Pokemon *mon; - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - mon = &gPlayerParty[switchBattler]; - else - mon = &gEnemyParty[switchBattler]; - return mon; -} - static bool32 PartyBattlerShouldAvoidHazards(u32 currBattler, u32 switchBattler) { - struct Pokemon *mon = GetPartyBattlerPartyData(currBattler, switchBattler); + struct Pokemon *mon = &GetBattlerParty(currBattler)[switchBattler]; u32 ability = GetMonAbility(mon); // we know our own party data u32 holdEffect; u32 species = GetMonData(mon, MON_DATA_SPECIES); @@ -3012,7 +2967,7 @@ bool32 ShouldPoisonSelf(u32 battler, u32 ability) bool32 AI_CanPoison(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove) { if (!CanBePoisoned(battlerAtk, battlerDef, GetBattlerAbility(battlerDef)) - || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == AI_EFFECTIVENESS_x0 + || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == UQ_4_12(0.0) || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove)) return FALSE; @@ -3027,7 +2982,7 @@ bool32 AI_CanPoison(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u3 bool32 AI_CanParalyze(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove) { if (!CanBeParalyzed(battlerDef, defAbility) - || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == AI_EFFECTIVENESS_x0 + || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == UQ_4_12(0.0) || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove)) @@ -3038,8 +2993,8 @@ bool32 AI_CanParalyze(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, bool32 AI_CanBeConfused(u32 battlerAtk, u32 battlerDef, u32 move, u32 ability) { if ((gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) - || (ability == ABILITY_OWN_TEMPO && !DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move)) - || (IsBattlerGrounded(battlerDef) && (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)) + || (ability == ABILITY_OWN_TEMPO && !DoesBattlerIgnoreAbilityChecks(battlerAtk, AI_DATA->abilities[battlerAtk], move)) + || IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN) || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD || DoesSubstituteBlockMove(battlerAtk, battlerDef, move)) return FALSE; @@ -3066,7 +3021,7 @@ bool32 AI_CanGetFrostbite(u32 battler, u32 ability) || ability == ABILITY_COMATOSE || IS_BATTLER_OF_TYPE(battler, TYPE_ICE) || gBattleMons[battler].status1 & STATUS1_ANY - || IsAbilityStatusProtected(battler) + || IsAbilityStatusProtected(battler, ability) || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD) return FALSE; return TRUE; @@ -3089,7 +3044,7 @@ bool32 ShouldBurnSelf(u32 battler, u32 ability) bool32 AI_CanBurn(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove) { if (!CanBeBurned(battlerDef, defAbility) - || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == AI_EFFECTIVENESS_x0 + || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == UQ_4_12(0.0) || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || PartnerMoveEffectIsStatusSameTarget(battlerAtkPartner, battlerDef, partnerMove)) { @@ -3101,7 +3056,7 @@ bool32 AI_CanBurn(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtk bool32 AI_CanGiveFrostbite(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove) { if (!AI_CanGetFrostbite(battlerDef, defAbility) - || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == AI_EFFECTIVENESS_x0 + || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == UQ_4_12(0.0) || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || PartnerMoveEffectIsStatusSameTarget(battlerAtkPartner, battlerDef, partnerMove)) { @@ -3113,7 +3068,7 @@ bool32 AI_CanGiveFrostbite(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 b bool32 AI_CanBeInfatuated(u32 battlerAtk, u32 battlerDef, u32 defAbility) { if ((gBattleMons[battlerDef].status2 & STATUS2_INFATUATION) - || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == AI_EFFECTIVENESS_x0 + || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == UQ_4_12(0.0) || defAbility == ABILITY_OBLIVIOUS || !AreBattlersOfOppositeGender(battlerAtk, battlerDef) || AI_IsAbilityOnSide(battlerDef, ABILITY_AROMA_VEIL)) @@ -3203,9 +3158,11 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) if (IsDoubleBattle()) { battlerOnField1 = gBattlerPartyIndexes[battlerId]; - battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battlerId)))]; + battlerOnField2 = gBattlerPartyIndexes[GetPartnerBattler(battlerId)]; // Check partner's status - if ((B_HEAL_BELL_SOUNDPROOF == GEN_5 || AI_DATA->abilities[BATTLE_PARTNER(battlerId)] != ABILITY_SOUNDPROOF || !checkSoundproof) + if ((GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 + || AI_DATA->abilities[BATTLE_PARTNER(battlerId)] != ABILITY_SOUNDPROOF + || !checkSoundproof) && GetMonData(&party[battlerOnField2], MON_DATA_STATUS) != STATUS1_NONE) return TRUE; } @@ -3216,7 +3173,8 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) } // Check attacker's status - if ((B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8 + if ((GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 + || GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 || AI_DATA->abilities[battlerId] != ABILITY_SOUNDPROOF || !checkSoundproof) && GetMonData(&party[battlerOnField1], MON_DATA_STATUS) != STATUS1_NONE) return TRUE; @@ -3226,7 +3184,9 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) { if (i == battlerOnField1 || i == battlerOnField2) continue; - if (B_HEAL_BELL_SOUNDPROOF < GEN_5 && checkSoundproof && GetMonAbility(&party[i]) == ABILITY_SOUNDPROOF) + if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) < GEN_5 + && checkSoundproof + && GetMonAbility(&party[i]) == ABILITY_SOUNDPROOF) continue; if (GetMonData(&party[i], MON_DATA_STATUS) != STATUS1_NONE) return TRUE; @@ -3328,7 +3288,7 @@ bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, u32 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 ((AI_GetWeather(AI_DATA) & (B_WEATHER_HAIL | B_WEATHER_SNOW)) + if ((AI_GetWeather() & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && !(gSideStatuses[atkSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL))) return TRUE; break; @@ -3575,7 +3535,7 @@ void FreeRestoreBattleMons(struct BattlePokemon *savedBattleMons) s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool32 isPartyMonAttacker, enum DamageRollType rollType) { struct SimulatedDamage dmg; - u8 effectiveness; + uq4_12_t effectiveness; struct BattlePokemon *savedBattleMons = AllocSaveBattleMons(); if (isPartyMonAttacker) @@ -3593,7 +3553,7 @@ s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct Battl AI_THINKING_STRUCT->saved[battlerAtk].saved = FALSE; } - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE, AI_GetWeather(AI_DATA), rollType); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE, AI_GetWeather(), rollType); // restores original gBattleMon struct FreeRestoreBattleMons(savedBattleMons); @@ -3627,7 +3587,7 @@ s32 CountUsablePartyMons(u32 battlerId) if (IsDoubleBattle()) { battlerOnField1 = gBattlerPartyIndexes[battlerId]; - battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battlerId)))]; + battlerOnField2 = gBattlerPartyIndexes[GetPartnerBattler(battlerId)]; } else // In singles there's only one battlerId by side. { @@ -3968,7 +3928,7 @@ void IncreaseParalyzeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) void IncreaseSleepScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) { - if (((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0) && gMovesInfo[GetBestDmgMoveFromBattler(battlerAtk, battlerDef)].effect != EFFECT_FOCUS_PUNCH) + if (((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0) && GetMoveEffect(GetBestDmgMoveFromBattler(battlerAtk, battlerDef)) != EFFECT_FOCUS_PUNCH) || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_SLP || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_STATUS) return; @@ -4048,7 +4008,7 @@ bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) if (IsViableZMove(battlerAtk, chosenMove)) { - u8 effectiveness; + uq4_12_t effectiveness; u32 zMove = GetUsableZMove(battlerAtk, chosenMove); struct SimulatedDamage dmg; @@ -4154,7 +4114,7 @@ bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, st u32 partnerAbility; u32 partnerHoldEffect = aiData->holdEffects[battlerAtkPartner]; - if (DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) + if (DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move)) partnerAbility = ABILITY_NONE; else partnerAbility = aiData->abilities[battlerAtkPartner]; diff --git a/src/battle_anim.c b/src/battle_anim.c index c12a88bec7..eb0e2af560 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -304,7 +304,7 @@ void DoMoveAnim(u16 move) // 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 (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + while (IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) { if (++gBattleAnimTarget >= MAX_BATTLERS_COUNT) gBattleAnimTarget = 0; @@ -370,12 +370,7 @@ void LaunchBattleAnimation(u32 animType, u32 animId) InitPrioritiesForVisibleBattlers(); UpdateOamPriorityInAllHealthboxes(0, sAnimHideHpBoxes); for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - if (GetBattlerSide(i) != B_SIDE_PLAYER) - gAnimBattlerSpecies[i] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); - else - gAnimBattlerSpecies[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); - } + gAnimBattlerSpecies[i] = GetMonData(GetPartyBattlerData(i), MON_DATA_SPECIES); } else { @@ -568,7 +563,7 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_BOTH: // all opponents for (i = 0; i < gBattlersCount; i++) { - if (i != ignoredTgt && !IsAlly(i, ignoredTgt) && IS_ALIVE_AND_PRESENT(i)) + if (i != ignoredTgt && !IsBattlerAlly(i, ignoredTgt) && IS_ALIVE_AND_PRESENT(i)) targets[numTargets++] = i + MAX_BATTLERS_COUNT; } break; @@ -2162,8 +2157,7 @@ static void Cmd_teamattack_moveback(void) sBattleAnimScriptPtr += 2; // Apply to double battles when attacking own side - if (!IsContest() && IsDoubleBattle() - && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + if (!IsContest() && IsDoubleBattle() && IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) { if (wantedBattler == ANIM_ATTACKER) { @@ -2200,7 +2194,7 @@ static void Cmd_teamattack_movefwd(void) // Apply to double battles when attacking own side if (!IsContest() && IsDoubleBattle() - && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + && IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) { if (wantedBattler == ANIM_ATTACKER) { diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c index e897290768..19e201a45e 100644 --- a/src/battle_anim_bug.c +++ b/src/battle_anim_bug.c @@ -389,7 +389,7 @@ void AnimTranslateStinger(struct Sprite *sprite) } } - if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + if (!IsContest() && IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) { if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT) diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c index fd9ffdf923..1cada8f825 100644 --- a/src/battle_anim_dark.c +++ b/src/battle_anim_dark.c @@ -932,16 +932,9 @@ void AnimTask_MetallicShine(u8 taskId) } if (IsContest()) - { species = gContestResources->moveAnim->species; - } else - { - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); - else - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); - } + species = GetMonData(GetPartyBattlerData(gBattleAnimAttacker), MON_DATA_SPECIES); spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); newSpriteId = CreateInvisibleSpriteCopy(gBattleAnimAttacker, spriteId, species); diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index a3104122d1..4162447094 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -30,6 +30,9 @@ static void AnimPetalDanceSmallFlower_Step(struct Sprite *); static void AnimRazorLeafParticle(struct Sprite *); static void AnimRazorLeafParticle_Step1(struct Sprite *); static void AnimRazorLeafParticle_Step2(struct Sprite *); +static void AnimTeraStarstormBeam(struct Sprite *sprite); +static void AnimTeraStarstormBeam_Step(struct Sprite *); +static void AnimTeraStarstormStars_Step(struct Sprite *); static void AnimLeechSeed(struct Sprite *); static void AnimLeechSeed_Step(struct Sprite *); static void AnimLeechSeedSprouts(struct Sprite *); @@ -3989,6 +3992,153 @@ static void AnimRazorLeafParticle_Step2(struct Sprite *sprite) DestroyAnimSprite(sprite); } +static const union AnimCmd sAnim_TeraStarstormBeamRing_0[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_TeraStarstormBeamRing_1[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sAnims_TeraStarstormBeamRing[] = +{ + sAnim_TeraStarstormBeamRing_0, + sAnim_TeraStarstormBeamRing_1, +}; + +static const union AffineAnimCmd sAffineAnim_TeraStarstormBeamRing[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_FRAME(0x60, 0x60, 0, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sAffineAnims_TeraStarstormBeamRing[] = +{ + sAffineAnim_TeraStarstormBeamRing, +}; + +const struct SpriteTemplate gTeraStarstormBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_STARSTORM, + .paletteTag = ANIM_TAG_STARSTORM, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimTeraStarstormBeam, +}; + +// arg0: start offset x +// arg1: start offset y +// arg2: end offset x +// arg3: end offset y +// arg4: duration +static void AnimTeraStarstormBeam(struct Sprite *sprite) +{ + gBattleAnimArgs[0] += 4; + gBattleAnimArgs[1] -= 30; + InitSpritePosToAnimAttacker(sprite, TRUE); + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[3] = 0; + sprite->data[4] = -70; + InitAnimLinearTranslation(sprite); + sprite->callback = AnimTeraStarstormBeam_Step; + sprite->affineAnimPaused = TRUE; + sprite->callback(sprite); + +} + +static void AnimTeraStarstormBeam_Step(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + DestroyAnimSprite(sprite); +} + +const union AffineAnimCmd gTeraStarAffineAnimCmds[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gTeraStarAffineAnimTable[] = { + gTeraStarAffineAnimCmds, +}; + +// arg0: start offset x +// arg1: start offset y +// arg2: end offset x +// arg3: end offset y +// arg4: duration +// arg5: target partner +// arg6: ????? +const struct SpriteTemplate gTeraStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_YELLOW_STAR, + .paletteTag = ANIM_TAG_YELLOW_STAR, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gTeraStarAffineAnimTable, + .callback = AnimTeraStarstormStars, +}; + + +void AnimTeraStarstormStars(struct Sprite *sprite) +{ + gBattleAnimArgs[0] += 4; + gBattleAnimArgs[1] -= 100; + InitSpritePosToAnimAttacker(sprite, TRUE); + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->x; + sprite->data[3] = sprite->y; + if (gBattleAnimArgs[5] == 1) + { + u32 targetPartner; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + { + if (gBattleAnimTarget == 0) + targetPartner = 2; + else + targetPartner = 0; + } + else + { + if (gBattleAnimTarget == 1) + targetPartner = 3; + else + targetPartner = 1; + } + sprite->data[2] = GetBattlerSpriteCoord(targetPartner, BATTLER_COORD_X_2) + gBattleAnimArgs[2] ; + sprite->data[4] = GetBattlerSpriteCoord(targetPartner, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + } + else + { + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2] ; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + } + InitAnimLinearTranslation(sprite); + sprite->callback = AnimTeraStarstormStars_Step; + sprite->affineAnimPaused = TRUE; + sprite->callback(sprite); +} + +static void AnimTeraStarstormStars_Step(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + DestroyAnimSprite(sprite); + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + StartSpriteAnim(sprite, 1); + sprite->affineAnimPaused = FALSE; + } +} + // Animates a sprite that moves linearly from one location to another, with a // single-cycle sine wave added to the y position along the way. // Used by Razor Leaf and Magical Leaf. @@ -4020,7 +4170,7 @@ void AnimTranslateLinearSingleSineWave(struct Sprite *sprite) sprite->data[5] = gBattleAnimArgs[5]; InitAnimArcTranslation(sprite); - if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + if (IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) sprite->data[0] = 1; else sprite->data[0] = 0; @@ -6693,16 +6843,23 @@ static void TrySwapWishBattlerIds(u32 battlerAtk, u32 battlerPartner) u32 oppSide = GetBattlerSide(BATTLE_OPPOSITE(battlerAtk)); // if used future sight on opposing side, properly track who used it - if (gSideStatuses[oppSide] & SIDE_STATUS_FUTUREATTACK) { - for (i = 0; i < gBattlersCount; i++) { - if (IsAlly(i,battlerAtk)) + if (gSideStatuses[oppSide] & SIDE_STATUS_FUTUREATTACK) + { + u32 battlerAtkSide = GetBattlerSide(battlerAtk); + for (i = 0; i < gBattlersCount; i++) + { + if (battlerAtkSide == GetBattlerSide(i)) continue; // only on opposing side - if (gWishFutureKnock.futureSightBattlerIndex[i] == battlerAtk) { + + if (gWishFutureKnock.futureSightBattlerIndex[i] == battlerAtk) + { // if target was attacked with future sight from us, now they'll be the partner slot gWishFutureKnock.futureSightBattlerIndex[i] = battlerPartner; gWishFutureKnock.futureSightPartyIndex[i] = gBattlerPartyIndexes[battlerPartner]; break; - } else if (gWishFutureKnock.futureSightBattlerIndex[i] == battlerPartner) { + } + else if (gWishFutureKnock.futureSightBattlerIndex[i] == battlerPartner) + { gWishFutureKnock.futureSightBattlerIndex[i] = battlerAtk; gWishFutureKnock.futureSightPartyIndex[i] = gBattlerPartyIndexes[battlerAtk]; break; @@ -6711,10 +6868,9 @@ static void TrySwapWishBattlerIds(u32 battlerAtk, u32 battlerPartner) } // swap wish party indices - if (gWishFutureKnock.wishCounter[battlerAtk] > 0 - || gWishFutureKnock.wishCounter[battlerPartner] > 0) { + if (gWishFutureKnock.wishCounter[battlerAtk] > gBattleTurnCounter + || gWishFutureKnock.wishCounter[battlerPartner] > gBattleTurnCounter) SWAP(gWishFutureKnock.wishPartyId[battlerAtk], gWishFutureKnock.wishPartyId[battlerPartner], temp); - } } static void AnimTask_AllySwitchDataSwap(u8 taskId) diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 1530fa37a5..6f34f479b9 100644 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -3417,51 +3417,24 @@ void AnimTask_RolePlaySilhouette(u8 taskId) isShiny = gContestResources->moveAnim->targetIsShiny; species = gContestResources->moveAnim->targetSpecies; xOffset = 20; - priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); } else { + struct Pokemon *mon = GetPartyBattlerData(gBattleAnimTarget); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - { isBackPic = FALSE; - personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY); - isShiny = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_IS_SHINY); - if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE) - { - if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES); - else - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES); - } - else - { - species = gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies; - } - - xOffset = 20; - priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); - } else - { isBackPic = TRUE; - personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY); - isShiny = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_IS_SHINY); - if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE) - { - if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES); - else - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES); - } - else - { - species = gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies; - } + personality = GetMonData(mon, MON_DATA_PERSONALITY); + isShiny = GetMonData(mon, MON_DATA_IS_SHINY); + if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE) + species = GetMonData(mon, MON_DATA_SPECIES); + else + species = gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies; - xOffset = -20; - priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); - } + xOffset = -20; } + priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); @@ -5331,28 +5304,22 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) } else { + struct Pokemon *mon = GetPartyBattlerData(gBattleAnimAttacker); + personality = GetMonData(mon, MON_DATA_PERSONALITY); + isShiny = GetMonData(mon, MON_DATA_IS_SHINY); + if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) + species = GetMonData(mon, MON_DATA_SPECIES); + else + species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) { - personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); - isShiny = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_IS_SHINY); - if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); - else - species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; - subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1; isBackPic = FALSE; x = DISPLAY_WIDTH + 32; } else { - personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); - isShiny = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_IS_SHINY); - if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); - else - species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; - subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1; isBackPic = TRUE; x = -32; diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c index 401cc09eaf..b67304e05e 100644 --- a/src/battle_anim_fire.c +++ b/src/battle_anim_fire.c @@ -717,7 +717,7 @@ static void AnimSunlight(struct Sprite *sprite) // arg 6: ? (todo: something related to which mon the pixel offsets are based on) static void AnimEmberFlare(struct Sprite *sprite) { - if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget) + if (IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget) && (gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT) || gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index f00626efe8..13b1cf834f 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -143,28 +143,16 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species) u8 ret; species = SanitizeSpeciesId(species); - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER || IsContest()) + if (IsContest()) { if (species == SPECIES_UNOWN) { - if (IsContest()) - { - if (gContestResources->moveAnim->hasTargetAnim) - personality = gContestResources->moveAnim->targetPersonality; - else - personality = gContestResources->moveAnim->personality; - } + if (gContestResources->moveAnim->hasTargetAnim) + personality = gContestResources->moveAnim->targetPersonality; else - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); - else - personality = gTransformedPersonalities[battlerId]; - } + personality = gContestResources->moveAnim->personality; species = GetUnownSpeciesId(personality); } - ret = gSpeciesInfo[species].backPicYOffset; } else { @@ -172,14 +160,17 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species) { spriteInfo = gBattleSpritesDataPtr->battlerData; if (!spriteInfo[battlerId].transformSpecies) - personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); + personality = GetMonData(GetPartyBattlerData(battlerId), MON_DATA_PERSONALITY); else personality = gTransformedPersonalities[battlerId]; - species = GetUnownSpeciesId(personality); } - ret = gSpeciesInfo[species].frontPicYOffset; } + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER || IsContest()) + ret = gSpeciesInfo[species].backPicYOffset; + else + ret = gSpeciesInfo[species].frontPicYOffset; return ret; } @@ -279,22 +270,13 @@ u8 GetBattlerYCoordWithElevation(u8 battlerId) y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y); if (!IsContest()) { - 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; - } + spriteInfo = gBattleSpritesDataPtr->battlerData; + + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(GetPartyBattlerData(battlerId), MON_DATA_SPECIES); else - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - else - species = spriteInfo[battlerId].transformSpecies; - } + species = spriteInfo[battlerId].transformSpecies; + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) y -= GetBattlerElevation(battlerId, species); } @@ -817,18 +799,6 @@ bool32 InitSpritePosToAnimBattler(u32 animBattlerId, struct Sprite *sprite, bool return TRUE; } -u8 GetBattlerAtPosition(u8 position) -{ - u8 i; - - for (i = 0; i < gBattlersCount; i++) - { - if (GetBattlerPosition(i) == position) - break; - } - return i; -} - bool8 IsBattlerSpritePresent(u8 battlerId) { if (IsContest()) @@ -845,19 +815,8 @@ bool8 IsBattlerSpritePresent(u8 battlerId) if (GetBattlerPosition(battlerId) == 0xff) return FALSE; - if (!gBattleStruct->spriteIgnore0Hp) - { - 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; - } - } + if (!gBattleStruct->spriteIgnore0Hp && GetMonData(GetPartyBattlerData(battlerId), MON_DATA_HP) == 0) + return FALSE; return TRUE; } } @@ -1029,8 +988,8 @@ void InitAnimLinearTranslation(struct Sprite *sprite) u16 xDelta = abs(x) << 8; u16 yDelta = abs(y) << 8; - xDelta = xDelta / sprite->data[0]; - yDelta = yDelta / sprite->data[0]; + xDelta = SAFE_DIV(xDelta, sprite->data[0]); + yDelta = SAFE_DIV(yDelta, sprite->data[0]); if (movingLeft) xDelta |= 1; @@ -1531,6 +1490,12 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } +// arg0: start x offset +// arg1: start y offset +// arg2: end x offset +// arg3: end y offset +// arg4: duration +// arg5: arc amplitude void AnimThrowProjectile(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); @@ -1874,26 +1839,16 @@ static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId) } else { - if (GetBattlerSide(i) == B_SIDE_PLAYER) - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); - else - species = spriteInfo[battlerId].transformSpecies; - - return gSpeciesInfo[species].backPicYOffset; - } + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(GetPartyBattlerData(i), MON_DATA_SPECIES); else - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); - else - species = spriteInfo[battlerId].transformSpecies; + species = spriteInfo[battlerId].transformSpecies; + if (GetBattlerSide(i) == B_SIDE_PLAYER) + return gSpeciesInfo[species].backPicYOffset; + else return gSpeciesInfo[species].frontPicYOffset; - } } } } diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 7308a9d6fd..3386570885 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -7844,8 +7844,8 @@ static void SpriteCB_MindBlownBall(struct Sprite *sprite) 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->data[6] = SAFE_DIV((oldPosX - sprite->x) << 4, gBattleAnimArgs[0] << 1); + sprite->data[7] = SAFE_DIV((oldPosY - sprite->y) << 4, gBattleAnimArgs[0] << 1); sprite->callback = AnimMindBlownBallStep; } static void AnimMindBlownBallStep(struct Sprite *sprite) @@ -8896,7 +8896,7 @@ static void SpriteCB_AnimSpriteOnTargetSideCentre(struct Sprite *sprite) if (!sprite->data[0]) { - if (IsAlly(gBattleAnimAttacker, target)) + if (IsBattlerAlly(gBattleAnimAttacker, target)) { if (IsDoubleBattle()) InitSpritePosToAnimAttackersCentre(sprite, FALSE); @@ -9072,7 +9072,7 @@ static void SpriteCB_DragonEnergyShot(struct Sprite* sprite) u8 def1 = gBattleAnimTarget; u8 def2 = BATTLE_PARTNER(def1); - if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) + if (!IsDoubleBattle() || IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) y = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET); else { @@ -9172,7 +9172,7 @@ static void SpriteCB_GlacialLance(struct Sprite* sprite) sprite->data[0] = gBattleAnimArgs[6]; - if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) + if (!IsDoubleBattle() || IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) { sprite->data[2] = GetBattlerSpriteCoord(def1, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Converge on target sprite->data[4] = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; @@ -9267,21 +9267,15 @@ void AnimTask_DynamaxGrowth(u8 taskId) // from CFRU void AnimTask_GetWeatherToSet(u8 taskId) { - switch (GetMoveMaxEffect(gCurrentMove)) - { - case MAX_EFFECT_SUN: - gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SUN; - break; - case MAX_EFFECT_RAIN: - gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_RAIN; - break; - case MAX_EFFECT_SANDSTORM: - gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SANDSTORM; - break; - case MAX_EFFECT_HAIL: - gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_HAIL; - break; - } + if (MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_SUN)) + gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SUN; + else if (MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_RAIN)) + gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_RAIN; + else if (MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_SANDSTORM)) + gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SANDSTORM; + else if (MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_HAIL)) + gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_HAIL; + DestroyAnimVisualTask(taskId); } diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index a9c1f0cf67..b7e023c9ad 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -501,7 +501,7 @@ static void AnimPsychoCut(struct Sprite *sprite) } } - if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + if (!IsContest() && IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) { if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT) @@ -1379,3 +1379,14 @@ void AnimPsychoBoost(struct Sprite *sprite) break; } } + +const struct SpriteTemplate gTachyonCutterSpriteTemplate = +{ + .tileTag = ANIM_TAG_CUT, + .paletteTag = ANIM_TAG_BUBBLE, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gCuttingSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCuttingSlice, +}; diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index ec7bc535df..0aaf5f1609 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -1026,3 +1026,25 @@ void AnimTask_SeismicTossBgAccelerateDownAtEnd(u8 taskId) DestroyAnimVisualTask(taskId); } } + +const struct SpriteTemplate gSaltCureCrystalSpriteTemplate = +{ + .tileTag = ANIM_TAG_SALT_PARTICLE, + .paletteTag = ANIM_TAG_SALT_PARTICLE, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gAnims_IceCrystalLarge, + .images = NULL, + .affineAnims = gAffineAnims_IceCrystalHit, + .callback = AnimIceEffectParticle, +}; + +const struct SpriteTemplate gSaltCureSwirlSpriteTemplate = +{ + .tileTag = ANIM_TAG_SALT_PARTICLE, + .paletteTag = ANIM_TAG_SALT_PARTICLE, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gAnims_WaterMudOrb, + .images = NULL, + .affineAnims = gAffineAnims_Whirlpool, + .callback = AnimParticleInVortex, +}; diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index f746f186aa..9090893fda 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -403,7 +403,7 @@ void AnimTask_CentredFrozenIceCube(u8 taskId) u8 battler1 = gBattleAnimTarget; u8 battler2 = BATTLE_PARTNER(battler1); - if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) + if (!IsDoubleBattle() || IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) { x = GetBattlerSpriteCoord(battler1, BATTLER_COORD_X_2); y = GetBattlerSpriteCoord(battler1, BATTLER_COORD_Y_PIC_OFFSET); diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index a8c6e4077e..0ede51954a 100644 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -908,10 +908,7 @@ void AnimTask_SwitchOutBallEffect(u8 taskId) u32 selectedPalettes; spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; - if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) - ballId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_POKEBALL); - else - ballId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_POKEBALL); + ballId = GetMonData(GetPartyBattlerData(gBattleAnimAttacker), MON_DATA_POKEBALL); switch (gTasks[taskId].data[0]) { diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index a8de8eddd9..47642b9fce 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -316,16 +316,9 @@ void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId) } if (IsContest()) - { species = gContestResources->moveAnim->species; - } else - { - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); - else - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); - } + species = GetMonData(GetPartyBattlerData(gBattleAnimAttacker), MON_DATA_SPECIES); spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); newSpriteId = CreateInvisibleSpriteCopy(gBattleAnimAttacker, spriteId, species); @@ -458,16 +451,9 @@ static void StatsChangeAnimation_Step1(u8 taskId) } if (IsContest()) - { sAnimStatsChangeData->species = gContestResources->moveAnim->species; - } else - { - if (GetBattlerSide(sAnimStatsChangeData->battler1) != B_SIDE_PLAYER) - sAnimStatsChangeData->species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[sAnimStatsChangeData->battler1]], MON_DATA_SPECIES); - else - sAnimStatsChangeData->species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[sAnimStatsChangeData->battler1]], MON_DATA_SPECIES); - } + sAnimStatsChangeData->species = GetMonData(GetPartyBattlerData(sAnimStatsChangeData->battler1), MON_DATA_SPECIES); gTasks[taskId].func = StatsChangeAnimation_Step2; } @@ -840,16 +826,9 @@ void StartMonScrollingBgMask(u8 taskId, int UNUSED unused, u16 scrollSpeed, u8 b SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); if (IsContest()) - { species = gContestResources->moveAnim->species; - } else - { - if (GetBattlerSide(battler) != B_SIDE_PLAYER) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES); - else - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES); - } + species = GetMonData(GetPartyBattlerData(battler), MON_DATA_SPECIES); spriteId = CreateInvisibleSpriteCopy(battler, gBattlerSpriteIds[battler], species); if (includePartner) @@ -1057,7 +1036,7 @@ void AnimTask_SetAnimAttackerAndTargetForEffectTgt(u8 taskId) void AnimTask_IsTargetSameSide(u8 taskId) { - if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + if (IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) gBattleAnimArgs[ARG_RET_ID] = TRUE; else gBattleAnimArgs[ARG_RET_ID] = FALSE; diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 65f8178d13..57053ef043 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -940,7 +940,7 @@ static void AnimHydroCannonBeam(struct Sprite *sprite) { bool8 animType; u8 coordType; - if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + if (IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) { gBattleAnimArgs[0] *= -1; if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT) @@ -1349,25 +1349,11 @@ static u8 GetWaterSpoutPowerForAnim(void) u8 i; u16 hp; u16 maxhp; - u16 partyIndex; - struct Pokemon *slot; + struct Pokemon *slot = GetPartyBattlerData(gBattleAnimAttacker); - if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) - { - partyIndex = gBattlerPartyIndexes[gBattleAnimAttacker]; - slot = &gPlayerParty[partyIndex]; - maxhp = GetMonData(slot, MON_DATA_MAX_HP); - hp = GetMonData(slot, MON_DATA_HP); - maxhp /= 4; - } - else - { - partyIndex = gBattlerPartyIndexes[gBattleAnimAttacker]; - slot = &gEnemyParty[partyIndex]; - maxhp = GetMonData(slot, MON_DATA_MAX_HP); - hp = GetMonData(slot, MON_DATA_HP); - maxhp /= 4; - } + maxhp = GetMonData(slot, MON_DATA_MAX_HP); + hp = GetMonData(slot, MON_DATA_HP); + maxhp /= 4; for (i = 0; i < 3; i++) { if (hp < maxhp * (i + 1)) diff --git a/src/battle_arena.c b/src/battle_arena.c index dd0f0c1bbd..d79602156f 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -472,7 +472,7 @@ static void InitArenaChallenge(void) gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0; SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); - gTrainerBattleOpponent_A = 0; + TRAINER_BATTLE_PARAM.opponentA = 0; } static void GetArenaData(void) @@ -562,7 +562,7 @@ static void GiveArenaPrize(void) static void BufferArenaOpponentName(void) { - GetFrontierTrainerName(gStringVar1, gTrainerBattleOpponent_A); + GetFrontierTrainerName(gStringVar1, TRAINER_BATTLE_PARAM.opponentA); } void DrawArenaRefereeTextBox(void) diff --git a/src/battle_bg.c b/src/battle_bg.c index 328f990653..0625992d3d 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -703,24 +703,6 @@ const struct BattleBackground sBattleTerrainTable[] = }, }; -static void UNUSED CB2_UnusedBattleInit(void); - -static void UNUSED UnusedBattleInit(void) -{ - u8 spriteId; - - ResetSpriteData(); - spriteId = CreateSprite(&gUnusedBattleInitSprite, 0, 0, 0); - gSprites[spriteId].invisible = TRUE; - SetMainCallback2(CB2_UnusedBattleInit); -} - -static void UNUSED CB2_UnusedBattleInit(void) -{ - AnimateSprites(); - BuildOamBuffer(); -} - void BattleInitBgsAndWindows(void) { ResetBgsAndClearDma3BusyFlags(0); @@ -806,7 +788,7 @@ void DrawMainBattleBackground(void) { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - u32 trainerClass = GetTrainerClassFromId(gTrainerBattleOpponent_A); + u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); if (trainerClass == TRAINER_CLASS_LEADER) { LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); @@ -1207,7 +1189,7 @@ void DrawBattleEntryBackground(void) { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - u32 trainerClass = GetTrainerClassFromId(gTrainerBattleOpponent_A); + u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); if (trainerClass == TRAINER_CLASS_LEADER) { LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1))); @@ -1272,7 +1254,7 @@ bool8 LoadChosenBattleElement(u8 caseId) { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - u32 trainerClass = GetTrainerClassFromId(gTrainerBattleOpponent_A); + u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); if (trainerClass == TRAINER_CLASS_LEADER) { LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); @@ -1334,7 +1316,7 @@ bool8 LoadChosenBattleElement(u8 caseId) { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - u32 trainerClass = GetTrainerClassFromId(gTrainerBattleOpponent_A); + u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); if (trainerClass == TRAINER_CLASS_LEADER) { LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); @@ -1396,7 +1378,7 @@ bool8 LoadChosenBattleElement(u8 caseId) { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - u32 trainerClass = GetTrainerClassFromId(gTrainerBattleOpponent_A); + u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); if (trainerClass == TRAINER_CLASS_LEADER) { LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index c437a687bd..1e4bf628db 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -401,9 +401,9 @@ static void LinkOpponentHandleDrawTrainerPic(u32 battler) if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) { if (battler == B_POSITION_OPPONENT_LEFT) - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A); + trainerPicId = GetFrontierTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentA); else - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B); + trainerPicId = GetFrontierTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentB); } else { @@ -432,7 +432,7 @@ static void LinkOpponentHandleDrawTrainerPic(u32 battler) else { xPos = 176; - if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_UNION_ROOM) { trainerPicId = GetUnionRoomTrainerPic(); } @@ -466,9 +466,9 @@ static void LinkOpponentHandleTrainerSlide(u32 battler) u32 trainerPicId; if (battler == B_POSITION_OPPONENT_LEFT) - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A); + trainerPicId = GetFrontierTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentA); else - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B); + trainerPicId = GetFrontierTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentB); BtlController_HandleTrainerSlide(battler, trainerPicId); LinkOpponentBufferExecCompleted(battler); // Possibly a bug, because execution should be completed after the slide in finishes. See Controller_WaitForTrainerPic. diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index e87ee1a28d..28e572d1a5 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -432,7 +432,7 @@ static u32 OpponentGetTrainerPicId(u32 battlerId) { trainerPicId = GetSecretBaseTrainerPicIndex(); } - else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + else if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_FRONTIER_BRAIN) { trainerPicId = GetFrontierBrainTrainerPicIndex(); } @@ -441,13 +441,13 @@ static u32 OpponentGetTrainerPicId(u32 battlerId) if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { if (battlerId == 1) - trainerPicId = GetTrainerHillTrainerFrontSpriteId(gTrainerBattleOpponent_A); + trainerPicId = GetTrainerHillTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentA); else - trainerPicId = GetTrainerHillTrainerFrontSpriteId(gTrainerBattleOpponent_B); + trainerPicId = GetTrainerHillTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentB); } else { - trainerPicId = GetTrainerHillTrainerFrontSpriteId(gTrainerBattleOpponent_A); + trainerPicId = GetTrainerHillTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentA); } } else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) @@ -455,13 +455,13 @@ static u32 OpponentGetTrainerPicId(u32 battlerId) if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI)) { if (battlerId == 1) - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A); + trainerPicId = GetFrontierTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentA); else - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B); + trainerPicId = GetFrontierTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentB); } else { - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A); + trainerPicId = GetFrontierTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentA); } } else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) @@ -471,13 +471,13 @@ static u32 OpponentGetTrainerPicId(u32 battlerId) else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { if (battlerId != 1) - trainerPicId = GetTrainerPicFromId(gTrainerBattleOpponent_B); + trainerPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentB); else - trainerPicId = GetTrainerPicFromId(gTrainerBattleOpponent_A); + trainerPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentA); } else { - trainerPicId = GetTrainerPicFromId(gTrainerBattleOpponent_A); + trainerPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentA); } return trainerPicId; @@ -680,7 +680,7 @@ static void OpponentHandleChoosePokemon(u32 battler) // Switching out else if (gBattleStruct->AI_monToSwitchIntoId[battler] == PARTY_SIZE) { - chosenMonId = GetMostSuitableMonToSwitchInto(battler, TRUE); + chosenMonId = GetMostSuitableMonToSwitchInto(battler, SWITCH_AFTER_KO); if (chosenMonId == PARTY_SIZE) { s32 battler1, battler2, firstId, lastId; diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index e759bb9953..fee5c963e2 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -669,6 +669,7 @@ void HandleInputChooseMove(u32 battler) if (JOY_NEW(A_BUTTON) && !gBattleStruct->descriptionSubmenu) { + TryToHideMoveInfoWindow(); PlaySE(SE_SELECT); moveTarget = GetBattlerMoveTargetType(battler, moveInfo->moves[gMoveSelectionCursor[battler]]); @@ -687,7 +688,7 @@ void HandleInputChooseMove(u32 battler) if (moveTarget & MOVE_TARGET_USER) gMultiUsePlayerCursor = battler; else - gMultiUsePlayerCursor = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerSide(battler))); + gMultiUsePlayerCursor = GetOpposingSideBattler(battler); if (!gBattleResources->bufferA[battler][1]) // not a double battle { @@ -779,6 +780,7 @@ void HandleInputChooseMove(u32 battler) BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, 0xFFFF); HideGimmickTriggerSprite(); PlayerBufferExecCompleted(battler); + TryToHideMoveInfoWindow(); } } else if (JOY_NEW(DPAD_LEFT) && !gBattleStruct->zmove.viewing) @@ -878,7 +880,7 @@ void HandleInputChooseMove(u32 battler) MoveSelectionDisplayMoveType(battler); } } - else if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON) && B_MOVE_DESCRIPTION_BUTTON != B_LAST_USED_BALL_BUTTON) + else if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON)) { gBattleStruct->descriptionSubmenu = TRUE; MoveSelectionDisplayMoveDescription(battler); @@ -1708,7 +1710,7 @@ static void MoveSelectionDisplayPpNumber(u32 battler) static void MoveSelectionDisplayMoveType(u32 battler) { u8 *txtPtr, *end; - u32 speciesId; + u32 speciesId = gBattleMons[battler].species; struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); u32 move = moveInfo->moves[gMoveSelectionCursor[battler]]; @@ -1722,7 +1724,6 @@ static void MoveSelectionDisplayMoveType(u32 battler) } else if (effect == EFFECT_IVY_CUDGEL) { - speciesId = gBattleMons[battler].species; if (speciesId == SPECIES_OGERPON_WELLSPRING || speciesId == SPECIES_OGERPON_WELLSPRING_TERA || speciesId == SPECIES_OGERPON_HEARTHFLAME || speciesId == SPECIES_OGERPON_HEARTHFLAME_TERA @@ -1736,8 +1737,8 @@ static void MoveSelectionDisplayMoveType(u32 battler) } else if (effect == EFFECT_TERA_STARSTORM) { - if (gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR - || (IsGimmickSelected(battler, GIMMICK_TERA) && gBattleMons[battler].species == SPECIES_TERAPAGOS_TERASTAL)) + if (speciesId == SPECIES_TERAPAGOS_STELLAR + || (IsGimmickSelected(battler, GIMMICK_TERA) && speciesId == SPECIES_TERAPAGOS_TERASTAL)) type = TYPE_STELLAR; } else if (P_SHOW_DYNAMIC_TYPES) // Non-vanilla changes to battle UI showing dynamic types @@ -2128,6 +2129,7 @@ void PlayerHandleChooseMove(u32 battler) InitMoveSelectionsVarsAndStrings(battler); gBattleStruct->gimmick.playerSelect = FALSE; + TryToAddMoveInfoWindow(); AssignUsableZMoves(battler, moveInfo->moves); gBattleStruct->zmove.viable = (gBattleStruct->zmove.possibleZMoves[battler] & (1u << gMoveSelectionCursor[battler])) != 0; @@ -2172,7 +2174,8 @@ static void PlayerHandleChoosePokemon(u32 battler) gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[battler][4 + i]; if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleResources->bufferA[battler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH - && (gBattleResources->bufferA[battler][1] & 0xF) != PARTY_ACTION_CHOOSE_FAINTED_MON) + && (gBattleResources->bufferA[battler][1] & 0xF) != PARTY_ACTION_CHOOSE_FAINTED_MON + && (gBattleResources->bufferA[battler][1] & 0xF) != PARTY_ACTION_SEND_MON_TO_BOX) { BtlController_EmitChosenMonReturnValue(battler, BUFFER_B, gBattlerPartyIndexes[battler] + 1, gBattlePartyCurrentOrder); PlayerBufferExecCompleted(battler); diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 4c3163dd9a..a57bb8e2a5 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -387,7 +387,7 @@ static void PlayerPartnerHandleChoosePokemon(u32 battler) // Switching out else if (gBattleStruct->monToSwitchIntoId[battler] >= PARTY_SIZE || !IsValidForBattle(&gPlayerParty[gBattleStruct->monToSwitchIntoId[battler]])) { - chosenMonId = GetMostSuitableMonToSwitchInto(battler, TRUE); + chosenMonId = GetMostSuitableMonToSwitchInto(battler, SWITCH_AFTER_KO); if (chosenMonId == PARTY_SIZE || !IsValidForBattle(&gPlayerParty[chosenMonId])) // just switch to the next mon { diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index af77dc11fc..38d2e0ea02 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -409,9 +409,9 @@ static void RecordedOpponentHandleDrawTrainerPic(u32 battler) if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) { if (battler == B_POSITION_OPPONENT_LEFT) - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A); + trainerPicId = GetFrontierTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentA); else - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B); + trainerPicId = GetFrontierTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentB); } else { @@ -421,7 +421,7 @@ static void RecordedOpponentHandleDrawTrainerPic(u32 battler) else { xPos = 176; - if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_UNION_ROOM) { trainerPicId = GetUnionRoomTrainerPic(); } diff --git a/src/battle_controllers.c b/src/battle_controllers.c index c7d7230342..e522d698c3 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -2506,6 +2506,8 @@ void BtlController_HandleDrawTrainerPic(u32 battler, u32 trainerPicId, bool32 is xPos, yPos, subpriority); + if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT) + gBattlerSpriteIds[battler] = gBattleStruct->trainerSlideSpriteIds[battler]; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = battler; } @@ -2530,6 +2532,8 @@ void BtlController_HandleTrainerSlide(u32 battler, u32 trainerPicId) 80, (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80, 30); + if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT) + gBattlerSpriteIds[battler] = gBattleStruct->trainerSlideSpriteIds[battler]; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x2 = -96; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sSpeedX = 2; diff --git a/src/battle_debug.c b/src/battle_debug.c index b140d3791e..44a92b5f93 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -818,7 +818,7 @@ 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 u16 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, bool32 statusTrue); static bool32 TryMoveDigit(struct BattleDebugModifyArrows *modArrows, bool32 moveUp); static void SwitchToDebugView(u8 taskId); static void SwitchToDebugViewFromAiParty(u8 taskId); @@ -1852,7 +1852,7 @@ static void ValueToCharDigits(u8 *charDigits, u32 newValue, u8 maxDigits) charDigits[i] = valueDigits[i] + CHAR_0; } -static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, bool32 statusTrue) +static u16 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, bool32 statusTrue) { struct SideTimer *sideTimer = &gSideTimers[GetBattlerSide(data->battlerId)]; diff --git a/src/battle_dome.c b/src/battle_dome.c index 19c5086523..d374843573 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -1782,7 +1782,7 @@ static void InitDomeChallenge(void) gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0; SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); - gTrainerBattleOpponent_A = 0; + TRAINER_BATTLE_PARAM.opponentA = 0; } static void GetDomeData(void) @@ -2182,13 +2182,13 @@ static void BufferDomeRoundText(void) static void BufferDomeOpponentName(void) { StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.curChallengeBattleNum]); - CopyDomeTrainerName(gStringVar2, gTrainerBattleOpponent_A); + CopyDomeTrainerName(gStringVar2, TRAINER_BATTLE_PARAM.opponentA); } static void InitDomeOpponentParty(void) { CalculatePlayerPartyCount(); - CreateDomeOpponentMons(TrainerIdToTournamentId(gTrainerBattleOpponent_A)); + CreateDomeOpponentMons(TrainerIdToTournamentId(TRAINER_BATTLE_PARAM.opponentA)); } static void CreateDomeOpponentMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentMonId, u32 otId) @@ -2577,7 +2577,7 @@ static int TournamentIdOfOpponent(int roundId, int trainerId) static void SetDomeOpponentId(void) { - gTrainerBattleOpponent_A = TrainerIdOfPlayerOpponent(); + TRAINER_BATTLE_PARAM.opponentA = TrainerIdOfPlayerOpponent(); } // While not an issue in-game, this will overflow if called after the player's opponent for the current round has been eliminated @@ -2588,7 +2588,7 @@ static u16 TrainerIdOfPlayerOpponent(void) static void SetDomeOpponentGraphicsId(void) { - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentA, 0); } static void SaveDomeChallenge(void) @@ -5063,9 +5063,9 @@ static void ResolveDomeRoundWinners(void) if (gSpecialVar_0x8005 == DOME_PLAYER_WON_MATCH) { - DOME_TRAINERS[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].isEliminated = TRUE; - DOME_TRAINERS[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].eliminatedAt = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - gSaveBlock2Ptr->frontier.domeWinningMoves[TrainerIdToTournamentId(gTrainerBattleOpponent_A)] = gBattleResults.lastUsedMovePlayer; + DOME_TRAINERS[TrainerIdToTournamentId(TRAINER_BATTLE_PARAM.opponentA)].isEliminated = TRUE; + DOME_TRAINERS[TrainerIdToTournamentId(TRAINER_BATTLE_PARAM.opponentA)].eliminatedAt = gSaveBlock2Ptr->frontier.curChallengeBattleNum; + gSaveBlock2Ptr->frontier.domeWinningMoves[TrainerIdToTournamentId(TRAINER_BATTLE_PARAM.opponentA)] = gBattleResults.lastUsedMovePlayer; // If the player's match was the final one, no NPC vs NPC matches to decide if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < DOME_FINAL) @@ -5693,7 +5693,7 @@ static void ReduceDomePlayerPartyToSelectedMons(void) static void GetPlayerSeededBeforeOpponent(void) { // A higher tournament ID is a worse seed - if (TrainerIdToTournamentId(gTrainerBattleOpponent_A) > TrainerIdToTournamentId(TRAINER_PLAYER)) + if (TrainerIdToTournamentId(TRAINER_BATTLE_PARAM.opponentA) > TrainerIdToTournamentId(TRAINER_PLAYER)) gSpecialVar_Result = 1; else gSpecialVar_Result = 2; diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 38664c5d09..3e8d0e9db7 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -23,7 +23,7 @@ #include "constants/items.h" #include "constants/moves.h" -static u8 GetMaxPowerTier(u32 move); +static u32 GetMaxPowerTier(u32 move); struct GMaxMove { @@ -197,13 +197,10 @@ void ActivateDynamax(u32 battler) // Unsets the flags used for Dynamaxing and reverts max HP if needed. void UndoDynamax(u32 battler) { - u8 side = GetBattlerSide(battler); - u8 monId = gBattlerPartyIndexes[battler]; - // Revert HP if battler is still Dynamaxed. if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) { - struct Pokemon *mon = (side == B_SIDE_PLAYER) ? &gPlayerParty[monId] : &gEnemyParty[monId]; + struct Pokemon *mon = GetPartyBattlerData(battler); uq4_12_t mult = GetDynamaxLevelHPMultiplier(GetMonData(mon, MON_DATA_DYNAMAX_LEVEL), TRUE); gBattleMons[battler].hp = UQ_4_12_TO_INT((GetMonData(mon, MON_DATA_HP) * mult + 1) + UQ_4_12_ROUND); // round up SetMonData(mon, MON_DATA_HP, &gBattleMons[battler].hp); @@ -318,11 +315,11 @@ enum }; // Gets the base power of a Max Move. -u8 GetMaxMovePower(u32 move) +u32 GetMaxMovePower(u32 move) { - u8 tier; + u32 tier; // G-Max Drum Solo, G-Max Hydrosnipe, and G-Max Fireball always have 160 base power. - if (GetMoveMaxEffect(GetMaxMove(gBattlerAttacker, move)) == MAX_EFFECT_FIXED_POWER) + if (MoveHasAdditionalEffect(move, MOVE_EFFECT_FIXED_POWER)) return 160; // Exceptions to all other rules below: @@ -370,7 +367,7 @@ u8 GetMaxMovePower(u32 move) } } -static u8 GetMaxPowerTier(u32 move) +static u32 GetMaxPowerTier(u32 move) { u32 strikeCount = GetMoveStrikeCount(move); if (strikeCount >= 2 && strikeCount <= 5) @@ -471,42 +468,6 @@ void ChooseDamageNonTypesString(u8 type) } } -// Returns the status effect that should be applied by a G-Max Move. -static u32 GetMaxMoveStatusEffect(u32 move) -{ - u8 maxEffect = GetMoveMaxEffect(move); - switch (maxEffect) - { - // Status 1 - case MAX_EFFECT_PARALYZE_FOES: - return STATUS1_PARALYSIS; - case MAX_EFFECT_POISON_FOES: - return STATUS1_POISON; - case MAX_EFFECT_POISON_PARALYZE_FOES: - { - static const u8 sStunShockEffects[] = {STATUS1_PARALYSIS, STATUS1_POISON}; - return RandomElement(RNG_G_MAX_STUN_SHOCK, sStunShockEffects); - } - case MAX_EFFECT_EFFECT_SPORE_FOES: - { - static const u8 sBefuddleEffects[] = {STATUS1_PARALYSIS, STATUS1_POISON, STATUS1_SLEEP}; - return RandomElement(RNG_G_MAX_BEFUDDLE, sBefuddleEffects); - } - // Status 2 - case MAX_EFFECT_CONFUSE_FOES: - case MAX_EFFECT_CONFUSE_FOES_PAY_DAY: - return STATUS2_CONFUSION; - case MAX_EFFECT_INFATUATE_FOES: - return STATUS2_INFATUATION; - case MAX_EFFECT_MEAN_LOOK: - return STATUS2_ESCAPE_PREVENTION; - case MAX_EFFECT_TORMENT_FOES: - return STATUS2_TORMENT; - default: - return STATUS1_NONE; - } -} - // Updates Dynamax HP multipliers and healthboxes. void BS_UpdateDynamax(void) { @@ -521,502 +482,6 @@ void BS_UpdateDynamax(void) gBattlescriptCurrInstr = cmd->nextInstr; } -// Activates the secondary effect of a Max Move. -void BS_SetMaxMoveEffect(void) -{ - NATIVE_ARGS(); - u16 effect = 0; - u8 maxEffect = GetMoveMaxEffect(gCurrentMove); - - // Don't continue if the move didn't land. - if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - { - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - - switch (maxEffect) - { - case MAX_EFFECT_RAISE_TEAM_ATTACK: - case MAX_EFFECT_RAISE_TEAM_DEFENSE: - case MAX_EFFECT_RAISE_TEAM_SPEED: - case MAX_EFFECT_RAISE_TEAM_SP_ATK: - case MAX_EFFECT_RAISE_TEAM_SP_DEF: - if (!NoAliveMonsForEitherParty()) - { - // Max Effects are ordered by stat ID. - SET_STATCHANGER(maxEffect, 1, FALSE); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; - effect++; - } - break; - case MAX_EFFECT_LOWER_ATTACK: - case MAX_EFFECT_LOWER_DEFENSE: - case MAX_EFFECT_LOWER_SPEED: - case MAX_EFFECT_LOWER_SP_ATK: - case MAX_EFFECT_LOWER_SP_DEF: - case MAX_EFFECT_LOWER_SPEED_2_FOES: - case MAX_EFFECT_LOWER_EVASIVENESS_FOES: - if (!NoAliveMonsForEitherParty()) - { - u8 statId = 0; - u8 stage = 1; - switch (maxEffect) - { - case MAX_EFFECT_LOWER_SPEED_2_FOES: - statId = STAT_SPEED; - stage = 2; - break; - case MAX_EFFECT_LOWER_EVASIVENESS_FOES: - statId = STAT_EVASION; - break; - default: - // Max Effects are ordered by stat ID. - statId = maxEffect - MAX_EFFECT_LOWER_ATTACK + 1; - break; - } - SET_STATCHANGER(statId, stage, TRUE); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectLowerStatFoes; - effect++; - } - break; - case MAX_EFFECT_SUN: - case MAX_EFFECT_RAIN: - case MAX_EFFECT_SANDSTORM: - case MAX_EFFECT_HAIL: - { - u8 weather = 0, msg = 0; - switch (maxEffect) - { - case MAX_EFFECT_SUN: - weather = BATTLE_WEATHER_SUN; - msg = B_MSG_STARTED_SUNLIGHT; - break; - case MAX_EFFECT_RAIN: - weather = BATTLE_WEATHER_RAIN; - msg = B_MSG_STARTED_RAIN; - break; - case MAX_EFFECT_SANDSTORM: - weather = BATTLE_WEATHER_SANDSTORM; - msg = B_MSG_STARTED_SANDSTORM; - break; - case MAX_EFFECT_HAIL: - weather = BATTLE_WEATHER_HAIL; - msg = B_MSG_STARTED_HAIL; - break; - } - if (TryChangeBattleWeather(gBattlerAttacker, weather, FALSE)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = msg; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectSetWeather; - effect++; - } - break; - } - case MAX_EFFECT_MISTY_TERRAIN: - case MAX_EFFECT_GRASSY_TERRAIN: - case MAX_EFFECT_ELECTRIC_TERRAIN: - case MAX_EFFECT_PSYCHIC_TERRAIN: - { - u32 statusFlag = 0; - switch (GetMoveEffectArg_MoveProperty(gCurrentMove)) - { - case MAX_EFFECT_MISTY_TERRAIN: - statusFlag = STATUS_FIELD_MISTY_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; - break; - case MAX_EFFECT_GRASSY_TERRAIN: - statusFlag = STATUS_FIELD_GRASSY_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_GRASSY; - break; - case MAX_EFFECT_ELECTRIC_TERRAIN: - statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; - break; - case MAX_EFFECT_PSYCHIC_TERRAIN: - statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; - break; - } - if (!(gFieldStatuses & statusFlag) && statusFlag != 0) - { - gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; - gFieldStatuses |= statusFlag; - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER) - gFieldTimers.terrainTimer = 8; - else - gFieldTimers.terrainTimer = 5; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectSetTerrain; - effect++; - } - break; - } - case MAX_EFFECT_VINE_LASH: - case MAX_EFFECT_CANNONADE: - case MAX_EFFECT_WILDFIRE: - case MAX_EFFECT_VOLCALITH: - { - u8 side = GetBattlerSide(gBattlerTarget); - if (!(gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES)) - { - u32 moveType = GetMoveType(gCurrentMove); - gSideStatuses[side] |= SIDE_STATUS_DAMAGE_NON_TYPES; - gSideTimers[side].damageNonTypesTimer = 5; // damage is dealt for 4 turns, ends on 5th - gSideTimers[side].damageNonTypesType = moveType; - BattleScriptPush(gBattlescriptCurrInstr + 1); - ChooseDamageNonTypesString(moveType); - gBattlescriptCurrInstr = BattleScript_DamageNonTypesStarts; - effect++; - } - break; - } - case MAX_EFFECT_STEALTH_ROCK: - if (!(gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_STEALTH_ROCK)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_POINTEDSTONESFLOAT; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectStonesurge; - effect++; - } - break; - case MAX_EFFECT_STEELSURGE: - if (!(gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_STEELSURGE)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SHARPSTEELFLOATS; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectSteelsurge; - effect++; - } - break; - case MAX_EFFECT_DEFOG: - if (gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_SCREEN_ANY - || gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_HAZARDS_ANY - || gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_HAZARDS_ANY - || gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_DefogTryHazards; - effect++; - } - break; - case MAX_EFFECT_AURORA_VEIL: - if (!(gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_AURORA_VEIL)) - { - gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_AURORA_VEIL; - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) - gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = 8; - else - gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = 5; - gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilBattlerId = gBattlerAttacker; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SAFEGUARD; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectAuroraVeilSuccess; - effect++; - } - break; - case MAX_EFFECT_GRAVITY: - if (!(gFieldStatuses & STATUS_FIELD_GRAVITY)) - { - gFieldStatuses |= STATUS_FIELD_GRAVITY; - gFieldTimers.gravityTimer = 5; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectGravitySuccess; - effect++; - } - break; - case MAX_EFFECT_SANDBLAST_FOES: - case MAX_EFFECT_FIRE_SPIN_FOES: - { - // Affects both opponents, but doesn't print strings so we can handle it here. - u8 battler; - for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler) - { - if (GetBattlerSide(battler) != GetBattlerSide(gBattlerTarget)) - continue; - if (!(gBattleMons[battler].status2 & STATUS2_WRAPPED)) - { - gBattleMons[battler].status2 |= STATUS2_WRAPPED; - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_GRIP_CLAW) - #if B_BINDING_TURNS >= GEN_5 - gDisableStructs[battler].wrapTurns = 7; - else - gDisableStructs[battler].wrapTurns = (Random() % 2) + 4; - #else - gDisableStructs[battler].wrapTurns = 5; - else - gDisableStructs[battler].wrapTurns = (Random() % 4) + 2; - #endif - // The Wrap effect does not expire when the user switches, so here's some cheese. - gBattleStruct->wrappedBy[battler] = gBattlerTarget; - if (maxEffect == MAX_EFFECT_SANDBLAST_FOES) - gBattleStruct->wrappedMove[battler] = MOVE_SAND_TOMB; - else - gBattleStruct->wrappedMove[battler] = MOVE_FIRE_SPIN; - } - } - break; - } - case MAX_EFFECT_YAWN_FOE: - { - static const u8 sSnoozeEffects[] = {TRUE, FALSE}; - if (!(gStatuses3[gBattlerTarget] & STATUS3_YAWN) - && CanBeSlept(gBattlerTarget, GetBattlerAbility(gBattlerTarget), BLOCKED_BY_SLEEP_CLAUSE) - && RandomElement(RNG_G_MAX_SNOOZE, sSnoozeEffects)) // 50% chance of success - { - gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectYawnSuccess; - effect++; - } - break; - } - case MAX_EFFECT_SPITE: - if (gLastMoves[gBattlerTarget] != MOVE_NONE - && gLastMoves[gBattlerTarget] != MOVE_UNAVAILABLE) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectTryReducePP; - effect++; - } - break; - case MAX_EFFECT_PARALYZE_FOES: - case MAX_EFFECT_POISON_FOES: - case MAX_EFFECT_POISON_PARALYZE_FOES: - case MAX_EFFECT_EFFECT_SPORE_FOES: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectStatus1Foes; - effect++; - break; - case MAX_EFFECT_CONFUSE_FOES_PAY_DAY: - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - u16 payday = gPaydayMoney; - gPaydayMoney += (gBattleMons[gBattlerAttacker].level * 100); - if (payday > gPaydayMoney) - gPaydayMoney = 0xFFFF; - gBattleCommunication[CURSOR_POSITION] = 1; // add "Coins scattered." message - } - // fall through - case MAX_EFFECT_CONFUSE_FOES: - case MAX_EFFECT_INFATUATE_FOES: - case MAX_EFFECT_TORMENT_FOES: - case MAX_EFFECT_MEAN_LOOK: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectStatus2Foes; - effect++; - break; - case MAX_EFFECT_CRIT_PLUS: - gBattleStruct->bonusCritStages[gBattlerAttacker]++; - gBattleStruct->bonusCritStages[BATTLE_PARTNER(gBattlerAttacker)]++; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectRaiseCritAlliesAnim; - effect++; - break; - case MAX_EFFECT_HEAL_TEAM: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectHealOneSixthAllies; - effect++; - break; - case MAX_EFFECT_AROMATHERAPY: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectCureStatusAllies; - effect++; - break; - case MAX_EFFECT_RECYCLE_BERRIES: - { - static const u8 sReplenishEffects[] = {TRUE, FALSE}; - if (RandomElement(RNG_G_MAX_REPLENISH, sReplenishEffects)) // 50% chance of success - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectRecycleBerriesAllies; - effect++; - } - break; - } - } - - if (!effect) - gBattlescriptCurrInstr = cmd->nextInstr; -} - -// Sets up sharp steel on the target's side. -void BS_SetSteelsurge(void) -{ - NATIVE_ARGS(const u8 *failInstr); - u8 targetSide = GetBattlerSide(gBattlerTarget); - if (gSideStatuses[targetSide] & SIDE_STATUS_STEELSURGE) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gSideStatuses[targetSide] |= SIDE_STATUS_STEELSURGE; - gSideTimers[targetSide].steelsurgeAmount = 1; - gBattlescriptCurrInstr = cmd->nextInstr; - } -} - -// Applies the status1 effect associated with a given G-Max Move. -// Could be expanded to function for any move. -void BS_TrySetStatus1(void) -{ - NATIVE_ARGS(const u8 *failInstr); - u8 effect = 0; - u32 status1 = GetMaxMoveStatusEffect(gCurrentMove); - switch (status1) - { - case STATUS1_POISON: - if (CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget))) - { - gBattleMons[gBattlerTarget].status1 |= STATUS1_POISON; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - effect++; - } - break; - case STATUS1_PARALYSIS: - if (CanBeParalyzed(gBattlerTarget, GetBattlerAbility(gBattlerTarget))) - { - gBattleMons[gBattlerTarget].status1 |= STATUS1_PARALYSIS; - gBattleCommunication[MULTISTRING_CHOOSER] = 3; - effect++; - } - break; - case STATUS1_SLEEP: - if (CanBeSlept(gBattlerTarget, GetBattlerAbility(gBattlerTarget), BLOCKED_BY_SLEEP_CLAUSE)) - { - if (B_SLEEP_TURNS >= GEN_5) - gBattleMons[gBattlerTarget].status1 |= STATUS1_SLEEP_TURN((Random() % 3) + 2); - else - gBattleMons[gBattlerTarget].status1 |= STATUS1_SLEEP_TURN((Random() % 4) + 3); - - TryActivateSleepClause(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget]); - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - effect++; - } - break; - } - if (effect) - { - gEffectBattler = gBattlerTarget; - BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); - MarkBattlerForControllerExec(gBattlerTarget); - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } -} - -// Applies the status2 effect associated with a given G-Max Move. -void BS_TrySetStatus2(void) -{ - NATIVE_ARGS(const u8 *failInstr); - u8 effect = 0; - u32 status2 = GetMaxMoveStatusEffect(gCurrentMove); - switch (status2) - { - case STATUS2_CONFUSION: - if (CanBeConfused(gBattlerTarget)) - { - gBattleMons[gBattlerTarget].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gBattleCommunication[MULTIUSE_STATE] = 1; - effect++; - } - break; - case STATUS2_INFATUATION: - { - u8 atkGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerAttacker].species, gBattleMons[gBattlerAttacker].personality); - u8 defGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerTarget].species, gBattleMons[gBattlerTarget].personality); - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_INFATUATION) - && gBattleMons[gBattlerTarget].ability != ABILITY_OBLIVIOUS - && !IsAbilityOnSide(gBattlerTarget, ABILITY_AROMA_VEIL) - && atkGender != defGender - && atkGender != MON_GENDERLESS - && defGender != MON_GENDERLESS) - { - gBattleMons[gBattlerTarget].status2 |= STATUS2_INFATUATED_WITH(gBattlerAttacker); - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - gBattleCommunication[MULTIUSE_STATE] = 2; - effect++; - } - break; - } - case STATUS2_ESCAPE_PREVENTION: - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION)) - { - gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION; - gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - effect++; - } - break; - case STATUS2_TORMENT: - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT) - && !IsAbilityOnSide(gBattlerTarget, ABILITY_AROMA_VEIL)) - { - gBattleMons[gBattlerTarget].status2 |= STATUS2_TORMENT; - gDisableStructs[gBattlerTarget].tormentTimer = 3; // 3 turns excluding current turn - gBattleCommunication[MULTISTRING_CHOOSER] = 3; - effect++; - } - break; - } - if (effect) - { - gEffectBattler = gBattlerTarget; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } -} - -// Heals one-sixth of the target's HP, including for Dynamaxed targets. -void BS_HealOneSixth(void) -{ - NATIVE_ARGS(const u8* failInstr); - gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].maxHP / 6; - if (gBattleStruct->moveDamage[gBattlerTarget] == 0) - gBattleStruct->moveDamage[gBattlerTarget] = 1; - gBattleStruct->moveDamage[gBattlerTarget] *= -1; - - if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) - gBattlescriptCurrInstr = cmd->failInstr; // fail - else - gBattlescriptCurrInstr = cmd->nextInstr; // can heal -} - -// Recycles the target's item if it is specifically holding a berry. -void BS_TryRecycleBerry(void) -{ - NATIVE_ARGS(const u8 *failInstr); - u16* usedHeldItem = &gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gBattlerTarget]][GetBattlerSide(gBattlerTarget)]; - if (gBattleMons[gBattlerTarget].item == ITEM_NONE - && gBattleStruct->changedItems[gBattlerTarget] == ITEM_NONE // Will not inherit an item - && ItemId_GetPocket(*usedHeldItem) == POCKET_BERRIES) - { - gLastUsedItem = *usedHeldItem; - *usedHeldItem = ITEM_NONE; - gBattleMons[gBattlerTarget].item = gLastUsedItem; - - BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item); - MarkBattlerForControllerExec(gBattlerTarget); - - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } -} - // Goes to the jump instruction if the target is Dynamaxed. void BS_JumpIfDynamaxed(void) { diff --git a/src/battle_factory.c b/src/battle_factory.c index 8edd9a2ddf..4ae2310c17 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -218,7 +218,7 @@ static void InitFactoryChallenge(void) gFrontierTempParty[i] = 0xFFFF; SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); - gTrainerBattleOpponent_A = 0; + TRAINER_BATTLE_PARAM.opponentA = 0; } static void GetBattleFactoryData(void) @@ -325,7 +325,7 @@ static void GenerateOpponentMons(void) } } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum); - gTrainerBattleOpponent_A = trainerId; + TRAINER_BATTLE_PARAM.opponentA = trainerId; if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < FRONTIER_STAGES_PER_CHALLENGE - 1) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = trainerId; @@ -379,7 +379,7 @@ static void GenerateOpponentMons(void) static void SetOpponentGfxVar(void) { - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentA, 0); } static void SetRentalsToOpponentParty(void) @@ -830,7 +830,7 @@ u32 GetAiScriptsInBattleFactory(void) int battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); int challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; - if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_FRONTIER_BRAIN) return AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY; else if (challengeNum < 2) return 0; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 945fa660ca..a71ee9c94f 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -199,7 +199,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler) gBattleStruct->palaceFlags &= (1 << MAX_BATTLERS_COUNT) - 1; gBattleStruct->palaceFlags |= (selectedMoves << MAX_BATTLERS_COUNT); BattleAI_SetupAIData(selectedMoves, battler); - chosenMoveId = BattleAI_ChooseMoveOrAction(); + chosenMoveId = BattleAI_ChooseMoveOrAction(battler); } // If no moves matched the selected group, pick a new move from groups the Pokémon has diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c index 057619aec1..540b1af1f1 100644 --- a/src/battle_gimmick.c +++ b/src/battle_gimmick.c @@ -80,7 +80,7 @@ bool32 ShouldTrainerBattlerUseGimmick(u32 battler, enum Gimmick gimmick) else { bool32 isSecondTrainer = (GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT) && (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT; - u16 trainerId = isSecondTrainer ? gTrainerBattleOpponent_B : gTrainerBattleOpponent_A; + u16 trainerId = isSecondTrainer ? TRAINER_BATTLE_PARAM.opponentB : TRAINER_BATTLE_PARAM.opponentA; const struct TrainerMon *mon = &GetTrainerPartyFromId(trainerId)[isSecondTrainer ? gBattlerPartyIndexes[battler] - MULTI_PARTY_SIZE : gBattlerPartyIndexes[battler]]; if (gimmick == GIMMICK_TERA && mon->teraType != TYPE_NONE) diff --git a/src/battle_interface.c b/src/battle_interface.c index 196f338495..a0075e8bac 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -206,6 +206,7 @@ static void Task_FreeAbilityPopUpGfx(u8); static void SpriteCB_LastUsedBall(struct Sprite *); static void SpriteCB_LastUsedBallWin(struct Sprite *); +static void SpriteCB_MoveInfoWin(struct Sprite *sprite); static const struct OamData sOamData_64x32 = { @@ -732,6 +733,7 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId) gBattleStruct->ballSpriteIds[0] = MAX_SPRITES; gBattleStruct->ballSpriteIds[1] = MAX_SPRITES; + gBattleStruct->moveInfoSpriteId = MAX_SPRITES; return healthboxLeftSpriteId; } @@ -2886,6 +2888,36 @@ static const struct SpriteTemplate sSpriteTemplate_LastUsedBallWindow = .callback = SpriteCB_LastUsedBallWin }; +#define MOVE_INFO_WINDOW_TAG 0xE722 + +static const struct OamData sOamData_MoveInfoWindow = +{ + .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_MoveInfoWindow = +{ + .tileTag = MOVE_INFO_WINDOW_TAG, + .paletteTag = ABILITY_POP_UP_TAG, + .oam = &sOamData_MoveInfoWindow, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_MoveInfoWin +}; + #if B_LAST_USED_BALL_BUTTON == R_BUTTON && B_LAST_USED_BALL_CYCLE == TRUE static const u8 ALIGNED(4) sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_r_cycle.4bpp"); #elif B_LAST_USED_BALL_CYCLE == TRUE @@ -2900,6 +2932,17 @@ static const struct SpriteSheet sSpriteSheet_LastUsedBallWindow = sLastUsedBallWindowGfx, sizeof(sLastUsedBallWindowGfx), LAST_BALL_WINDOW_TAG }; +#if B_MOVE_DESCRIPTION_BUTTON == R_BUTTON +static const u8 sMoveInfoWindowGfx[] = INCBIN_U8("graphics/battle_interface/move_info_window_r.4bpp"); +#else +static const u8 sMoveInfoWindowGfx[] = INCBIN_U8("graphics/battle_interface/move_info_window_l.4bpp"); +#endif + +static const struct SpriteSheet sSpriteSheet_MoveInfoWindow = +{ + sMoveInfoWindowGfx, sizeof(sMoveInfoWindowGfx), MOVE_INFO_WINDOW_TAG +}; + #define LAST_USED_BALL_X_F 14 #define LAST_USED_BALL_X_0 -14 #define LAST_USED_BALL_Y ((IsDoubleBattle()) ? 78 : 68) @@ -2958,7 +3001,7 @@ void TryAddLastUsedBallItemSprites(void) gBattleStruct->ballSpriteIds[0] = AddItemIconSprite(102, 102, gBallToDisplay); 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]].sHide = FALSE; gLastUsedBallMenuPresent = TRUE; gSprites[gBattleStruct->ballSpriteIds[0]].callback = SpriteCB_LastUsedBall; } @@ -2973,7 +3016,8 @@ void TryAddLastUsedBallItemSprites(void) gBattleStruct->ballSpriteIds[1] = CreateSprite(&sSpriteTemplate_LastUsedBallWindow, LAST_BALL_WIN_X_0, LAST_USED_WIN_Y, 5); - gSprites[gBattleStruct->ballSpriteIds[1]].sHide = FALSE; // restore + gSprites[gBattleStruct->ballSpriteIds[1]].sHide = FALSE; + gSprites[gBattleStruct->moveInfoSpriteId].sHide = TRUE; gLastUsedBallMenuPresent = TRUE; } if (B_LAST_USED_BALL_CYCLE == TRUE) @@ -2996,6 +3040,32 @@ static void DestroyLastUsedBallGfx(struct Sprite *sprite) gBattleStruct->ballSpriteIds[0] = MAX_SPRITES; } +void TryToAddMoveInfoWindow(void) +{ + LoadSpritePalette(&sSpritePalette_AbilityPopUp); + if (GetSpriteTileStartByTag(MOVE_INFO_WINDOW_TAG) == 0xFFFF) + LoadSpriteSheet(&sSpriteSheet_MoveInfoWindow); + + if (gBattleStruct->moveInfoSpriteId == MAX_SPRITES) + { + gBattleStruct->moveInfoSpriteId = CreateSprite(&sSpriteTemplate_MoveInfoWindow, LAST_BALL_WIN_X_0, LAST_USED_WIN_Y + 32, 6); + gSprites[gBattleStruct->moveInfoSpriteId].sHide = FALSE; + } +} + +void TryToHideMoveInfoWindow(void) +{ + gSprites[gBattleStruct->moveInfoSpriteId].sHide = TRUE; +} + +static void DestroyMoveInfoWinGfx(struct Sprite *sprite) +{ + FreeSpriteTilesByTag(MOVE_INFO_WINDOW_TAG); + FreeSpritePaletteByTag(ABILITY_POP_UP_TAG); + DestroySprite(sprite); + gBattleStruct->moveInfoSpriteId = MAX_SPRITES; +} + static void SpriteCB_LastUsedBallWin(struct Sprite *sprite) { if (sprite->sHide) @@ -3033,6 +3103,23 @@ static void SpriteCB_LastUsedBall(struct Sprite *sprite) } } +static void SpriteCB_MoveInfoWin(struct Sprite *sprite) +{ + if (sprite->sHide) + { + if (sprite->x != LAST_BALL_WIN_X_0) + sprite->x--; + + if (sprite->x == LAST_BALL_WIN_X_0) + DestroyMoveInfoWinGfx(sprite); + } + else + { + if (sprite->x != LAST_BALL_WIN_X_F) + sprite->x++; + } +} + static void TryHideOrRestoreLastUsedBall(u8 caseId) { if (B_LAST_USED_BALL == FALSE) @@ -3044,16 +3131,16 @@ static void TryHideOrRestoreLastUsedBall(u8 caseId) { case 0: // hide if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES) - gSprites[gBattleStruct->ballSpriteIds[0]].sHide = TRUE; // hide + gSprites[gBattleStruct->ballSpriteIds[0]].sHide = TRUE; if (gBattleStruct->ballSpriteIds[1] != MAX_SPRITES) - gSprites[gBattleStruct->ballSpriteIds[1]].sHide = TRUE; // hide + gSprites[gBattleStruct->ballSpriteIds[1]].sHide = TRUE; gLastUsedBallMenuPresent = FALSE; break; case 1: // restore if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES) - gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore + gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; if (gBattleStruct->ballSpriteIds[1] != MAX_SPRITES) - gSprites[gBattleStruct->ballSpriteIds[1]].sHide = FALSE; // restore + gSprites[gBattleStruct->ballSpriteIds[1]].sHide = FALSE; gLastUsedBallMenuPresent = TRUE; break; } diff --git a/src/battle_main.c b/src/battle_main.c index 467e57229d..d88f322a1a 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -25,7 +25,6 @@ #include "event_data.h" #include "evolution_scene.h" #include "field_weather.h" -#include "generational_changes.h" #include "graphics.h" #include "gpu_regs.h" #include "international_string_util.h" @@ -54,6 +53,7 @@ #include "task.h" #include "test_runner.h" #include "text.h" +#include "trainer_pools.h" #include "trig.h" #include "tv.h" #include "util.h" @@ -110,7 +110,7 @@ static void SetActionsAndBattlersTurnOrder(void); static void UpdateBattlerPartyOrdersOnSwitch(u32 battler); static bool8 AllAtActionConfirmed(void); static void TryChangeTurnOrder(void); -static void TryChangingTurnOrderEffects(u32 battler1, u32 battler2); +static void TryChangingTurnOrderEffects(u32 battler1, u32 battler2, u32 *quickClawRandom, u32 *quickDrawRandom); static void CheckChangingTurnOrderEffects(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); static void ReturnFromBattleToOverworld(void); @@ -224,6 +224,7 @@ EWRAM_DATA u16 gBattleMovePower = 0; EWRAM_DATA u16 gMoveToLearn = 0; EWRAM_DATA u32 gFieldStatuses = 0; EWRAM_DATA struct FieldTimer gFieldTimers = {0}; +EWRAM_DATA u16 gBattleTurnCounter = 0; EWRAM_DATA u8 gBattlerAbility = 0; EWRAM_DATA struct QueuedStatBoost gQueuedStatBoosts[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA bool8 gHasFetchedBall = FALSE; @@ -511,9 +512,10 @@ static void CB2_InitBattleInternal(void) if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_TRAINER_HILL))) + | BATTLE_TYPE_TRAINER_HILL + | BATTLE_TYPE_RECORDED))) { - gBattleTypeFlags |= (IsTrainerDoubleBattle(gTrainerBattleOpponent_A) ? BATTLE_TYPE_DOUBLE : 0); + gBattleTypeFlags |= (IsTrainerDoubleBattle(TRAINER_BATTLE_PARAM.opponentA) ? BATTLE_TYPE_DOUBLE : 0); } InitBattleBgsVideo(); @@ -540,9 +542,9 @@ static void CB2_InitBattleInternal(void) { if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED))) { - CreateNPCTrainerParty(&gEnemyParty[0], gTrainerBattleOpponent_A, TRUE); + CreateNPCTrainerParty(&gEnemyParty[0], TRAINER_BATTLE_PARAM.opponentA, TRUE); if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && !BATTLE_TWO_VS_ONE_OPPONENT) - CreateNPCTrainerParty(&gEnemyParty[PARTY_SIZE / 2], gTrainerBattleOpponent_B, FALSE); + CreateNPCTrainerParty(&gEnemyParty[PARTY_SIZE / 2], TRAINER_BATTLE_PARAM.opponentB, FALSE); SetWildMonHeldItem(); CalculateEnemyPartyCount(); } @@ -849,7 +851,7 @@ static void CB2_HandleStartBattle(void) BufferPartyVsScreenHealth_AtStart(); SetPlayerBerryDataInBattleStruct(); - if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_UNION_ROOM) { gLinkPlayers[0].id = 0; gLinkPlayers[1].id = 1; @@ -1054,11 +1056,11 @@ static void CB2_HandleStartMultiPartnerBattle(void) gLinkPlayers[1].id = 2; gLinkPlayers[2].id = 1; gLinkPlayers[3].id = 3; - GetFrontierTrainerName(gLinkPlayers[2].name, gTrainerBattleOpponent_A); - GetFrontierTrainerName(gLinkPlayers[3].name, gTrainerBattleOpponent_B); - GetBattleTowerTrainerLanguage(&language, gTrainerBattleOpponent_A); + GetFrontierTrainerName(gLinkPlayers[2].name, TRAINER_BATTLE_PARAM.opponentA); + GetFrontierTrainerName(gLinkPlayers[3].name, TRAINER_BATTLE_PARAM.opponentB); + GetBattleTowerTrainerLanguage(&language, TRAINER_BATTLE_PARAM.opponentA); gLinkPlayers[2].language = language; - GetBattleTowerTrainerLanguage(&language, gTrainerBattleOpponent_B); + GetBattleTowerTrainerLanguage(&language, TRAINER_BATTLE_PARAM.opponentB); gLinkPlayers[3].language = language; if (IsLinkTaskFinished()) @@ -1709,7 +1711,7 @@ static void CB2_HandleStartMultiBattle(void) SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT; + TRAINER_BATTLE_PARAM.opponentA = TRAINER_LINK_OPPONENT; gBattleTypeFlags |= BATTLE_TYPE_LINK_IN_BATTLE; } } @@ -1875,8 +1877,12 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer monsCount = trainer->partySize; } + u32 monIndices[monsCount]; + DoTrainerPartyPool(trainer, monIndices, monsCount, battleTypeFlags); + for (i = 0; i < monsCount; i++) { + u32 monIndex = monIndices[i]; s32 ball = -1; u32 personalityHash = GeneratePartyHash(trainer, i); const struct TrainerMon *partyData = trainer->party; @@ -1892,39 +1898,39 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer personalityValue = 0x88; // Use personality more likely to result in a male Pokémon personalityValue += personalityHash << 8; - if (partyData[i].gender == TRAINER_MON_MALE) - personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[i].species); - else if (partyData[i].gender == TRAINER_MON_FEMALE) - personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[i].species); - else if (partyData[i].gender == TRAINER_MON_RANDOM_GENDER) - personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(Random() & 1 ? MON_MALE : MON_FEMALE, partyData[i].species); - ModifyPersonalityForNature(&personalityValue, partyData[i].nature); - if (partyData[i].isShiny) + if (partyData[monIndex].gender == TRAINER_MON_MALE) + personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[monIndex].species); + else if (partyData[monIndex].gender == TRAINER_MON_FEMALE) + personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[monIndex].species); + else if (partyData[monIndex].gender == TRAINER_MON_RANDOM_GENDER) + personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(Random() & 1 ? MON_MALE : MON_FEMALE, partyData[monIndex].species); + ModifyPersonalityForNature(&personalityValue, partyData[monIndex].nature); + if (partyData[monIndex].isShiny) { otIdType = OT_ID_PRESET; fixedOtId = HIHALF(personalityValue) ^ LOHALF(personalityValue); } - CreateMon(&party[i], partyData[i].species, partyData[i].lvl, 0, TRUE, personalityValue, otIdType, fixedOtId); - SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + CreateMon(&party[i], partyData[monIndex].species, partyData[monIndex].lvl, 0, TRUE, personalityValue, otIdType, fixedOtId); + SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[monIndex].heldItem); - CustomTrainerPartyAssignMoves(&party[i], &partyData[i]); - SetMonData(&party[i], MON_DATA_IVS, &(partyData[i].iv)); - if (partyData[i].ev != NULL) + CustomTrainerPartyAssignMoves(&party[i], &partyData[monIndex]); + SetMonData(&party[i], MON_DATA_IVS, &(partyData[monIndex].iv)); + if (partyData[monIndex].ev != NULL) { - SetMonData(&party[i], MON_DATA_HP_EV, &(partyData[i].ev[0])); - SetMonData(&party[i], MON_DATA_ATK_EV, &(partyData[i].ev[1])); - SetMonData(&party[i], MON_DATA_DEF_EV, &(partyData[i].ev[2])); - SetMonData(&party[i], MON_DATA_SPATK_EV, &(partyData[i].ev[3])); - SetMonData(&party[i], MON_DATA_SPDEF_EV, &(partyData[i].ev[4])); - SetMonData(&party[i], MON_DATA_SPEED_EV, &(partyData[i].ev[5])); + SetMonData(&party[i], MON_DATA_HP_EV, &(partyData[monIndex].ev[0])); + SetMonData(&party[i], MON_DATA_ATK_EV, &(partyData[monIndex].ev[1])); + SetMonData(&party[i], MON_DATA_DEF_EV, &(partyData[monIndex].ev[2])); + SetMonData(&party[i], MON_DATA_SPATK_EV, &(partyData[monIndex].ev[3])); + SetMonData(&party[i], MON_DATA_SPDEF_EV, &(partyData[monIndex].ev[4])); + SetMonData(&party[i], MON_DATA_SPEED_EV, &(partyData[monIndex].ev[5])); } - if (partyData[i].ability != ABILITY_NONE) + if (partyData[monIndex].ability != ABILITY_NONE) { - const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[i].species]; + const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[monIndex].species]; u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities); for (ability = 0; ability < maxAbilities; ++ability) { - if (speciesInfo->abilities[ability] == partyData[i].ability) + if (speciesInfo->abilities[ability] == partyData[monIndex].ability) break; } if (ability >= maxAbilities) @@ -1932,7 +1938,7 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer } else if (B_TRAINER_MON_RANDOM_ABILITY) { - const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[i].species]; + const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[monIndex].species]; ability = personalityHash % 3; while (speciesInfo->abilities[ability] == ABILITY_NONE) { @@ -1940,34 +1946,34 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer } } SetMonData(&party[i], MON_DATA_ABILITY_NUM, &ability); - SetMonData(&party[i], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); - if (partyData[i].ball != ITEM_NONE) + SetMonData(&party[i], MON_DATA_FRIENDSHIP, &(partyData[monIndex].friendship)); + if (partyData[monIndex].ball != ITEM_NONE) { - ball = partyData[i].ball; + ball = partyData[monIndex].ball; SetMonData(&party[i], MON_DATA_POKEBALL, &ball); } - if (partyData[i].nickname != NULL) + if (partyData[monIndex].nickname != NULL) { - SetMonData(&party[i], MON_DATA_NICKNAME, partyData[i].nickname); + SetMonData(&party[i], MON_DATA_NICKNAME, partyData[monIndex].nickname); } - if (partyData[i].isShiny) + if (partyData[monIndex].isShiny) { u32 data = TRUE; SetMonData(&party[i], MON_DATA_IS_SHINY, &data); } - if (partyData[i].dynamaxLevel > 0) + if (partyData[monIndex].dynamaxLevel > 0) { - u32 data = partyData[i].dynamaxLevel; + u32 data = partyData[monIndex].dynamaxLevel; SetMonData(&party[i], MON_DATA_DYNAMAX_LEVEL, &data); } - if (partyData[i].gigantamaxFactor) + if (partyData[monIndex].gigantamaxFactor) { - u32 data = partyData[i].gigantamaxFactor; + u32 data = partyData[monIndex].gigantamaxFactor; SetMonData(&party[i], MON_DATA_GIGANTAMAX_FACTOR, &data); } - if (partyData[i].teraType > 0) + if (partyData[monIndex].teraType > 0) { - u32 data = partyData[i].teraType; + u32 data = partyData[monIndex].teraType; SetMonData(&party[i], MON_DATA_TERA_TYPE, &data); } CalculateMonStats(&party[i]); @@ -3713,14 +3719,14 @@ static void DoBattleIntro(void) // Try to set a status to start the battle with gBattleStruct->startingStatus = 0; - if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetTrainerStartingStatusFromId(gTrainerBattleOpponent_B)) + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetTrainerStartingStatusFromId(TRAINER_BATTLE_PARAM.opponentB)) { - gBattleStruct->startingStatus = GetTrainerStartingStatusFromId(gTrainerBattleOpponent_B); + gBattleStruct->startingStatus = GetTrainerStartingStatusFromId(TRAINER_BATTLE_PARAM.opponentB); gBattleStruct->startingStatusTimer = 0; // infinite } - else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && GetTrainerStartingStatusFromId(gTrainerBattleOpponent_A)) + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && GetTrainerStartingStatusFromId(TRAINER_BATTLE_PARAM.opponentA)) { - gBattleStruct->startingStatus = GetTrainerStartingStatusFromId(gTrainerBattleOpponent_A); + gBattleStruct->startingStatus = GetTrainerStartingStatusFromId(TRAINER_BATTLE_PARAM.opponentA); gBattleStruct->startingStatusTimer = 0; // infinite } else if (B_VAR_STARTING_STATUS != 0) @@ -3771,6 +3777,7 @@ static void TryDoEventsBeforeFirstTurn(void) #endif // TESTING gBattleStruct->speedTieBreaks = RandomUniform(RNG_SPEED_TIE, 0, Factorial(MAX_BATTLERS_COUNT) - 1); + gBattleTurnCounter = 0; for (i = 0; i < gBattlersCount; i++) gBattlerByTurnOrder[i] = i; @@ -3949,9 +3956,10 @@ void BattleTurnPassed(void) return; if (DoBattlerEndTurnEffects()) return; + if (HandleWishPerishSongOnTurnEnd()) + return; } - if (HandleWishPerishSongOnTurnEnd()) - return; + if (HandleFaintedMonActions()) return; gBattleStruct->faintedActionsState = 0; @@ -3987,13 +3995,13 @@ void BattleTurnPassed(void) gChosenMoveByBattler[i] = MOVE_NONE; gBattleStruct->battlerState[i].absentBattlerFlags = gAbsentBattlerFlags & (1u << i); gBattleStruct->monToSwitchIntoId[i] = PARTY_SIZE; + gStatuses4[i] &= ~STATUS4_ELECTRIFIED; } for (i = 0; i < NUM_BATTLE_SIDES; i++) { if (gSideTimers[i].retaliateTimer > 0) gSideTimers[i].retaliateTimer--; - } BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG); @@ -4137,28 +4145,30 @@ enum STATE_SELECTION_SCRIPT_MAY_RUN }; -void SetupAISwitchingData(u32 battler, bool32 isAiRisky) +void SetupAISwitchingData(u32 battler, enum SwitchType switchType) { - s32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + s32 opposingBattler = GetOppositeBattler(battler); // AI's predicting data if ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_PREDICT_SWITCH)) { AI_DATA->aiSwitchPredictionInProgress = TRUE; AI_DATA->battlerDoingPrediction = battler; - AI_DATA->mostSuitableMonId[opposingBattler] = GetMostSuitableMonToSwitchInto(opposingBattler, isAiRisky); + AI_DATA->mostSuitableMonId[opposingBattler] = GetMostSuitableMonToSwitchInto(opposingBattler, switchType); if (ShouldSwitch(opposingBattler)) AI_DATA->shouldSwitch |= (1u << opposingBattler); AI_DATA->aiSwitchPredictionInProgress = FALSE; + gBattleStruct->prevTurnSpecies[opposingBattler] = gBattleMons[opposingBattler].species; // Determine whether AI will use predictions this turn - AI_DATA->predictingSwitch = RandomPercentage(RNG_AI_PREDICT_SWITCH, 50); + AI_DATA->predictingSwitch = RandomPercentage(RNG_AI_PREDICT_SWITCH, PREDICT_SWITCH_CHANCE); } // AI's data - AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, isAiRisky); + AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, switchType); if (ShouldSwitch(battler)) AI_DATA->shouldSwitch |= (1u << battler); + gBattleStruct->prevTurnSpecies[battler] = gBattleMons[battler].species; } static void HandleTurnActionSelectionState(void) @@ -4174,7 +4184,7 @@ static void HandleTurnActionSelectionState(void) case STATE_TURN_START_RECORD: // Recorded battle related action on start of every turn. RecordedBattle_CopyBattlerMoves(battler); gBattleCommunication[battler] = STATE_BEFORE_ACTION_CHOSEN; - u32 isAiRisky = AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_RISKY; // Risky AI switches aggressively even mid battle + enum SwitchType switchType = (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_RISKY) ? SWITCH_AFTER_KO : SWITCH_MID_BATTLE; // Risky AI switches aggressively even mid battle // Do AI score computations here so we can use them in AI_TrySwitchOrUseItem if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) @@ -4183,12 +4193,11 @@ static void HandleTurnActionSelectionState(void) AI_DATA->aiCalcInProgress = TRUE; // Setup battler data - sBattler_AI = battler; - BattleAI_SetupAIData(0xF, sBattler_AI); - SetupAISwitchingData(battler, isAiRisky); + BattleAI_SetupAIData(0xF, battler); + SetupAISwitchingData(battler, switchType); // Do scoring - gBattleStruct->aiMoveOrAction[battler] = BattleAI_ChooseMoveOrAction(); + gBattleStruct->aiMoveOrAction[battler] = BattleAI_ChooseMoveOrAction(battler); AI_DATA->aiCalcInProgress = FALSE; } // fallthrough @@ -4353,38 +4362,38 @@ static void HandleTurnActionSelectionState(void) break; case B_ACTION_CANCEL_PARTNER: gBattleCommunication[battler] = STATE_WAIT_SET_BEFORE_ACTION; - gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))] = STATE_BEFORE_ACTION_CHOSEN; + gBattleCommunication[GetPartnerBattler(battler)] = STATE_BEFORE_ACTION_CHOSEN; RecordedBattle_ClearBattlerAction(battler, 1); - if (gBattleMons[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))].status2 & STATUS2_MULTIPLETURNS - || gBattleMons[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))].status2 & STATUS2_RECHARGE) + if (gBattleMons[GetPartnerBattler(battler)].status2 & STATUS2_MULTIPLETURNS + || gBattleMons[GetPartnerBattler(battler)].status2 & STATUS2_RECHARGE) { BtlController_EmitEndBounceEffect(battler, BUFFER_A); MarkBattlerForControllerExec(battler); return; } - else if (gChosenActionByBattler[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))] == B_ACTION_SWITCH) + else if (gChosenActionByBattler[GetPartnerBattler(battler)] == B_ACTION_SWITCH) { - RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))), 2); + RecordedBattle_ClearBattlerAction(GetPartnerBattler(battler), 2); } - else if (gChosenActionByBattler[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))] == B_ACTION_RUN) + else if (gChosenActionByBattler[GetPartnerBattler(battler)] == B_ACTION_RUN) { - RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))), 1); + RecordedBattle_ClearBattlerAction(GetPartnerBattler(battler), 1); } - else if (gChosenActionByBattler[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))] == B_ACTION_USE_MOVE - && (gProtectStructs[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))].noValidMoves - || gDisableStructs[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))].encoredMove)) + else if (gChosenActionByBattler[GetPartnerBattler(battler)] == B_ACTION_USE_MOVE + && (gProtectStructs[GetPartnerBattler(battler)].noValidMoves + || gDisableStructs[GetPartnerBattler(battler)].encoredMove)) { - RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))), 1); + RecordedBattle_ClearBattlerAction(GetPartnerBattler(battler), 1); } else if (gBattleTypeFlags & BATTLE_TYPE_PALACE - && gChosenActionByBattler[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))] == B_ACTION_USE_MOVE) + && gChosenActionByBattler[GetPartnerBattler(battler)] == B_ACTION_USE_MOVE) { gRngValue = gBattlePalaceMoveSelectionRngValue; - RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))), 1); + RecordedBattle_ClearBattlerAction(GetPartnerBattler(battler), 1); } else { - RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))), 3); + RecordedBattle_ClearBattlerAction(GetPartnerBattler(battler), 3); } gBattleStruct->gimmick.toActivate &= ~((1u << BATTLE_PARTNER(GetBattlerPosition(battler)))); @@ -4770,12 +4779,12 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, u32 holdEffect) // various effects if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_TAILWIND) speed *= 2; - if (gDisableStructs[battler].unbrudenActive) + if (gDisableStructs[battler].unburdenActive) speed *= 2; // paralysis drop if (gBattleMons[battler].status1 & STATUS1_PARALYSIS && ability != ABILITY_QUICK_FEET) - speed /= B_PARALYSIS_SPEED >= GEN_7 ? 2 : 4; + speed /= GetGenConfig(GEN_CONFIG_PARALYSIS_SPEED) >= GEN_7 ? 2 : 4; if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SWAMP) speed /= 4; @@ -4828,7 +4837,7 @@ s8 GetBattleMovePriority(u32 battler, u16 move) gProtectStructs[battler].pranksterElevated = 1; priority++; } - else if (GetMoveEffect(move) == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battler) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_DYNAMAX && !IsGimmickSelected(battler, GIMMICK_DYNAMAX)) + else if (GetMoveEffect(move) == EFFECT_GRASSY_GLIDE && IsBattlerTerrainAffected(battler, STATUS_FIELD_GRASSY_TERRAIN) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_DYNAMAX && !IsGimmickSelected(battler, GIMMICK_DYNAMAX)) { priority++; } @@ -5037,6 +5046,9 @@ static void SetActionsAndBattlersTurnOrder(void) } else { + u32 quickClawRandom[MAX_BATTLERS_COUNT] = {0}; + u32 quickDrawRandom[MAX_BATTLERS_COUNT] = {0}; + for (battler = 0; battler < gBattlersCount; battler++) { if (gChosenActionByBattler[battler] == B_ACTION_USE_ITEM @@ -5056,8 +5068,8 @@ static void SetActionsAndBattlersTurnOrder(void) { gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[battler]; gBattlerByTurnOrder[turnOrderId] = battler; - gBattleStruct->quickClawRandom[battler] = RandomPercentage(RNG_QUICK_CLAW, GetBattlerHoldEffectParam(battler)); - gBattleStruct->quickDrawRandom[battler] = RandomPercentage(RNG_QUICK_DRAW, 30); + quickClawRandom[battler] = RandomPercentage(RNG_QUICK_CLAW, GetBattlerHoldEffectParam(battler)); + quickDrawRandom[battler] = RandomPercentage(RNG_QUICK_DRAW, 30); turnOrderId++; } } @@ -5067,7 +5079,7 @@ static void SetActionsAndBattlersTurnOrder(void) { u8 battler1 = gBattlerByTurnOrder[i]; u8 battler2 = gBattlerByTurnOrder[j]; - TryChangingTurnOrderEffects(battler1, battler2); + TryChangingTurnOrderEffects(battler1, battler2, quickClawRandom, quickDrawRandom); if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM && gActionsByTurnOrder[i] != B_ACTION_SWITCH @@ -5246,7 +5258,7 @@ static void TryChangeTurnOrder(void) } } -static void TryChangingTurnOrderEffects(u32 battler1, u32 battler2) +static void TryChangingTurnOrderEffects(u32 battler1, u32 battler2, u32 *quickClawRandom, u32 *quickDrawRandom) { u32 ability1 = GetBattlerAbility(battler1); u32 holdEffectBattler1 = GetBattlerHoldEffect(battler1, TRUE); @@ -5255,21 +5267,21 @@ static void TryChangingTurnOrderEffects(u32 battler1, u32 battler2) // Battler 1 // Quick Draw - if (ability1 == ABILITY_QUICK_DRAW && !IsBattleMoveStatus(gChosenMoveByBattler[battler1]) && gBattleStruct->quickDrawRandom[battler1]) + if (ability1 == ABILITY_QUICK_DRAW && !IsBattleMoveStatus(gChosenMoveByBattler[battler1]) && quickDrawRandom[battler1]) gProtectStructs[battler1].quickDraw = TRUE; // Quick Claw and Custap Berry if (!gProtectStructs[battler1].quickDraw - && ((holdEffectBattler1 == HOLD_EFFECT_QUICK_CLAW && gBattleStruct->quickClawRandom[battler1]) + && ((holdEffectBattler1 == HOLD_EFFECT_QUICK_CLAW && quickClawRandom[battler1]) || (holdEffectBattler1 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler1, 4, gBattleMons[battler1].item)))) gProtectStructs[battler1].usedCustapBerry = TRUE; // Battler 2 // Quick Draw - if (ability2 == ABILITY_QUICK_DRAW && !IsBattleMoveStatus(gChosenMoveByBattler[battler2]) && gBattleStruct->quickDrawRandom[battler2]) + if (ability2 == ABILITY_QUICK_DRAW && !IsBattleMoveStatus(gChosenMoveByBattler[battler2]) && quickDrawRandom[battler2]) gProtectStructs[battler2].quickDraw = TRUE; // Quick Claw and Custap Berry if (!gProtectStructs[battler2].quickDraw - && ((holdEffectBattler2 == HOLD_EFFECT_QUICK_CLAW && gBattleStruct->quickClawRandom[battler2]) + && ((holdEffectBattler2 == HOLD_EFFECT_QUICK_CLAW && quickClawRandom[battler2]) || (holdEffectBattler2 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler2, 4, gBattleMons[battler2].item)))) gProtectStructs[battler2].usedCustapBerry = TRUE; } @@ -5398,7 +5410,7 @@ static void HandleEndTurn_BattleWon(void) BattleStopLowHpSound(); gBattlescriptCurrInstr = BattleScript_FrontierTrainerBattleWon; - if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_FRONTIER_BRAIN) PlayBGM(MUS_VICTORY_GYM_LEADER); else PlayBGM(MUS_VICTORY_TRAINER); @@ -5408,7 +5420,7 @@ static void HandleEndTurn_BattleWon(void) BattleStopLowHpSound(); gBattlescriptCurrInstr = BattleScript_LocalTrainerBattleWon; - switch (GetTrainerClassFromId(gTrainerBattleOpponent_A)) + switch (GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA)) { case TRAINER_CLASS_ELITE_FOUR: case TRAINER_CLASS_CHAMPION: @@ -5819,11 +5831,12 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) u32 moveType = GetMoveType(move); u32 moveEffect = GetMoveEffect(move); u32 species, heldItem, holdEffect, ability, type1, type2, type3; + bool32 monInBattle = gMain.inBattle && gPartyMenu.menuType != PARTY_MENU_TYPE_IN_BATTLE; if (move == MOVE_STRUGGLE) return TYPE_NORMAL; - if (gMain.inBattle) + if (monInBattle) { species = gBattleMons[battler].species; heldItem = gBattleMons[battler].item; @@ -5847,18 +5860,21 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) switch (moveEffect) { case EFFECT_WEATHER_BALL: - if (gMain.inBattle && HasWeatherEffect()) + if (monInBattle) { - if (gBattleWeather & B_WEATHER_RAIN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) - return TYPE_WATER; - else if (gBattleWeather & B_WEATHER_SANDSTORM) - return TYPE_ROCK; - else if (gBattleWeather & B_WEATHER_SUN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) - return TYPE_FIRE; - else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL)) - return TYPE_ICE; - else - return moveType; + if (HasWeatherEffect()) + { + if (gBattleWeather & B_WEATHER_RAIN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_WATER; + else if (gBattleWeather & B_WEATHER_SANDSTORM) + return TYPE_ROCK; + else if (gBattleWeather & B_WEATHER_SUN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_FIRE; + else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL)) + return TYPE_ICE; + else + return moveType; + } } else { @@ -5870,6 +5886,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) break; case WEATHER_RAIN: case WEATHER_RAIN_THUNDERSTORM: + case WEATHER_DOWNPOUR: if (holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) return TYPE_WATER; break; @@ -5884,7 +5901,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) case EFFECT_HIDDEN_POWER: { u32 typeBits = 0; - if (gMain.inBattle) + if (monInBattle) { typeBits = ((gBattleMons[battler].hpIV & 1) << 0) | ((gBattleMons[battler].attackIV & 1) << 1) @@ -5963,7 +5980,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) else return moveType; case EFFECT_TERRAIN_PULSE: - if (gMain.inBattle) + if (monInBattle) { if (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY)) { @@ -6006,9 +6023,17 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) break; } - if (moveType == TYPE_NORMAL - && ((!gMain.inBattle || TrySetAteType(move, battler, ability)) - && GetActiveGimmick(battler) != GIMMICK_DYNAMAX)) + if (IsSoundMove(move) && ability == ABILITY_LIQUID_VOICE) + { + return TYPE_WATER; + } + else if (moveEffect == EFFECT_AURA_WHEEL && species == SPECIES_MORPEKO_HANGRY) + { + return TYPE_DARK; + } + else if (moveType == TYPE_NORMAL + && ((!gMain.inBattle || TrySetAteType(move, battler, ability)) + && GetActiveGimmick(battler) != GIMMICK_DYNAMAX)) { if (gMain.inBattle && ateBoost != NULL) *ateBoost = TRUE; @@ -6023,14 +6048,6 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) *ateBoost = TRUE; return TYPE_NORMAL; } - else if (IsSoundMove(move) && ability == ABILITY_LIQUID_VOICE) - { - return TYPE_WATER; - } - else if (moveEffect == EFFECT_AURA_WHEEL && species == SPECIES_MORPEKO_HANGRY) - { - return TYPE_DARK; - } return TYPE_NONE; } diff --git a/src/battle_message.c b/src/battle_message.c index e06aac8d7f..c463474d40 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -891,6 +891,8 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_SUPEREFFECTIVETWOFOES] = COMPOUND_STRING("It's super effective on {B_DEF_NAME_WITH_PREFIX2} and {B_DEF_PARTNER_NAME}!"), [STRINGID_NOTVERYEFFECTIVETWOFOES] = COMPOUND_STRING("It's not very effective on {B_DEF_NAME_WITH_PREFIX2} and {B_DEF_PARTNER_NAME}!"), [STRINGID_ITDOESNTAFFECTTWOFOES] = COMPOUND_STRING("It doesn't affect {B_DEF_NAME_WITH_PREFIX2} and {B_DEF_PARTNER_NAME}…"), + [STRINGID_SENDCAUGHTMONPARTYORBOX] = COMPOUND_STRING("Add {B_DEF_NAME} to your party?"), + [STRINGID_PKMNSENTTOPCAFTERCATCH] = gText_PkmnSentToPCAfterCatch, }; const u16 gTrainerUsedItemStringIds[] = @@ -1361,10 +1363,11 @@ const u16 gFlashFireStringIds[] = const u16 gCaughtMonStringIds[] = { - [B_MSG_SENT_SOMEONES_PC] = STRINGID_PKMNTRANSFERREDSOMEONESPC, - [B_MSG_SENT_LANETTES_PC] = STRINGID_PKMNTRANSFERREDLANETTESPC, - [B_MSG_SOMEONES_BOX_FULL] = STRINGID_PKMNBOXSOMEONESPCFULL, - [B_MSG_LANETTES_BOX_FULL] = STRINGID_PKMNBOXLANETTESPCFULL, + [B_MSG_SENT_SOMEONES_PC] = STRINGID_PKMNTRANSFERREDSOMEONESPC, + [B_MSG_SENT_LANETTES_PC] = STRINGID_PKMNTRANSFERREDLANETTESPC, + [B_MSG_SOMEONES_BOX_FULL] = STRINGID_PKMNBOXSOMEONESPCFULL, + [B_MSG_LANETTES_BOX_FULL] = STRINGID_PKMNBOXLANETTESPCFULL, + [B_MSG_SWAPPED_INTO_PARTY] = STRINGID_PKMNSENTTOPCAFTERCATCH, }; const u16 gRoomsStringIds[] = @@ -2099,7 +2102,7 @@ void BufferStringBattle(u16 stringID, u32 battler) } else { - if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_UNION_ROOM) stringPtr = sText_Trainer1WantsToBattle; else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) stringPtr = sText_LinkTrainerWantsToBattlePause; @@ -2171,7 +2174,7 @@ void BufferStringBattle(u16 stringID, u32 battler) { if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))) stringPtr = sText_Trainer1SentOutPkmn; - else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) + else if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_UNION_ROOM) stringPtr = sText_Trainer1SentOutPkmn; else stringPtr = sText_LinkTrainerSentOutPkmn; @@ -2192,7 +2195,7 @@ void BufferStringBattle(u16 stringID, u32 battler) } else { - if (gTrainerBattleOpponent_A == TRAINER_LINK_OPPONENT || gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_LINK_OPPONENT || gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) stringPtr = sText_LinkTrainer2WithdrewPkmn; @@ -2232,7 +2235,7 @@ void BufferStringBattle(u16 stringID, u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) stringPtr = sText_LinkTrainerMultiSentOutPkmn; - else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) + else if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_UNION_ROOM) stringPtr = sText_Trainer1SentOutPkmn2; else stringPtr = sText_LinkTrainerSentOutPkmn2; @@ -2300,7 +2303,7 @@ void BufferStringBattle(u16 stringID, u32 battler) break; } } - else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) + else if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_UNION_ROOM) { switch (gBattleTextBuff1[0]) { @@ -2502,13 +2505,13 @@ static const u8 *BattleStringGetOpponentName(u8 *text, u8 multiplayerId, u8 batt switch (GetBattlerPosition(battler)) { case B_POSITION_OPPONENT_LEFT: - toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, text, multiplayerId, battler); + toCpy = BattleStringGetOpponentNameByTrainerId(TRAINER_BATTLE_PARAM.opponentA, text, multiplayerId, battler); 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, battler); + toCpy = BattleStringGetOpponentNameByTrainerId(TRAINER_BATTLE_PARAM.opponentB, text, multiplayerId, battler); else - toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, text, multiplayerId, battler); + toCpy = BattleStringGetOpponentNameByTrainerId(TRAINER_BATTLE_PARAM.opponentA, text, multiplayerId, battler); break; } @@ -2800,14 +2803,14 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) toCpy = gAbilitiesInfo[sBattlerAbilities[gEffectBattler]].name; break; case B_TXT_TRAINER1_CLASS: // trainer class name - toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); + toCpy = BattleStringGetOpponentClassByTrainerId(TRAINER_BATTLE_PARAM.opponentA); break; case B_TXT_TRAINER1_NAME: // trainer1 name - toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, text, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); + toCpy = BattleStringGetOpponentNameByTrainerId(TRAINER_BATTLE_PARAM.opponentA, text, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); break; case B_TXT_TRAINER1_NAME_WITH_CLASS: // trainer1 name with trainer class toCpy = textStart; - classString = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); + classString = BattleStringGetOpponentClassByTrainerId(TRAINER_BATTLE_PARAM.opponentA); while (classString[classLength] != EOS) { textStart[classLength] = classString[classLength]; @@ -2815,7 +2818,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) } textStart[classLength] = CHAR_SPACE; textStart += classLength + 1; - nameString = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, textStart, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); + nameString = BattleStringGetOpponentNameByTrainerId(TRAINER_BATTLE_PARAM.opponentA, textStart, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); if (nameString != textStart) { while (nameString[nameLength] != EOS) @@ -2847,12 +2850,12 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) case B_TXT_TRAINER1_LOSE_TEXT: // trainerA lose text if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { - CopyFrontierTrainerText(FRONTIER_PLAYER_WON_TEXT, gTrainerBattleOpponent_A); + CopyFrontierTrainerText(FRONTIER_PLAYER_WON_TEXT, TRAINER_BATTLE_PARAM.opponentA); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) { - CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_WON, gTrainerBattleOpponent_A); + CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_WON, TRAINER_BATTLE_PARAM.opponentA); toCpy = gStringVar4; } else @@ -2863,12 +2866,12 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) case B_TXT_TRAINER1_WIN_TEXT: // trainerA win text if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { - CopyFrontierTrainerText(FRONTIER_PLAYER_LOST_TEXT, gTrainerBattleOpponent_A); + CopyFrontierTrainerText(FRONTIER_PLAYER_LOST_TEXT, TRAINER_BATTLE_PARAM.opponentA); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) { - CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_LOST, gTrainerBattleOpponent_A); + CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_LOST, TRAINER_BATTLE_PARAM.opponentA); toCpy = gStringVar4; } break; @@ -2937,14 +2940,14 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) toCpy = sText_FoePkmnPrefix4; break; case B_TXT_TRAINER2_CLASS: - toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B); + toCpy = BattleStringGetOpponentClassByTrainerId(TRAINER_BATTLE_PARAM.opponentB); break; case B_TXT_TRAINER2_NAME: - toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_B, text, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)); + toCpy = BattleStringGetOpponentNameByTrainerId(TRAINER_BATTLE_PARAM.opponentB, text, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)); break; case B_TXT_TRAINER2_NAME_WITH_CLASS: toCpy = textStart; - classString = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B); + classString = BattleStringGetOpponentClassByTrainerId(TRAINER_BATTLE_PARAM.opponentB); while (classString[classLength] != EOS) { textStart[classLength] = classString[classLength]; @@ -2952,7 +2955,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) } textStart[classLength] = CHAR_SPACE; textStart += classLength + 1; - nameString = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_B, textStart, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)); + nameString = BattleStringGetOpponentNameByTrainerId(TRAINER_BATTLE_PARAM.opponentB, textStart, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)); if (nameString != textStart) { while (nameString[nameLength] != EOS) @@ -2966,12 +2969,12 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) case B_TXT_TRAINER2_LOSE_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { - CopyFrontierTrainerText(FRONTIER_PLAYER_WON_TEXT, gTrainerBattleOpponent_B); + CopyFrontierTrainerText(FRONTIER_PLAYER_WON_TEXT, TRAINER_BATTLE_PARAM.opponentB); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) { - CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_WON, gTrainerBattleOpponent_B); + CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_WON, TRAINER_BATTLE_PARAM.opponentB); toCpy = gStringVar4; } else @@ -2982,12 +2985,12 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) case B_TXT_TRAINER2_WIN_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { - CopyFrontierTrainerText(FRONTIER_PLAYER_LOST_TEXT, gTrainerBattleOpponent_B); + CopyFrontierTrainerText(FRONTIER_PLAYER_LOST_TEXT, TRAINER_BATTLE_PARAM.opponentB); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) { - CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_LOST, gTrainerBattleOpponent_B); + CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_LOST, TRAINER_BATTLE_PARAM.opponentB); toCpy = gStringVar4; } break; @@ -3029,13 +3032,13 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) toCpy = gTrainerClasses[GetFrontierOpponentClass(gPartnerTrainerId)].name; break; case B_POSITION_OPPONENT_LEFT: - toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); + toCpy = BattleStringGetOpponentClassByTrainerId(TRAINER_BATTLE_PARAM.opponentA); break; case B_POSITION_OPPONENT_RIGHT: if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && !BATTLE_TWO_VS_ONE_OPPONENT) - toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B); + toCpy = BattleStringGetOpponentClassByTrainerId(TRAINER_BATTLE_PARAM.opponentB); else - toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); + toCpy = BattleStringGetOpponentClassByTrainerId(TRAINER_BATTLE_PARAM.opponentA); break; } break; @@ -3055,13 +3058,13 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) classString = gTrainerClasses[GetFrontierOpponentClass(gPartnerTrainerId)].name; break; case B_POSITION_OPPONENT_LEFT: - classString = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); + classString = BattleStringGetOpponentClassByTrainerId(TRAINER_BATTLE_PARAM.opponentA); break; case B_POSITION_OPPONENT_RIGHT: if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && !BATTLE_TWO_VS_ONE_OPPONENT) - classString = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B); + classString = BattleStringGetOpponentClassByTrainerId(TRAINER_BATTLE_PARAM.opponentB); else - classString = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); + classString = BattleStringGetOpponentClassByTrainerId(TRAINER_BATTLE_PARAM.opponentA); break; } classLength = 0; diff --git a/src/battle_palace.c b/src/battle_palace.c index fdcb8d3903..68f01f84f7 100644 --- a/src/battle_palace.c +++ b/src/battle_palace.c @@ -94,7 +94,7 @@ static void InitPalaceChallenge(void) gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0; SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); - gTrainerBattleOpponent_A = 0; + TRAINER_BATTLE_PARAM.opponentA = 0; } static void GetPalaceData(void) @@ -153,14 +153,14 @@ static void GetPalaceCommentId(void) static void SetPalaceOpponent(void) { - gTrainerBattleOpponent_A = 5 *(Random() % 255) / 64u; - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); + TRAINER_BATTLE_PARAM.opponentA = 5 *(Random() % 255) / 64u; + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentA, 0); } static void BufferOpponentIntroSpeech(void) { - if (gTrainerBattleOpponent_A < FRONTIER_TRAINERS_COUNT) - FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore); + if (TRAINER_BATTLE_PARAM.opponentA < FRONTIER_TRAINERS_COUNT) + FrontierSpeechToString(gFacilityTrainers[TRAINER_BATTLE_PARAM.opponentA].speechBefore); } static void IncrementPalaceStreak(void) diff --git a/src/battle_pike.c b/src/battle_pike.c index 3ce3cd443a..9c93a164a9 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -1403,11 +1403,11 @@ static void PrepareOneTrainer(bool8 difficult) } } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1); - gTrainerBattleOpponent_A = trainerId; + TRAINER_BATTLE_PARAM.opponentA = trainerId; gFacilityTrainers = gBattleFrontierTrainers; - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentA, 0); if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < NUM_PIKE_ROOMS) - gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = gTrainerBattleOpponent_A; + gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = TRAINER_BATTLE_PARAM.opponentA; } static void PrepareTwoTrainers(void) @@ -1429,10 +1429,10 @@ static void PrepareTwoTrainers(void) } } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1); - gTrainerBattleOpponent_A = trainerId; - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); + TRAINER_BATTLE_PARAM.opponentA = trainerId; + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentA, 0); if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= NUM_PIKE_ROOMS) - gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = gTrainerBattleOpponent_A; + gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = TRAINER_BATTLE_PARAM.opponentA; do { @@ -1445,10 +1445,10 @@ static void PrepareTwoTrainers(void) } } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum); - gTrainerBattleOpponent_B = trainerId; - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_B, 1); + TRAINER_BATTLE_PARAM.opponentB = trainerId; + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentB, 1); if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < NUM_PIKE_ROOMS) - gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 2] = gTrainerBattleOpponent_B; + gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 2] = TRAINER_BATTLE_PARAM.opponentB; } static void ClearPikeTrainerIds(void) @@ -1463,13 +1463,13 @@ static void BufferTrainerIntro(void) { if (gSpecialVar_0x8005 == 0) { - if (gTrainerBattleOpponent_A < FRONTIER_TRAINERS_COUNT) - FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore); + if (TRAINER_BATTLE_PARAM.opponentA < FRONTIER_TRAINERS_COUNT) + FrontierSpeechToString(gFacilityTrainers[TRAINER_BATTLE_PARAM.opponentA].speechBefore); } else if (gSpecialVar_0x8005 == 1) { - if (gTrainerBattleOpponent_B < FRONTIER_TRAINERS_COUNT) - FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_B].speechBefore); + if (TRAINER_BATTLE_PARAM.opponentB < FRONTIER_TRAINERS_COUNT) + FrontierSpeechToString(gFacilityTrainers[TRAINER_BATTLE_PARAM.opponentB].speechBefore); } } @@ -1615,7 +1615,7 @@ static void InitPikeChallenge(void) if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[lvlMode])) gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] = 0; - gTrainerBattleOpponent_A = 0; + TRAINER_BATTLE_PARAM.opponentA = 0; gBattleOutcome = 0; } diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index a184c9160f..33f2717597 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -864,7 +864,7 @@ static void InitPyramidChallenge(void) } InitBattlePyramidBagCursorPosition(); - gTrainerBattleOpponent_A = 0; + TRAINER_BATTLE_PARAM.opponentA = 0; gBattleOutcome = 0; } @@ -983,8 +983,10 @@ static void SetPickupItem(void) { int i; int itemIndex; - int rand; + int randVal; + u32 randSeedIndex, randSeed; u8 id; + rng_value_t rand; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 floor = gSaveBlock2Ptr->frontier.curChallengeBattleNum; u32 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_PYRAMID_ROUNDS; @@ -994,15 +996,19 @@ static void SetPickupItem(void) id = GetPyramidFloorTemplateId(); itemIndex = (gSpecialVar_LastTalked - sPyramidFloorTemplates[id].numTrainers) - 1; - rand = gSaveBlock2Ptr->frontier.pyramidRandoms[itemIndex / 2]; - SeedRng2(rand); + randSeedIndex = (itemIndex & 1) * 2; + randSeed = (u32)gSaveBlock2Ptr->frontier.pyramidRandoms[randSeedIndex + 1] << 16; + randSeed |= gSaveBlock2Ptr->frontier.pyramidRandoms[randSeedIndex]; + rand = LocalRandomSeed(randSeed); - for (i = 0; i < itemIndex + 1; i++) - rand = Random2() % 100; + for (i = 0; i < itemIndex / 2; i++) + LocalRandom(&rand); + + randVal = LocalRandom(&rand) % 100; for (i = sPickupItemOffsets[floor]; i < ARRAY_COUNT(sPickupItemSlots); i++) { - if (rand < sPickupItemSlots[i][0]) + if (randVal < sPickupItemSlots[i][0]) break; } @@ -1324,11 +1330,11 @@ bool8 GetBattlePyramidTrainerFlag(u8 eventId) void MarkApproachingPyramidTrainersAsBattled(void) { - MarkPyramidTrainerAsBattled(gTrainerBattleOpponent_A); + MarkPyramidTrainerAsBattled(TRAINER_BATTLE_PARAM.opponentA); if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { gSelectedObjectEvent = GetChosenApproachingTrainerObjectEventId(1); - MarkPyramidTrainerAsBattled(gTrainerBattleOpponent_B); + MarkPyramidTrainerAsBattled(TRAINER_BATTLE_PARAM.opponentB); } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index daf0cc5b35..6824243300 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6,8 +6,6 @@ #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" @@ -47,6 +45,7 @@ #include "pokenav.h" #include "menu_specialized.h" #include "data.h" +#include "generational_changes.h" #include "move.h" #include "constants/abilities.h" #include "constants/battle_anim.h" @@ -302,6 +301,16 @@ static const u16 sTrappingMoves[NUM_TRAPPING_MOVES] = static const u16 sWhiteOutBadgeMoney[9] = { 8, 16, 24, 36, 48, 64, 80, 100, 120 }; +enum GiveCaughtMonStates +{ + GIVECAUGHTMON_CHECK_PARTY_SIZE, + GIVECAUGHTMON_ASK_ADD_TO_PARTY, + GIVECAUGHTMON_HANDLE_INPUT, + GIVECAUGHTMON_DO_CHOOSE_MON, + GIVECAUGHTMON_HANDLE_CHOSEN_MON, + GIVECAUGHTMON_GIVE_AND_SHOW_MSG, +}; + #define STAT_CHANGE_WORKED 0 #define STAT_CHANGE_DIDNT_WORK 1 @@ -1144,7 +1153,7 @@ bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef) && gBattleMons[battlerDef].species == SPECIES_TERAPAGOS_TERASTAL && gBattleMons[battlerDef].hp == gBattleMons[battlerDef].maxHP && !IsBattleMoveStatus(move) - && MoveResultHasEffect(battlerDef) + && !(gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT) && GetBattlerAbility(battlerDef) == ABILITY_TERA_SHELL) return TRUE; @@ -1349,7 +1358,7 @@ static void Cmd_attackcanceler(void) static bool32 JumpIfMoveFailed(u8 adder, u16 move) { - if (!MoveResultHasEffect(gBattlerTarget)) + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) { gLastLandedMoves[gBattlerTarget] = 0; gLastHitByType[gBattlerTarget] = 0; @@ -1778,16 +1787,19 @@ static void Cmd_ppreduce(void) } // The chance is 1/N for each stage. -static const u32 sGen7CriticalHitOdds[] = {24, 8, 2, 1, 1}; -static const u32 sGen6CriticalHitOdds[] = {16, 8, 2, 1, 1}; -static const u32 sCriticalHitOdds[] = {16, 8, 4, 3, 2}; // Gens 2,3,4,5 +static const u32 sGen7CriticalHitOdds[] = {24, 8, 2, 1, 1}; // 1/X +static const u32 sGen6CriticalHitOdds[] = {16, 8, 2, 1, 1}; // 1/X +static const u32 sCriticalHitOdds[] = {16, 8, 4, 3, 2}; // 1/X, Gens 3,4,5 +static const u32 sGen2CriticalHitOdds[] = {17, 32, 64, 85, 128}; // X/256 static inline u32 GetCriticalHitOdds(u32 critChance) { - if (B_CRIT_CHANCE >= GEN_7) + if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) >= GEN_7) return sGen7CriticalHitOdds[critChance]; - if (B_CRIT_CHANCE == GEN_6) + if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_6) return sGen6CriticalHitOdds[critChance]; + if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_2) + return sGen2CriticalHitOdds[critChance]; return sCriticalHitOdds[critChance]; } @@ -1829,7 +1841,7 @@ static inline u32 GetHoldEffectCritChanceIncrease(u32 battler, u32 holdEffect) #define CRITICAL_HIT_BLOCKED -1 #define CRITICAL_HIT_ALWAYS -2 -s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk) +s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk) { s32 critChance = 0; @@ -1872,75 +1884,51 @@ s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec return critChance; } -#undef CRITICAL_HIT_BLOCKED -#undef CRITICAL_HIT_ALWAYS - -s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility) -{ - u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); - u32 abilityDef = GetBattlerAbility(gBattlerTarget); - u32 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); - return CalcCritChanceStageArgs(battlerAtk, battlerDef, move, recordAbility, abilityAtk, abilityDef, holdEffectAtk); -} // Bulbapedia: https://bulbapedia.bulbagarden.net/wiki/Critical_hit#Generation_I // Crit chance = Threshold / 256, Threshold maximum of 255 // Threshold = Base Speed / 2 // High crit move = 8 * (Base Speed / 2) // Focus Energy = 4 * (Base Speed / 2) -s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility) +s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk) { - // Vanilla - u32 focusEnergyScaler = 4; - u32 highCritRatioScaler = 8; - - // Not vanilla - u32 superLuckScaler = 4; - u32 scopeLensScaler = 4; - u32 luckyPunchScaler = 8; - u32 farfetchdLeekScaler = 8; - s32 critChance = 0; s32 moveCritStage = GetMoveCriticalHitStage(gCurrentMove); s32 bonusCritStage = gBattleStruct->bonusCritStages[battlerAtk]; // G-Max Chi Strike - u32 abilityAtk = GetBattlerAbility(battlerAtk); - u32 abilityDef = GetBattlerAbility(battlerDef); - u32 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); + u32 holdEffectCritStage = GetHoldEffectCritChanceIncrease(battlerAtk, holdEffectAtk); u16 baseSpeed = gSpeciesInfo[gBattleMons[battlerAtk].species].baseSpeed; critChance = baseSpeed / 2; // Crit scaling if (moveCritStage > 0) - critChance = critChance * highCritRatioScaler * moveCritStage; + critChance *= 8 * moveCritStage; if (bonusCritStage > 0) - critChance = critChance * bonusCritStage; + critChance *= bonusCritStage; - if ((gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY_ANY) != 0) - critChance = critChance * focusEnergyScaler; + if (gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY) + critChance *= 4; + else if (gBattleMons[battlerAtk].status2 & STATUS2_DRAGON_CHEER) + critChance *= 2; - if (holdEffectAtk == HOLD_EFFECT_SCOPE_LENS) - critChance = critChance * scopeLensScaler; - else if (holdEffectAtk == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[battlerAtk].species == SPECIES_CHANSEY) - critChance = critChance * luckyPunchScaler; - else if (IsBattlerLeekAffected(battlerAtk, holdEffectAtk)) - critChance = critChance * farfetchdLeekScaler; + if (holdEffectCritStage > 0) + critChance *= 4 * holdEffectCritStage; if (abilityAtk == ABILITY_SUPER_LUCK) - critChance = critChance * superLuckScaler; + critChance *= 4; if (critChance > 255) critChance = 255; // Prevented crits if (gSideStatuses[battlerDef] & SIDE_STATUS_LUCKY_CHANT) - critChance = -1; + critChance = CRITICAL_HIT_BLOCKED; else if (abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR) { if (recordAbility) RecordAbilityBattle(battlerDef, abilityDef); - critChance = -1; + critChance = CRITICAL_HIT_BLOCKED; } // Guaranteed crits @@ -1948,7 +1936,7 @@ s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec || MoveAlwaysCrits(move) || (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)) { - critChance = -2; + critChance = CRITICAL_HIT_ALWAYS; } return critChance; @@ -1961,6 +1949,8 @@ s32 GetCritHitOdds(s32 critChanceIndex) else return GetCriticalHitOdds(critChanceIndex); } +#undef CRITICAL_HIT_BLOCKED +#undef CRITICAL_HIT_ALWAYS static void Cmd_critcalc(void) { @@ -1969,6 +1959,8 @@ static void Cmd_critcalc(void) u32 partySlot = gBattlerPartyIndexes[gBattlerAttacker]; u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); bool32 calcSpreadMoveDamage = IsSpreadMove(moveTarget) && !IsBattleMoveStatus(gCurrentMove); + u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); + u32 holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); gPotentialItemEffectBattler = gBattlerAttacker; for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) @@ -1984,10 +1976,12 @@ static void Cmd_critcalc(void) || gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT) continue; - if (B_CRIT_CHANCE == GEN_1) - gBattleStruct->critChance[battlerDef] = CalcCritChanceStageGen1(gBattlerAttacker, battlerDef, gCurrentMove, TRUE); + u32 abilityDef = GetBattlerAbility(battlerDef); + + if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_1) + gBattleStruct->critChance[battlerDef] = CalcCritChanceStageGen1(gBattlerAttacker, gBattlerTarget, gCurrentMove, TRUE, abilityAtk, abilityDef, holdEffectAtk); else - gBattleStruct->critChance[battlerDef] = CalcCritChanceStage(gBattlerAttacker, battlerDef, gCurrentMove, TRUE); + gBattleStruct->critChance[battlerDef] = CalcCritChanceStage(gBattlerAttacker, gBattlerTarget, gCurrentMove, TRUE, abilityAtk, abilityDef, holdEffectAtk); if (gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE)) gSpecialStatuses[battlerDef].criticalHit = FALSE; @@ -1997,18 +1991,12 @@ static void Cmd_critcalc(void) gSpecialStatuses[battlerDef].criticalHit = TRUE; else { - if (B_CRIT_CHANCE == GEN_1) - { - u32 critRoll = RandomUniform(RNG_CRITICAL_HIT, 1, 256); - if (critRoll <= gBattleStruct->critChance[battlerDef]) - gSpecialStatuses[battlerDef].criticalHit = TRUE; - else - gSpecialStatuses[battlerDef].criticalHit = FALSE; - } + if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_1) + gSpecialStatuses[battlerDef].criticalHit = RandomChance(RNG_CRITICAL_HIT, gBattleStruct->critChance[battlerDef], 256); + else if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_2) + gSpecialStatuses[battlerDef].criticalHit = RandomChance(RNG_CRITICAL_HIT, GetCriticalHitOdds(gBattleStruct->critChance[battlerDef]), 256); else - { gSpecialStatuses[battlerDef].criticalHit = RandomChance(RNG_CRITICAL_HIT, 1, GetCriticalHitOdds(gBattleStruct->critChance[battlerDef])); - } } // Counter for EVO_CRITICAL_HITS. @@ -2207,7 +2195,7 @@ static void Cmd_adjustdamage(void) gBattlescriptCurrInstr = cmd->nextInstr; if (gSpecialStatuses[gBattlerAttacker].gemBoost - && MoveResultHasEffect(gBattlerTarget) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gBattleMons[gBattlerAttacker].item && moveEffect != EFFECT_PLEDGE @@ -2438,6 +2426,11 @@ static void Cmd_attackanimation(void) gBattlescriptCurrInstr = cmd->nextInstr; return; } + + // handle special move animations + if (gMovesInfo[gCurrentMove].effect == EFFECT_EXPANDING_FORCE && moveTarget & MOVE_TARGET_BOTH && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, BATTLE_OPPOSITE(gBattlerAttacker) > 1)) + gBattleScripting.animTurn = 1; + if (!(moveResultFlags & MOVE_RESULT_NO_EFFECT)) { u32 multihit; @@ -2522,7 +2515,7 @@ static void Cmd_healthbarupdate(void) if (gBattleControllerExecFlags) return; - if (MoveResultHasEffect(battler) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) { if (DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && gDisableStructs[battler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { @@ -2566,7 +2559,7 @@ static void Cmd_datahpupdate(void) u32 battler = GetBattlerForBattleScript(cmd->battler); - if (MoveResultHasEffect(battler) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) { if (DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && gDisableStructs[battler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { @@ -2694,12 +2687,12 @@ static void Cmd_critmessage(void) if (gBattleControllerExecFlags == 0) { - if (gSpecialStatuses[gBattlerTarget].criticalHit && MoveResultHasEffect(gBattlerTarget)) + if (gSpecialStatuses[gBattlerTarget].criticalHit && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) { PrepareStringBattle(STRINGID_CRITICALHIT, gBattlerAttacker); - TryInitalizeTrainerSlideEnemyLandsFirstCriticalHit(gBattlerTarget); - TryInitalizeTrainerSlidePlayerLandsFirstCriticalHit(gBattlerTarget); + TryInitializeTrainerSlideEnemyLandsFirstCriticalHit(gBattlerTarget); + TryInitializeTrainerSlidePlayerLandsFirstCriticalHit(gBattlerTarget); gBattleCommunication[MSG_DISPLAY] = 1; } @@ -2727,7 +2720,7 @@ static void Cmd_effectivenesssound(void) } moveResultFlags = UpdateEffectivenessResultFlagsForDoubleSpreadMoves(gBattleStruct->moveResultFlags[gBattlerTarget]); } - else if (MoveResultHasEffect(gBattlerTarget) && DoesBattlerNegateDamage(gBattlerTarget)) + else if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && DoesBattlerNegateDamage(gBattlerTarget)) moveResultFlags = 0; if (!(moveResultFlags & MOVE_RESULT_MISSED)) @@ -2846,7 +2839,7 @@ static void Cmd_resultmessage(void) stringId = STRINGID_SUPEREFFECTIVE; } if (stringId == STRINGID_SUPEREFFECTIVE || stringId == STRINGID_SUPEREFFECTIVETWOFOES) - TryInitalizeTrainerSlidePlayerLandsFirstSuperEffectiveHit(gBattlerTarget); + TryInitializeTrainerSlidePlayerLandsFirstSuperEffectiveHit(gBattlerTarget); break; case MOVE_RESULT_NOT_VERY_EFFECTIVE: if (IsDoubleSpreadMove()) @@ -3051,7 +3044,7 @@ static void CheckSetUnburden(u8 battler) { if (GetBattlerAbility(battler) == ABILITY_UNBURDEN) { - gDisableStructs[battler].unbrudenActive = TRUE; + gDisableStructs[battler].unburdenActive = TRUE; RecordAbilityBattle(battler, ABILITY_UNBURDEN); } } @@ -3074,7 +3067,7 @@ void StealTargetItem(u8 battlerStealer, u8 battlerItem) RecordItemEffectBattle(battlerStealer, ItemId_GetHoldEffect(gLastUsedItem)); gBattleMons[battlerStealer].item = gLastUsedItem; - gDisableStructs[battlerStealer].unbrudenActive = FALSE; + gDisableStructs[battlerStealer].unburdenActive = FALSE; BtlController_EmitSetMonData(battlerStealer, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gLastUsedItem), &gLastUsedItem); // set attacker item MarkBattlerForControllerExec(battlerStealer); } @@ -3090,6 +3083,50 @@ void StealTargetItem(u8 battlerStealer, u8 battlerItem) TrySaveExchangedItem(battlerItem, gLastUsedItem); } +static inline bool32 TrySetReflect(u32 battler) +{ + u32 side = GetBattlerSide(battler); + if (!(gSideStatuses[side] & SIDE_STATUS_REFLECT)) + { + gSideStatuses[side] |= SIDE_STATUS_REFLECT; + if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[side].reflectTimer = gBattleTurnCounter + 8; + else + gSideTimers[side].reflectTimer = gBattleTurnCounter + 5; + gSideTimers[side].reflectBattlerId = battler; + + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, battler) == 2) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_DOUBLE; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_SINGLE; + + return TRUE; + } + return FALSE; +} + +static inline bool32 TrySetLightScreen(u32 battler) +{ + u32 side = GetBattlerSide(battler); + if (!(gSideStatuses[side] & SIDE_STATUS_LIGHTSCREEN)) + { + gSideStatuses[side] |= SIDE_STATUS_LIGHTSCREEN; + if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[side].lightscreenTimer = gBattleTurnCounter + 8; + else + gSideTimers[side].lightscreenTimer = gBattleTurnCounter + 5; + gSideTimers[side].lightscreenBattlerId = battler; + + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, battler) == 2) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_DOUBLE; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_SINGLE; + + return TRUE; + } + return FALSE; +} + #define INCREMENT_RESET_RETURN \ { \ gBattlescriptCurrInstr++; \ @@ -3110,7 +3147,6 @@ void SetMoveEffect(bool32 primary, bool32 certain) bool32 mirrorArmorReflected = (GetBattlerAbility(gBattlerTarget) == ABILITY_MIRROR_ARMOR); u32 flags = 0; u32 battlerAbility; - u32 side; bool8 activateAfterFaint = FALSE; // NULL move effect @@ -3873,52 +3909,6 @@ void SetMoveEffect(bool32 primary, bool32 certain) gBattlescriptCurrInstr = BattleScript_MoveEffectFeint; } break; - case MOVE_EFFECT_SPECTRAL_THIEF: - if (!NoAliveMonsForEitherParty()) - { - bool32 contrary = (GetBattlerAbility(gBattlerAttacker) == ABILITY_CONTRARY); - 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) - { - bool32 byTwo = FALSE; - - gBattleStruct->stolenStats[0] |= (1 << (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 = (contrary ? STAT_ANIM_MINUS2 : STAT_ANIM_PLUS2) + i; - else - gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MINUS1 : STAT_ANIM_PLUS1) + i; - } - else - { - if (byTwo) - gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MULTIPLE_MINUS2 : STAT_ANIM_MULTIPLE_PLUS2); - else - gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MULTIPLE_MINUS1 : STAT_ANIM_MULTIPLE_PLUS1); - } - } - } - - if (gBattleStruct->stolenStats[0] != 0) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_SpectralThiefSteal; - } - } - break; case MOVE_EFFECT_V_CREATE: if (!NoAliveMonsForEitherParty()) { @@ -4201,9 +4191,6 @@ void SetMoveEffect(bool32 primary, bool32 certain) gBattlescriptCurrInstr = BattleScript_MoveEffectIonDeluge; } break; - // TODO: The moves aromatherapy and heal bell need a refactor first - // case MOVE_EFFECT_AROMATHERAPY: - // break; case MOVE_EFFECT_HAZE: for (i = 0; i < gBattlersCount; i++) TryResetBattlerStatChanges(i); @@ -4220,41 +4207,15 @@ void SetMoveEffect(bool32 primary, bool32 certain) } break; case MOVE_EFFECT_REFLECT: - side = GetBattlerSide(gBattlerAttacker); - if (!(gSideStatuses[side] & SIDE_STATUS_REFLECT)) + if (TrySetReflect(gBattlerAttacker)) { - gSideStatuses[side] |= SIDE_STATUS_REFLECT; - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) - gSideTimers[side].reflectTimer = 8; - else - gSideTimers[side].reflectTimer = 5; - gSideTimers[side].reflectBattlerId = gBattlerAttacker; - - if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_DOUBLE; - else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_SINGLE; - BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_MoveEffectReflect; } break; case MOVE_EFFECT_LIGHT_SCREEN: - side = GetBattlerSide(gBattlerAttacker); - if (!(gSideStatuses[side] & SIDE_STATUS_LIGHTSCREEN)) + if (TrySetLightScreen(gBattlerAttacker)) { - gSideStatuses[side] |= SIDE_STATUS_LIGHTSCREEN; - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) - gSideTimers[side].lightscreenTimer = 8; - else - gSideTimers[side].lightscreenTimer = 5; - gSideTimers[side].lightscreenBattlerId = gBattlerAttacker; - - if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_DOUBLE; - else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_SINGLE; - BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_MoveEffectLightScreen; } @@ -4304,6 +4265,322 @@ void SetMoveEffect(bool32 primary, bool32 certain) } } break; + case MOVE_EFFECT_RAISE_TEAM_ATTACK: + if (!NoAliveMonsForEitherParty()) + { + // Max Effects are ordered by stat ID. + SET_STATCHANGER(STAT_ATK, 1, FALSE); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; + } + break; + case MOVE_EFFECT_RAISE_TEAM_DEFENSE: + if (!NoAliveMonsForEitherParty()) + { + // Max Effects are ordered by stat ID. + SET_STATCHANGER(STAT_DEF, 1, FALSE); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; + } + break; + case MOVE_EFFECT_RAISE_TEAM_SPEED: + if (!NoAliveMonsForEitherParty()) + { + // Max Effects are ordered by stat ID. + SET_STATCHANGER(STAT_SPEED, 1, FALSE); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; + } + break; + case MOVE_EFFECT_RAISE_TEAM_SP_ATK: + if (!NoAliveMonsForEitherParty()) + { + // Max Effects are ordered by stat ID. + SET_STATCHANGER(STAT_SPATK, 1, FALSE); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; + } + break; + case MOVE_EFFECT_RAISE_TEAM_SP_DEF: + if (!NoAliveMonsForEitherParty()) + { + // Max Effects are ordered by stat ID. + SET_STATCHANGER(STAT_SPDEF, 1, FALSE); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; + } + break; + case MOVE_EFFECT_LOWER_ATTACK_SIDE: + case MOVE_EFFECT_LOWER_DEFENSE_SIDE: + case MOVE_EFFECT_LOWER_SPEED_SIDE: + case MOVE_EFFECT_LOWER_SP_ATK_SIDE: + case MOVE_EFFECT_LOWER_SP_DEF_SIDE: + case MOVE_EFFECT_LOWER_SPEED_2_SIDE: + case MOVE_EFFECT_LOWER_EVASIVENESS_SIDE: + if (!NoAliveMonsForEitherParty()) + { + u32 statId = 0; + u32 stage = 1; + switch (gBattleScripting.moveEffect) + { + case MOVE_EFFECT_LOWER_SPEED_2_SIDE: + statId = STAT_SPEED; + stage = 2; + break; + case MOVE_EFFECT_LOWER_EVASIVENESS_SIDE: + statId = STAT_EVASION; + break; + default: + // Max Effects are ordered by stat ID. + statId = gBattleScripting.moveEffect - MOVE_EFFECT_LOWER_ATTACK_SIDE + 1; + break; + } + SET_STATCHANGER(statId, stage, TRUE); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectLowerStatFoes; + } + break; + case MOVE_EFFECT_SUN: + case MOVE_EFFECT_RAIN: + case MOVE_EFFECT_SANDSTORM: + case MOVE_EFFECT_HAIL: + { + u8 weather = 0, msg = 0; + switch (gBattleScripting.moveEffect) + { + case MOVE_EFFECT_SUN: + weather = BATTLE_WEATHER_SUN; + msg = B_MSG_STARTED_SUNLIGHT; + break; + case MOVE_EFFECT_RAIN: + weather = BATTLE_WEATHER_RAIN; + msg = B_MSG_STARTED_RAIN; + break; + case MOVE_EFFECT_SANDSTORM: + weather = BATTLE_WEATHER_SANDSTORM; + msg = B_MSG_STARTED_SANDSTORM; + break; + case MOVE_EFFECT_HAIL: + weather = BATTLE_WEATHER_HAIL; + msg = B_MSG_STARTED_HAIL; + break; + } + if (TryChangeBattleWeather(gBattlerAttacker, weather, FALSE)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = msg; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectSetWeather; + } + break; + } + case MOVE_EFFECT_MISTY_TERRAIN: + case MOVE_EFFECT_GRASSY_TERRAIN: + case MOVE_EFFECT_ELECTRIC_TERRAIN: + case MOVE_EFFECT_PSYCHIC_TERRAIN: + { + u32 statusFlag = 0; + switch (gBattleScripting.moveEffect) + { + case MOVE_EFFECT_MISTY_TERRAIN: + statusFlag = STATUS_FIELD_MISTY_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; + break; + case MOVE_EFFECT_GRASSY_TERRAIN: + statusFlag = STATUS_FIELD_GRASSY_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_GRASSY; + break; + case MOVE_EFFECT_ELECTRIC_TERRAIN: + statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; + break; + case MOVE_EFFECT_PSYCHIC_TERRAIN: + statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; + break; + } + if (!(gFieldStatuses & statusFlag) && statusFlag != 0) + { + gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; + gFieldStatuses |= statusFlag; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER) + gFieldTimers.terrainTimer = gBattleTurnCounter + 8; + else + gFieldTimers.terrainTimer = gBattleTurnCounter + 5; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectSetTerrain; + } + break; + } + case MOVE_EFFECT_VINE_LASH: + case MOVE_EFFECT_CANNONADE: + case MOVE_EFFECT_WILDFIRE: + case MOVE_EFFECT_VOLCALITH: + { + u8 side = GetBattlerSide(gBattlerTarget); + if (!(gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES)) + { + u32 moveType = GetMoveType(gCurrentMove); + gSideStatuses[side] |= SIDE_STATUS_DAMAGE_NON_TYPES; + gSideTimers[side].damageNonTypesTimer = gBattleTurnCounter + 5; // damage is dealt for 4 turns, ends on 5th + gSideTimers[side].damageNonTypesType = moveType; + BattleScriptPush(gBattlescriptCurrInstr + 1); + ChooseDamageNonTypesString(moveType); + gBattlescriptCurrInstr = BattleScript_DamageNonTypesStarts; + } + break; + } + case MOVE_EFFECT_STEELSURGE: + if (!(gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_STEELSURGE)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SHARPSTEELFLOATS; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectSteelsurge; + } + break; + case MOVE_EFFECT_DEFOG: + if (gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_SCREEN_ANY + || gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_HAZARDS_ANY + || gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_HAZARDS_ANY + || gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_DefogTryHazards; + } + break; + case MOVE_EFFECT_AURORA_VEIL: + if (!(gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_AURORA_VEIL)) + { + gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_AURORA_VEIL; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = gBattleTurnCounter + 8; + else + gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = gBattleTurnCounter + 5; + gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilBattlerId = gBattlerAttacker; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SAFEGUARD; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectAuroraVeilSuccess; + } + break; + case MOVE_EFFECT_GRAVITY: + if (!(gFieldStatuses & STATUS_FIELD_GRAVITY)) + { + gFieldStatuses |= STATUS_FIELD_GRAVITY; + gFieldTimers.gravityTimer = gBattleTurnCounter + 5; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectGravitySuccess; + } + break; + case MOVE_EFFECT_SANDBLAST_SIDE: + case MOVE_EFFECT_FIRE_SPIN_SIDE: + { + // Affects both opponents, but doesn't print strings so we can handle it here. + u8 battler; + for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler) + { + if (GetBattlerSide(battler) != GetBattlerSide(gBattlerTarget)) + continue; + if (!(gBattleMons[battler].status2 & STATUS2_WRAPPED)) + { + gBattleMons[battler].status2 |= STATUS2_WRAPPED; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_GRIP_CLAW) + gDisableStructs[battler].wrapTurns = (B_BINDING_TURNS >= GEN_5) ? 7 : 5; + else + gDisableStructs[battler].wrapTurns = (Random() % 2) + 4; + // The Wrap effect does not expire when the user switches, so here's some cheese. + gBattleStruct->wrappedBy[battler] = gBattlerTarget; + if (gBattleScripting.moveEffect == MOVE_EFFECT_SANDBLAST_SIDE) + gBattleStruct->wrappedMove[battler] = MOVE_SAND_TOMB; + else + gBattleStruct->wrappedMove[battler] = MOVE_FIRE_SPIN; + } + } + break; + } + case MOVE_EFFECT_YAWN_FOE: + { + if (!(gStatuses3[gBattlerTarget] & STATUS3_YAWN) + && CanBeSlept(gBattlerTarget, GetBattlerAbility(gBattlerTarget), BLOCKED_BY_SLEEP_CLAUSE) + && RandomPercentage(RNG_G_MAX_SNOOZE, 50)) + { + gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectYawnSuccess; + } + break; + } + case MOVE_EFFECT_SPITE: + if (gLastMoves[gBattlerTarget] != MOVE_NONE + && gLastMoves[gBattlerTarget] != MOVE_UNAVAILABLE) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectTryReducePP; + } + break; + case MOVE_EFFECT_PARALYZE_SIDE: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectParalyzeSide; + break; + case MOVE_EFFECT_POISON_SIDE: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectPoisonSide; + break; + case MOVE_EFFECT_POISON_PARALYZE_SIDE: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectPoisonParalyzeSide; + break; + case MOVE_EFFECT_EFFECT_SPORE_SIDE: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectEffectSporeSide; + break; + case MOVE_EFFECT_CONFUSE_PAY_DAY_SIDE: + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + u32 payday = gPaydayMoney; + gPaydayMoney += (gBattleMons[gBattlerAttacker].level * 100); + if (payday > gPaydayMoney) + gPaydayMoney = 0xFFFF; + gBattleCommunication[CURSOR_POSITION] = 1; // add "Coins scattered." message + } + // fall through + case MOVE_EFFECT_CONFUSE_SIDE: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectConfuseSide; + break; + case MOVE_EFFECT_INFATUATE_SIDE: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectInfatuateSide; + break; + case MOVE_EFFECT_TORMENT_SIDE: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectTormentSide; + break; + case MOVE_EFFECT_PREVENT_ESCAPE_SIDE: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectMeanLookSide; + break; + case MOVE_EFFECT_CRIT_PLUS_SIDE: + gBattleStruct->bonusCritStages[gBattlerAttacker]++; + gBattleStruct->bonusCritStages[BATTLE_PARTNER(gBattlerAttacker)]++; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectRaiseCritAlliesAnim; + break; + case MOVE_EFFECT_HEAL_TEAM: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectHealOneSixthAllies; + break; + case MOVE_EFFECT_AROMATHERAPY: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectHealBell_FromHeal; + break; + case MOVE_EFFECT_RECYCLE_BERRIES: + { + if (RandomPercentage(RNG_G_MAX_REPLENISH, 50)) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectRecycleBerriesAllies; + } + break; + } } } } @@ -4334,7 +4611,7 @@ static void Cmd_setadditionaleffects(void) { CMD_ARGS(); - if (MoveResultHasEffect(gBattlerTarget)) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) { u32 numAdditionalEffects = GetMoveAdditionalEffectCount(gCurrentMove); if (numAdditionalEffects > gBattleStruct->additionalEffectsCounter) @@ -5995,7 +6272,7 @@ static void Cmd_moveend(void) // Not strictly a protect effect, but works the same way else if (gProtectStructs[gBattlerTarget].beakBlastCharge && CanBeBurned(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) - && MoveResultHasEffect(gBattlerTarget)) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; gBattleMons[gBattlerAttacker].status1 = STATUS1_BURN; @@ -6018,7 +6295,7 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; } - else if (IsBattlerAlive(gBattlerAttacker) && MoveResultHasEffect(gBattlerTarget)) + else if (IsBattlerAlive(gBattlerAttacker) && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) { gBattleStruct->moveDamage[gBattlerAttacker] = max(1, (gBattleStruct->moveDamage[gBattlerTarget] * GetMoveAbsorbPercentage(gCurrentMove) / 100)); gBattleStruct->moveDamage[gBattlerAttacker] = GetDrainedBigRootHp(gBattlerAttacker, gBattleStruct->moveDamage[gBattlerAttacker]); @@ -6047,7 +6324,7 @@ static void Cmd_moveend(void) && IsBattlerAlive(gBattlerTarget) && gBattlerAttacker != gBattlerTarget && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget) - && MoveResultHasEffect(gBattlerTarget) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) && !IsBattleMoveStatus(gCurrentMove) && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) @@ -6065,7 +6342,7 @@ static void Cmd_moveend(void) && IsBattlerAlive(gBattlerTarget) && gBattlerAttacker != gBattlerTarget && (moveType == TYPE_FIRE || CanBurnHitThaw(gCurrentMove)) - && MoveResultHasEffect(gBattlerTarget)) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) { gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FREEZE; BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); @@ -6078,7 +6355,7 @@ static void Cmd_moveend(void) && IsBattlerAlive(gBattlerTarget) && gBattlerAttacker != gBattlerTarget && MoveThawsUser(originallyUsedMove) - && MoveResultHasEffect(gBattlerTarget)) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) { gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FROSTBITE; BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); @@ -6098,7 +6375,7 @@ static void Cmd_moveend(void) break; } else if (moveRecoil > 0 - && MoveResultHasEffect(gBattlerTarget) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && gBattleScripting.savedDmg != 0) // Some checks may be redundant alongside this one { @@ -6128,7 +6405,7 @@ static void Cmd_moveend(void) break; } case MOVEEND_RAPID_SPIN: - if (gMovesInfo[gCurrentMove].effect == EFFECT_RAPID_SPIN + if (GetMoveEffect(gCurrentMove) == EFFECT_RAPID_SPIN && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && IsBattlerTurnDamaged(gBattlerTarget)) { @@ -6303,6 +6580,43 @@ static void Cmd_moveend(void) else gBattleScripting.moveendState++; break; + case MOVEEND_HIT_SWITCH_TARGET: + if (GetMoveEffect(gCurrentMove) == EFFECT_HIT_SWITCH_TARGET + && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + && IsBattlerTurnDamaged(gBattlerTarget) + && IsBattlerAlive(gBattlerTarget) + && IsBattlerAlive(gBattlerAttacker) + && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_1ST_HIT) + { + u32 targetAbility = GetBattlerAbility(gBattlerTarget); + if (targetAbility == ABILITY_GUARD_DOG) + { + gBattleScripting.moveendState++; + break; + } + + effect = TRUE; + BattleScriptPushCursor(); + if (targetAbility == ABILITY_SUCTION_CUPS) + { + gBattlescriptCurrInstr = BattleScript_AbilityPreventsPhasingOutRet; + } + else if (gStatuses3[gBattlerTarget] & STATUS3_ROOTED) + { + gBattlescriptCurrInstr = BattleScript_PrintMonIsRootedRet; + } + else if (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) + { + gBattlescriptCurrInstr = BattleScript_HitSwitchTargetDynamaxed; + } + else + { + gBattleScripting.switchCase = B_SWITCH_HIT; + gBattlescriptCurrInstr = BattleScript_TryHitSwitchTarget; + } + } + gBattleScripting.moveendState++; + break; case MOVEEND_KINGSROCK: // King's rock // These effects will occur at each hit in a multi-strike move if (ItemBattleEffects(ITEMEFFECT_KINGSROCK, 0, FALSE)) @@ -6321,7 +6635,7 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_ATTACKER_VISIBLE: // make attacker sprite visible - if (!MoveResultHasEffect(gBattlerTarget) + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT || !(gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE)) || WasUnableToUseMove(gBattlerAttacker)) { @@ -6349,7 +6663,7 @@ static void Cmd_moveend(void) case MOVEEND_NUM_HITS: if (gBattlerAttacker != gBattlerTarget && GetMoveCategory(gCurrentMove) != DAMAGE_CATEGORY_STATUS - && MoveResultHasEffect(gBattlerTarget) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget)) { gBattleStruct->timesGotHit[GetBattlerSide(gBattlerTarget)][gBattlerPartyIndexes[gBattlerTarget]]++; @@ -6458,7 +6772,7 @@ static void Cmd_moveend(void) if (!(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))) gLastHitBy[gBattlerTarget] = gBattlerAttacker; - if (gHitMarker & HITMARKER_OBEYS && MoveResultHasEffect(gBattlerTarget)) + if (gHitMarker & HITMARKER_OBEYS && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) { if (gChosenMove == MOVE_UNAVAILABLE) { @@ -6484,7 +6798,7 @@ static void Cmd_moveend(void) && gHitMarker & HITMARKER_OBEYS && gBattlerAttacker != gBattlerTarget && !(gHitMarker & HITMARKER_FAINTED(gBattlerTarget)) - && MoveResultHasEffect(gBattlerTarget)) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) { gBattleStruct->lastTakenMove[gBattlerTarget] = gChosenMove; gBattleStruct->lastTakenMoveFrom[gBattlerTarget][gBattlerAttacker] = gChosenMove; @@ -6496,7 +6810,7 @@ static void Cmd_moveend(void) 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) - && MoveResultHasEffect(gBattlerTarget)) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) gProtectStructs[gBattlerAttacker].targetAffected = TRUE; gBattleStruct->battlerState[gBattlerAttacker].targetsDone[gBattlerTarget] = TRUE; @@ -6557,7 +6871,7 @@ static void Cmd_moveend(void) } case MOVEEND_MULTIHIT_MOVE: { - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gMultiHitCounter && !(moveEffect == EFFECT_PRESENT && gBattleStruct->presentBasePower == 0)) // Silly edge case @@ -6636,7 +6950,7 @@ static void Cmd_moveend(void) && !gSpecialStatuses[gBattlerAttacker].gemBoost // In base game, gems are consumed after magician would activate. && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & (1u << gBattlerPartyIndexes[gBattlerTarget])) && !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove) - && MoveResultHasEffect(gBattlerTarget) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && (GetBattlerAbility(gBattlerTarget) != ABILITY_STICKY_HOLD || !IsBattlerAlive(gBattlerTarget))) { StealTargetItem(gBattlerAttacker, gBattlerTarget); @@ -6711,7 +7025,7 @@ static void Cmd_moveend(void) else // Eject Pack { if (!gDisableStructs[gBattlerTarget].startEmergencyExit - && !(gMovesInfo[gCurrentMove].effect == EFFECT_PARTING_SHOT && CanBattlerSwitch(gBattlerAttacker))) + && !(GetMoveEffect(gCurrentMove) == EFFECT_PARTING_SHOT && CanBattlerSwitch(gBattlerAttacker))) { effect = TRUE; gBattleStruct->battlerState[battler].usedEjectItem = TRUE; @@ -6755,8 +7069,7 @@ static void Cmd_moveend(void) if (redCardBattlers && (moveEffect != EFFECT_HIT_SWITCH_TARGET || gBattleStruct->hitSwitchTargetFailed) && IsBattlerAlive(gBattlerAttacker) - && !TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_GUARD_DOG) + && !TestIfSheerForceAffected(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 @@ -6781,7 +7094,8 @@ static void Cmd_moveend(void) if (moveEffect == EFFECT_HIT_ESCAPE) gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection BattleScriptPushCursor(); - if (gBattleStruct->commanderActive[gBattlerAttacker] != SPECIES_NONE) + if (gBattleStruct->commanderActive[gBattlerAttacker] != SPECIES_NONE + || GetBattlerAbility(gBattlerAttacker) == ABILITY_GUARD_DOG) { gBattlescriptCurrInstr = BattleScript_RedCardActivationNoSwitch; } @@ -6809,7 +7123,7 @@ static void Cmd_moveend(void) && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & (1u << gBattlerPartyIndexes[gBattlerAttacker])) // But not knocked off && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) // Pickpocket doesn't activate for sheer force && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) // Pickpocket requires contact - && MoveResultHasEffect(gBattlerTarget)) // Obviously attack needs to have worked + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & 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 @@ -6935,7 +7249,7 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_SAME_MOVE_TURNS: - if (gCurrentMove != gLastResultingMoves[gBattlerAttacker] || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) + if (gCurrentMove != gLastResultingMoves[gBattlerAttacker] || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT || gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) gBattleStruct->sameMoveTurns[gBattlerAttacker] = 0; else if (gCurrentMove == gLastResultingMoves[gBattlerAttacker] && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_1ST_HIT) gBattleStruct->sameMoveTurns[gBattlerAttacker]++; @@ -6954,8 +7268,8 @@ static void Cmd_moveend(void) gBattleStruct->moveTarget[gBattlerAttacker] = gSpecialStatuses[gBattlerAttacker].dancerOriginalTarget & 0x3; if (B_RAMPAGE_CANCELLING >= GEN_5 - && MoveHasAdditionalEffectSelf(gCurrentMove, MOVE_EFFECT_THRASH) // If we're rampaging - && !MoveResultHasEffect(gBattlerTarget) // And it is unusable + && MoveHasAdditionalEffectSelf(gCurrentMove, MOVE_EFFECT_THRASH) // If we're rampaging + && gBattleStruct->moveResultFlags[gBattlerTarget] & 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 @@ -6999,7 +7313,7 @@ static void Cmd_moveend(void) gBattleStruct->pledgeMove = FALSE; if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) SetActiveGimmick(gBattlerAttacker, GIMMICK_NONE); - if (B_CHARGE <= GEN_8 || moveType == TYPE_ELECTRIC) + if (B_CHARGE >= GEN_9 && moveType == TYPE_ELECTRIC && (IsBattlerTurnDamaged(gBattlerTarget) || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) gStatuses3[gBattlerAttacker] &= ~(STATUS3_CHARGED_UP); memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); ClearDamageCalcResults(); @@ -8230,7 +8544,7 @@ static void Cmd_hitanimation(void) { u32 battler = GetBattlerForBattleScript(cmd->battler); - if (MoveResultHasEffect(battler)) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT)) { if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove)) @@ -8301,9 +8615,9 @@ static void Cmd_getmoneyreward(void) if (gBattleOutcome == B_OUTCOME_WON) { - money = GetTrainerMoneyToGive(gTrainerBattleOpponent_A); + money = GetTrainerMoneyToGive(TRAINER_BATTLE_PARAM.opponentA); if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) - money += GetTrainerMoneyToGive(gTrainerBattleOpponent_B); + money += GetTrainerMoneyToGive(TRAINER_BATTLE_PARAM.opponentB); AddMoney(&gSaveBlock1Ptr->money, money); } else @@ -8568,7 +8882,7 @@ static void Cmd_setgravity(void) else { gFieldStatuses |= STATUS_FIELD_GRAVITY; - gFieldTimers.gravityTimer = 5; + gFieldTimers.gravityTimer = gBattleTurnCounter + 5; gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -8606,7 +8920,7 @@ static void BestowItem(u32 battlerAtk, u32 battlerDef) gBattleMons[battlerDef].item = gLastUsedItem; BtlController_EmitSetMonData(battlerDef, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battlerDef].item), &gBattleMons[battlerDef].item); MarkBattlerForControllerExec(battlerDef); - gDisableStructs[battlerDef].unbrudenActive = FALSE; + gDisableStructs[battlerDef].unburdenActive = FALSE; } // Called by Cmd_removeitem. itemId represents the item that was removed, not being given. @@ -9080,7 +9394,7 @@ static void Cmd_useitemonopponent(void) static bool32 HasAttackerFaintedTarget(void) { - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !IsBattleMoveStatus(gCurrentMove) && (gLastHitBy[gBattlerTarget] == 0xFF || gLastHitBy[gBattlerTarget] == gBattlerAttacker) && gBattleStruct->moveTarget[gBattlerAttacker] == gBattlerTarget @@ -9145,7 +9459,6 @@ static void RemoveAllWeather(void) static void RemoveAllTerrains(void) { - gFieldTimers.terrainTimer = 0; switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) { case STATUS_FIELD_MISTY_TERRAIN: @@ -9284,25 +9597,25 @@ u32 IsFlowerVeilProtected(u32 battler) return 0; } -u32 IsLeafGuardProtected(u32 battler) +u32 IsLeafGuardProtected(u32 battler, u32 ability) { if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) - return GetBattlerAbility(battler) == ABILITY_LEAF_GUARD; + return ability == ABILITY_LEAF_GUARD; else return 0; } -bool32 IsShieldsDownProtected(u32 battler) +bool32 IsShieldsDownProtected(u32 battler, u32 ability) { - return (GetBattlerAbility(battler) == ABILITY_SHIELDS_DOWN + return (ability == ABILITY_SHIELDS_DOWN && GetFormIdFromFormSpeciesId(gBattleMons[battler].species) < GetFormIdFromFormSpeciesId(SPECIES_MINIOR_CORE_RED)); // Minior is not in core form } -u32 IsAbilityStatusProtected(u32 battler) +u32 IsAbilityStatusProtected(u32 battler, u32 ability) { - return IsFlowerVeilProtected(battler) - || IsLeafGuardProtected(battler) - || IsShieldsDownProtected(battler); + return IsLeafGuardProtected(battler, ability) + || IsShieldsDownProtected(battler, ability) + || IsFlowerVeilProtected(battler); } u32 GetHighestStatId(u32 battler) @@ -9576,7 +9889,7 @@ static void Cmd_various(void) case VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED: { VARIOUS_ARGS(const u8 *jumpInstr); - if (IsShieldsDownProtected(battler)) + if (IsShieldsDownProtected(battler, GetBattlerAbility(battler))) { gBattlerAbility = battler; gBattlescriptCurrInstr = cmd->jumpInstr; @@ -9637,7 +9950,7 @@ static void Cmd_various(void) else { gFieldStatuses |= STATUS_FIELD_FAIRY_LOCK; - gFieldTimers.fairyLockTimer = 2; + gFieldTimers.fairyLockTimer = gBattleTurnCounter + 2; gBattlescriptCurrInstr = cmd->nextInstr; } return; @@ -9784,26 +10097,6 @@ static void Cmd_various(void) gStatuses3[battler] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR | STATUS3_SKY_DROPPED); break; } - case VARIOUS_SPECTRAL_THIEF: - { - VARIOUS_ARGS(); - // Raise stats - for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) - { - if (gBattleStruct->stolenStats[0] & (1u << i)) - { - gBattleStruct->stolenStats[0] &= ~(1u << 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: { VARIOUS_ARGS(); @@ -10270,7 +10563,7 @@ static void Cmd_various(void) { gSideStatuses[GetBattlerSide(battler)] |= SIDE_STATUS_LUCKY_CHANT; gSideTimers[GetBattlerSide(battler)].luckyChantBattlerId = battler; - gSideTimers[GetBattlerSide(battler)].luckyChantTimer = 5; + gSideTimers[GetBattlerSide(battler)].luckyChantTimer = gBattleTurnCounter + 5; gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -10518,6 +10811,7 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->failInstr; else { + SetTypeBeforeUsingMove(gCalledMove, gBattlerTarget); gEffectBattler = gBattleStruct->lastMoveTarget[gBattlerTarget]; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattleStruct->atkCancellerTracker = 0; @@ -10729,9 +11023,9 @@ static void Cmd_various(void) { gSideStatuses[GetBattlerSide(battler)] |= SIDE_STATUS_AURORA_VEIL; if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_LIGHT_CLAY) - gSideTimers[GetBattlerSide(battler)].auroraVeilTimer = 8; + gSideTimers[GetBattlerSide(battler)].auroraVeilTimer = gBattleTurnCounter + 8; else - gSideTimers[GetBattlerSide(battler)].auroraVeilTimer = 5; + gSideTimers[GetBattlerSide(battler)].auroraVeilTimer = gBattleTurnCounter + 5; gSideTimers[GetBattlerSide(battler)].auroraVeilBattlerId = battler; if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) @@ -10832,16 +11126,16 @@ static void Cmd_various(void) switch (GetBattlerHoldEffectParam(battler)) { case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, item, ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN); + effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, item, ITEMEFFECT_NONE); break; case HOLD_EFFECT_PARAM_GRASSY_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, item, ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN); + effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, item, ITEMEFFECT_NONE); break; case HOLD_EFFECT_PARAM_MISTY_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, item, ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN); + effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, item, ITEMEFFECT_NONE); break; case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, item, ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN); + effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, item, ITEMEFFECT_NONE); break; } @@ -11133,7 +11427,7 @@ static void Cmd_various(void) case VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED: { VARIOUS_ARGS(const u8 *jumpInstr); - if (IsLeafGuardProtected(battler)) + if (IsLeafGuardProtected(battler, GetBattlerAbility(battler))) { gBattlerAbility = battler; gBattlescriptCurrInstr = cmd->jumpInstr; @@ -11590,26 +11884,12 @@ static void Cmd_setfieldweather(void) static void Cmd_setreflect(void) { CMD_ARGS(); - - if (gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_REFLECT) + if (!TrySetReflect(gBattlerAttacker)) { gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SIDE_STATUS_FAILED; } - else - { - gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_REFLECT; - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) - gSideTimers[GetBattlerSide(gBattlerAttacker)].reflectTimer = 8; - else - gSideTimers[GetBattlerSide(gBattlerAttacker)].reflectTimer = 5; - gSideTimers[GetBattlerSide(gBattlerAttacker)].reflectBattlerId = gBattlerAttacker; - if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_DOUBLE; - else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_SINGLE; - } gBattlescriptCurrInstr = cmd->nextInstr; } @@ -11810,7 +12090,7 @@ static void Cmd_stockpile(void) } break; case 1: // Save def/sp def stats. - if (MoveResultHasEffect(gBattlerTarget)) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & 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; @@ -12209,7 +12489,7 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr // Check Mirror Herb / Opportunist for (index = 0; index < gBattlersCount; index++) { - if (GetBattlerSide(index) == GetBattlerSide(battler)) + if (IsBattlerAlly(index, battler)) continue; // Only triggers on opposing side if (GetBattlerAbility(index) == ABILITY_OPPORTUNIST @@ -12334,7 +12614,6 @@ static void Cmd_forcerandomswitch(void) { CMD_ARGS(const u8 *failInstr); - s32 i; s32 battler1PartyId = 0; s32 battler2PartyId = 0; @@ -12469,7 +12748,7 @@ static void Cmd_forcerandomswitch(void) battler1PartyId = gBattlerPartyIndexes[gBattlerTarget]; } - for (i = firstMonId; i < lastMonId; i++) + for (u32 i = firstMonId; i < lastMonId; i++) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) @@ -12500,12 +12779,12 @@ static void Cmd_forcerandomswitch(void) || (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) || (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - SwitchPartyOrderLinkMulti(gBattlerTarget, i, 0); - SwitchPartyOrderLinkMulti(BATTLE_PARTNER(gBattlerTarget), i, 1); + SwitchPartyOrderLinkMulti(gBattlerTarget, gBattleStruct->monToSwitchIntoId[gBattlerTarget], 0); + SwitchPartyOrderLinkMulti(BATTLE_PARTNER(gBattlerTarget), gBattleStruct->monToSwitchIntoId[gBattlerTarget], 1); } if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - SwitchPartyOrderInGameMulti(gBattlerTarget, i); + SwitchPartyOrderInGameMulti(gBattlerTarget, gBattleStruct->monToSwitchIntoId[gBattlerTarget]); } } else @@ -12638,25 +12917,11 @@ static void Cmd_setlightscreen(void) { CMD_ARGS(); - if (gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_LIGHTSCREEN) + if (!TrySetLightScreen(gBattlerAttacker)) { gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SIDE_STATUS_FAILED; } - else - { - gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_LIGHTSCREEN; - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) - gSideTimers[GetBattlerSide(gBattlerAttacker)].lightscreenTimer = 8; - else - gSideTimers[GetBattlerSide(gBattlerAttacker)].lightscreenTimer = 5; - gSideTimers[GetBattlerSide(gBattlerAttacker)].lightscreenBattlerId = gBattlerAttacker; - - if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_DOUBLE; - else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_SINGLE; - } gBattlescriptCurrInstr = cmd->nextInstr; } @@ -12861,7 +13126,7 @@ static void Cmd_setmist(void) } else { - gSideTimers[GetBattlerSide(gBattlerAttacker)].mistTimer = 5; + gSideTimers[GetBattlerSide(gBattlerAttacker)].mistTimer = gBattleTurnCounter + 5; gSideTimers[GetBattlerSide(gBattlerAttacker)].mistBattlerId = gBattlerAttacker; gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_MIST; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_MIST; @@ -12888,7 +13153,10 @@ static void Cmd_setfocusenergy(void) } else { - gBattleMons[battler].status2 |= STATUS2_FOCUS_ENERGY; + if (GetGenConfig(GEN_CONFIG_FOCUS_ENERGY_CRIT_RATIO) >= GEN_3) + gBattleMons[battler].status2 |= STATUS2_FOCUS_ENERGY; + else + gBattleMons[battler].status2 |= STATUS2_DRAGON_CHEER; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_GETTING_PUMPED; } gBattlescriptCurrInstr = cmd->nextInstr; @@ -13515,7 +13783,7 @@ static void Cmd_settailwind(void) { gSideStatuses[side] |= SIDE_STATUS_TAILWIND; gSideTimers[side].tailwindBattlerId = gBattlerAttacker; - gSideTimers[side].tailwindTimer = B_TAILWIND_TURNS >= GEN_5 ? 4 : 3; + gSideTimers[side].tailwindTimer = gBattleTurnCounter + (B_TAILWIND_TURNS >= GEN_5 ? 4 : 3); gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -13555,7 +13823,7 @@ static void Cmd_tryspiteppreduce(void) { s32 ppToDeduct = B_PP_REDUCED_BY_SPITE >= GEN_4 ? 4 : (Random() & 3) + 2; // G-Max Depletion only deducts 2 PP. - if (IsMaxMove(gCurrentMove) && GetMoveMaxEffect(gCurrentMove) == MAX_EFFECT_SPITE) + if (IsMaxMove(gCurrentMove) && MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_SPITE)) ppToDeduct = 2; if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct) @@ -13598,106 +13866,88 @@ static void Cmd_healpartystatus(void) { CMD_ARGS(); + u32 i = 0; u32 zero = 0; + u32 toHeal = 0; u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - u8 toHeal = 0; struct Pokemon *party = GetBattlerParty(gBattlerAttacker); - s32 i; + bool32 isSoundMove = IsSoundMove(gCurrentMove); - if (gCurrentMove == MOVE_HEAL_BELL) + if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 + || GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 + || !(isSoundMove && GetBattlerAbility(gBattlerAttacker) == ABILITY_SOUNDPROOF)) { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL; - - if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF - || B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8) - { - gBattleMons[gBattlerAttacker].status1 = 0; - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; - } + if (isSoundMove) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL; else - { - RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability); - gBattleCommunication[MULTISTRING_CHOOSER] |= B_MSG_BELL_SOUNDPROOF_ATTACKER; - } - - gBattleScripting.battler = partner; - - if (IsBattlerAlive(partner)) - { - if (GetBattlerAbility(partner) != ABILITY_SOUNDPROOF || B_HEAL_BELL_SOUNDPROOF == GEN_5) - { - gBattleMons[partner].status1 = 0; - gBattleMons[partner].status2 &= ~STATUS2_NIGHTMARE; - } - else - { - RecordAbilityBattle(partner, gBattleMons[partner].ability); - gBattleCommunication[MULTISTRING_CHOOSER] |= B_MSG_BELL_SOUNDPROOF_PARTNER; - } - } - - // Because the above MULTISTRING_CHOOSER are ORd, if both are set then it will be B_MSG_BELL_BOTH_SOUNDPROOF - - for (i = 0; i < PARTY_SIZE; i++) - { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); - u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); - - if (species != SPECIES_NONE && species != SPECIES_EGG) - { - u16 ability; - bool32 isAttacker = gBattlerPartyIndexes[gBattlerAttacker] == i; - bool32 isDoublesPartner = gBattlerPartyIndexes[partner] == i && IsBattlerAlive(partner); - - if (B_HEAL_BELL_SOUNDPROOF == GEN_5 || (isAttacker && B_HEAL_BELL_SOUNDPROOF >= GEN_8)) - ability = ABILITY_NONE; - else if (B_HEAL_BELL_SOUNDPROOF > GEN_5 && !isAttacker && !isDoublesPartner) - ability = ABILITY_NONE; - else if (isAttacker) - ability = GetBattlerAbility(gBattlerAttacker); - else if (isDoublesPartner) - ability = GetBattlerAbility(partner); - else - { - ability = GetAbilityBySpecies(species, abilityNum); - #if TESTING - if (gTestRunnerEnabled) - { - u32 side = GetBattlerSide(gBattlerAttacker); - if (TestRunner_Battle_GetForcedAbility(side, i)) - ability = TestRunner_Battle_GetForcedAbility(side, i); - } - #endif - } - - if (ability != ABILITY_SOUNDPROOF) - { - toHeal |= (1 << i); - TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), i); - } - } - } - } - else // Aromatherapy - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOOTHING_AROMA; - toHeal = (1 << PARTY_SIZE) - 1; - - for (i = 0; i < PARTY_SIZE; i++) - { - TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), i); - } - + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOOTHING_AROMA; gBattleMons[gBattlerAttacker].status1 = 0; gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; + } + else + { + RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL_SOUNDPROOF_ATTACKER; + } - if (IsDoubleBattle() - && !(gAbsentBattlerFlags & (1u <= GEN_8 && isAttacker)) + ability = ABILITY_NONE; + else if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) > GEN_5 && !isAttacker && !isDoublesPartner) + ability = ABILITY_NONE; + else if (isAttacker) + ability = GetBattlerAbility(gBattlerAttacker); + else if (isDoublesPartner) + ability = GetBattlerAbility(partner); + else + { + ability = GetAbilityBySpecies(species, abilityNum); + #if TESTING + if (gTestRunnerEnabled) + { + u32 side = GetBattlerSide(gBattlerAttacker); + if (TestRunner_Battle_GetForcedAbility(side, i)) + ability = TestRunner_Battle_GetForcedAbility(side, i); + } + #endif + } + + if (!(isSoundMove && ability == ABILITY_SOUNDPROOF)) + { + toHeal |= (1 << i); + TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), i); + } + } } if (toHeal) @@ -13787,7 +14037,7 @@ static void Cmd_handlerollout(void) { CMD_ARGS(); - if (!MoveResultHasEffect(gBattlerTarget)) + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) { CancelMultiTurnMoves(gBattlerAttacker); gBattlescriptCurrInstr = BattleScript_MoveMissedPause; @@ -13825,7 +14075,7 @@ static void Cmd_handlefurycutter(void) { CMD_ARGS(); - if (!MoveResultHasEffect(gBattlerTarget)) + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) { gDisableStructs[gBattlerAttacker].furyCutterCounter = 0; gBattlescriptCurrInstr = BattleScript_MoveMissedPause; @@ -13929,7 +14179,7 @@ static void Cmd_setsafeguard(void) else { gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_SAFEGUARD; - gSideTimers[GetBattlerSide(gBattlerAttacker)].safeguardTimer = 5; + gSideTimers[GetBattlerSide(gBattlerAttacker)].safeguardTimer = gBattleTurnCounter + 5; gSideTimers[GetBattlerSide(gBattlerAttacker)].safeguardBattlerId = gBattlerAttacker; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SAFEGUARD; } @@ -14225,7 +14475,7 @@ static void Cmd_trysetfutureattack(void) { CMD_ARGS(const u8 *failInstr); - if (gWishFutureKnock.futureSightCounter[gBattlerTarget] != 0) + if (gWishFutureKnock.futureSightCounter[gBattlerTarget] > gBattleTurnCounter) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -14235,7 +14485,7 @@ static void Cmd_trysetfutureattack(void) gWishFutureKnock.futureSightMove[gBattlerTarget] = gCurrentMove; gWishFutureKnock.futureSightBattlerIndex[gBattlerTarget] = gBattlerAttacker; gWishFutureKnock.futureSightPartyIndex[gBattlerTarget] = gBattlerPartyIndexes[gBattlerAttacker]; - gWishFutureKnock.futureSightCounter[gBattlerTarget] = 3; + gWishFutureKnock.futureSightCounter[gBattlerTarget] = gBattleTurnCounter + 3; if (gCurrentMove == MOVE_DOOM_DESIRE) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOOM_DESIRE; @@ -14659,8 +14909,8 @@ static void Cmd_tryswapitems(void) } else if (oldItemAtk == ITEM_NONE && *newItemAtk != ITEM_NONE) { - if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNBURDEN && gDisableStructs[gBattlerAttacker].unbrudenActive) - gDisableStructs[gBattlerAttacker].unbrudenActive = FALSE; + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNBURDEN && gDisableStructs[gBattlerAttacker].unburdenActive) + gDisableStructs[gBattlerAttacker].unburdenActive = FALSE; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_TAKEN; // nothing -> <- target's item } @@ -14705,9 +14955,9 @@ static void Cmd_trywish(void) switch (cmd->turnNumber) { case 0: // use wish - if (gWishFutureKnock.wishCounter[gBattlerAttacker] == 0) + if (gWishFutureKnock.wishCounter[gBattlerAttacker] <= gBattleTurnCounter) { - gWishFutureKnock.wishCounter[gBattlerAttacker] = 2; + gWishFutureKnock.wishCounter[gBattlerAttacker] = gBattleTurnCounter + 2; gWishFutureKnock.wishPartyId[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker]; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -14719,16 +14969,9 @@ static void Cmd_trywish(void) case 1: // heal effect PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerTarget, gWishFutureKnock.wishPartyId[gBattlerTarget]) if (B_WISH_HP_SOURCE >= GEN_5) - { - if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) - gBattleStruct->moveDamage[gBattlerTarget] = max(1, GetMonData(&gPlayerParty[gWishFutureKnock.wishPartyId[gBattlerTarget]], MON_DATA_MAX_HP) / 2); - else - gBattleStruct->moveDamage[gBattlerTarget] = max(1, GetMonData(&gEnemyParty[gWishFutureKnock.wishPartyId[gBattlerTarget]], MON_DATA_MAX_HP) / 2); - } + gBattleStruct->moveDamage[gBattlerTarget] = max(1, GetMonData(&GetBattlerParty(gBattlerTarget)[gWishFutureKnock.wishPartyId[gBattlerTarget]], MON_DATA_MAX_HP) / 2); else - { gBattleStruct->moveDamage[gBattlerTarget] = max(1, GetNonDynamaxMaxHP(gBattlerAttacker) / 2); - } gBattleStruct->moveDamage[gBattlerTarget] *= -1; if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) @@ -14818,18 +15061,17 @@ static void Cmd_setdamagetohealthdifference(void) } } -static void HandleRoomMove(u32 statusFlag, u8 *timer, u8 stringId) +static void HandleRoomMove(u32 statusFlag, u16 *timer, u8 stringId) { if (gFieldStatuses & statusFlag) { gFieldStatuses &= ~statusFlag; - *timer = 0; gBattleCommunication[MULTISTRING_CHOOSER] = stringId + 1; } else { gFieldStatuses |= statusFlag; - *timer = 5; + *timer = gBattleTurnCounter + 5; gBattleCommunication[MULTISTRING_CHOOSER] = stringId; } } @@ -14874,7 +15116,7 @@ static void Cmd_tryswapabilities(void) } else { - if (!MoveResultHasEffect(gBattlerTarget) || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -15227,7 +15469,7 @@ static void Cmd_settypebasedhalvers(void) if (!(gFieldStatuses & STATUS_FIELD_MUDSPORT)) { gFieldStatuses |= STATUS_FIELD_MUDSPORT; - gFieldTimers.mudSportTimer = 5; + gFieldTimers.mudSportTimer = gBattleTurnCounter + 5; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC; worked = TRUE; } @@ -15249,7 +15491,7 @@ static void Cmd_settypebasedhalvers(void) if (!(gFieldStatuses & STATUS_FIELD_WATERSPORT)) { gFieldStatuses |= STATUS_FIELD_WATERSPORT; - gFieldTimers.waterSportTimer = 5; + gFieldTimers.waterSportTimer = gBattleTurnCounter + 5; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE; worked = TRUE; } @@ -15430,21 +15672,13 @@ static void Cmd_removelightscreenreflect(void) side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; if (B_BRICK_BREAK >= GEN_5) - failed = !MoveResultHasEffect(gBattlerTarget); + failed = gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT; else failed = FALSE; - if (!failed - && (gSideTimers[side].reflectTimer - || gSideTimers[side].lightscreenTimer - || gSideTimers[side].auroraVeilTimer)) + if (!failed && gSideStatuses[side] & SIDE_STATUS_SCREEN_ANY) { - 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; + gSideStatuses[side] &= ~SIDE_STATUS_SCREEN_ANY; gBattleScripting.animTurn = 1; gBattleScripting.animTargetsHit = 1; } @@ -15789,41 +16023,145 @@ static void Cmd_handleballthrow(void) static void Cmd_givecaughtmon(void) { - CMD_ARGS(); + CMD_ARGS(const u8 *passInstr); + enum GiveCaughtMonStates state = gBattleCommunication[MULTIUSE_STATE]; - if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9) + switch (state) { - u16 lostItem = gBattleStruct->itemLost[B_SIDE_OPPONENT][gBattlerPartyIndexes[GetCatchingBattler()]].originalItem; - if (lostItem != ITEM_NONE && ItemId_GetPocket(lostItem) != POCKET_BERRIES) - SetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_HELD_ITEM, &lostItem); // Restore non-berry items - } - - if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]]) != MON_GIVEN_TO_PARTY) - { - if (!ShouldShowBoxWasFullMessage()) + case GIVECAUGHTMON_CHECK_PARTY_SIZE: + if (CalculatePlayerPartyCount() == PARTY_SIZE && B_CATCH_SWAP_INTO_PARTY >= GEN_7) { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SENT_SOMEONES_PC; - StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); - GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_NICKNAME, gStringVar2); + PrepareStringBattle(STRINGID_SENDCAUGHTMONPARTYORBOX, gBattlerAttacker); + gBattleCommunication[MSG_DISPLAY] = 1; + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_ASK_ADD_TO_PARTY; } else { - StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); // box the mon was sent to - 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; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NO_MESSSAGE_SKIP; + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + break; + case GIVECAUGHTMON_ASK_ADD_TO_PARTY: + HandleBattleWindow(YESNOBOX_X_Y, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_HANDLE_INPUT; + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(0); + break; + case GIVECAUGHTMON_HANDLE_INPUT: + if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(0); + } + if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); + gBattleCommunication[CURSOR_POSITION] = 1; + BattleCreateYesNoCursorAt(1); + } + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + if (gBattleCommunication[CURSOR_POSITION] == 0) + { + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_DO_CHOOSE_MON; + } + else + { + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + break; + case GIVECAUGHTMON_DO_CHOOSE_MON: + if (!gPaletteFade.active) + { + BtlController_EmitChoosePokemon(gBattlerAttacker, BUFFER_A, PARTY_ACTION_SEND_MON_TO_BOX, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); + MarkBattlerForControllerExec(gBattlerAttacker); + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_HANDLE_CHOSEN_MON; + } + break; + case GIVECAUGHTMON_HANDLE_CHOSEN_MON: + if (gSelectedMonPartyId != PARTY_SIZE) + { + if (gSelectedMonPartyId > PARTY_SIZE) + { + // Choosing Pokemon was cancelled + gSelectedMonPartyId = PARTY_SIZE; + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + else + { + // Mon chosen, try to put it in the PC + if (CopyMonToPC(&gPlayerParty[gSelectedMonPartyId]) == MON_GIVEN_TO_PC) + { + GetMonNickname(&gPlayerParty[gSelectedMonPartyId], gStringVar2); + StringCopy(gStringVar1, GetBoxNamePtr(GetPCBoxToSendMon())); + ZeroMonData(&gPlayerParty[gSelectedMonPartyId]); + gBattleStruct->itemLost[B_SIDE_PLAYER][gSelectedMonPartyId].originalItem = ITEM_NONE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWAPPED_INTO_PARTY; + gSelectedMonPartyId = PARTY_SIZE; + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + else + { + gSelectedMonPartyId = PARTY_SIZE; + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + } + } + break; + case GIVECAUGHTMON_GIVE_AND_SHOW_MSG: + if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9) + { + u16 lostItem = gBattleStruct->itemLost[B_SIDE_OPPONENT][gBattlerPartyIndexes[GetCatchingBattler()]].originalItem; + if (lostItem != ITEM_NONE && ItemId_GetPocket(lostItem) != POCKET_BERRIES) + SetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_HELD_ITEM, &lostItem); // Restore non-berry items } - // Change to B_MSG_SENT_LANETTES_PC or B_MSG_LANETTES_BOX_FULL - if (FlagGet(FLAG_SYS_PC_LANETTE)) - gBattleCommunication[MULTISTRING_CHOOSER]++; + if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]]) != MON_GIVEN_TO_PARTY + && gBattleCommunication[MULTISTRING_CHOOSER] != B_MSG_SWAPPED_INTO_PARTY) + { + if (!ShouldShowBoxWasFullMessage()) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SENT_SOMEONES_PC; + StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); + 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[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; + } + + // Change to B_MSG_SENT_LANETTES_PC or B_MSG_LANETTES_BOX_FULL + if (FlagGet(FLAG_SYS_PC_LANETTE)) + gBattleCommunication[MULTISTRING_CHOOSER]++; + } + + 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); + + gSelectedMonPartyId = PARTY_SIZE; + gBattleCommunication[MULTIUSE_STATE] = 0; + + if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_NO_MESSSAGE_SKIP) + gBattlescriptCurrInstr = cmd->passInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + break; } - - 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 = cmd->nextInstr; } static void Cmd_trysetcaughtmondexflags(void) @@ -15892,8 +16230,9 @@ static void Cmd_displaydexinfo(void) } break; case 5: - if (!gPaletteFade.active) + if (!gPaletteFade.active) { gBattlescriptCurrInstr = cmd->nextInstr; + } break; } } @@ -15966,7 +16305,7 @@ void BattleDestroyYesNoCursorAt(u8 cursorPosition) static void Cmd_trygivecaughtmonnick(void) { - CMD_ARGS(const u8 *successInstr); + CMD_ARGS(); switch (gBattleCommunication[MULTIUSE_STATE]) { @@ -16016,12 +16355,13 @@ static void Cmd_trygivecaughtmonnick(void) { GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); FreeAllWindowBuffers(); + MainCallback callback = CalculatePlayerPartyCount() == PARTY_SIZE ? ReshowBlankBattleScreenAfterMenu : BattleMainCB2; DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gBattleStruct->caughtMonNick, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]), GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_PERSONALITY, NULL), - BattleMainCB2); + callback); gBattleCommunication[MULTIUSE_STATE]++; } @@ -16030,14 +16370,12 @@ static void Cmd_trygivecaughtmonnick(void) if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); - gBattlescriptCurrInstr = cmd->successInstr; + gBattleCommunication[MULTIUSE_STATE]++; } break; case 4: - if (CalculatePlayerPartyCount() == PARTY_SIZE) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->successInstr; + gBattleCommunication[MULTIUSE_STATE] = 0; + gBattlescriptCurrInstr = cmd->nextInstr; break; } } @@ -16968,7 +17306,7 @@ void BS_SetRemoveTerrain(void) gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; gFieldStatuses |= statusFlag; - gFieldTimers.terrainTimer = (atkHoldEffect == HOLD_EFFECT_TERRAIN_EXTENDER) ? 8 : 5; + gFieldTimers.terrainTimer = gBattleTurnCounter + (atkHoldEffect == HOLD_EFFECT_TERRAIN_EXTENDER) ? 8 : 5; gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -17178,13 +17516,13 @@ void BS_SetPledgeStatus(void) switch (cmd->sideStatus) { case SIDE_STATUS_RAINBOW: - gSideTimers[side].rainbowTimer = 4; + gSideTimers[side].rainbowTimer = gBattleTurnCounter + 4; break; case SIDE_STATUS_SEA_OF_FIRE: - gSideTimers[side].seaOfFireTimer = 4; + gSideTimers[side].seaOfFireTimer = gBattleTurnCounter + 4; break; case SIDE_STATUS_SWAMP: - gSideTimers[side].swampTimer = 4; + gSideTimers[side].swampTimer = gBattleTurnCounter + 4; } gBattlescriptCurrInstr = cmd->nextInstr; @@ -17367,13 +17705,25 @@ void BS_AllySwitchFailChance(void) gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_SetPhotonGeyserCategory(void) +void BS_SetDynamicMoveCategory(void) { NATIVE_ARGS(); - u32 effect = GetMoveEffect(gCurrentMove); - if (!((effect == EFFECT_TERA_BLAST && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA) - || (effect == EFFECT_TERA_STARSTORM && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA && gBattleMons[gBattlerAttacker].species == SPECIES_TERAPAGOS_STELLAR))) + + switch (GetMoveEffect(gCurrentMove)) + { + case EFFECT_TERA_BLAST: + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) + gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != GetMoveCategory(gCurrentMove)); + break; + case EFFECT_TERA_STARSTORM: + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA && gBattleMons[gBattlerAttacker].species == SPECIES_TERAPAGOS_STELLAR) + gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != GetMoveCategory(gCurrentMove)); + break; + default: gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != GetMoveCategory(gCurrentMove)); + break; + } + gBattlescriptCurrInstr = cmd->nextInstr; } @@ -17497,7 +17847,7 @@ void BS_TryActivateGulpMissile(void) { NATIVE_ARGS(); - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && gBattleMons[gBattlerTarget].species != SPECIES_CRAMORANT @@ -17621,7 +17971,7 @@ void BS_JumpIfSleepClause(void) NATIVE_ARGS(const u8 *jumpInstr); // Can freely sleep own partner - if (IsDoubleBattle() && IsSleepClauseEnabled() && GetBattlerSide(gBattlerAttacker) == GetBattlerSide(gBattlerTarget)) + if (IsDoubleBattle() && IsSleepClauseEnabled() && IsBattlerAlly(gBattlerAttacker, gBattlerTarget)) { gBattleStruct->battlerState[gBattlerTarget].sleepClauseEffectExempt = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; @@ -17693,26 +18043,6 @@ void BS_JumpIfBlockedBySoundproof(void) } } -void BS_TryHitSwitchTarget(void) -{ - NATIVE_ARGS(const u8 *failInstr); - - if (IsBattlerAlive(gBattlerAttacker) - && IsBattlerAlive(gBattlerTarget) - && MoveResultHasEffect(gBattlerTarget) - && IsBattlerTurnDamaged(gBattlerTarget) - && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_1ST_HIT - && GetBattlerAbility(gBattlerTarget) != ABILITY_GUARD_DOG) - { - gBattleScripting.switchCase = B_SWITCH_HIT; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } -} - void BS_SetMagicCoatTarget(void) { NATIVE_ARGS(); @@ -17761,7 +18091,7 @@ void BS_TryWindRiderPower(void) u32 battler = GetBattlerForBattleScript(cmd->battler); u16 ability = GetBattlerAbility(battler); - if (GetBattlerSide(battler) == GetBattlerSide(gBattlerAttacker) + if (IsBattlerAlly(battler, gBattlerAttacker) && (ability == ABILITY_WIND_RIDER || ability == ABILITY_WIND_POWER)) { gLastUsedAbility = ability; @@ -17942,6 +18272,83 @@ void BS_RemoveTerrain(void) gBattlescriptCurrInstr = cmd->nextInstr; } +void BS_TrySpectralThiefSteal(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) + { + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + + bool32 contrary = GetBattlerAbility(gBattlerAttacker) == ABILITY_CONTRARY; + gBattleStruct->stolenStats[0] = 0; // Stats to steal. + gBattleScripting.animArg1 = 0; + for (u32 stat = STAT_ATK; stat < NUM_BATTLE_STATS; stat++) + { + if (gBattleMons[gBattlerTarget].statStages[stat] > DEFAULT_STAT_STAGE && gBattleMons[gBattlerAttacker].statStages[stat] != MAX_STAT_STAGE) + { + bool32 byTwo = FALSE; + + gBattleStruct->stolenStats[0] |= (1 << (stat)); + // Store by how many stages to raise the stat. + gBattleStruct->stolenStats[stat] = gBattleMons[gBattlerTarget].statStages[stat] - DEFAULT_STAT_STAGE; + + while (gBattleMons[gBattlerAttacker].statStages[stat] + gBattleStruct->stolenStats[stat] > MAX_STAT_STAGE) + gBattleStruct->stolenStats[stat]--; + + gBattleMons[gBattlerTarget].statStages[stat] = DEFAULT_STAT_STAGE; + + if (gBattleStruct->stolenStats[stat] >= 2) + byTwo++; + + if (gBattleScripting.animArg1 == 0) + { + if (byTwo) + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MINUS2 : STAT_ANIM_PLUS2) + stat; + else + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MINUS1 : STAT_ANIM_PLUS1) + stat; + } + else + { + if (byTwo) + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MULTIPLE_MINUS2 : STAT_ANIM_MULTIPLE_PLUS2); + else + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MULTIPLE_MINUS1 : STAT_ANIM_MULTIPLE_PLUS1); + } + } + } + + if (gBattleStruct->stolenStats[0] != 0) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_SpectralThiefPrintStats(void) +{ + NATIVE_ARGS(); + + for (u32 stat = STAT_ATK; stat < NUM_BATTLE_STATS; stat++) + { + if (gBattleStruct->stolenStats[0] & (1u << stat)) + { + gBattleStruct->stolenStats[0] &= ~(1u << stat); + SET_STATCHANGER(stat, gBattleStruct->stolenStats[stat], FALSE); + if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), + stat, + MOVE_EFFECT_CERTAIN | MOVE_EFFECT_AFFECTS_USER, NULL) == STAT_CHANGE_WORKED) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_StatUpMsg; + return; + } + } + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + void BS_SetMoveResultFlags(void) { NATIVE_ARGS(u16 value); @@ -18007,3 +18414,231 @@ void BS_SwapStats(void) PREPARE_STAT_BUFFER(gBattleTextBuff1, stat); gBattlescriptCurrInstr = cmd->nextInstr; } + +static void TrySetParalysis(const u8 *nextInstr, const u8 *failInstr) +{ + if (CanBeParalyzed(gBattlerTarget, GetBattlerAbility(gBattlerTarget))) + { + gBattleMons[gBattlerTarget].status1 |= STATUS1_PARALYSIS; + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + gEffectBattler = gBattlerTarget; + BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); + MarkBattlerForControllerExec(gBattlerTarget); + gBattlescriptCurrInstr = nextInstr; + } + else + { + gBattlescriptCurrInstr = failInstr; + } +} + +static void TrySetPoison(const u8 *nextInstr, const u8 *failInstr) +{ + if (CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget))) + { + gBattleMons[gBattlerTarget].status1 |= STATUS1_POISON; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gEffectBattler = gBattlerTarget; + BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); + MarkBattlerForControllerExec(gBattlerTarget); + gBattlescriptCurrInstr = nextInstr; + } + else + { + gBattlescriptCurrInstr = failInstr; + } +} + +static void TrySetSleep(const u8 *nextInstr, const u8 *failInstr) +{ + if (CanBeSlept(gBattlerTarget, GetBattlerAbility(gBattlerTarget), BLOCKED_BY_SLEEP_CLAUSE)) + { + if (B_SLEEP_TURNS >= GEN_5) + gBattleMons[gBattlerTarget].status1 |= STATUS1_SLEEP_TURN((Random() % 3) + 2); + else + gBattleMons[gBattlerTarget].status1 |= STATUS1_SLEEP_TURN((Random() % 4) + 3); + + TryActivateSleepClause(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget]); + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gEffectBattler = gBattlerTarget; + BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); + MarkBattlerForControllerExec(gBattlerTarget); + gBattlescriptCurrInstr = nextInstr; + } + else + { + gBattlescriptCurrInstr = failInstr; + } +} + +void BS_TrySetParalysis(void) +{ + NATIVE_ARGS(const u8 *failInstr); + TrySetParalysis(cmd->nextInstr, cmd->failInstr); +} + +void BS_TrySetPoison(void) +{ + NATIVE_ARGS(const u8 *failInstr); + TrySetPoison(cmd->nextInstr, cmd->failInstr); +} + +void BS_TrySetPoisonParalyzis(void) +{ + NATIVE_ARGS(const u8 *failInstr); + + static const u32 sStunShockEffects[] = {STATUS1_PARALYSIS, STATUS1_POISON}; + u32 status = RandomElement(RNG_G_MAX_STUN_SHOCK, sStunShockEffects); + + if (status == STATUS1_PARALYSIS) + TrySetParalysis(cmd->nextInstr, cmd->failInstr); + else + TrySetPoison(cmd->nextInstr, cmd->failInstr); +} + +void BS_TrySetEffectSpore(void) +{ + NATIVE_ARGS(const u8 *failInstr); + + static const u32 sBefuddleEffects[] = {STATUS1_PARALYSIS, STATUS1_POISON, STATUS1_SLEEP}; + u32 status = RandomElement(RNG_G_MAX_BEFUDDLE, sBefuddleEffects); + + if (status == STATUS1_PARALYSIS) + TrySetParalysis(cmd->nextInstr, cmd->failInstr); + else if (status == STATUS1_POISON) + TrySetPoison(cmd->nextInstr, cmd->failInstr); + else + TrySetSleep(cmd->nextInstr, cmd->failInstr); +} + +void BS_TrySetConfusion(void) +{ + NATIVE_ARGS(const u8 *failInstr); + + if (CanBeConfused(gBattlerTarget)) + { + gBattleMons[gBattlerTarget].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattleCommunication[MULTIUSE_STATE] = 1; + gEffectBattler = gBattlerTarget; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +void BS_TrySetInfatuation(void) +{ + NATIVE_ARGS(const u8 *failInstr); + + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_INFATUATION) + && gBattleMons[gBattlerTarget].ability != ABILITY_OBLIVIOUS + && !IsAbilityOnSide(gBattlerTarget, ABILITY_AROMA_VEIL) + && AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)) + { + gBattleMons[gBattlerTarget].status2 |= STATUS2_INFATUATED_WITH(gBattlerAttacker); + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + gBattleCommunication[MULTIUSE_STATE] = 2; + gEffectBattler = gBattlerTarget; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +void BS_TrySetEscapePrevention(void) +{ + NATIVE_ARGS(const u8 *failInstr); + + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION)) + { + gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION; + gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + gEffectBattler = gBattlerTarget; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +void BS_TrySetTorment(void) +{ + NATIVE_ARGS(const u8 *failInstr); + + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT) + && !IsAbilityOnSide(gBattlerTarget, ABILITY_AROMA_VEIL)) + { + gBattleMons[gBattlerTarget].status2 |= STATUS2_TORMENT; + gDisableStructs[gBattlerTarget].tormentTimer = 3; // 3 turns excluding current turn + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + gEffectBattler = gBattlerTarget; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +// Heals one-sixth of the target's HP, including for Dynamaxed targets. +void BS_HealOneSixth(void) +{ + NATIVE_ARGS(const u8* failInstr); + gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].maxHP / 6; + if (gBattleStruct->moveDamage[gBattlerTarget] == 0) + gBattleStruct->moveDamage[gBattlerTarget] = 1; + gBattleStruct->moveDamage[gBattlerTarget] *= -1; + + if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) + gBattlescriptCurrInstr = cmd->failInstr; // fail + else + gBattlescriptCurrInstr = cmd->nextInstr; // can heal +} + +// Recycles the target's item if it is specifically holding a berry. +void BS_TryRecycleBerry(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u16* usedHeldItem = &gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gBattlerTarget]][GetBattlerSide(gBattlerTarget)]; + if (gBattleMons[gBattlerTarget].item == ITEM_NONE + && gBattleStruct->changedItems[gBattlerTarget] == ITEM_NONE // Will not inherit an item + && ItemId_GetPocket(*usedHeldItem) == POCKET_BERRIES) + { + gLastUsedItem = *usedHeldItem; + *usedHeldItem = ITEM_NONE; + gBattleMons[gBattlerTarget].item = gLastUsedItem; + + BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item); + MarkBattlerForControllerExec(gBattlerTarget); + + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +// Sets up sharp steel on the target's side. +void BS_SetSteelsurge(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u8 targetSide = GetBattlerSide(gBattlerTarget); + if (gSideStatuses[targetSide] & SIDE_STATUS_STEELSURGE) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gSideStatuses[targetSide] |= SIDE_STATUS_STEELSURGE; + gSideTimers[targetSide].steelsurgeAmount = 1; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} diff --git a/src/battle_setup.c b/src/battle_setup.c index 62eb192b75..96d23dc42a 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -49,6 +49,7 @@ #include "constants/trainers.h" #include "constants/trainer_hill.h" #include "constants/weather.h" +#include "wild_encounter.h" enum { TRANSITION_TYPE_NORMAL, @@ -57,22 +58,6 @@ enum { TRANSITION_TYPE_WATER, }; -enum { - TRAINER_PARAM_LOAD_VAL_8BIT, - TRAINER_PARAM_LOAD_VAL_16BIT, - TRAINER_PARAM_LOAD_VAL_32BIT, - TRAINER_PARAM_CLEAR_VAL_8BIT, - TRAINER_PARAM_CLEAR_VAL_16BIT, - TRAINER_PARAM_CLEAR_VAL_32BIT, - TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR, -}; - -struct TrainerBattleParameter -{ - void *varPtr; - u8 ptrType; -}; - // this file's functions static void DoBattlePikeWildBattle(void); static void DoSafariBattle(void); @@ -96,20 +81,9 @@ static void HandleRematchVarsOnBattleEnd(void); static const u8 *GetIntroSpeechOfApproachingTrainer(void); static const u8 *GetTrainerCantBattleSpeech(void); -EWRAM_DATA static u16 sTrainerBattleMode = 0; -EWRAM_DATA u16 gTrainerBattleOpponent_A = 0; -EWRAM_DATA u16 gTrainerBattleOpponent_B = 0; +EWRAM_DATA TrainerBattleParameter gTrainerBattleParameter = {0}; EWRAM_DATA u16 gPartnerTrainerId = 0; -EWRAM_DATA static u16 sTrainerObjectEventLocalId = 0; -EWRAM_DATA static u8 *sTrainerAIntroSpeech = NULL; -EWRAM_DATA static u8 *sTrainerBIntroSpeech = NULL; -EWRAM_DATA static u8 *sTrainerADefeatSpeech = NULL; -EWRAM_DATA static u8 *sTrainerBDefeatSpeech = NULL; -EWRAM_DATA static u8 *sTrainerVictorySpeech = NULL; -EWRAM_DATA static u8 *sTrainerCannotBattleSpeech = NULL; EWRAM_DATA static u8 *sTrainerBattleEndScript = NULL; -EWRAM_DATA static u8 *sTrainerABattleScriptRetAddr = NULL; -EWRAM_DATA static u8 *sTrainerBBattleScriptRetAddr = NULL; EWRAM_DATA static bool8 sShouldCheckTrainerBScript = FALSE; EWRAM_DATA static u8 sNoOfPossibleTrainerRetScripts = 0; @@ -163,114 +137,6 @@ static const u8 sBattleTransitionTable_BattleDome[] = B_TRANSITION_FRONTIER_SQUARES_SPIRAL }; -static const struct TrainerBattleParameter sOrdinaryBattleParams[] = -{ - {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, - {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerABattleScriptRetAddr, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, -}; - -static const struct TrainerBattleParameter sContinueScriptBattleParams[] = -{ - {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, - {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerABattleScriptRetAddr, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, -}; - -static const struct TrainerBattleParameter sDoubleBattleParams[] = -{ - {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, - {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerCannotBattleSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerABattleScriptRetAddr, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, -}; - -static const struct TrainerBattleParameter sOrdinaryNoIntroBattleParams[] = -{ - {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, - {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerAIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerABattleScriptRetAddr, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, -}; - -static const struct TrainerBattleParameter sContinueScriptDoubleBattleParams[] = -{ - {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, - {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerCannotBattleSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerABattleScriptRetAddr, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, -}; - -static const struct TrainerBattleParameter sTrainerBOrdinaryBattleParams[] = -{ - {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, - {&gTrainerBattleOpponent_B, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerBIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerBDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerBBattleScriptRetAddr, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, -}; - -static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[] = -{ - {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, - {&gTrainerBattleOpponent_B, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerBIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerBDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerBBattleScriptRetAddr, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, -}; - -// two trainers, each with a defeat speech -static const struct TrainerBattleParameter sTrainerTwoTrainerBattleParams[] = -{ - {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, - {&sTrainerObjectEventLocalId, TRAINER_PARAM_CLEAR_VAL_16BIT}, - {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerAIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&gTrainerBattleOpponent_B, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&sTrainerBIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerBDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, - {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerBBattleScriptRetAddr, TRAINER_PARAM_CLEAR_VAL_32BIT}, - {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, -}; - #define REMATCH(trainer1, trainer2, trainer3, trainer4, trainer5, map) \ { \ .trainerIds = {trainer1, trainer2, trainer3, trainer4, trainer5}, \ @@ -744,7 +610,11 @@ u8 BattleSetup_GetTerrainId(void) u16 tileBehavior; s16 x, y; - PlayerGetDestCoords(&x, &y); + if (I_FISHING_ENVIRONMENT >= GEN_4 && gIsFishingEncounter) + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + else + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); if (MetatileBehavior_IsTallGrass(tileBehavior)) @@ -890,8 +760,8 @@ u8 GetTrainerBattleTransition(void) u8 transitionType; u8 enemyLevel; u8 playerLevel; - u32 trainerId = SanitizeTrainerId(gTrainerBattleOpponent_A); - u32 trainerClass = GetTrainerClassFromId(gTrainerBattleOpponent_A); + u32 trainerId = SanitizeTrainerId(TRAINER_BATTLE_PARAM.opponentA); + u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); if (DoesTrainerHaveMugshot(trainerId)) return B_TRANSITION_MUGSHOT; @@ -1027,30 +897,14 @@ static void TryUpdateGymLeaderRematchFromTrainer(void) UpdateGymLeaderRematch(); } -// why not just use the macros? maybe its because they didnt want to uncast const every time? -static u32 TrainerBattleLoadArg32(const u8 *ptr) -{ - return T1_READ_32(ptr); -} - -static u16 TrainerBattleLoadArg16(const u8 *ptr) -{ - return T1_READ_16(ptr); -} - -static u8 TrainerBattleLoadArg8(const u8 *ptr) -{ - return T1_READ_8(ptr); -} - static u16 GetTrainerAFlag(void) { - return TRAINER_FLAGS_START + gTrainerBattleOpponent_A; + return TRAINER_FLAGS_START + TRAINER_BATTLE_PARAM.opponentA; } static u16 GetTrainerBFlag(void) { - return TRAINER_FLAGS_START + gTrainerBattleOpponent_B; + return TRAINER_FLAGS_START + TRAINER_BATTLE_PARAM.opponentB; } static bool32 IsPlayerDefeated(u32 battleOutcome) @@ -1073,188 +927,143 @@ static bool32 IsPlayerDefeated(u32 battleOutcome) void ResetTrainerOpponentIds(void) { - gTrainerBattleOpponent_A = 0; - gTrainerBattleOpponent_B = 0; + TRAINER_BATTLE_PARAM.opponentA = 0; + TRAINER_BATTLE_PARAM.opponentB = 0; } static void InitTrainerBattleVariables(void) { - sTrainerBattleMode = 0; - if (gApproachingTrainerId == 0) - { - sTrainerAIntroSpeech = NULL; - sTrainerADefeatSpeech = NULL; - sTrainerABattleScriptRetAddr = NULL; - } - else - { - sTrainerBIntroSpeech = NULL; - sTrainerBDefeatSpeech = NULL; - sTrainerBBattleScriptRetAddr = NULL; - } - sTrainerObjectEventLocalId = 0; - sTrainerVictorySpeech = NULL; - sTrainerCannotBattleSpeech = NULL; + memset(gTrainerBattleParameter.data, 0, sizeof(TrainerBattleParameter)); sTrainerBattleEndScript = NULL; } -static inline void SetU8(void *ptr, u8 value) +void TrainerBattleLoadArgs(const u8 *data) { - *(u8 *)(ptr) = value; + InitTrainerBattleVariables(); + memcpy(gTrainerBattleParameter.data, data, sizeof(TrainerBattleParameter)); + sTrainerBattleEndScript = (u8*)data + sizeof(TrainerBattleParameter); } -static inline void SetU16(void *ptr, u16 value) +void TrainerBattleLoadArgsTrainerA(const u8 *data) { - *(u16 *)(ptr) = value; + TrainerBattleParameter *temp = (TrainerBattleParameter*)data; + + TRAINER_BATTLE_PARAM.playMusicA = temp->params.playMusicA; + TRAINER_BATTLE_PARAM.objEventLocalIdA = temp->params.objEventLocalIdA; + TRAINER_BATTLE_PARAM.opponentA = temp->params.opponentA; + TRAINER_BATTLE_PARAM.introTextA = temp->params.introTextA; + TRAINER_BATTLE_PARAM.defeatTextA = temp->params.defeatTextA; + TRAINER_BATTLE_PARAM.battleScriptRetAddrA = temp->params.battleScriptRetAddrA; } -static inline void SetU32(void *ptr, u32 value) +void TrainerBattleLoadArgsTrainerB(const u8 *data) { - *(u32 *)(ptr) = value; + TrainerBattleParameter *temp = (TrainerBattleParameter*)data; + + TRAINER_BATTLE_PARAM.playMusicB = temp->params.playMusicB; + TRAINER_BATTLE_PARAM.objEventLocalIdB = temp->params.objEventLocalIdB; + TRAINER_BATTLE_PARAM.opponentB = temp->params.opponentB; + TRAINER_BATTLE_PARAM.introTextB = temp->params.introTextB; + TRAINER_BATTLE_PARAM.defeatTextB = temp->params.defeatTextB; + TRAINER_BATTLE_PARAM.battleScriptRetAddrB = temp->params.battleScriptRetAddrB; } -static inline void SetPtr(const void *ptr, const void *value) +// loads trainer A parameter to trainer B. Used for second trainer in trainer_see.c +void TrainerBattleLoadArgsSecondTrainer(const u8 *data) { - *(const void **)(ptr) = value; + TrainerBattleParameter *temp = (TrainerBattleParameter*)data; + + TRAINER_BATTLE_PARAM.playMusicB = temp->params.playMusicA; + TRAINER_BATTLE_PARAM.objEventLocalIdB = temp->params.objEventLocalIdA; + TRAINER_BATTLE_PARAM.opponentB = temp->params.opponentA; + TRAINER_BATTLE_PARAM.introTextB = temp->params.introTextA; + TRAINER_BATTLE_PARAM.defeatTextB = temp->params.defeatTextA; + TRAINER_BATTLE_PARAM.battleScriptRetAddrB = temp->params.battleScriptRetAddrA; } -static void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 *data) +void SetMapVarsToTrainerA(void) { - while (1) + if (TRAINER_BATTLE_PARAM.objEventLocalIdA != 0) { - switch (specs->ptrType) - { - case TRAINER_PARAM_LOAD_VAL_8BIT: - SetU8(specs->varPtr, TrainerBattleLoadArg8(data)); - data += 1; - break; - case TRAINER_PARAM_LOAD_VAL_16BIT: - SetU16(specs->varPtr, TrainerBattleLoadArg16(data)); - data += 2; - break; - case TRAINER_PARAM_LOAD_VAL_32BIT: - SetU32(specs->varPtr, TrainerBattleLoadArg32(data)); - data += 4; - break; - case TRAINER_PARAM_CLEAR_VAL_8BIT: - SetU8(specs->varPtr, 0); - break; - case TRAINER_PARAM_CLEAR_VAL_16BIT: - SetU16(specs->varPtr, 0); - break; - case TRAINER_PARAM_CLEAR_VAL_32BIT: - SetU32(specs->varPtr, 0); - break; - case TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR: - SetPtr(specs->varPtr, data); - return; - } - specs++; + gSpecialVar_LastTalked = TRAINER_BATTLE_PARAM.objEventLocalIdA; + gSelectedObjectEvent = GetObjectEventIdByLocalIdAndMap(TRAINER_BATTLE_PARAM.objEventLocalIdA, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); } } -void SetMapVarsToTrainer(void) +void SetMapVarsToTrainerB(void) { - if (sTrainerObjectEventLocalId != 0) + if (TRAINER_BATTLE_PARAM.objEventLocalIdB != 0) { - gSpecialVar_LastTalked = sTrainerObjectEventLocalId; - gSelectedObjectEvent = GetObjectEventIdByLocalIdAndMap(sTrainerObjectEventLocalId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + gSpecialVar_LastTalked = TRAINER_BATTLE_PARAM.objEventLocalIdB; + gSelectedObjectEvent = GetObjectEventIdByLocalIdAndMap(TRAINER_BATTLE_PARAM.objEventLocalIdB, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); } } +// expects parameters have been loaded correctly with TrainerBattleLoadArgs const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data) { - if (TrainerBattleLoadArg8(data) != TRAINER_BATTLE_SET_TRAINER_B) - InitTrainerBattleVariables(); - sTrainerBattleMode = TrainerBattleLoadArg8(data); - - switch (sTrainerBattleMode) + switch (TRAINER_BATTLE_PARAM.mode) { case TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT: - TrainerBattleLoadArgs(sOrdinaryNoIntroBattleParams, data); return EventScript_DoNoIntroTrainerBattle; case TRAINER_BATTLE_DOUBLE: - TrainerBattleLoadArgs(sDoubleBattleParams, data); - SetMapVarsToTrainer(); + SetMapVarsToTrainerA(); return EventScript_TryDoDoubleTrainerBattle; case TRAINER_BATTLE_CONTINUE_SCRIPT: if (gApproachingTrainerId == 0) { - TrainerBattleLoadArgs(sContinueScriptBattleParams, data); - SetMapVarsToTrainer(); - } - else - { - TrainerBattleLoadArgs(sTrainerBContinueScriptBattleParams, data); + SetMapVarsToTrainerA(); } return EventScript_TryDoNormalTrainerBattle; case TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC: - TrainerBattleLoadArgs(sContinueScriptBattleParams, data); - SetMapVarsToTrainer(); + SetMapVarsToTrainerA(); return EventScript_TryDoNormalTrainerBattle; case TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE: case TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC: - TrainerBattleLoadArgs(sContinueScriptDoubleBattleParams, data); - SetMapVarsToTrainer(); + SetMapVarsToTrainerA(); return EventScript_TryDoDoubleTrainerBattle; #if FREE_MATCH_CALL == FALSE case TRAINER_BATTLE_REMATCH_DOUBLE: - TrainerBattleLoadArgs(sDoubleBattleParams, data); - SetMapVarsToTrainer(); - gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A); + SetMapVarsToTrainerA(); + TRAINER_BATTLE_PARAM.opponentA = GetRematchTrainerId(TRAINER_BATTLE_PARAM.opponentA); return EventScript_TryDoDoubleRematchBattle; case TRAINER_BATTLE_REMATCH: - TrainerBattleLoadArgs(sOrdinaryBattleParams, data); - SetMapVarsToTrainer(); - gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A); + SetMapVarsToTrainerA(); + TRAINER_BATTLE_PARAM.opponentA = GetRematchTrainerId(TRAINER_BATTLE_PARAM.opponentA); return EventScript_TryDoRematchBattle; #endif //FREE_MATCH_CALL case TRAINER_BATTLE_PYRAMID: if (gApproachingTrainerId == 0) { - TrainerBattleLoadArgs(sOrdinaryBattleParams, data); - SetMapVarsToTrainer(); - gTrainerBattleOpponent_A = LocalIdToPyramidTrainerId(gSpecialVar_LastTalked); + SetMapVarsToTrainerA(); + TRAINER_BATTLE_PARAM.opponentA = LocalIdToPyramidTrainerId(gSpecialVar_LastTalked); } else { - TrainerBattleLoadArgs(sTrainerBOrdinaryBattleParams, data); - gTrainerBattleOpponent_B = LocalIdToPyramidTrainerId(gSpecialVar_LastTalked); + TRAINER_BATTLE_PARAM.opponentB = LocalIdToPyramidTrainerId(gSpecialVar_LastTalked); } return EventScript_TryDoNormalTrainerBattle; - case TRAINER_BATTLE_SET_TRAINER_A: - TrainerBattleLoadArgs(sOrdinaryBattleParams, data); - return sTrainerBattleEndScript; - case TRAINER_BATTLE_SET_TRAINER_B: - TrainerBattleLoadArgs(sTrainerBOrdinaryBattleParams, data); + case TRAINER_BATTLE_SET_TRAINERS_FOR_MULTI_BATTLE: return sTrainerBattleEndScript; case TRAINER_BATTLE_HILL: if (gApproachingTrainerId == 0) { - TrainerBattleLoadArgs(sOrdinaryBattleParams, data); - SetMapVarsToTrainer(); - gTrainerBattleOpponent_A = LocalIdToHillTrainerId(gSpecialVar_LastTalked); + SetMapVarsToTrainerA(); + TRAINER_BATTLE_PARAM.opponentA = LocalIdToHillTrainerId(gSpecialVar_LastTalked); } else { - TrainerBattleLoadArgs(sTrainerBOrdinaryBattleParams, data); - gTrainerBattleOpponent_B = LocalIdToHillTrainerId(gSpecialVar_LastTalked); + TRAINER_BATTLE_PARAM.opponentB = LocalIdToHillTrainerId(gSpecialVar_LastTalked); } return EventScript_TryDoNormalTrainerBattle; case TRAINER_BATTLE_TWO_TRAINERS_NO_INTRO: gNoOfApproachingTrainers = 2; // set TWO_OPPONENTS gBattleTypeFlags gApproachingTrainerId = 1; // prevent trainer approach - TrainerBattleLoadArgs(sTrainerTwoTrainerBattleParams, data); return EventScript_DoNoIntroTrainerBattle; default: if (gApproachingTrainerId == 0) { - TrainerBattleLoadArgs(sOrdinaryBattleParams, data); - SetMapVarsToTrainer(); - } - else - { - TrainerBattleLoadArgs(sTrainerBOrdinaryBattleParams, data); + SetMapVarsToTrainerA(); } return EventScript_TryDoNormalTrainerBattle; } @@ -1264,6 +1073,7 @@ void ConfigureAndSetUpOneTrainerBattle(u8 trainerObjEventId, const u8 *trainerSc { gSelectedObjectEvent = trainerObjEventId; gSpecialVar_LastTalked = gObjectEvents[trainerObjEventId].localId; + TrainerBattleLoadArgs(trainerScript + 1); BattleSetup_ConfigureTrainerBattle(trainerScript + 1); ScriptContext_SetupScript(EventScript_StartTrainerApproach); LockPlayerFieldControls(); @@ -1273,6 +1083,12 @@ void ConfigureTwoTrainersBattle(u8 trainerObjEventId, const u8 *trainerScript) { gSelectedObjectEvent = trainerObjEventId; gSpecialVar_LastTalked = gObjectEvents[trainerObjEventId].localId; + + if (gApproachingTrainerId == 0) + TrainerBattleLoadArgs(trainerScript + 1); + else + TrainerBattleLoadArgsSecondTrainer(trainerScript + 1); + BattleSetup_ConfigureTrainerBattle(trainerScript + 1); } @@ -1282,11 +1098,13 @@ void SetUpTwoTrainersBattle(void) LockPlayerFieldControls(); } +#define OPCODE_OFFSET 1 bool32 GetTrainerFlagFromScriptPointer(const u8 *data) { - u32 flag = TrainerBattleLoadArg16(data + 2); - return FlagGet(TRAINER_FLAGS_START + flag); + TrainerBattleParameter *temp = (TrainerBattleParameter*)(data + OPCODE_OFFSET); + return FlagGet(TRAINER_FLAGS_START + temp->params.opponentA); } +#undef OPCODE_OFFSET // Set trainer's movement type so they stop and remain facing that direction // Note: Only for trainers who are spoken to directly @@ -1299,7 +1117,7 @@ void SetTrainerFacingDirection(void) u8 GetTrainerBattleMode(void) { - return sTrainerBattleMode; + return TRAINER_BATTLE_PARAM.mode; } bool8 GetTrainerFlag(void) @@ -1314,7 +1132,7 @@ bool8 GetTrainerFlag(void) static void SetBattledTrainersFlags(void) { - if (gTrainerBattleOpponent_B != 0) + if (TRAINER_BATTLE_PARAM.opponentB != 0) FlagSet(GetTrainerBFlag()); FlagSet(GetTrainerAFlag()); } @@ -1434,7 +1252,7 @@ static void CB2_EndTrainerBattle(void) { HandleBattleVariantEndParty(); - if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_SECRET_BASE) { DowngradeBadPoison(); SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); @@ -1460,7 +1278,7 @@ static void CB2_EndTrainerBattle(void) static void CB2_EndRematchBattle(void) { - if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_SECRET_BASE) { DowngradeBadPoison(); SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); @@ -1526,18 +1344,18 @@ const u8 *BattleSetup_GetTrainerPostBattleScript(void) if (sShouldCheckTrainerBScript) { sShouldCheckTrainerBScript = FALSE; - if (sTrainerBBattleScriptRetAddr != NULL) + if (TRAINER_BATTLE_PARAM.battleScriptRetAddrB != NULL) { gWhichTrainerToFaceAfterBattle = 1; - return sTrainerBBattleScriptRetAddr; + return TRAINER_BATTLE_PARAM.battleScriptRetAddrB; } } else { - if (sTrainerABattleScriptRetAddr != NULL) + if (TRAINER_BATTLE_PARAM.battleScriptRetAddrA != NULL) { gWhichTrainerToFaceAfterBattle = 0; - return sTrainerABattleScriptRetAddr; + return TRAINER_BATTLE_PARAM.battleScriptRetAddrA; } } @@ -1555,12 +1373,12 @@ void PlayTrainerEncounterMusic(void) u16 music; if (gApproachingTrainerId == 0) - trainerId = gTrainerBattleOpponent_A; + trainerId = TRAINER_BATTLE_PARAM.opponentA; else - trainerId = gTrainerBattleOpponent_B; + trainerId = TRAINER_BATTLE_PARAM.opponentB; - if (sTrainerBattleMode != TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC - && sTrainerBattleMode != TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC) + if (TRAINER_BATTLE_PARAM.mode != TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC + && TRAINER_BATTLE_PARAM.mode != TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC) { switch (GetTrainerEncounterMusicId(trainerId)) { @@ -1621,19 +1439,19 @@ static const u8 *ReturnEmptyStringIfNull(const u8 *string) static const u8 *GetIntroSpeechOfApproachingTrainer(void) { if (gApproachingTrainerId == 0) - return ReturnEmptyStringIfNull(sTrainerAIntroSpeech); + return ReturnEmptyStringIfNull(TRAINER_BATTLE_PARAM.introTextA); else - return ReturnEmptyStringIfNull(sTrainerBIntroSpeech); + return ReturnEmptyStringIfNull(TRAINER_BATTLE_PARAM.introTextB); } const u8 *GetTrainerALoseText(void) { const u8 *string; - if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_SECRET_BASE) string = GetSecretBaseTrainerLoseText(); else - string = sTrainerADefeatSpeech; + string = TRAINER_BATTLE_PARAM.defeatTextA; StringExpandPlaceholders(gStringVar4, ReturnEmptyStringIfNull(string)); return gStringVar4; @@ -1641,18 +1459,18 @@ const u8 *GetTrainerALoseText(void) const u8 *GetTrainerBLoseText(void) { - StringExpandPlaceholders(gStringVar4, ReturnEmptyStringIfNull(sTrainerBDefeatSpeech)); + StringExpandPlaceholders(gStringVar4, ReturnEmptyStringIfNull(TRAINER_BATTLE_PARAM.defeatTextB)); return gStringVar4; } const u8 *GetTrainerWonSpeech(void) { - return ReturnEmptyStringIfNull(sTrainerVictorySpeech); + return ReturnEmptyStringIfNull(TRAINER_BATTLE_PARAM.victoryText); } static const u8 *GetTrainerCantBattleSpeech(void) { - return ReturnEmptyStringIfNull(sTrainerCannotBattleSpeech); + return ReturnEmptyStringIfNull(TRAINER_BATTLE_PARAM.cannotBattleText); } s32 FirstBattleTrainerIdToRematchTableId(const struct RematchTrainer *table, u16 trainerId) @@ -1891,7 +1709,7 @@ static void RegisterTrainerInMatchCall(void) { if (FlagGet(FLAG_HAS_MATCH_CALL)) { - u32 matchCallFlagId = GetTrainerMatchCallFlag(gTrainerBattleOpponent_A); + u32 matchCallFlagId = GetTrainerMatchCallFlag(TRAINER_BATTLE_PARAM.opponentA); if (matchCallFlagId != 0xFFFF) FlagSet(matchCallFlagId); } @@ -1988,15 +1806,15 @@ u16 GetLastBeatenRematchTrainerId(u16 trainerId) bool8 ShouldTryRematchBattle(void) { - if (IsFirstTrainerIdReadyForRematch(gRematchTable, gTrainerBattleOpponent_A)) + if (IsFirstTrainerIdReadyForRematch(gRematchTable, TRAINER_BATTLE_PARAM.opponentA)) return TRUE; - return WasSecondRematchWon(gRematchTable, gTrainerBattleOpponent_A); + return WasSecondRematchWon(gRematchTable, TRAINER_BATTLE_PARAM.opponentA); } bool8 IsTrainerReadyForRematch(void) { - return IsTrainerReadyForRematch_(gRematchTable, gTrainerBattleOpponent_A); + return IsTrainerReadyForRematch_(gRematchTable, TRAINER_BATTLE_PARAM.opponentA); } static void HandleRematchVarsOnBattleEnd(void) @@ -2004,7 +1822,7 @@ static void HandleRematchVarsOnBattleEnd(void) if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && (I_VS_SEEKER_CHARGING != 0)) ClearRematchMovementByTrainerId(); - ClearTrainerWantRematchState(gRematchTable, gTrainerBattleOpponent_A); + ClearTrainerWantRematchState(gRematchTable, TRAINER_BATTLE_PARAM.opponentA); SetBattledTrainersFlags(); } diff --git a/src/battle_tent.c b/src/battle_tent.c index 49df90ffd6..a5547da46b 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -127,14 +127,14 @@ static void SetVerdanturfTentPrize(void) static void SetVerdanturfTentTrainerGfx(void) { - gTrainerBattleOpponent_A = (u32)((Random() % 255) * 5) / 64; - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); + TRAINER_BATTLE_PARAM.opponentA = (u32)((Random() % 255) * 5) / 64; + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentA, 0); } static void BufferVerdanturfTentTrainerIntro(void) { - if (gTrainerBattleOpponent_A < FRONTIER_TRAINERS_COUNT) - FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore); + if (TRAINER_BATTLE_PARAM.opponentA < FRONTIER_TRAINERS_COUNT) + FrontierSpeechToString(gFacilityTrainers[TRAINER_BATTLE_PARAM.opponentA].speechBefore); } static void SaveVerdanturfTentChallenge(void) @@ -218,7 +218,7 @@ static void GiveFallarborTentPrize(void) static void BufferFallarborTentTrainerName(void) { - GetFrontierTrainerName(gStringVar1, gTrainerBattleOpponent_A); + GetFrontierTrainerName(gStringVar1, TRAINER_BATTLE_PARAM.opponentA); } void CallSlateportTentFunction(void) @@ -375,8 +375,8 @@ static void GenerateOpponentMons(void) } } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum); - gTrainerBattleOpponent_A = trainerId; - monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet; + TRAINER_BATTLE_PARAM.opponentA = trainerId; + monSet = gFacilityTrainers[TRAINER_BATTLE_PARAM.opponentA].monSet; while (monSet[numMons] != 0xFFFF) numMons++; if (numMons > 8) @@ -385,9 +385,9 @@ static void GenerateOpponentMons(void) } if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < TENT_STAGES_PER_CHALLENGE - 1) - gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A; + gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = TRAINER_BATTLE_PARAM.opponentA; - monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet; + monSet = gFacilityTrainers[TRAINER_BATTLE_PARAM.opponentA].monSet; i = 0; while (i != FRONTIER_PARTY_SIZE) { diff --git a/src/battle_tower.c b/src/battle_tower.c index 7fcdf1b8dd..140d411843 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -823,7 +823,7 @@ static void InitTowerChallenge(void) ValidateBattleTowerRecordChecksums(); SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); - gTrainerBattleOpponent_A = 0; + TRAINER_BATTLE_PARAM.opponentA = 0; } static void GetTowerData(void) @@ -874,7 +874,7 @@ static void SetTowerData(void) static void SetTowerBattleWon(void) { #if FREE_BATTLE_TOWER_E_READER == FALSE - if (gTrainerBattleOpponent_A == TRAINER_EREADER) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_EREADER) ClearEReaderTrainer(&gSaveBlock2Ptr->frontier.ereaderTrainer); #endif //FREE_BATTLE_TOWER_E_READER @@ -946,7 +946,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void) if (idsCount != 0) { - gTrainerBattleOpponent_A = trainerIds[Random() % idsCount]; + TRAINER_BATTLE_PARAM.opponentA = trainerIds[Random() % idsCount]; return TRUE; } else @@ -973,15 +973,15 @@ static void SetNextFacilityOpponent(void) if (battleMode == FRONTIER_MODE_MULTIS || battleMode == FRONTIER_MODE_LINK_MULTIS) { id = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - gTrainerBattleOpponent_A = gSaveBlock2Ptr->frontier.trainerIds[id * 2]; - gTrainerBattleOpponent_B = gSaveBlock2Ptr->frontier.trainerIds[id * 2 + 1]; - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_B, 1); + TRAINER_BATTLE_PARAM.opponentA = gSaveBlock2Ptr->frontier.trainerIds[id * 2]; + TRAINER_BATTLE_PARAM.opponentB = gSaveBlock2Ptr->frontier.trainerIds[id * 2 + 1]; + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentA, 0); + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentB, 1); } else if (ChooseSpecialBattleTowerTrainer()) { - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); - gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A; + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentA, 0); + gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = TRAINER_BATTLE_PARAM.opponentA; } else { @@ -1000,10 +1000,10 @@ static void SetNextFacilityOpponent(void) break; } - gTrainerBattleOpponent_A = id; - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); + TRAINER_BATTLE_PARAM.opponentA = id; + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentA, 0); if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < FRONTIER_STAGES_PER_CHALLENGE) - gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A; + gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = TRAINER_BATTLE_PARAM.opponentA; } } } @@ -1549,20 +1549,20 @@ static bool8 IsFrontierTrainerFemale(u16 trainerId) void FillFrontierTrainerParty(u8 monsCount) { ZeroEnemyPartyMons(); - FillTrainerParty(gTrainerBattleOpponent_A, 0, monsCount); + FillTrainerParty(TRAINER_BATTLE_PARAM.opponentA, 0, monsCount); } void FillFrontierTrainersParties(u8 monsCount) { ZeroEnemyPartyMons(); - FillTrainerParty(gTrainerBattleOpponent_A, 0, monsCount); - FillTrainerParty(gTrainerBattleOpponent_B, 3, monsCount); + FillTrainerParty(TRAINER_BATTLE_PARAM.opponentA, 0, monsCount); + FillTrainerParty(TRAINER_BATTLE_PARAM.opponentB, 3, monsCount); } static void FillTentTrainerParty(u8 monsCount) { ZeroEnemyPartyMons(); - FillTentTrainerParty_(gTrainerBattleOpponent_A, 0, monsCount); + FillTentTrainerParty_(TRAINER_BATTLE_PARAM.opponentA, 0, monsCount); } void CreateFacilityMon(const struct TrainerMon *fmon, u16 level, u8 fixedIV, u32 otID, u32 flags, struct Pokemon *dst) @@ -1667,7 +1667,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) { // Normal battle frontier trainer. fixedIV = GetFrontierTrainerFixedIvs(trainerId); - monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet; + monSet = gFacilityTrainers[TRAINER_BATTLE_PARAM.opponentA].monSet; } else if (trainerId == TRAINER_EREADER) { @@ -1789,9 +1789,9 @@ static void FillFactoryTrainerParty(void) { ZeroEnemyPartyMons(); if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) - FillFactoryFrontierTrainerParty(gTrainerBattleOpponent_A, 0); + FillFactoryFrontierTrainerParty(TRAINER_BATTLE_PARAM.opponentA, 0); else - FillFactoryTentTrainerParty(gTrainerBattleOpponent_A, 0); + FillFactoryTentTrainerParty(TRAINER_BATTLE_PARAM.opponentA, 0); } static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId) @@ -1886,9 +1886,9 @@ static void GetOpponentIntroSpeech(void) SetFacilityPtrsGetLevel(); if (gSpecialVar_0x8005) - trainerId = gTrainerBattleOpponent_B; + trainerId = TRAINER_BATTLE_PARAM.opponentB; else - trainerId = gTrainerBattleOpponent_A; + trainerId = TRAINER_BATTLE_PARAM.opponentA; #if FREE_BATTLE_TOWER_E_READER == FALSE if (trainerId == TRAINER_EREADER) @@ -2011,7 +2011,7 @@ void DoSpecialTrainerBattle(void) for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.ereaderTrainer.party); i++) CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i]); gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_EREADER_TRAINER; - gTrainerBattleOpponent_A = 0; + TRAINER_BATTLE_PARAM.opponentA = 0; CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_E_READER)); @@ -2021,7 +2021,7 @@ void DoSpecialTrainerBattle(void) gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOME; if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES) gBattleTypeFlags |= BATTLE_TYPE_DOUBLE; - if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_FRONTIER_BRAIN) FillFrontierTrainerParty(DOME_BATTLE_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); CreateTask_PlayMapChosenOrBattleBGM(0); @@ -2086,7 +2086,7 @@ void DoSpecialTrainerBattle(void) } else if (gSpecialVar_0x8005 & MULTI_BATTLE_2_VS_1) // Player + AI against one trainer { - gTrainerBattleOpponent_B = 0xFFFF; + TRAINER_BATTLE_PARAM.opponentB = 0xFFFF; gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER; } else // MULTI_BATTLE_2_VS_2 @@ -2607,10 +2607,10 @@ static void LoadLinkMultiOpponentsData(void) { ResetBlockReceivedFlags(); memcpy(&gSaveBlock2Ptr->frontier.trainerIds, gBlockRecvBuffer, sizeof(gSaveBlock2Ptr->frontier.trainerIds)); - gTrainerBattleOpponent_A = gSaveBlock2Ptr->frontier.trainerIds[battleNum * 2]; - gTrainerBattleOpponent_B = gSaveBlock2Ptr->frontier.trainerIds[battleNum * 2 + 1]; - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_B, 1); + TRAINER_BATTLE_PARAM.opponentA = gSaveBlock2Ptr->frontier.trainerIds[battleNum * 2]; + TRAINER_BATTLE_PARAM.opponentB = gSaveBlock2Ptr->frontier.trainerIds[battleNum * 2 + 1]; + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentA, 0); + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentB, 1); if (gReceivedRemoteLinkPlayers && gWirelessCommType == 0) gSpecialVar_Result = 4; else @@ -2652,10 +2652,10 @@ static void SetTowerInterviewData(void) if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_SINGLES) return; - GetFrontierTrainerName(text, gTrainerBattleOpponent_A); + GetFrontierTrainerName(text, TRAINER_BATTLE_PARAM.opponentA); StripExtCtrlCodes(text); StringCopy(gSaveBlock2Ptr->frontier.towerInterview.opponentName, text); - GetBattleTowerTrainerLanguage(&gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage, gTrainerBattleOpponent_A); + GetBattleTowerTrainerLanguage(&gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage, TRAINER_BATTLE_PARAM.opponentA); gSaveBlock2Ptr->frontier.towerInterview.opponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[1]], MON_DATA_SPECIES, NULL); gSaveBlock2Ptr->frontier.towerInterview.playerSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[0]], MON_DATA_SPECIES, NULL); for (i = 0; i < VANILLA_POKEMON_NAME_LENGTH + 1; i++) @@ -3418,10 +3418,10 @@ static void SetNextBattleTentOpponent(void) } } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum); - gTrainerBattleOpponent_A = trainerId; - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); + TRAINER_BATTLE_PARAM.opponentA = trainerId; + SetBattleFacilityTrainerGfxId(TRAINER_BATTLE_PARAM.opponentA, 0); if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < TENT_STAGES_PER_CHALLENGE) - gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A; + gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = TRAINER_BATTLE_PARAM.opponentA; } static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) @@ -3435,7 +3435,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) u32 otID = 0; u16 monId; - monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet; + monSet = gFacilityTrainers[TRAINER_BATTLE_PARAM.opponentA].monSet; bfMonCount = 0; monId = monSet[bfMonCount]; diff --git a/src/battle_transition.c b/src/battle_transition.c index d6fc75066e..bc993cc61f 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -2261,7 +2261,7 @@ static bool8 Mugshot_SetGfx(struct Task *task) s16 i, j; u16 *tilemap, *tileset; const u16 *mugshotsMap = sMugshotsTilemap; - u8 mugshotColor = GetTrainerMugshotColorFromId(gTrainerBattleOpponent_A); + u8 mugshotColor = GetTrainerMugshotColorFromId(TRAINER_BATTLE_PARAM.opponentA); GetBg0TilesDst(&tilemap, &tileset); CpuSet(sEliteFour_Tileset, tileset, 0xF0); @@ -2520,7 +2520,7 @@ static void Mugshots_CreateTrainerPics(struct Task *task) { struct Sprite *opponentSprite, *playerSprite; - u8 trainerPicId = GetTrainerPicFromId(gTrainerBattleOpponent_A); + u8 trainerPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentA); s16 opponentRotationScales = 0; gReservedSpritePaletteCount = 10; diff --git a/src/battle_tv.c b/src/battle_tv.c index 2dd171a35a..bdf3359b84 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -934,7 +934,7 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) // Various cases to add/remove points if (GetMoveRecoil(arg2) > 0) baseFromEffect++; // Recoil moves - if (gMovesInfo[arg2].effect == EFFECT_RAPID_SPIN) + if (GetMoveEffect(arg2) == EFFECT_RAPID_SPIN) baseFromEffect++; if (MoveHasAdditionalEffect(arg2, MOVE_EFFECT_SP_ATK_MINUS_2) || MoveHasAdditionalEffect(arg2, MOVE_EFFECT_ATK_DEF_DOWN)) baseFromEffect += 2; // Overheat, Superpower, etc. @@ -1261,7 +1261,7 @@ static void TrySetBattleSeminarShow(void) damageCalcData.updateFlags = FALSE; gBattleStruct->moveDamage[gBattlerTarget] = CalculateMoveDamage(&damageCalcData, powerOverride); dmgByMove[i] = gBattleStruct->moveDamage[gBattlerTarget]; - if (dmgByMove[i] == 0 && MoveResultHasEffect(gBattlerTarget)) + if (dmgByMove[i] == 0 && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) dmgByMove[i] = 1; } } diff --git a/src/battle_util.c b/src/battle_util.c index 97a2e0aa30..3fadae9c00 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9,6 +9,7 @@ #include "battle_setup.h" #include "battle_z_move.h" #include "battle_gimmick.h" +#include "generational_changes.h" #include "party_menu.h" #include "pokemon.h" #include "international_string_util.h" @@ -345,7 +346,7 @@ void HandleAction_UseMove(void) for (battler = 0; battler < gBattlersCount; battler++) { ability = GetBattlerAbility(battler); - if ((B_REDIRECT_ABILITY_ALLIES >= GEN_4 || !IsAlly(gBattlerAttacker, battler)) + if ((B_REDIRECT_ABILITY_ALLIES >= GEN_4 || !IsBattlerAlly(gBattlerAttacker, battler)) && battler != gBattlerAttacker && gBattleStruct->moveTarget[gBattlerAttacker] != battler && ((ability == ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) @@ -382,7 +383,7 @@ void HandleAction_UseMove(void) if (!IsBattlerAlive(gBattlerTarget) && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) { - gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); + gBattlerTarget = GetPartnerBattler(gBattlerTarget); } } else @@ -405,7 +406,7 @@ void HandleAction_UseMove(void) if (gAbsentBattlerFlags & (1u << gBattlerTarget) && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) { - gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); + gBattlerTarget = GetPartnerBattler(gBattlerTarget); } } else if (moveTarget == MOVE_TARGET_ALLY) @@ -432,7 +433,7 @@ void HandleAction_UseMove(void) && moveTarget != MOVE_TARGET_OPPONENTS_FIELD && (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget))) { - gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); + gBattlerTarget = GetPartnerBattler(gBattlerTarget); } } @@ -457,7 +458,7 @@ void HandleAction_UseMove(void) } } - if ((GetBattlerSide(gBattlerAttacker) == GetBattlerSide(gBattlerTarget)) + if ((IsBattlerAlly(gBattlerAttacker, gBattlerTarget)) && (!IsBattlerAlive(gBattlerTarget) || gProtectStructs[BATTLE_PARTNER(gBattlerAttacker)].usedAllySwitch)) { gBattlescriptCurrInstr = BattleScript_FailedFromAtkCanceler; @@ -1134,7 +1135,7 @@ void PrepareStringBattle(u16 stringId, u32 battler) } if ((stringId == STRINGID_ITDOESNTAFFECT || stringId == STRINGID_PKMNWASNTAFFECTED || stringId == STRINGID_PKMNUNAFFECTED)) - TryInitalizeTrainerSlideEnemyMonUnaffected(gBattlerTarget); + TryInitializeTrainerSlideEnemyMonUnaffected(gBattlerTarget); BtlController_EmitPrintString(battler, BUFFER_A, stringId); MarkBattlerForControllerExec(battler); @@ -1229,7 +1230,7 @@ bool32 IsBelchPreventingMove(u32 battler, u32 move) } // Dynamax bypasses all selection prevention except Taunt and Assault Vest. -#define DYNAMAX_BYPASS_CHECK (!IsGimmickSelected(gBattlerAttacker, GIMMICK_DYNAMAX) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_DYNAMAX) +#define DYNAMAX_BYPASS_CHECK (!IsGimmickSelected(battler, GIMMICK_DYNAMAX) && GetActiveGimmick(battler) != GIMMICK_DYNAMAX) u32 TrySetCantSelectMoveBattleScript(u32 battler) { @@ -1240,7 +1241,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) u16 *choicedMove = &gBattleStruct->choicedMove[battler]; u32 moveEffect = GetMoveEffect(move); - if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[battler].disabledMove == move && move != MOVE_NONE) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && gDisableStructs[battler].disabledMove == move && move != MOVE_NONE) { gBattleScripting.battler = battler; gCurrentMove = move; @@ -1256,7 +1257,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && move == gLastMoves[battler] && move != MOVE_STRUGGLE && (gBattleMons[battler].status2 & STATUS2_TORMENT)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && move == gLastMoves[battler] && move != MOVE_STRUGGLE && (gBattleMons[battler].status2 & STATUS2_TORMENT)) { CancelMultiTurnMoves(battler); if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1271,9 +1272,9 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[battler].tauntTimer != 0 && IsBattleMoveStatus(move)) + if (GetActiveGimmick(battler) != GIMMICK_Z_MOVE && gDisableStructs[battler].tauntTimer != 0 && IsBattleMoveStatus(move)) { - if ((GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX)) + if ((GetActiveGimmick(battler) == GIMMICK_DYNAMAX)) gCurrentMove = MOVE_MAX_GUARD; else gCurrentMove = move; @@ -1289,7 +1290,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[battler].throatChopTimer != 0 && IsSoundMove(move)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && gDisableStructs[battler].throatChopTimer != 0 && IsSoundMove(move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1304,7 +1305,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && GetImprisonedMovesCount(battler, move)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && GetImprisonedMovesCount(battler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1319,7 +1320,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && IsGravityPreventingMove(move)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && IsGravityPreventingMove(move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1334,7 +1335,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && IsHealBlockPreventingMove(battler, move)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && IsHealBlockPreventingMove(battler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1349,7 +1350,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && IsBelchPreventingMove(battler, move)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && IsBelchPreventingMove(battler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1413,7 +1414,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } else if (holdEffect == HOLD_EFFECT_ASSAULT_VEST && IsBattleMoveStatus(move) && moveEffect != EFFECT_ME_FIRST) { - if ((GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX)) + if ((GetActiveGimmick(battler) == GIMMICK_DYNAMAX)) gCurrentMove = MOVE_MAX_GUARD; else gCurrentMove = move; @@ -1655,7 +1656,7 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { if (terrainFlag & STATUS_FIELD_GRASSY_TERRAIN) BattleScriptExecute(BattleScript_GrassyTerrainHeals); - if (gFieldTimers.terrainTimer > 0 && --gFieldTimers.terrainTimer == 0) + if (gFieldTimers.terrainTimer == gBattleTurnCounter) { gFieldStatuses &= ~terrainFlag; TryToRevertMimicryAndFlags(); @@ -1737,7 +1738,7 @@ u8 DoFieldEndTurnEffects(void) SwapTurnOrder(i, j); } } - + gBattleTurnCounter++; gBattleStruct->turnCountersTracker++; gBattleStruct->turnSideTracker = 0; // fall through @@ -1748,7 +1749,7 @@ u8 DoFieldEndTurnEffects(void) gBattlerAttacker = gSideTimers[side].reflectBattlerId; if (gSideStatuses[side] & SIDE_STATUS_REFLECT) { - if (--gSideTimers[side].reflectTimer == 0) + if (gSideTimers[side].reflectTimer == gBattleTurnCounter) { gSideStatuses[side] &= ~SIDE_STATUS_REFLECT; BattleScriptExecute(BattleScript_SideStatusWoreOff); @@ -1773,7 +1774,7 @@ u8 DoFieldEndTurnEffects(void) gBattlerAttacker = gSideTimers[side].lightscreenBattlerId; if (gSideStatuses[side] & SIDE_STATUS_LIGHTSCREEN) { - if (--gSideTimers[side].lightscreenTimer == 0) + if (gSideTimers[side].lightscreenTimer == gBattleTurnCounter) { gSideStatuses[side] &= ~SIDE_STATUS_LIGHTSCREEN; BattleScriptExecute(BattleScript_SideStatusWoreOff); @@ -1799,7 +1800,7 @@ u8 DoFieldEndTurnEffects(void) gBattlerAttacker = gSideTimers[side].auroraVeilBattlerId; if (gSideStatuses[side] & SIDE_STATUS_AURORA_VEIL) { - if (--gSideTimers[side].auroraVeilTimer == 0) + if (gSideTimers[side].auroraVeilTimer == gBattleTurnCounter) { gSideStatuses[side] &= ~SIDE_STATUS_AURORA_VEIL; BattleScriptExecute(BattleScript_SideStatusWoreOff); @@ -1823,7 +1824,7 @@ u8 DoFieldEndTurnEffects(void) { side = gBattleStruct->turnSideTracker; gBattlerAttacker = gSideTimers[side].mistBattlerId; - if (gSideTimers[side].mistTimer != 0 && --gSideTimers[side].mistTimer == 0) + if (gSideTimers[side].mistTimer == gBattleTurnCounter) { gSideStatuses[side] &= ~SIDE_STATUS_MIST; BattleScriptExecute(BattleScript_SideStatusWoreOff); @@ -1848,7 +1849,7 @@ u8 DoFieldEndTurnEffects(void) gBattlerAttacker = gSideTimers[side].safeguardBattlerId; if (gSideStatuses[side] & SIDE_STATUS_SAFEGUARD) { - if (--gSideTimers[side].safeguardTimer == 0) + if (gSideTimers[side].safeguardTimer == gBattleTurnCounter) { gSideStatuses[side] &= ~SIDE_STATUS_SAFEGUARD; BattleScriptExecute(BattleScript_SafeguardEnds); @@ -1872,7 +1873,7 @@ u8 DoFieldEndTurnEffects(void) gBattlerAttacker = gSideTimers[side].luckyChantBattlerId; if (gSideStatuses[side] & SIDE_STATUS_LUCKY_CHANT) { - if (--gSideTimers[side].luckyChantTimer == 0) + if (gSideTimers[side].luckyChantTimer == gBattleTurnCounter) { gSideStatuses[side] &= ~SIDE_STATUS_LUCKY_CHANT; BattleScriptExecute(BattleScript_LuckyChantEnds); @@ -1896,7 +1897,7 @@ u8 DoFieldEndTurnEffects(void) gBattlerAttacker = gSideTimers[side].tailwindBattlerId; if (gSideStatuses[side] & SIDE_STATUS_TAILWIND) { - if (gSideTimers[side].tailwindTimer > 0 && --gSideTimers[side].tailwindTimer == 0) + if (gSideTimers[side].tailwindTimer == gBattleTurnCounter) { gSideStatuses[side] &= ~SIDE_STATUS_TAILWIND; BattleScriptExecute(BattleScript_TailwindEnds); @@ -1917,9 +1918,7 @@ u8 DoFieldEndTurnEffects(void) while (gBattleStruct->turnSideTracker < gBattlersCount) { u32 battler = gBattlerByTurnOrder[gBattleStruct->turnSideTracker]; - if (gWishFutureKnock.wishCounter[battler] != 0 - && --gWishFutureKnock.wishCounter[battler] == 0 - && IsBattlerAlive(battler)) + if (gWishFutureKnock.wishCounter[battler] == gBattleTurnCounter && IsBattlerAlive(battler)) { gBattlerTarget = battler; BattleScriptExecute(BattleScript_WishComesTrue); @@ -1943,7 +1942,7 @@ u8 DoFieldEndTurnEffects(void) while (gBattleStruct->turnSideTracker < 2) { side = gBattleStruct->turnSideTracker; - if (gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES && --gSideTimers[side].damageNonTypesTimer == 0) + if (gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES && gSideTimers[side].damageNonTypesTimer == gBattleTurnCounter) { // There is no in-game message when this side status ends. gSideStatuses[side] &= ~SIDE_STATUS_DAMAGE_NON_TYPES; @@ -1960,7 +1959,7 @@ u8 DoFieldEndTurnEffects(void) } break; case ENDTURN_TRICK_ROOM: - if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer > 0 && --gFieldTimers.trickRoomTimer == 0) + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer == gBattleTurnCounter) { gFieldStatuses &= ~STATUS_FIELD_TRICK_ROOM; BattleScriptExecute(BattleScript_TrickRoomEnds); @@ -1969,7 +1968,7 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_WONDER_ROOM: - if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM && gFieldTimers.wonderRoomTimer > 0 && --gFieldTimers.wonderRoomTimer == 0) + if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM && gFieldTimers.wonderRoomTimer == gBattleTurnCounter) { gFieldStatuses &= ~STATUS_FIELD_WONDER_ROOM; BattleScriptExecute(BattleScript_WonderRoomEnds); @@ -1978,7 +1977,7 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_MAGIC_ROOM: - if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM && gFieldTimers.magicRoomTimer > 0 && --gFieldTimers.magicRoomTimer == 0) + if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM && gFieldTimers.magicRoomTimer == gBattleTurnCounter) { gFieldStatuses &= ~STATUS_FIELD_MAGIC_ROOM; BattleScriptExecute(BattleScript_MagicRoomEnds); @@ -2003,7 +2002,7 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_WATER_SPORT: - if (gFieldStatuses & STATUS_FIELD_WATERSPORT && --gFieldTimers.waterSportTimer == 0) + if (gFieldStatuses & STATUS_FIELD_WATERSPORT && gFieldTimers.waterSportTimer == gBattleTurnCounter) { gFieldStatuses &= ~STATUS_FIELD_WATERSPORT; BattleScriptExecute(BattleScript_WaterSportEnds); @@ -2012,7 +2011,7 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_MUD_SPORT: - if (gFieldStatuses & STATUS_FIELD_MUDSPORT && --gFieldTimers.mudSportTimer == 0) + if (gFieldStatuses & STATUS_FIELD_MUDSPORT && gFieldTimers.mudSportTimer == gBattleTurnCounter) { gFieldStatuses &= ~STATUS_FIELD_MUDSPORT; BattleScriptExecute(BattleScript_MudSportEnds); @@ -2021,7 +2020,7 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_GRAVITY: - if (gFieldStatuses & STATUS_FIELD_GRAVITY && --gFieldTimers.gravityTimer == 0) + if (gFieldStatuses & STATUS_FIELD_GRAVITY && gFieldTimers.gravityTimer == gBattleTurnCounter) { gFieldStatuses &= ~STATUS_FIELD_GRAVITY; BattleScriptExecute(BattleScript_GravityEnds); @@ -2034,7 +2033,7 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_FAIRY_LOCK: - if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK && --gFieldTimers.fairyLockTimer == 0) + if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK && gFieldTimers.fairyLockTimer == gBattleTurnCounter) { gFieldStatuses &= ~STATUS_FIELD_FAIRY_LOCK; } @@ -2067,7 +2066,7 @@ u8 DoFieldEndTurnEffects(void) break; } - if (gSideTimers[side].rainbowTimer > 0 && --gSideTimers[side].rainbowTimer == 0) + if (gSideTimers[side].rainbowTimer == gBattleTurnCounter) { gSideStatuses[side] &= ~SIDE_STATUS_RAINBOW; BattleScriptExecute(BattleScript_TheRainbowDisappeared); @@ -2097,7 +2096,7 @@ u8 DoFieldEndTurnEffects(void) break; } - if (gSideTimers[side].seaOfFireTimer > 0 && --gSideTimers[side].seaOfFireTimer == 0) + if (gSideTimers[side].seaOfFireTimer == gBattleTurnCounter) { gSideStatuses[side] &= ~SIDE_STATUS_SEA_OF_FIRE; BattleScriptExecute(BattleScript_TheSeaOfFireDisappeared); @@ -2127,7 +2126,7 @@ u8 DoFieldEndTurnEffects(void) break; } - if (gSideTimers[side].swampTimer > 0 && --gSideTimers[side].swampTimer == 0) + if (gSideTimers[side].swampTimer == gBattleTurnCounter) { gSideStatuses[side] &= ~SIDE_STATUS_SWAMP; BattleScriptExecute(BattleScript_TheSwampDisappeared); @@ -2186,7 +2185,6 @@ enum ENDTURN_ITEMS2, ENDTURN_ORBS, ENDTURN_ROOST, - ENDTURN_ELECTRIFY, ENDTURN_POWDER, ENDTURN_THROAT_CHOP, ENDTURN_SLOW_START, @@ -2689,7 +2687,7 @@ u8 DoBattlerEndTurnEffects(void) if (!(gStatuses3[battler] & STATUS3_YAWN) && !(gBattleMons[battler].status1 & STATUS1_ANY) && battlerAbility != ABILITY_VITAL_SPIRIT && battlerAbility != ABILITY_INSOMNIA && !UproarWakeUpCheck(battler) - && !IsLeafGuardProtected(battler)) + && !IsLeafGuardProtected(battler, battlerAbility)) { CancelMultiTurnMoves(battler); gEffectBattler = gBattlerTarget = battler; @@ -2787,10 +2785,6 @@ u8 DoBattlerEndTurnEffects(void) gDisableStructs[battler].roostActive = FALSE; gBattleStruct->turnEffectsTracker++; break; - case ENDTURN_ELECTRIFY: - gStatuses4[battler] &= ~STATUS4_ELECTRIFIED; - gBattleStruct->turnEffectsTracker++; - break; case ENDTURN_POWDER: gBattleMons[battler].status2 &= ~STATUS2_POWDER; gBattleStruct->turnEffectsTracker++; @@ -2873,7 +2867,7 @@ u8 DoBattlerEndTurnEffects(void) case ENDTURN_GMAX_MOVE_RESIDUAL_DAMAGE: { u32 side = GetBattlerSide(gBattlerAttacker); - if (gSideTimers[side].damageNonTypesTimer + if (gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES && !IS_BATTLER_OF_TYPE(gBattlerAttacker, gSideTimers[side].damageNonTypesType) && IsBattlerAlive(gBattlerAttacker) && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) @@ -2926,14 +2920,12 @@ bool32 HandleWishPerishSongOnTurnEnd(void) gBattleStruct->wishPerishSongBattlerId++; - if (gWishFutureKnock.futureSightCounter[battler] != 0 - && --gWishFutureKnock.futureSightCounter[battler] == 0 - && !(gAbsentBattlerFlags & (1u << battler))) + if (gWishFutureKnock.futureSightCounter[battler] == gBattleTurnCounter && !(gAbsentBattlerFlags & (1u << battler))) { struct Pokemon *party; - if (gWishFutureKnock.futureSightCounter[battler] == 0 - && gWishFutureKnock.futureSightCounter[BATTLE_PARTNER(battler)] == 0) + if (gWishFutureKnock.futureSightCounter[battler] == gBattleTurnCounter + && gWishFutureKnock.futureSightCounter[BATTLE_PARTNER(battler)] <= gBattleTurnCounter) { gSideStatuses[GetBattlerSide(battler)] &= ~SIDE_STATUS_FUTUREATTACK; } @@ -3139,6 +3131,20 @@ static inline bool32 TryFormChangeBeforeMove(void) return TRUE; } +static inline bool32 TryActivatePowderStatus(u32 move) +{ + u32 partnerMove = gBattleMons[BATTLE_PARTNER(gBattlerAttacker)].moves[gBattleStruct->chosenMovePositions[BATTLE_PARTNER(gBattlerAttacker)]]; + if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_POWDER)) + return FALSE; + if (GetBattleMoveType(move) == TYPE_FIRE && !gBattleStruct->pledgeMove) + return TRUE; + if (move == MOVE_FIRE_PLEDGE && partnerMove == MOVE_GRASS_PLEDGE) + return TRUE; + if (move == MOVE_GRASS_PLEDGE && partnerMove == MOVE_FIRE_PLEDGE && gBattleStruct->pledgeMove) + return TRUE; + return FALSE; +} + void SetAtkCancellerForCalledMove(void) { gBattleStruct->atkCancellerTracker = CANCELLER_HEAL_BLOCKED; @@ -3440,7 +3446,7 @@ static void CancellerConfused(u32 *effect) if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION) { // confusion dmg - if (RandomPercentage(RNG_CONFUSION, (B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 ? 33 : 50))) + if (RandomPercentage(RNG_CONFUSION, (GetGenConfig(GEN_CONFIG_CONFUSION_SELF_DMG_CHANCE) >= GEN_7 ? 33 : 50))) { gBattleCommunication[MULTISTRING_CHOOSER] = TRUE; gBattlerTarget = gBattlerAttacker; @@ -3554,7 +3560,7 @@ static void CancellerWeatherPrimal(u32 *effect) if (HasWeatherEffect() && GetMovePower(gCurrentMove) > 0) { u32 moveType = GetBattleMoveType(gCurrentMove); - if (moveType == TYPE_FIRE && (gBattleWeather & B_WEATHER_RAIN_PRIMAL)) + if (moveType == TYPE_FIRE && (gBattleWeather & B_WEATHER_RAIN_PRIMAL) && (B_POWDER_RAIN >= GEN_7 || !TryActivatePowderStatus(gCurrentMove))) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PRIMAL_WEATHER_FIZZLED_BY_RAIN; *effect = 1; @@ -3608,24 +3614,17 @@ static void CancellerPowderMove(u32 *effect) static void CancellerPowderStatus(u32 *effect) { - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_POWDER) + if (TryActivatePowderStatus(gCurrentMove)) { - u32 partnerMove = gBattleMons[BATTLE_PARTNER(gBattlerAttacker)].moves[gBattleStruct->chosenMovePositions[BATTLE_PARTNER(gBattlerAttacker)]]; - if ((GetBattleMoveType(gCurrentMove) == TYPE_FIRE && !gBattleStruct->pledgeMove) - || (gCurrentMove == MOVE_FIRE_PLEDGE && partnerMove == MOVE_GRASS_PLEDGE) - || (gCurrentMove == MOVE_GRASS_PLEDGE && partnerMove == MOVE_FIRE_PLEDGE && gBattleStruct->pledgeMove)) - { - gProtectStructs[gBattlerAttacker].powderSelfDmg = TRUE; - if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD - && (B_POWDER_RAIN < GEN_7 || !IsBattlerWeatherAffected(gBattlerAttacker, B_WEATHER_RAIN_PRIMAL))) - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; + gProtectStructs[gBattlerAttacker].powderSelfDmg = TRUE; + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) + gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; - if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE - || HasTrainerUsedGimmick(gBattlerAttacker, GIMMICK_Z_MOVE)) - gBattlescriptCurrInstr = BattleScript_MoveUsedPowder; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; - } + if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE + || HasTrainerUsedGimmick(gBattlerAttacker, GIMMICK_Z_MOVE)) + gBattlescriptCurrInstr = BattleScript_MoveUsedPowder; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + *effect = 1; } } @@ -4053,7 +4052,7 @@ bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, bool32 viaAbilit return FALSE; } -static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u8 *timer) +static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u16 *timer) { if ((!(gFieldStatuses & statusFlag) && (!gBattleStruct->isSkyBattle))) { @@ -4062,9 +4061,9 @@ static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u8 *timer) gDisableStructs[battler].terrainAbilityDone = FALSE; if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER) - *timer = 8; + *timer = gBattleTurnCounter + 8; else - *timer = 5; + *timer = gBattleTurnCounter + 5; gBattleScripting.battler = battler; return TRUE; @@ -4226,67 +4225,87 @@ static void ChooseStatBoostAnimation(u32 battler) #undef ANIM_STAT_ACC #undef ANIM_STAT_EVASION -u32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef) +bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef, enum AbilityEffectOptions option) { - enum MoveBlocked effect = MOVE_BLOCKED_BY_NO_ABILITY; + const u8 *battleScriptBlocksMove = NULL; + u32 atkPriority = AI_DATA->aiCalcInProgress ? GetBattleMovePriority(battlerAtk, move) : GetChosenMovePriority(battlerAtk); + u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); + u32 battlerAbility = battlerDef; switch (abilityDef) { case ABILITY_SOUNDPROOF: - if (IsSoundMove(move) && !(GetBattlerMoveTargetType(battlerAtk, move) & MOVE_TARGET_USER)) - effect = MOVE_BLOCKED_BY_SOUNDPROOF_OR_BULLETPROOF; + if (IsSoundMove(move) && !(moveTarget & MOVE_TARGET_USER)) + { + if (gBattleMons[battlerAtk].status2 & STATUS2_MULTIPLETURNS) + gHitMarker |= HITMARKER_NO_PPDEDUCT; + battleScriptBlocksMove = BattleScript_SoundproofProtected; + } break; case ABILITY_BULLETPROOF: if (IsBallisticMove(move)) - effect = MOVE_BLOCKED_BY_SOUNDPROOF_OR_BULLETPROOF; + { + if (gBattleMons[battlerAtk].status2 & STATUS2_MULTIPLETURNS) + gHitMarker |= HITMARKER_NO_PPDEDUCT; + battleScriptBlocksMove = BattleScript_SoundproofProtected; + } break; case ABILITY_DAZZLING: case ABILITY_QUEENLY_MAJESTY: case ABILITY_ARMOR_TAIL: - if (GetBattlerSide(battlerAtk) != GetBattlerSide(battlerDef)) + if (atkPriority > 0 && !IsBattlerAlly(battlerAtk, battlerDef)) { - u32 priority = AI_DATA->aiCalcInProgress ? GetBattleMovePriority(battlerAtk, move) : GetChosenMovePriority(battlerAtk); - if (priority > 0) - effect = MOVE_BLOCKED_BY_DAZZLING; + if (gBattleMons[battlerAtk].status2 & STATUS2_MULTIPLETURNS) + gHitMarker |= HITMARKER_NO_PPDEDUCT; + battleScriptBlocksMove = BattleScript_DazzlingProtected; } break; case ABILITY_GOOD_AS_GOLD: if (IsBattleMoveStatus(move)) { - u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); if (!(moveTarget & MOVE_TARGET_OPPONENTS_FIELD) && !(moveTarget & MOVE_TARGET_ALL_BATTLERS)) - effect = MOVE_BLOCKED_BY_GOOD_AS_GOLD; + battleScriptBlocksMove = BattleScript_GoodAsGoldActivates; } break; } - if (!effect) - effect = CanPartnerAbilityBlockMove(battlerAtk, battlerDef, move, GetBattlerAbility(BATTLE_PARTNER(battlerDef))); - return effect; -} - -u32 CanPartnerAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef) -{ - switch (abilityDef) + // Check def partner ability + if (IsDoubleBattle() && IsBattlerAlive(BATTLE_PARTNER(battlerDef))) { - case ABILITY_DAZZLING: - case ABILITY_QUEENLY_MAJESTY: - case ABILITY_ARMOR_TAIL: - if (GetBattlerSide(battlerAtk) != GetBattlerSide(battlerDef)) + switch (GetBattlerAbility(BATTLE_PARTNER(battlerDef))) { - s32 priority = AI_DATA->aiCalcInProgress ? GetBattleMovePriority(battlerAtk, move) : GetChosenMovePriority(battlerAtk); - if (priority > 0) - return MOVE_BLOCKED_BY_PARTNER_DAZZLING; + case ABILITY_DAZZLING: + case ABILITY_QUEENLY_MAJESTY: + case ABILITY_ARMOR_TAIL: + if (atkPriority > 0 && !IsBattlerAlly(battlerAtk, BATTLE_PARTNER(battlerDef))) + { + if (gBattleMons[battlerAtk].status2 & STATUS2_MULTIPLETURNS) + gHitMarker |= HITMARKER_NO_PPDEDUCT; + battlerAbility = BATTLE_PARTNER(battlerDef); + battleScriptBlocksMove = BattleScript_DazzlingProtected; + } + break; } - break; } - return MOVE_BLOCKED_BY_NO_ABILITY; + + if (battleScriptBlocksMove == NULL) + return FALSE; + + if (option == ABILITY_RUN_SCRIPT) + { + gBattleScripting.battler = gBattlerAbility = battlerAbility; + gBattlescriptCurrInstr = battleScriptBlocksMove; + } + return TRUE; } -u32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 move, u32 moveType) +bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 move, u32 moveType, enum AbilityEffectOptions option) { enum MoveAbsorbed effect = MOVE_ABSORBED_BY_NO_ABILITY; + const u8 *battleScript = NULL; + u32 statId = 0; + u32 statAmount = 1; switch (abilityDef) { @@ -4308,27 +4327,46 @@ u32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 mov break; case ABILITY_MOTOR_DRIVE: if (moveType == TYPE_ELECTRIC && GetMoveTarget(move) != MOVE_TARGET_ALL_BATTLERS) // Potential bug in singles (might be solved with simu hp reudction) + { effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + statId = STAT_SPEED; + } break; case ABILITY_LIGHTNING_ROD: if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_ELECTRIC && GetMoveTarget(move) != MOVE_TARGET_ALL_BATTLERS) // Potential bug in singles (might be solved with simu hp reudction) + { effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + statId = STAT_SPATK; + } break; case ABILITY_STORM_DRAIN: if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_WATER) + { effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + statId = STAT_SPATK; + } break; case ABILITY_SAP_SIPPER: if (moveType == TYPE_GRASS) + { effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + statId = STAT_ATK; + } break; case ABILITY_WELL_BAKED_BODY: if (moveType == TYPE_FIRE) + { effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + statAmount = 2; + statId = STAT_DEF; + } break; case ABILITY_WIND_RIDER: if (IsWindMove(move) && !(GetBattlerMoveTargetType(battlerAtk, move) & MOVE_TARGET_USER)) + { effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + statId = STAT_ATK; + } break; case ABILITY_FLASH_FIRE: if (moveType == TYPE_FIRE && (B_FLASH_FIRE_FROZEN >= GEN_5 || !(gBattleMons[battlerDef].status1 & STATUS1_FREEZE))) @@ -4336,10 +4374,88 @@ u32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 mov break; } + if (effect == MOVE_ABSORBED_BY_NO_ABILITY || option == ABILITY_CHECK_TRIGGER) + return effect; + + switch (effect) + { + default: + return FALSE; + case MOVE_ABSORBED_BY_DRAIN_HP_ABILITY: + gBattleStruct->pledgeMove = FALSE; + if (IsBattlerAtMaxHp(battlerDef) || (B_HEAL_BLOCKING >= GEN_5 && gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK)) + { + if ((gProtectStructs[battlerAtk].notFirstStrike)) + battleScript = BattleScript_MonMadeMoveUseless; + else + battleScript = BattleScript_MonMadeMoveUseless_PPLoss; + } + else + { + if (gProtectStructs[battlerAtk].notFirstStrike) + battleScript = BattleScript_MoveHPDrain; + else + battleScript = BattleScript_MoveHPDrain_PPLoss; + + gBattleStruct->moveDamage[battlerDef] = GetNonDynamaxMaxHP(battlerDef) / 4; + if (gBattleStruct->moveDamage[battlerDef] == 0) + gBattleStruct->moveDamage[battlerDef] = 1; + gBattleStruct->moveDamage[battlerDef] *= -1; + } + break; + case MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY: + gBattleStruct->pledgeMove = FALSE; + if (!CompareStat(battlerDef, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + if ((gProtectStructs[battlerAtk].notFirstStrike)) + battleScript = BattleScript_MonMadeMoveUseless; + else + battleScript = BattleScript_MonMadeMoveUseless_PPLoss; + } + else + { + if (gProtectStructs[battlerAtk].notFirstStrike) + battleScript = BattleScript_MoveStatDrain; + else + battleScript = BattleScript_MoveStatDrain_PPLoss; + + SET_STATCHANGER(statId, statAmount, FALSE); + if (B_ABSORBING_ABILITY_STRING < GEN_5) + PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); + } + break; + case MOVE_ABSORBED_BY_BOOST_FLASH_FIRE: + gBattleStruct->pledgeMove = FALSE; + if (!gDisableStructs[battlerDef].flashFireBoosted) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_BOOST; + if (gProtectStructs[battlerAtk].notFirstStrike) + battleScript = BattleScript_FlashFireBoost; + else + battleScript = BattleScript_FlashFireBoost_PPLoss; + gDisableStructs[battlerDef].flashFireBoosted = TRUE; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_NO_BOOST; + if (gProtectStructs[battlerAtk].notFirstStrike) + battleScript = BattleScript_FlashFireBoost; + else + battleScript = BattleScript_FlashFireBoost_PPLoss; + } + break; + } + + if (battleScript != NULL) + { + gMultiHitCounter = 0; // Prevent multi-hit moves from hitting more than once after move has been absorbed. + gBattlescriptCurrInstr = battleScript; + } + return effect; } -static inline u32 SetStartingFieldStatus(u32 flag, u32 message, u32 anim, u8 *timer) +static inline u32 SetStartingFieldStatus(u32 flag, u32 message, u32 anim, u16 *timer) { if (!(gFieldStatuses & flag)) { @@ -4347,7 +4463,7 @@ static inline u32 SetStartingFieldStatus(u32 flag, u32 message, u32 anim, u8 *ti gFieldStatuses |= flag; gBattleScripting.animArg1 = anim; if (gBattleStruct->startingStatusTimer) - *timer = gBattleStruct->startingStatusTimer; + *timer = gBattleTurnCounter + gBattleStruct->startingStatusTimer; else *timer = 0; // Infinite @@ -4357,7 +4473,7 @@ static inline u32 SetStartingFieldStatus(u32 flag, u32 message, u32 anim, u8 *ti return 0; } -static inline u32 SetStartingSideStatus(u32 flag, u32 side, u32 message, u32 anim, u8 *timer) +static inline u32 SetStartingSideStatus(u32 flag, u32 side, u32 message, u32 anim, u16 *timer) { if (!(gSideStatuses[side] & flag)) { @@ -4366,7 +4482,7 @@ static inline u32 SetStartingSideStatus(u32 flag, u32 side, u32 message, u32 ani gSideStatuses[side] |= flag; gBattleScripting.animArg1 = anim; if (gBattleStruct->startingStatusTimer) - *timer = gBattleStruct->startingStatusTimer; + *timer = gBattleTurnCounter + gBattleStruct->startingStatusTimer; else *timer = 0; // Infinite @@ -4708,6 +4824,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_UNNERVE: if (!gSpecialStatuses[battler].switchInAbilityDone) { + gBattlerTarget = GetOppositeBattler(battler); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_UNNERVE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); @@ -4718,6 +4835,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_AS_ONE_SHADOW_RIDER: if (!gSpecialStatuses[battler].switchInAbilityDone) { + gBattlerTarget = GetOppositeBattler(battler); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_ASONE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; BattleScriptPushCursorAndCallback(BattleScript_ActivateAsOne); @@ -5467,159 +5585,41 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITYEFFECT_WOULD_BLOCK: - effect = CanAbilityBlockMove(gBattlerAttacker, battler, move, gLastUsedAbility); + effect = CanAbilityBlockMove(gBattlerAttacker, battler, move, gLastUsedAbility, ABILITY_CHECK_TRIGGER); if (effect && gLastUsedAbility != 0xFFFF) RecordAbilityBattle(battler, gLastUsedAbility); - break; + return effect; case ABILITYEFFECT_MOVES_BLOCK: + effect = CanAbilityBlockMove(gBattlerAttacker, battler, move, gLastUsedAbility, ABILITY_RUN_SCRIPT); + + // prankster check + if (effect == 0 + && GetChosenMovePriority(gBattlerAttacker) > 0 + && BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) + && !(IsBattleMoveStatus(move) && (gLastUsedAbility == ABILITY_MAGIC_BOUNCE || gProtectStructs[gBattlerTarget].bounceMove))) { - effect = CanAbilityBlockMove(gBattlerAttacker, battler, move, gLastUsedAbility); - const u8 * battleScriptBlocksMove = NULL; - switch (effect) - { - case MOVE_BLOCKED_BY_SOUNDPROOF_OR_BULLETPROOF: - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) - gHitMarker |= HITMARKER_NO_PPDEDUCT; - battleScriptBlocksMove = BattleScript_SoundproofProtected; - break; - case MOVE_BLOCKED_BY_DAZZLING: - case MOVE_BLOCKED_BY_PARTNER_DAZZLING: - if (effect == MOVE_BLOCKED_BY_PARTNER_DAZZLING) - gBattleScripting.battler = BATTLE_PARTNER(battler); - else - gBattleScripting.battler = battler; - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) - gHitMarker |= HITMARKER_NO_PPDEDUCT; - battleScriptBlocksMove = BattleScript_DazzlingProtected; - break; - case MOVE_BLOCKED_BY_GOOD_AS_GOLD: - battleScriptBlocksMove = BattleScript_GoodAsGoldActivates; - break; - default: - if (GetChosenMovePriority(gBattlerAttacker) > 0 - && BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) - && !(IsBattleMoveStatus(move) && (gLastUsedAbility == ABILITY_MAGIC_BOUNCE || gProtectStructs[gBattlerTarget].bounceMove))) - { - if (!IsDoubleBattle() - || !(GetBattlerMoveTargetType(gBattlerAttacker, move) & (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; - battleScriptBlocksMove = BattleScript_DarkTypePreventsPrankster; - effect = 1; - } - } - if (effect) - gBattlescriptCurrInstr = battleScriptBlocksMove; + if (!IsDoubleBattle() + || !(GetBattlerMoveTargetType(gBattlerAttacker, move) & (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_WOULD_ABSORB: - effect = CanAbilityAbsorbMove(gBattlerAttacker, battler, gLastUsedAbility, move, moveType); + effect = CanAbilityAbsorbMove(gBattlerAttacker, battler, gLastUsedAbility, move, moveType, ABILITY_CHECK_TRIGGER); gBattleStruct->pledgeMove = FALSE; if (effect && gLastUsedAbility != 0xFFFF) RecordAbilityBattle(battler, gLastUsedAbility); return effect; case ABILITYEFFECT_ABSORBING: - { - u32 statId = 0; - u32 statAmount = 1; - effect = CanAbilityAbsorbMove(gBattlerAttacker, battler, gLastUsedAbility, move, moveType); - if (effect) - { - switch(gLastUsedAbility) - { - case ABILITY_MOTOR_DRIVE: - statId = STAT_SPEED; - break; - case ABILITY_LIGHTNING_ROD: - case ABILITY_STORM_DRAIN: - statId = STAT_SPATK; - break; - case ABILITY_SAP_SIPPER: - case ABILITY_WIND_RIDER: - statId = STAT_ATK; - break; - case ABILITY_WELL_BAKED_BODY: - statAmount = 2; - statId = STAT_DEF; - break; - } - } - switch (effect) - { - case MOVE_ABSORBED_BY_DRAIN_HP_ABILITY: - gBattleStruct->pledgeMove = FALSE; - if (IsBattlerAtMaxHp(battler) || (B_HEAL_BLOCKING >= GEN_5 && gStatuses3[battler] & STATUS3_HEAL_BLOCK)) - { - 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; - - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 4; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - gBattleStruct->moveDamage[battler] *= -1; - } - break; - case MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY: - gBattleStruct->pledgeMove = FALSE; - 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, statAmount, FALSE); - if (B_ABSORBING_ABILITY_STRING < GEN_5) - PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); - } - break; - case MOVE_ABSORBED_BY_BOOST_FLASH_FIRE: - gBattleStruct->pledgeMove = FALSE; - if (!gDisableStructs[battler].flashFireBoosted) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_BOOST; - if (gProtectStructs[gBattlerAttacker].notFirstStrike) - gBattlescriptCurrInstr = BattleScript_FlashFireBoost; - else - gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - gDisableStructs[battler].flashFireBoosted = TRUE; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_NO_BOOST; - if (gProtectStructs[gBattlerAttacker].notFirstStrike) - gBattlescriptCurrInstr = BattleScript_FlashFireBoost; - else - gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - } - break; - } - if (effect) - gMultiHitCounter = 0; // Prevent multi-hit moves from hitting more than once after move has been absorbed. - - } + effect = CanAbilityAbsorbMove(gBattlerAttacker, battler, gLastUsedAbility, move, moveType, ABILITY_RUN_SCRIPT); break; case ABILITYEFFECT_MOVE_END: // Think contact abilities. switch (gLastUsedAbility) { case ABILITY_JUSTIFIED: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) && moveType == TYPE_DARK @@ -5633,7 +5633,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_RATTLED: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) && (moveType == TYPE_DARK || moveType == TYPE_BUG || moveType == TYPE_GHOST) @@ -5647,7 +5647,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_WATER_COMPACTION: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) && moveType == TYPE_WATER @@ -5661,7 +5661,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_STAMINA: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && gBattlerAttacker != gBattlerTarget && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) @@ -5675,7 +5675,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_BERSERK: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) && HadMoreThanHalfHpNowDoesnt(battler) @@ -5692,7 +5692,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_EMERGENCY_EXIT: case ABILITY_WIMP_OUT: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) // Had more than half of hp before, now has less @@ -5710,7 +5710,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_WEAK_ARMOR: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) && IsBattleMovePhysical(gCurrentMove) @@ -5726,7 +5726,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_CURSED_BODY: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) && gDisableStructs[gBattlerAttacker].disabledMove == MOVE_NONE && IsBattlerAlive(gBattlerAttacker) @@ -5745,7 +5745,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_LINGERING_AROMA: case ABILITY_MUMMY: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && IsBattlerTurnDamaged(gBattlerTarget) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS @@ -5770,7 +5770,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_WANDERING_SPIRIT: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && IsBattlerTurnDamaged(gBattlerTarget) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS @@ -5794,7 +5794,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_ANGER_POINT: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && gSpecialStatuses[battler].criticalHit && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) @@ -5807,7 +5807,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_COLOR_CHANGE: - if (MoveResultHasEffect(battler) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && move != MOVE_STRUGGLE && !IsBattleMoveStatus(move) && IsBattlerTurnDamaged(gBattlerTarget) @@ -5825,7 +5825,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_GOOEY: case ABILITY_TANGLING_HAIR: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && (CompareStat(gBattlerAttacker, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN) || GetBattlerAbility(gBattlerAttacker) == ABILITY_MIRROR_ARMOR) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg @@ -5843,7 +5843,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_ROUGH_SKIN: case ABILITY_IRON_BARBS: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) @@ -5860,7 +5860,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_AFTERMATH: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !IsBattlerAlive(gBattlerTarget) && IsBattlerAlive(gBattlerAttacker) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS @@ -5884,7 +5884,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_INNARDS_OUT: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !IsBattlerAlive(gBattlerTarget) && IsBattlerAlive(gBattlerAttacker)) { @@ -5930,7 +5930,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 goto STATIC; // Sleep if (i < sleep - && MoveResultHasEffect(gBattlerTarget) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) @@ -5954,7 +5954,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_POISON_POINT, 30) : RandomChance(RNG_POISON_POINT, 1, 3)) { POISON_POINT: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) @@ -5975,7 +5975,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_STATIC, 30) : RandomChance(RNG_STATIC, 1, 3)) { STATIC: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) @@ -5993,7 +5993,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_FLAME_BODY: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS @@ -6011,7 +6011,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_CUTE_CHARM: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) @@ -6039,7 +6039,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_COTTON_DOWN: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget)) @@ -6051,7 +6051,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_STEAM_ENGINE: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) && CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) @@ -6065,7 +6065,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_SAND_SPIT: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && !(gBattleWeather & B_WEATHER_SANDSTORM && HasWeatherEffect())) @@ -6086,7 +6086,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_PERISH_BODY: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) @@ -6107,7 +6107,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_GULP_MISSILE: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) @@ -6138,7 +6138,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_SEED_SOWER: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerTarget) @@ -6150,7 +6150,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_THERMAL_EXCHANGE: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerTarget) && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN) @@ -6164,7 +6164,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_ANGER_SHELL: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && (gMultiHitCounter == 0 || gMultiHitCounter == 1) // Activates after all hits from a multi-hit move. @@ -6182,7 +6182,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; // fall through case ABILITY_ELECTROMORPHOSIS: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerTarget)) @@ -6193,7 +6193,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_TOXIC_DEBRIS: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && (!gBattleStruct->isSkyBattle) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattleMovePhysical(gCurrentMove) @@ -6212,7 +6212,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 switch (gLastUsedAbility) { case ABILITY_POISON_TOUCH: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerTarget) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget)) @@ -6230,7 +6230,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_TOXIC_CHAIN: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerTarget) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget)) @@ -6246,7 +6246,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_STENCH: - if (MoveResultHasEffect(gBattlerTarget) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerTarget) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && RandomChance(RNG_STENCH, 1, 10) @@ -6309,7 +6309,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 SetTypeBeforeUsingMove(gCalledMove, battler); // Make sure that the target isn't an ally - if it is, target the original user - if (GetBattlerSide(gBattlerTarget) == GetBattlerSide(gBattlerAttacker)) + if (IsBattlerAlly(gBattlerTarget, gBattlerAttacker)) gBattlerTarget = (gBattleScripting.savedBattler & 0xF0) >> 4; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; BattleScriptExecute(BattleScript_DancerActivates); @@ -6807,7 +6807,7 @@ bool32 CanBeSlept(u32 battler, u32 ability, enum SleepClauseBlock isBlockedBySle || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD || gBattleMons[battler].status1 & STATUS1_ANY || IsAbilityOnSide(battler, ABILITY_SWEET_VEIL) - || IsAbilityStatusProtected(battler) + || IsAbilityStatusProtected(battler, ability) || IsBattlerTerrainAffected(battler, STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; @@ -6822,7 +6822,7 @@ bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, u32 defAbility) || defAbility == ABILITY_COMATOSE || defAbility == ABILITY_PURIFYING_SALT || IsAbilityOnSide(battlerDef, ABILITY_PASTEL_VEIL) - || IsAbilityStatusProtected(battlerDef) + || IsAbilityStatusProtected(battlerDef, defAbility) || IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; @@ -6838,7 +6838,7 @@ bool32 CanBeBurned(u32 battler, u32 ability) || ability == ABILITY_COMATOSE || ability == ABILITY_THERMAL_EXCHANGE || ability == ABILITY_PURIFYING_SALT - || IsAbilityStatusProtected(battler) + || IsAbilityStatusProtected(battler, ability) || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; @@ -6852,7 +6852,7 @@ bool32 CanBeParalyzed(u32 battler, u32 ability) || ability == ABILITY_COMATOSE || ability == ABILITY_PURIFYING_SALT || gBattleMons[battler].status1 & STATUS1_ANY - || IsAbilityStatusProtected(battler) + || IsAbilityStatusProtected(battler, ability) || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; @@ -6868,7 +6868,7 @@ bool32 CanBeFrozen(u32 battler) || ability == ABILITY_COMATOSE || ability == ABILITY_PURIFYING_SALT || gBattleMons[battler].status1 & STATUS1_ANY - || IsAbilityStatusProtected(battler) + || IsAbilityStatusProtected(battler, ability) || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; @@ -6883,7 +6883,7 @@ bool32 CanGetFrostbite(u32 battler) || ability == ABILITY_COMATOSE || ability == ABILITY_PURIFYING_SALT || gBattleMons[battler].status1 & STATUS1_ANY - || IsAbilityStatusProtected(battler) + || IsAbilityStatusProtected(battler, ability) || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; @@ -7142,6 +7142,7 @@ static enum ItemEffect TryEjectPack(u32 battler, enum ItemCaseId caseID) { gProtectStructs[battler].statFell = FALSE; gBattleScripting.battler = battler; + AI_DATA->ejectPackSwitch = TRUE; if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN) { BattleScriptExecute(BattleScript_EjectPackActivate_End2); @@ -8144,9 +8145,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn) atkHoldEffectParam *= 2; if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_RAINBOW && gCurrentMove != MOVE_SECRET_POWER) atkHoldEffectParam *= 2; - if (gBattleStruct->moveDamage[battler] != 0 // Need to have done damage - && MoveResultHasEffect(gBattlerTarget) - && IsBattlerTurnDamaged(gBattlerTarget) + if (IsBattlerTurnDamaged(gBattlerTarget) && !MoveIgnoresKingsRock(gCurrentMove) && gBattleMons[gBattlerTarget].hp && RandomPercentage(RNG_HOLD_EFFECT_FLINCH, atkHoldEffectParam) @@ -8180,12 +8179,12 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn) { case HOLD_EFFECT_SHELL_BELL: if (gBattleScripting.savedDmg > 0 - && MoveResultHasEffect(battler) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && gBattlerAttacker != gBattlerTarget && !IsBattlerAtMaxHp(gBattlerAttacker) && IsBattlerAlive(gBattlerAttacker) - && gMovesInfo[gCurrentMove].effect != EFFECT_FUTURE_SIGHT - && gMovesInfo[gCurrentMove].effect != EFFECT_PAIN_SPLIT + && GetMoveEffect(gCurrentMove) != EFFECT_FUTURE_SIGHT + && GetMoveEffect(gCurrentMove) != EFFECT_PAIN_SPLIT && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) { gLastUsedItem = atkItem; @@ -8234,7 +8233,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn) } break; case ITEMEFFECT_TARGET: - if (MoveResultHasEffect(gBattlerTarget)) + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) { moveType = GetBattleMoveType(gCurrentMove); switch (battlerHoldEffect) @@ -8381,7 +8380,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn) break; case HOLD_EFFECT_STICKY_BARB: if (IsBattlerTurnDamaged(gBattlerTarget) - && MoveResultHasEffect(gBattlerTarget) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) @@ -8563,12 +8562,12 @@ u32 GetBattleMoveTarget(u16 move, u8 setTarget) case MOVE_TARGET_DEPENDS: case MOVE_TARGET_BOTH: case MOVE_TARGET_FOES_AND_ALLY: - targetBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker))); + targetBattler = GetOpposingSideBattler(gBattlerAttacker); if (!IsBattlerAlive(targetBattler)) targetBattler ^= BIT_FLANK; break; case MOVE_TARGET_OPPONENTS_FIELD: - targetBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker))); + targetBattler = GetOpposingSideBattler(gBattlerAttacker); break; case MOVE_TARGET_RANDOM: side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); @@ -8577,7 +8576,7 @@ u32 GetBattleMoveTarget(u16 move, u8 setTarget) else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) targetBattler = SetRandomTarget(gBattlerAttacker); else - targetBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker))); + targetBattler = GetOpposingSideBattler(gBattlerAttacker); break; case MOVE_TARGET_USER_OR_SELECTED: case MOVE_TARGET_USER: @@ -8773,13 +8772,13 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) bool32 isProtected = FALSE; if ((IsZMove(move) || IsMaxMove(move)) - && (!gProtectStructs[battlerDef].maxGuarded || GetMoveMaxEffect(move) == MAX_EFFECT_BYPASS_PROTECT)) + && (!gProtectStructs[battlerDef].maxGuarded || MoveIgnoresProtect(move))) isProtected = FALSE; // Z-Moves and Max Moves bypass protection (except Max Guard). else if (gProtectStructs[battlerDef].maxGuarded && IsMoveBlockedByMaxGuard(move)) isProtected = TRUE; else if (!gProtectStructs[battlerDef].maxGuarded // Max Guard cannot be bypassed by Unseen Fist - && IsMoveMakingContact(move, gBattlerAttacker) - && GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST) + && IsMoveMakingContact(move, battlerAtk) + && GetBattlerAbility(battlerAtk) == ABILITY_UNSEEN_FIST) isProtected = FALSE; else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_CRAFTY_SHIELD && IsBattleMoveStatus(move) && GetMoveEffect(move) != EFFECT_COACHING) isProtected = TRUE; @@ -8788,7 +8787,7 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) else if (gProtectStructs[battlerDef].protected) isProtected = TRUE; else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_WIDE_GUARD - && GetBattlerMoveTargetType(gBattlerAttacker, move) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)) + && GetBattlerMoveTargetType(battlerAtk, move) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)) isProtected = TRUE; else if (gProtectStructs[battlerDef].banefulBunkered) isProtected = TRUE; @@ -8803,7 +8802,7 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) else if (gProtectStructs[battlerDef].maxGuarded) isProtected = TRUE; else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_QUICK_GUARD - && GetChosenMovePriority(gBattlerAttacker) > 0) + && GetChosenMovePriority(battlerAtk) > 0) isProtected = TRUE; else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_MAT_BLOCK && !IsBattleMoveStatus(move)) @@ -8848,18 +8847,6 @@ bool32 IsBattlerGrounded(u32 battler) return IsBattlerGroundedInverseCheck(battler, FALSE); } -bool32 IsBattlerAlive(u32 battler) -{ - if (gBattleMons[battler].hp == 0) - return FALSE; - else if (battler >= gBattlersCount) - return FALSE; - else if (gAbsentBattlerFlags & (1u << battler)) - return FALSE; - else - return TRUE; -} - u32 GetMoveSlot(u16 *moves, u32 move) { u32 i; @@ -9251,7 +9238,7 @@ static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData basePower *= 2; break; case EFFECT_EXPLOSION: - if (move == MOVE_MISTY_EXPLOSION && gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN && IsBattlerGrounded(battlerAtk)) + if (move == MOVE_MISTY_EXPLOSION && IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_MISTY_TERRAIN)) basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); break; case EFFECT_DYNAMAX_DOUBLE_DMG: @@ -9278,8 +9265,7 @@ static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); break; case EFFECT_TERRAIN_PULSE: - if ((gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - && IsBattlerGrounded(battlerAtk)) + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_TERRAIN_ANY)) basePower *= 2; break; case EFFECT_EXPANDING_FORCE: @@ -9295,7 +9281,7 @@ static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData basePower = CalcBeatUpPower(); break; case EFFECT_PSYBLADE: - if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN)) + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); break; case EFFECT_MAX_MOVE: @@ -10189,7 +10175,7 @@ static inline uq4_12_t GetBurnOrFrostBiteModifier(struct DamageCalculationData * static inline uq4_12_t GetCriticalModifier(bool32 isCrit) { if (isCrit) - return B_CRIT_MULTIPLIER >= GEN_6 ? UQ_4_12(1.5) : UQ_4_12(2.0); + return GetGenConfig(GEN_CONFIG_CRIT_MULTIPLIER) >= GEN_6 ? UQ_4_12(1.5) : UQ_4_12(2.0); return UQ_4_12(1.0); } @@ -10562,7 +10548,7 @@ static inline bool32 IsFutureSightAttackerInParty(struct DamageCalculationData * if (GetMoveEffect(damageCalcData->move) != EFFECT_FUTURE_SIGHT) return FALSE; - struct Pokemon *party = GetSideParty(GetBattlerSide(gBattlerAttacker)); + struct Pokemon *party = GetSideParty(GetBattlerSide(damageCalcData->battlerAtk)); return &party[gWishFutureKnock.futureSightPartyIndex[damageCalcData->battlerDef]] != &party[gBattlerPartyIndexes[damageCalcData->battlerAtk]]; } @@ -10740,7 +10726,7 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(u32 move, u32 mov } if (recordAbilities) - TryInitalizeFirstSTABMoveTrainerSlide(battlerDef, battlerAtk, moveType); + TryInitializeFirstSTABMoveTrainerSlide(battlerDef, battlerAtk, moveType); return modifier; } @@ -11256,7 +11242,7 @@ bool32 CanBattlerGetOrLoseItem(u32 battler, u16 itemId) else if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) return FALSE; else if (holdEffect == HOLD_EFFECT_BOOSTER_ENERGY - && (gSpeciesInfo[gBattleMons[gBattlerAttacker].species].isParadox || gSpeciesInfo[gBattleMons[gBattlerTarget].species].isParadox)) + && (gSpeciesInfo[gBattleMons[battler].species].isParadox || gSpeciesInfo[gBattleMons[gBattlerTarget].species].isParadox)) return FALSE; else return TRUE; @@ -11344,7 +11330,7 @@ bool32 ShouldGetStatBadgeBoost(u16 badgeFlag, u32 battler) return FALSE; else if (GetBattlerSide(battler) != B_SIDE_PLAYER) return FALSE; - else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && TRAINER_BATTLE_PARAM.opponentA == TRAINER_SECRET_BASE) return FALSE; else if (FlagGet(badgeFlag)) return TRUE; @@ -11380,22 +11366,16 @@ static bool32 TryRemoveScreens(u32 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)) + if (gSideStatuses[battlerSide] & SIDE_STATUS_SCREEN_ANY) { - gSideStatuses[battlerSide] &= ~(SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL); - gSideTimers[battlerSide].reflectTimer = 0; - gSideTimers[battlerSide].lightscreenTimer = 0; - gSideTimers[battlerSide].auroraVeilTimer = 0; + gSideStatuses[battlerSide] &= ~SIDE_STATUS_SCREEN_ANY; removed = TRUE; } // try to remove from battler opponent's side - if (gSideStatuses[enemySide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL)) + if (gSideStatuses[enemySide] & SIDE_STATUS_SCREEN_ANY) { - gSideStatuses[enemySide] &= ~(SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL); - gSideTimers[enemySide].reflectTimer = 0; - gSideTimers[enemySide].lightscreenTimer = 0; - gSideTimers[enemySide].auroraVeilTimer = 0; + gSideStatuses[enemySide] &= ~SIDE_STATUS_SCREEN_ANY; removed = TRUE; } @@ -11695,7 +11675,7 @@ bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 ch return FALSE; if (!gProtectStructs[battlerPrankster].pranksterElevated) return FALSE; - if (GetBattlerSide(battlerPrankster) == GetBattlerSide(battlerDef)) + if (IsBattlerAlly(battlerPrankster, battlerDef)) return FALSE; if (checkTarget && (GetBattlerMoveTargetType(battlerPrankster, move) & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_DEPENDS))) return FALSE; @@ -11735,7 +11715,7 @@ bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags) { if (gBattleWeather & weatherFlags && HasWeatherEffect()) { - // given weather is active -> check if its sun, rain against utility umbrella ( since only 1 weather can be active at once) + // 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(battler, TRUE) == HOLD_EFFECT_UTILITY_UMBRELLA) return FALSE; // utility umbrella blocks sun, rain effects @@ -11762,12 +11742,13 @@ u32 GetBattlerMoveTargetType(u32 battler, u32 move) bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move) { if (GetMoveEffect(move) == EFFECT_HIT_ENEMY_HEAL_ALLY - && GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef) - && gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) + && IsBattlerAlly(battlerAtk, battlerDef) + && gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) return FALSE; // Pokémon affected by Heal Block cannot target allies with Pollen Puff - if ((GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX || IsGimmickSelected(battlerAtk, GIMMICK_DYNAMAX)) - && GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef)) + if (IsBattlerAlly(battlerAtk, battlerDef) && (GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX + || IsGimmickSelected(battlerAtk, GIMMICK_DYNAMAX))) return FALSE; + return TRUE; } @@ -11775,7 +11756,7 @@ static void SetRandomMultiHitCounter() { if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LOADED_DICE) gMultiHitCounter = RandomUniform(RNG_LOADED_DICE, 4, 5); - else if (B_MULTI_HIT_CHANCE >= GEN_5) + else if (GetGenConfig(GEN_CONFIG_MULTI_HIT_CHANCE) >= GEN_5) gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 7, 7, 3, 3); // 35%: 2 hits, 35%: 3 hits, 15% 4 hits, 15% 5 hits. else gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 3, 3, 1, 1); // 37.5%: 2 hits, 37.5%: 3 hits, 12.5% 4 hits, 12.5% 5 hits. @@ -11888,11 +11869,6 @@ bool32 MoveEffectIsGuaranteed(u32 battler, u32 battlerAbility, const struct Addi return additionalEffect->chance == 0 || CalcSecondaryEffectChance(battler, battlerAbility, additionalEffect) >= 100; } -bool32 IsAlly(u32 battlerAtk, u32 battlerDef) -{ - return (GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef)); -} - bool32 IsGen6ExpShareEnabled(void) { if (I_EXP_SHARE_FLAG <= TEMP_FLAGS_END) @@ -12088,6 +12064,10 @@ void SetShellSideArmCategory(void) u32 special; u32 power = GetMovePower(MOVE_SHELL_SIDE_ARM); + // Don't run this check for Safari Battles. Because player's stats are zeroed out, this performs division by zero which previously would crash on certain emulators in Safari Zone. + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + return; + for (battlerAtk = 0; battlerAtk < gBattlersCount; battlerAtk++) { attackerAtkStat = gBattleMons[battlerAtk].attack; @@ -12252,7 +12232,7 @@ u32 NumAffectedSpreadMoveTargets(void) targetCount = 0; for (u32 battler = 0; battler < gBattlersCount; battler++) { - if (MoveResultHasEffect(battler)) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT)) targetCount++; } diff --git a/src/battle_util2.c b/src/battle_util2.c index 6c2d0ff0a9..6d7c82cbe5 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -112,12 +112,12 @@ void SwitchPartyOrderInGameMulti(u8 battler, u8 arg1) { s32 i; for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) - gBattlePartyCurrentOrder[i] = *(0 * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)); + gBattlePartyCurrentOrder[i] = *(i + (u8 *)(gBattleStruct->battlerPartyOrders)); SwitchPartyMonSlots(GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battler]), GetPartyIdFromBattlePartyId(arg1)); for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) - *(0 * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i]; + *(i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i]; } } diff --git a/src/cable_club.c b/src/cable_club.c index d6a2903fd4..1a115c31ef 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -867,7 +867,7 @@ static void Task_StartWiredCableClubBattle(u8 taskId) SetLinkBattleTypeFlags(gSpecialVar_0x8004); CleanupOverworldWindowsAndTilemaps(); - gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT; + TRAINER_BATTLE_PARAM.opponentA = TRAINER_LINK_OPPONENT; SetMainCallback2(CB2_InitBattle); gMain.savedCallback = CB2_ReturnFromCableClubBattle; DestroyTask(taskId); @@ -933,7 +933,7 @@ static void Task_StartWirelessCableClubBattle(u8 taskId) gLinkPlayers[0].linkType = LINKTYPE_BATTLE; SetLinkBattleTypeFlags(gSpecialVar_0x8004); CleanupOverworldWindowsAndTilemaps(); - gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT; + TRAINER_BATTLE_PARAM.opponentA = TRAINER_LINK_OPPONENT; SetMainCallback2(CB2_InitBattle); gMain.savedCallback = CB2_ReturnFromCableClubBattle; DestroyTask(taskId); diff --git a/src/contest.c b/src/contest.c index 96bb4e925d..b99dd6e935 100644 --- a/src/contest.c +++ b/src/contest.c @@ -2956,7 +2956,6 @@ void SetContestants(u8 contestType, u8 rank) u8 opponentsCount = 0; u8 opponents[100]; bool8 allowPostgameContestants = FALSE; - const u8 *filter; TryPutPlayerLast(); @@ -2964,19 +2963,18 @@ void SetContestants(u8 contestType, u8 rank) allowPostgameContestants = TRUE; // Find all suitable opponents - filter = gPostgameContestOpponentFilter; for (i = 0; i < ARRAY_COUNT(gContestOpponents); i++) { if (rank == gContestOpponents[i].whichRank) { if (allowPostgameContestants == TRUE) { - if (filter[i] == CONTEST_FILTER_NO_POSTGAME) + if (gContestOpponents[i].filter == CONTEST_FILTER_NO_POSTGAME) continue; } else { - if (filter[i] == CONTEST_FILTER_ONLY_POSTGAME) + if (gContestOpponents[i].filter == CONTEST_FILTER_ONLY_POSTGAME) continue; } if (contestType == CONTEST_CATEGORY_COOL && gContestOpponents[i].aiPool_Cool) @@ -3025,12 +3023,12 @@ void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame) if (isPostgame == TRUE) { - if (gPostgameContestOpponentFilter[i] == CONTEST_FILTER_NO_POSTGAME) + if (gContestOpponents[i].filter == CONTEST_FILTER_NO_POSTGAME) continue; } else { - if (gPostgameContestOpponentFilter[i] == CONTEST_FILTER_ONLY_POSTGAME) + if (gContestOpponents[i].filter == CONTEST_FILTER_ONLY_POSTGAME) continue; } if ((contestType == CONTEST_CATEGORY_COOL && gContestOpponents[i].aiPool_Cool) diff --git a/src/contest_painting.c b/src/contest_painting.c index 8b647be12f..1911e70689 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -212,7 +212,6 @@ static void ShowContestPainting(void) gMain.state++; break; case 2: - SeedRng(gMain.vblankCounter1); InitKeys(); InitContestPaintingWindow(); gMain.state++; @@ -595,4 +594,3 @@ static void CreateContestPaintingPicture(u8 contestWinnerId, bool8 isForArtist) InitPaintingMonOamData(contestWinnerId); LoadContestPaintingFrame(contestWinnerId, isForArtist); } - diff --git a/src/data.c b/src/data.c index e50fa0c549..f5035262c5 100644 --- a/src/data.c +++ b/src/data.c @@ -3,6 +3,7 @@ #include "battle.h" #include "data.h" #include "graphics.h" +#include "trainer_pools.h" #include "battle_transition.h" #include "constants/abilities.h" #include "constants/items.h" @@ -220,7 +221,7 @@ const union AnimCmd *const gAnims_MonPic[MAX_MON_PIC_FRAMES] = sAnim_MonPic_1, }; -const union AnimCmd *const sAnims_Trainer[] ={ +const union AnimCmd *const gAnims_Trainer[] ={ sAnim_GeneralFrame0, sAnim_GeneralFrame0, }; diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h index a09c8d72c8..ad0d2d13d8 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1466,6 +1466,8 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_Beam, 0x0800, ANIM_TAG_BEAM}, {gBattleAnimSpriteGfx_PurpleChain, 0x1000, ANIM_TAG_PURPLE_CHAIN}, {gBattleAnimSpriteGfx_PinkVioletOrb, 0x0080, ANIM_TAG_PINKVIO_ORB}, + {gBattleAnimSpriteGfx_TeraStarstormBeam, 0x200, ANIM_TAG_STARSTORM}, + {gBattleAnimSpriteGfx_SaltParticle, 0x400, ANIM_TAG_SALT_PARTICLE}, }; const struct CompressedSpritePalette gBattleAnimPaletteTable[] = @@ -1933,6 +1935,8 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_Beam, ANIM_TAG_BEAM}, {gBattleAnimSpritePal_PurpleChain, ANIM_TAG_PURPLE_CHAIN}, {gBattleAnimSpritePal_PinkVioletOrb, ANIM_TAG_PINKVIO_ORB}, + {gBattleAnimSpritePal_TeraStarstormBeam, ANIM_TAG_STARSTORM}, + {gBattleAnimSpritePal_SaltParticle, ANIM_TAG_SALT_PARTICLE}, }; const struct BattleAnimBackground gBattleAnimBackgroundTable[] = diff --git a/src/data/battle_frontier/apprentice.h b/src/data/battle_frontier/apprentice.h index 408c3902d5..ef0a77bf11 100644 --- a/src/data/battle_frontier/apprentice.h +++ b/src/data/battle_frontier/apprentice.h @@ -568,367 +568,6 @@ static const u8 *const sApprenticeChallengeTexts[NUM_APPRENTICES] = gText_ApprenticeChallenge15, }; -// Unclear what the criteria are for valid moves -// Notably, a large percentage of multi-strike moves are not valid -static const bool8 sValidApprenticeMoves[MOVES_COUNT] = -{ - [MOVE_NONE] = FALSE, - [MOVE_POUND] = FALSE, - [MOVE_KARATE_CHOP] = TRUE, - [MOVE_DOUBLE_SLAP] = TRUE, - [MOVE_COMET_PUNCH] = FALSE, - [MOVE_MEGA_PUNCH] = TRUE, - [MOVE_PAY_DAY] = FALSE, - [MOVE_FIRE_PUNCH] = TRUE, - [MOVE_ICE_PUNCH] = TRUE, - [MOVE_THUNDER_PUNCH] = TRUE, - [MOVE_SCRATCH] = FALSE, - [MOVE_VISE_GRIP] = FALSE, - [MOVE_GUILLOTINE] = TRUE, - [MOVE_RAZOR_WIND] = FALSE, - [MOVE_SWORDS_DANCE] = TRUE, - [MOVE_CUT] = FALSE, - [MOVE_GUST] = FALSE, - [MOVE_WING_ATTACK] = FALSE, - [MOVE_WHIRLWIND] = TRUE, - [MOVE_FLY] = TRUE, - [MOVE_BIND] = TRUE, - [MOVE_SLAM] = TRUE, - [MOVE_VINE_WHIP] = FALSE, - [MOVE_STOMP] = TRUE, - [MOVE_DOUBLE_KICK] = TRUE, - [MOVE_MEGA_KICK] = TRUE, - [MOVE_JUMP_KICK] = TRUE, - [MOVE_ROLLING_KICK] = TRUE, - [MOVE_SAND_ATTACK] = TRUE, - [MOVE_HEADBUTT] = TRUE, - [MOVE_HORN_ATTACK] = FALSE, - [MOVE_FURY_ATTACK] = FALSE, - [MOVE_HORN_DRILL] = TRUE, - [MOVE_TACKLE] = FALSE, - [MOVE_BODY_SLAM] = TRUE, - [MOVE_WRAP] = TRUE, - [MOVE_TAKE_DOWN] = TRUE, - [MOVE_THRASH] = TRUE, - [MOVE_DOUBLE_EDGE] = TRUE, - [MOVE_TAIL_WHIP] = FALSE, - [MOVE_POISON_STING] = FALSE, - [MOVE_TWINEEDLE] = TRUE, - [MOVE_PIN_MISSILE] = FALSE, - [MOVE_LEER] = FALSE, - [MOVE_BITE] = TRUE, - [MOVE_GROWL] = FALSE, - [MOVE_ROAR] = TRUE, - [MOVE_SING] = TRUE, - [MOVE_SUPERSONIC] = TRUE, - [MOVE_SONIC_BOOM] = TRUE, - [MOVE_DISABLE] = TRUE, - [MOVE_ACID] = FALSE, - [MOVE_EMBER] = FALSE, - [MOVE_FLAMETHROWER] = TRUE, - [MOVE_MIST] = TRUE, - [MOVE_WATER_GUN] = FALSE, - [MOVE_HYDRO_PUMP] = TRUE, - [MOVE_SURF] = TRUE, - [MOVE_ICE_BEAM] = TRUE, - [MOVE_BLIZZARD] = TRUE, - [MOVE_PSYBEAM] = TRUE, - [MOVE_BUBBLE_BEAM] = FALSE, - [MOVE_AURORA_BEAM] = FALSE, - [MOVE_HYPER_BEAM] = TRUE, - [MOVE_PECK] = FALSE, - [MOVE_DRILL_PECK] = TRUE, - [MOVE_SUBMISSION] = TRUE, - [MOVE_LOW_KICK] = TRUE, - [MOVE_COUNTER] = TRUE, - [MOVE_SEISMIC_TOSS] = TRUE, - [MOVE_STRENGTH] = TRUE, - [MOVE_ABSORB] = FALSE, - [MOVE_MEGA_DRAIN] = FALSE, - [MOVE_LEECH_SEED] = TRUE, - [MOVE_GROWTH] = TRUE, - [MOVE_RAZOR_LEAF] = TRUE, - [MOVE_SOLAR_BEAM] = TRUE, - [MOVE_POISON_POWDER] = TRUE, - [MOVE_STUN_SPORE] = TRUE, - [MOVE_SLEEP_POWDER] = TRUE, - [MOVE_PETAL_DANCE] = TRUE, - [MOVE_STRING_SHOT] = FALSE, - [MOVE_DRAGON_RAGE] = TRUE, - [MOVE_FIRE_SPIN] = TRUE, - [MOVE_THUNDER_SHOCK] = FALSE, - [MOVE_THUNDERBOLT] = TRUE, - [MOVE_THUNDER_WAVE] = TRUE, - [MOVE_THUNDER] = TRUE, - [MOVE_ROCK_THROW] = FALSE, - [MOVE_EARTHQUAKE] = TRUE, - [MOVE_FISSURE] = TRUE, - [MOVE_DIG] = TRUE, - [MOVE_TOXIC] = TRUE, - [MOVE_CONFUSION] = FALSE, - [MOVE_PSYCHIC] = TRUE, - [MOVE_HYPNOSIS] = TRUE, - [MOVE_MEDITATE] = TRUE, - [MOVE_AGILITY] = TRUE, - [MOVE_QUICK_ATTACK] = TRUE, - [MOVE_RAGE] = FALSE, - [MOVE_TELEPORT] = FALSE, - [MOVE_NIGHT_SHADE] = TRUE, - [MOVE_MIMIC] = TRUE, - [MOVE_SCREECH] = TRUE, - [MOVE_DOUBLE_TEAM] = TRUE, - [MOVE_RECOVER] = TRUE, - [MOVE_HARDEN] = TRUE, - [MOVE_MINIMIZE] = TRUE, - [MOVE_SMOKESCREEN] = TRUE, - [MOVE_CONFUSE_RAY] = TRUE, - [MOVE_WITHDRAW] = TRUE, - [MOVE_DEFENSE_CURL] = TRUE, - [MOVE_BARRIER] = TRUE, - [MOVE_LIGHT_SCREEN] = TRUE, - [MOVE_HAZE] = TRUE, - [MOVE_REFLECT] = TRUE, - [MOVE_FOCUS_ENERGY] = TRUE, - [MOVE_BIDE] = FALSE, - [MOVE_METRONOME] = TRUE, - [MOVE_MIRROR_MOVE] = TRUE, - [MOVE_SELF_DESTRUCT] = TRUE, - [MOVE_EGG_BOMB] = TRUE, - [MOVE_LICK] = TRUE, - [MOVE_SMOG] = FALSE, - [MOVE_SLUDGE] = FALSE, - [MOVE_BONE_CLUB] = FALSE, - [MOVE_FIRE_BLAST] = TRUE, - [MOVE_WATERFALL] = TRUE, - [MOVE_CLAMP] = TRUE, - [MOVE_SWIFT] = TRUE, - [MOVE_SKULL_BASH] = TRUE, - [MOVE_SPIKE_CANNON] = FALSE, - [MOVE_CONSTRICT] = FALSE, - [MOVE_AMNESIA] = TRUE, - [MOVE_KINESIS] = TRUE, - [MOVE_SOFT_BOILED] = TRUE, - [MOVE_HIGH_JUMP_KICK] = TRUE, - [MOVE_GLARE] = TRUE, - [MOVE_DREAM_EATER] = TRUE, - [MOVE_POISON_GAS] = FALSE, - [MOVE_BARRAGE] = FALSE, - [MOVE_LEECH_LIFE] = FALSE, - [MOVE_LOVELY_KISS] = TRUE, - [MOVE_SKY_ATTACK] = TRUE, - [MOVE_TRANSFORM] = TRUE, - [MOVE_BUBBLE] = FALSE, - [MOVE_DIZZY_PUNCH] = TRUE, - [MOVE_SPORE] = TRUE, - [MOVE_FLASH] = TRUE, - [MOVE_PSYWAVE] = TRUE, - [MOVE_SPLASH] = FALSE, - [MOVE_ACID_ARMOR] = TRUE, - [MOVE_CRABHAMMER] = TRUE, - [MOVE_EXPLOSION] = TRUE, - [MOVE_FURY_SWIPES] = FALSE, - [MOVE_BONEMERANG] = TRUE, - [MOVE_REST] = TRUE, - [MOVE_ROCK_SLIDE] = TRUE, - [MOVE_HYPER_FANG] = TRUE, - [MOVE_SHARPEN] = TRUE, - [MOVE_CONVERSION] = TRUE, - [MOVE_TRI_ATTACK] = TRUE, - [MOVE_SUPER_FANG] = TRUE, - [MOVE_SLASH] = TRUE, - [MOVE_SUBSTITUTE] = TRUE, - [MOVE_STRUGGLE] = TRUE, - [MOVE_SKETCH] = TRUE, - [MOVE_TRIPLE_KICK] = TRUE, - [MOVE_THIEF] = TRUE, - [MOVE_SPIDER_WEB] = TRUE, - [MOVE_MIND_READER] = TRUE, - [MOVE_NIGHTMARE] = TRUE, - [MOVE_FLAME_WHEEL] = FALSE, - [MOVE_SNORE] = TRUE, - [MOVE_CURSE] = TRUE, - [MOVE_FLAIL] = TRUE, - [MOVE_CONVERSION_2] = TRUE, - [MOVE_AEROBLAST] = TRUE, - [MOVE_COTTON_SPORE] = TRUE, - [MOVE_REVERSAL] = TRUE, - [MOVE_SPITE] = TRUE, - [MOVE_POWDER_SNOW] = FALSE, - [MOVE_PROTECT] = TRUE, - [MOVE_MACH_PUNCH] = TRUE, - [MOVE_SCARY_FACE] = TRUE, - [MOVE_FEINT_ATTACK] = TRUE, - [MOVE_SWEET_KISS] = TRUE, - [MOVE_BELLY_DRUM] = TRUE, - [MOVE_SLUDGE_BOMB] = TRUE, - [MOVE_MUD_SLAP] = TRUE, - [MOVE_OCTAZOOKA] = TRUE, - [MOVE_SPIKES] = TRUE, - [MOVE_ZAP_CANNON] = TRUE, - [MOVE_FORESIGHT] = TRUE, - [MOVE_DESTINY_BOND] = TRUE, - [MOVE_PERISH_SONG] = TRUE, - [MOVE_ICY_WIND] = TRUE, - [MOVE_DETECT] = TRUE, - [MOVE_BONE_RUSH] = FALSE, - [MOVE_LOCK_ON] = TRUE, - [MOVE_OUTRAGE] = TRUE, - [MOVE_SANDSTORM] = TRUE, - [MOVE_GIGA_DRAIN] = TRUE, - [MOVE_ENDURE] = TRUE, - [MOVE_CHARM] = TRUE, - [MOVE_ROLLOUT] = TRUE, - [MOVE_FALSE_SWIPE] = TRUE, - [MOVE_SWAGGER] = TRUE, - [MOVE_MILK_DRINK] = TRUE, - [MOVE_SPARK] = FALSE, - [MOVE_FURY_CUTTER] = TRUE, - [MOVE_STEEL_WING] = TRUE, - [MOVE_MEAN_LOOK] = TRUE, - [MOVE_ATTRACT] = TRUE, - [MOVE_SLEEP_TALK] = TRUE, - [MOVE_HEAL_BELL] = TRUE, - [MOVE_RETURN] = TRUE, - [MOVE_PRESENT] = TRUE, - [MOVE_FRUSTRATION] = TRUE, - [MOVE_SAFEGUARD] = TRUE, - [MOVE_PAIN_SPLIT] = TRUE, - [MOVE_SACRED_FIRE] = TRUE, - [MOVE_MAGNITUDE] = FALSE, - [MOVE_DYNAMIC_PUNCH] = TRUE, - [MOVE_MEGAHORN] = TRUE, - [MOVE_DRAGON_BREATH] = TRUE, - [MOVE_BATON_PASS] = TRUE, - [MOVE_ENCORE] = TRUE, - [MOVE_PURSUIT] = TRUE, - [MOVE_RAPID_SPIN] = TRUE, - [MOVE_SWEET_SCENT] = TRUE, - [MOVE_IRON_TAIL] = TRUE, - [MOVE_METAL_CLAW] = TRUE, - [MOVE_VITAL_THROW] = TRUE, - [MOVE_MORNING_SUN] = TRUE, - [MOVE_SYNTHESIS] = TRUE, - [MOVE_MOONLIGHT] = TRUE, - [MOVE_HIDDEN_POWER] = TRUE, - [MOVE_CROSS_CHOP] = TRUE, - [MOVE_TWISTER] = FALSE, - [MOVE_RAIN_DANCE] = TRUE, - [MOVE_SUNNY_DAY] = TRUE, - [MOVE_CRUNCH] = TRUE, - [MOVE_MIRROR_COAT] = TRUE, - [MOVE_PSYCH_UP] = TRUE, - [MOVE_EXTREME_SPEED] = TRUE, - [MOVE_ANCIENT_POWER] = TRUE, - [MOVE_SHADOW_BALL] = TRUE, - [MOVE_FUTURE_SIGHT] = TRUE, - [MOVE_ROCK_SMASH] = TRUE, - [MOVE_WHIRLPOOL] = TRUE, - [MOVE_BEAT_UP] = TRUE, - [MOVE_FAKE_OUT] = TRUE, - [MOVE_UPROAR] = TRUE, - [MOVE_STOCKPILE] = TRUE, - [MOVE_SPIT_UP] = TRUE, - [MOVE_SWALLOW] = TRUE, - [MOVE_HEAT_WAVE] = TRUE, - [MOVE_HAIL] = TRUE, - [MOVE_TORMENT] = TRUE, - [MOVE_FLATTER] = TRUE, - [MOVE_WILL_O_WISP] = TRUE, - [MOVE_MEMENTO] = TRUE, - [MOVE_FACADE] = TRUE, - [MOVE_FOCUS_PUNCH] = TRUE, - [MOVE_SMELLING_SALTS] = TRUE, - [MOVE_FOLLOW_ME] = TRUE, - [MOVE_NATURE_POWER] = TRUE, - [MOVE_CHARGE] = TRUE, - [MOVE_TAUNT] = TRUE, - [MOVE_HELPING_HAND] = TRUE, - [MOVE_TRICK] = TRUE, - [MOVE_ROLE_PLAY] = TRUE, - [MOVE_WISH] = TRUE, - [MOVE_ASSIST] = TRUE, - [MOVE_INGRAIN] = TRUE, - [MOVE_SUPERPOWER] = TRUE, - [MOVE_MAGIC_COAT] = TRUE, - [MOVE_RECYCLE] = TRUE, - [MOVE_REVENGE] = TRUE, - [MOVE_BRICK_BREAK] = TRUE, - [MOVE_YAWN] = TRUE, - [MOVE_KNOCK_OFF] = TRUE, - [MOVE_ENDEAVOR] = TRUE, - [MOVE_ERUPTION] = TRUE, - [MOVE_SKILL_SWAP] = TRUE, - [MOVE_IMPRISON] = TRUE, - [MOVE_REFRESH] = TRUE, - [MOVE_GRUDGE] = TRUE, - [MOVE_SNATCH] = TRUE, - [MOVE_SECRET_POWER] = TRUE, - [MOVE_DIVE] = TRUE, - [MOVE_ARM_THRUST] = FALSE, - [MOVE_CAMOUFLAGE] = TRUE, - [MOVE_TAIL_GLOW] = TRUE, - [MOVE_LUSTER_PURGE] = TRUE, - [MOVE_MIST_BALL] = TRUE, - [MOVE_FEATHER_DANCE] = TRUE, - [MOVE_TEETER_DANCE] = TRUE, - [MOVE_BLAZE_KICK] = TRUE, - [MOVE_MUD_SPORT] = TRUE, - [MOVE_ICE_BALL] = FALSE, - [MOVE_NEEDLE_ARM] = TRUE, - [MOVE_SLACK_OFF] = TRUE, - [MOVE_HYPER_VOICE] = TRUE, - [MOVE_POISON_FANG] = FALSE, - [MOVE_CRUSH_CLAW] = TRUE, - [MOVE_BLAST_BURN] = TRUE, - [MOVE_HYDRO_CANNON] = TRUE, - [MOVE_METEOR_MASH] = TRUE, - [MOVE_ASTONISH] = TRUE, - [MOVE_WEATHER_BALL] = TRUE, - [MOVE_AROMATHERAPY] = TRUE, - [MOVE_FAKE_TEARS] = TRUE, - [MOVE_AIR_CUTTER] = TRUE, - [MOVE_OVERHEAT] = TRUE, - [MOVE_ODOR_SLEUTH] = TRUE, - [MOVE_ROCK_TOMB] = TRUE, - [MOVE_SILVER_WIND] = TRUE, - [MOVE_METAL_SOUND] = TRUE, - [MOVE_GRASS_WHISTLE] = TRUE, - [MOVE_TICKLE] = TRUE, - [MOVE_COSMIC_POWER] = TRUE, - [MOVE_WATER_SPOUT] = TRUE, - [MOVE_SIGNAL_BEAM] = TRUE, - [MOVE_SHADOW_PUNCH] = TRUE, - [MOVE_EXTRASENSORY] = TRUE, - [MOVE_SKY_UPPERCUT] = TRUE, - [MOVE_SAND_TOMB] = TRUE, - [MOVE_SHEER_COLD] = TRUE, - [MOVE_MUDDY_WATER] = TRUE, - [MOVE_BULLET_SEED] = FALSE, - [MOVE_AERIAL_ACE] = TRUE, - [MOVE_ICICLE_SPEAR] = FALSE, - [MOVE_IRON_DEFENSE] = TRUE, - [MOVE_BLOCK] = TRUE, - [MOVE_HOWL] = TRUE, - [MOVE_DRAGON_CLAW] = TRUE, - [MOVE_FRENZY_PLANT] = TRUE, - [MOVE_BULK_UP] = TRUE, - [MOVE_BOUNCE] = TRUE, - [MOVE_MUD_SHOT] = FALSE, - [MOVE_POISON_TAIL] = TRUE, - [MOVE_COVET] = TRUE, - [MOVE_VOLT_TACKLE] = TRUE, - [MOVE_MAGICAL_LEAF] = TRUE, - [MOVE_WATER_SPORT] = TRUE, - [MOVE_CALM_MIND] = TRUE, - [MOVE_LEAF_BLADE] = TRUE, - [MOVE_DRAGON_DANCE] = TRUE, - [MOVE_ROCK_BLAST] = FALSE, - [MOVE_SHOCK_WAVE] = TRUE, - [MOVE_WATER_PULSE] = TRUE, - [MOVE_DOOM_DESIRE] = TRUE, - [MOVE_PSYCHO_BOOST] = TRUE, -}; - // The possible questions to ask after the initial 3 WHICH MON questions. Retrieved from here and shuffled // WHAT_ITEM has max 3 occurrences, one for each party member // WHICH_MOVE has max 5 occurrences, defined as NUM_WHICH_MOVE_QUESTIONS diff --git a/src/data/battle_frontier/battle_frontier_trainer_mons.h b/src/data/battle_frontier/battle_frontier_trainer_mons.h index f0a203d56d..af2da019c8 100644 --- a/src/data/battle_frontier/battle_frontier_trainer_mons.h +++ b/src/data/battle_frontier/battle_frontier_trainer_mons.h @@ -1,4 +1,4 @@ -// Also used by early Pkmn Breeder, Collector, and Beauty trainers +// Also used by early PKMN Breeder, Collector, and Beauty trainers #define FRONTIER_MONS_YOUNGSTER_LASS_1 \ FRONTIER_MON_SUNKERN, \ FRONTIER_MON_AZURILL, \ @@ -64,7 +64,7 @@ FRONTIER_MON_VULPIX, \ -1 -// Also used by early Pkmn Breeder, Collector, and Beauty trainers +// Also used by early PKMN Breeder, Collector, and Beauty trainers #define FRONTIER_MONS_SCHOOL_KID_1 \ FRONTIER_MON_PIKACHU, \ FRONTIER_MON_SANDSHREW, \ @@ -152,7 +152,7 @@ FRONTIER_MON_ARIADOS, \ -1 -// Also used by early Pkmn Breeder, Collector, and Beauty trainers +// Also used by early PKMN Breeder, Collector, and Beauty trainers #define FRONTIER_MONS_CAMPER_PICNICKER_1 \ FRONTIER_MON_GRIMER, \ FRONTIER_MON_KRABBY, \ @@ -2833,7 +2833,7 @@ FRONTIER_MON_TYRANITAR_10, \ -1 -// Also used by Pkmn Ranger M/F +// Also used by PKMN Ranger M/F // For both classes, M uses Latios and F uses Latias #define FRONTIER_MONS_COOLTRAINER_2D(lati) \ FRONTIER_MON_ARTICUNO_1, \ @@ -3118,7 +3118,7 @@ FRONTIER_MON_RAPIDASH_4, \ -1 -// Used by Pkmn Ranger M, Gentleman, Running Triathlete, and Cycling Triathlete +// Used by PKMN Ranger M, Gentleman, Running Triathlete, and Cycling Triathlete #define FRONTIER_MONS_GENERAL_A \ FRONTIER_MON_DUGTRIO_4, \ FRONTIER_MON_MEDICHAM_4, \ @@ -3219,7 +3219,7 @@ -1 // Identical to FRONTIER_MONS_GENERAL_A but _3 -// Used by Pkmn Ranger, Running Triathlete, and Cycling Triathlete +// Used by PKMN Ranger, Running Triathlete, and Cycling Triathlete #define FRONTIER_MONS_GENERAL_B \ FRONTIER_MON_DUGTRIO_3, \ FRONTIER_MON_MEDICHAM_3, \ @@ -3320,7 +3320,7 @@ -1 // Similar to FRONTIER_MONS_GENERAL_A/B but _2 -// Used by Pkmn Ranger, Running Triathlete, and Cycling Triathlete +// Used by PKMN Ranger, Running Triathlete, and Cycling Triathlete #define FRONTIER_MONS_GENERAL_C \ FRONTIER_MON_DUGTRIO_2, \ FRONTIER_MON_MEDICHAM_2, \ @@ -3421,7 +3421,7 @@ -1 // Similar to FRONTIER_MONS_GENERAL_C but _1 (would be identical if not for re-ordering) -// Used by Pkmn Ranger, Running Triathlete, Cycling Triathlete +// Used by PKMN Ranger, Running Triathlete, Cycling Triathlete #define FRONTIER_MONS_GENERAL_D \ FRONTIER_MON_DUGTRIO_1, \ FRONTIER_MON_MEDICHAM_1, \ @@ -4245,6 +4245,16 @@ FRONTIER_MON_##legend2##_4, \ FRONTIER_MON_##legend3##_4, \ FRONTIER_MON_##lati##_4, \ + FRONTIER_MON_##legend1##_5, \ + FRONTIER_MON_##legend2##_5, \ + FRONTIER_MON_##legend3##_5, \ + FRONTIER_MON_##lati##_5, \ + FRONTIER_MON_##legend1##_6, \ + FRONTIER_MON_##legend2##_6, \ + FRONTIER_MON_##legend3##_6, \ + FRONTIER_MON_##lati##_6, \ + FRONTIER_MON_##lati##_7, \ + FRONTIER_MON_##lati##_8, \ FRONTIER_MON_GARDEVOIR_5, \ FRONTIER_MON_GARDEVOIR_6, \ FRONTIER_MON_GARDEVOIR_7, \ @@ -4256,49 +4266,7 @@ FRONTIER_MON_METAGROSS_5, \ FRONTIER_MON_METAGROSS_6, \ FRONTIER_MON_METAGROSS_7, \ - FRONTIER_MON_METAGROSS_8, - -#define FRONTIER_MONS_PSYCHIC_2A(lati) \ - FRONTIER_MONS_PSYCHIC_2(lati, ARTICUNO, ZAPDOS, MOLTRES) \ - FRONTIER_MON_##lati##_5, \ - FRONTIER_MON_##lati##_6, \ - FRONTIER_MON_##lati##_7, \ - FRONTIER_MON_##lati##_8, \ - FRONTIER_MON_ARTICUNO_5, \ - FRONTIER_MON_ARTICUNO_6, \ - FRONTIER_MON_ZAPDOS_5, \ - FRONTIER_MON_ZAPDOS_6, \ - FRONTIER_MON_MOLTRES_5, \ - FRONTIER_MON_MOLTRES_6, \ - -1 - -#define FRONTIER_MONS_PSYCHIC_2B(lati) \ - FRONTIER_MONS_PSYCHIC_2(lati, RAIKOU, ENTEI, SUICUNE) \ - FRONTIER_MON_##lati##_5, \ - FRONTIER_MON_##lati##_6, \ - FRONTIER_MON_##lati##_7, \ - FRONTIER_MON_##lati##_8, \ - FRONTIER_MON_RAIKOU_5, \ - FRONTIER_MON_RAIKOU_6, \ - FRONTIER_MON_ENTEI_5, \ - FRONTIER_MON_ENTEI_6, \ - FRONTIER_MON_SUICUNE_5, \ - FRONTIER_MON_SUICUNE_6, \ - -1 - -// Because the regis/latis are swapped here they cant all be merged into the same macro and match -#define FRONTIER_MONS_PSYCHIC_2C(lati) \ - FRONTIER_MONS_PSYCHIC_2(lati, REGIROCK, REGICE, REGISTEEL) \ - FRONTIER_MON_REGIROCK_5, \ - FRONTIER_MON_REGIROCK_6, \ - FRONTIER_MON_REGICE_5, \ - FRONTIER_MON_REGICE_6, \ - FRONTIER_MON_REGISTEEL_5, \ - FRONTIER_MON_REGISTEEL_6, \ - FRONTIER_MON_##lati##_5, \ - FRONTIER_MON_##lati##_6, \ - FRONTIER_MON_##lati##_7, \ - FRONTIER_MON_##lati##_8, \ + FRONTIER_MON_METAGROSS_8, \ -1 #define FRONTIER_MONS_HEX_MANIAC_2A \ @@ -4453,7 +4421,7 @@ -1 // For whatever reason FRONTIER_MON_MAROWAK_2 is in a different order than _1 _3 and _4 -// This order change is the only difference btween FRONITER_MONS_POKEMANIAC_2A and FRONTIER_MONS_POKEMANIAC_2B other than the numbered suffixes +// This order change is the only difference between FRONITER_MONS_POKEMANIAC_2A and FRONTIER_MONS_POKEMANIAC_2B other than the numbered suffixes #define FRONTIER_MONS_POKEMANIAC_2A \ FRONTIER_MON_ZANGOOSE_2, \ FRONTIER_MON_GRANBULL_1, \ @@ -4726,7 +4694,7 @@ FRONTIER_MON_TYRANITAR_10, \ -1 -// Identical to FRONTIER_MONS_COOLTRAINER_2C but with both latias and latios +// Identical to FRONTIER_MONS_COOLTRAINER_2C but with both Latias and Latios #define FRONTIER_MONS_GENTLEMAN_3A \ FRONTIER_MON_GENGAR_1, \ FRONTIER_MON_URSARING_1, \ @@ -4830,7 +4798,7 @@ FRONTIER_MON_TYRANITAR_10, \ -1 -// Identical to FRONTIER_MONS_COOLTRAINER_2D but with both latias and latios +// Identical to FRONTIER_MONS_COOLTRAINER_2D but with both Latias and Latios #define FRONTIER_MONS_GENTLEMAN_3B \ FRONTIER_MON_ARTICUNO_1, \ FRONTIER_MON_ZAPDOS_1, \ @@ -5864,1506 +5832,3 @@ FRONTIER_MON_STARMIE_7, \ FRONTIER_MON_STARMIE_8, \ -1 - -const u16 gBattleFrontierTrainerMons_Brady[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_1 -}; - -const u16 gBattleFrontierTrainerMons_Conner[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_1 -}; - -const u16 gBattleFrontierTrainerMons_Bradley[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_1 -}; - -const u16 gBattleFrontierTrainerMons_Cybil[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_1 -}; - -const u16 gBattleFrontierTrainerMons_Rodette[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_1 -}; - -const u16 gBattleFrontierTrainerMons_Peggy[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_1 -}; - -const u16 gBattleFrontierTrainerMons_Keith[] = -{ - FRONTIER_MONS_SCHOOL_KID_1 -}; - -const u16 gBattleFrontierTrainerMons_Grayson[] = -{ - FRONTIER_MONS_SCHOOL_KID_1 -}; - -const u16 gBattleFrontierTrainerMons_Glenn[] = -{ - FRONTIER_MONS_SCHOOL_KID_1 -}; - -const u16 gBattleFrontierTrainerMons_Liliana[] = -{ - FRONTIER_MONS_SCHOOL_KID_1 -}; - -const u16 gBattleFrontierTrainerMons_Elise[] = -{ - FRONTIER_MONS_SCHOOL_KID_1 -}; - -const u16 gBattleFrontierTrainerMons_Zoey[] = -{ - FRONTIER_MONS_SCHOOL_KID_1 -}; - -const u16 gBattleFrontierTrainerMons_Manuel[] = -{ - FRONTIER_MONS_RICH_BOY_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Russ[] = -{ - FRONTIER_MONS_RICH_BOY_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Dustin[] = -{ - FRONTIER_MONS_RICH_BOY_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Tina[] = -{ - FRONTIER_MONS_RICH_BOY_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Gillian[] = -{ - FRONTIER_MONS_RICH_BOY_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Zoe[] = -{ - FRONTIER_MONS_RICH_BOY_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Chen[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Al[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Mitch[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Anne[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Alize[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Lauren[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Kipp[] = -{ - FRONTIER_MONS_TUBER_1 -}; - -const u16 gBattleFrontierTrainerMons_Jason[] = -{ - FRONTIER_MONS_TUBER_1 -}; - -const u16 gBattleFrontierTrainerMons_John[] = -{ - FRONTIER_MONS_TUBER_1 -}; - -const u16 gBattleFrontierTrainerMons_Ann[] = -{ - FRONTIER_MONS_TUBER_1 -}; - -const u16 gBattleFrontierTrainerMons_Eileen[] = -{ - FRONTIER_MONS_TUBER_1 -}; - -const u16 gBattleFrontierTrainerMons_Carlie[] = -{ - FRONTIER_MONS_TUBER_1 -}; - -const u16 gBattleFrontierTrainerMons_Gordon[] = -{ - FRONTIER_MONS_SWIMMER_M_1 -}; - -const u16 gBattleFrontierTrainerMons_Ayden[] = -{ - FRONTIER_MONS_SWIMMER_M_1 -}; - -const u16 gBattleFrontierTrainerMons_Marco[] = -{ - FRONTIER_MONS_SWIMMER_M_1 -}; - -const u16 gBattleFrontierTrainerMons_Cierra[] = -{ - FRONTIER_MONS_SWIMMER_F_1 -}; - -const u16 gBattleFrontierTrainerMons_Marcy[] = -{ - FRONTIER_MONS_SWIMMER_F_1 -}; - -const u16 gBattleFrontierTrainerMons_Kathy[] = -{ - FRONTIER_MONS_SWIMMER_F_1 -}; - -const u16 gBattleFrontierTrainerMons_Peyton[] = -{ - FRONTIER_MONS_POKEFAN_M_1 -}; - -const u16 gBattleFrontierTrainerMons_Julian[] = -{ - FRONTIER_MONS_POKEFAN_M_1 -}; - -const u16 gBattleFrontierTrainerMons_Quinn[] = -{ - FRONTIER_MONS_POKEFAN_M_1 -}; - -const u16 gBattleFrontierTrainerMons_Haylee[] = -{ - FRONTIER_MONS_POKEFAN_F_1 -}; - -const u16 gBattleFrontierTrainerMons_Amanda[] = -{ - FRONTIER_MONS_POKEFAN_F_1 -}; - -const u16 gBattleFrontierTrainerMons_Stacy[] = -{ - FRONTIER_MONS_POKEFAN_F_1 -}; - -// The below 6 are the early Pkmn Breeder class trainers, which use groups from other general classes -const u16 gBattleFrontierTrainerMons_Rafael[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_1 -}; - -const u16 gBattleFrontierTrainerMons_Oliver[] = -{ - FRONTIER_MONS_SCHOOL_KID_1 -}; - -const u16 gBattleFrontierTrainerMons_Payton[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Pamela[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_1 -}; - -const u16 gBattleFrontierTrainerMons_Eliza[] = -{ - FRONTIER_MONS_SCHOOL_KID_1 -}; - -const u16 gBattleFrontierTrainerMons_Marisa[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Lewis[] = -{ - FRONTIER_MONS_BUG_CATCHER_1_EXTRA(METAPOD, KAKUNA) -}; - -const u16 gBattleFrontierTrainerMons_Yoshi[] = -{ - FRONTIER_MONS_BUG_CATCHER_1_EXTRA(SILCOON, CASCOON) -}; - -const u16 gBattleFrontierTrainerMons_Destin[] = -{ - FRONTIER_MONS_BUG_CATCHER_1 -}; - -const u16 gBattleFrontierTrainerMons_Keon[] = -{ - FRONTIER_MONS_NINJA_BOY_1 -}; - -const u16 gBattleFrontierTrainerMons_Stuart[] = -{ - FRONTIER_MONS_NINJA_BOY_1 -}; - -const u16 gBattleFrontierTrainerMons_Nestor[] = -{ - FRONTIER_MONS_NINJA_BOY_1 -}; - -const u16 gBattleFrontierTrainerMons_Derrick[] = -{ - FRONTIER_MONS_BUG_MANIAC_1 -}; - -const u16 gBattleFrontierTrainerMons_Bryson[] = -{ - FRONTIER_MONS_BUG_MANIAC_1 -}; - -const u16 gBattleFrontierTrainerMons_Clayton[] = -{ - FRONTIER_MONS_BUG_MANIAC_1 -}; - -const u16 gBattleFrontierTrainerMons_Trenton[] = -{ - FRONTIER_MONS_FISHERMAN_1 -}; - -const u16 gBattleFrontierTrainerMons_Jenson[] = -{ - FRONTIER_MONS_FISHERMAN_1 -}; - -const u16 gBattleFrontierTrainerMons_Wesley[] = -{ - FRONTIER_MONS_FISHERMAN_1 -}; - -const u16 gBattleFrontierTrainerMons_Anton[] = -{ - FRONTIER_MONS_RUIN_MANIAC_1 -}; - -const u16 gBattleFrontierTrainerMons_Lawson[] = -{ - FRONTIER_MONS_RUIN_MANIAC_1 -}; - -const u16 gBattleFrontierTrainerMons_Sammy[] = -{ - FRONTIER_MONS_RUIN_MANIAC_1 -}; - -// The below 3 are the early Collector class trainers, which use groups from other general classes -const u16 gBattleFrontierTrainerMons_Arnie[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_1 -}; - -const u16 gBattleFrontierTrainerMons_Adrian[] = -{ - FRONTIER_MONS_SCHOOL_KID_1 -}; - -const u16 gBattleFrontierTrainerMons_Tristan[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Juliana[] = -{ - FRONTIER_MONS_PARASOL_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Rylee[] = -{ - FRONTIER_MONS_PARASOL_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Chelsea[] = -{ - FRONTIER_MONS_PARASOL_LADY_1 -}; - -// The below 3 are the early Beauty class trainers, which use groups from other general classes -const u16 gBattleFrontierTrainerMons_Danela[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_1 -}; - -const u16 gBattleFrontierTrainerMons_Lizbeth[] = -{ - FRONTIER_MONS_SCHOOL_KID_1 -}; - -const u16 gBattleFrontierTrainerMons_Amelia[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Jillian[] = -{ - FRONTIER_MONS_AROMA_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Abbie[] = -{ - FRONTIER_MONS_AROMA_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Briana[] = -{ - FRONTIER_MONS_AROMA_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Antonio[] = -{ - FRONTIER_MONS_GUITARIST_1 -}; - -const u16 gBattleFrontierTrainerMons_Jaden[] = -{ - FRONTIER_MONS_GUITARIST_1 -}; - -const u16 gBattleFrontierTrainerMons_Dakota[] = -{ - FRONTIER_MONS_GUITARIST_1 -}; - -const u16 gBattleFrontierTrainerMons_Brayden[] = -{ - FRONTIER_MONS_BIRD_KEEPER_1 -}; - -const u16 gBattleFrontierTrainerMons_Corson[] = -{ - FRONTIER_MONS_BIRD_KEEPER_1 -}; - -const u16 gBattleFrontierTrainerMons_Trevin[] = -{ - FRONTIER_MONS_BIRD_KEEPER_1 -}; - -const u16 gBattleFrontierTrainerMons_Patrick[] = -{ - FRONTIER_MONS_SAILOR_1 -}; - -const u16 gBattleFrontierTrainerMons_Kaden[] = -{ - FRONTIER_MONS_SAILOR_1 -}; - -const u16 gBattleFrontierTrainerMons_Maxwell[] = -{ - FRONTIER_MONS_SAILOR_1 -}; - -const u16 gBattleFrontierTrainerMons_Daryl[] = -{ - FRONTIER_MONS_HIKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Kenneth[] = -{ - FRONTIER_MONS_HIKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Rich[] = -{ - FRONTIER_MONS_HIKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Caden[] = -{ - FRONTIER_MONS_KINDLER_1 -}; - -const u16 gBattleFrontierTrainerMons_Marlon[] = -{ - FRONTIER_MONS_KINDLER_1 -}; - -const u16 gBattleFrontierTrainerMons_Nash[] = -{ - FRONTIER_MONS_KINDLER_1 -}; - -const u16 gBattleFrontierTrainerMons_Robby[] = -{ - FRONTIER_MONS_RUNNING_TRIATHLETE_1 -}; - -const u16 gBattleFrontierTrainerMons_Reece[] = -{ - FRONTIER_MONS_RUNNING_TRIATHLETE_1 -}; - -const u16 gBattleFrontierTrainerMons_Kathryn[] = -{ - FRONTIER_MONS_RUNNING_TRIATHLETE_1 -}; - -const u16 gBattleFrontierTrainerMons_Ellen[] = -{ - FRONTIER_MONS_RUNNING_TRIATHLETE_1 -}; - -const u16 gBattleFrontierTrainerMons_Ramon[] = -{ - FRONTIER_MONS_SWIMMING_TRIATHLETE_1 -}; - -const u16 gBattleFrontierTrainerMons_Arthur[] = -{ - FRONTIER_MONS_SWIMMING_TRIATHLETE_1 -}; - -const u16 gBattleFrontierTrainerMons_Alondra[] = -{ - FRONTIER_MONS_SWIMMING_TRIATHLETE_1 -}; - -const u16 gBattleFrontierTrainerMons_Adriana[] = -{ - FRONTIER_MONS_SWIMMING_TRIATHLETE_1 -}; - -const u16 gBattleFrontierTrainerMons_Malik[] = -{ - FRONTIER_MONS_CYCLING_TRIATHLETE_1 -}; - -const u16 gBattleFrontierTrainerMons_Jill[] = -{ - FRONTIER_MONS_CYCLING_TRIATHLETE_1 -}; - -const u16 gBattleFrontierTrainerMons_Erik[] = -{ - FRONTIER_MONS_RUNNING_TRIATHLETE_2 -}; - -const u16 gBattleFrontierTrainerMons_Yazmin[] = -{ - FRONTIER_MONS_RUNNING_TRIATHLETE_2 -}; - -const u16 gBattleFrontierTrainerMons_Jamal[] = -{ - FRONTIER_MONS_SWIMMING_TRIATHLETE_2 -}; - -const u16 gBattleFrontierTrainerMons_Leslie[] = -{ - FRONTIER_MONS_SWIMMING_TRIATHLETE_2 -}; - -const u16 gBattleFrontierTrainerMons_Dave[] = -{ - FRONTIER_MONS_CYCLING_TRIATHLETE_2 -}; - -const u16 gBattleFrontierTrainerMons_Carlo[] = -{ - FRONTIER_MONS_CYCLING_TRIATHLETE_2 -}; - -const u16 gBattleFrontierTrainerMons_Emilia[] = -{ - FRONTIER_MONS_CYCLING_TRIATHLETE_2 -}; - -const u16 gBattleFrontierTrainerMons_Dalia[] = -{ - FRONTIER_MONS_CYCLING_TRIATHLETE_2 -}; - -const u16 gBattleFrontierTrainerMons_Hitomi[] = -{ - FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 -}; - -const u16 gBattleFrontierTrainerMons_Ricardo[] = -{ - FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 -}; - -const u16 gBattleFrontierTrainerMons_Shizuka[] = -{ - FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 -}; - -const u16 gBattleFrontierTrainerMons_Joana[] = -{ - FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 -}; - -const u16 gBattleFrontierTrainerMons_Kelly[] = -{ - FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 -}; - -const u16 gBattleFrontierTrainerMons_Rayna[] = -{ - FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 -}; - -const u16 gBattleFrontierTrainerMons_Evan[] = -{ - FRONTIER_MONS_EXPERT_1A -}; - -const u16 gBattleFrontierTrainerMons_Jordan[] = -{ - FRONTIER_MONS_EXPERT_1B -}; - -const u16 gBattleFrontierTrainerMons_Joel[] = -{ - FRONTIER_MONS_EXPERT_1C -}; - -const u16 gBattleFrontierTrainerMons_Kristen[] = -{ - FRONTIER_MONS_EXPERT_1A -}; - -const u16 gBattleFrontierTrainerMons_Selphy[] = -{ - FRONTIER_MONS_EXPERT_1B -}; - -const u16 gBattleFrontierTrainerMons_Chloe[] = -{ - FRONTIER_MONS_EXPERT_1C -}; - -const u16 gBattleFrontierTrainerMons_Norton[] = -{ - FRONTIER_MONS_PSYCHIC_1 -}; - -const u16 gBattleFrontierTrainerMons_Lukas[] = -{ - FRONTIER_MONS_PSYCHIC_1 -}; - -const u16 gBattleFrontierTrainerMons_Zach[] = -{ - FRONTIER_MONS_PSYCHIC_1 -}; - -const u16 gBattleFrontierTrainerMons_Kaitlyn[] = -{ - FRONTIER_MONS_PSYCHIC_1 -}; - -const u16 gBattleFrontierTrainerMons_Breanna[] = -{ - FRONTIER_MONS_PSYCHIC_1 -}; - -const u16 gBattleFrontierTrainerMons_Kendra[] = -{ - FRONTIER_MONS_PSYCHIC_1 -}; - -const u16 gBattleFrontierTrainerMons_Molly[] = -{ - FRONTIER_MONS_HEX_MANIAC_1 -}; - -const u16 gBattleFrontierTrainerMons_Jazmin[] = -{ - FRONTIER_MONS_HEX_MANIAC_1 -}; - -const u16 gBattleFrontierTrainerMons_Kelsey[] = -{ - FRONTIER_MONS_HEX_MANIAC_1 -}; - -const u16 gBattleFrontierTrainerMons_Jalen[] = -{ - FRONTIER_MONS_POKEMANIAC_1 -}; - -const u16 gBattleFrontierTrainerMons_Griffen[] = -{ - FRONTIER_MONS_POKEMANIAC_1 -}; - -const u16 gBattleFrontierTrainerMons_Xander[] = -{ - FRONTIER_MONS_POKEMANIAC_1 -}; - -const u16 gBattleFrontierTrainerMons_Marvin[] = -{ - FRONTIER_MONS_GENTLEMAN_1A -}; - -const u16 gBattleFrontierTrainerMons_Brennan[] = -{ - FRONTIER_MONS_GENTLEMAN_1B -}; - -const u16 gBattleFrontierTrainerMons_Baley[] = -{ - FRONTIER_MONS_BUG_MANIAC_2 -}; - -const u16 gBattleFrontierTrainerMons_Zackary[] = -{ - FRONTIER_MONS_RUIN_MANIAC_2 -}; - -const u16 gBattleFrontierTrainerMons_Gabriel[] = -{ - FRONTIER_MONS_COLLECTOR_1 -}; - -const u16 gBattleFrontierTrainerMons_Emily[] = -{ - FRONTIER_MONS_PARASOL_LADY_2 -}; - -const u16 gBattleFrontierTrainerMons_Jordyn[] = -{ - FRONTIER_MONS_BEAUTY_1 -}; - -const u16 gBattleFrontierTrainerMons_Sofia[] = -{ - FRONTIER_MONS_AROMA_LADY_2 -}; - -const u16 gBattleFrontierTrainerMons_Braden[] = -{ - FRONTIER_MONS_COOLTRAINER_1A -}; - -const u16 gBattleFrontierTrainerMons_Kayden[] = -{ - FRONTIER_MONS_COOLTRAINER_1B -}; - -const u16 gBattleFrontierTrainerMons_Cooper[] = -{ - FRONTIER_MONS_COOLTRAINER_1C -}; - -const u16 gBattleFrontierTrainerMons_Julia[] = -{ - FRONTIER_MONS_COOLTRAINER_1A -}; - -const u16 gBattleFrontierTrainerMons_Amara[] = -{ - FRONTIER_MONS_COOLTRAINER_1B -}; - -const u16 gBattleFrontierTrainerMons_Lynn[] = -{ - FRONTIER_MONS_COOLTRAINER_1C -}; - -const u16 gBattleFrontierTrainerMons_Jovan[] = -{ - FRONTIER_MONS_PKMN_RANGER_1 -}; - -const u16 gBattleFrontierTrainerMons_Dominic[] = -{ - FRONTIER_MONS_PKMN_RANGER_1 -}; - -const u16 gBattleFrontierTrainerMons_Nikolas[] = -{ - FRONTIER_MONS_PKMN_RANGER_1 -}; - -const u16 gBattleFrontierTrainerMons_Valeria[] = -{ - FRONTIER_MONS_PKMN_RANGER_1 -}; - -const u16 gBattleFrontierTrainerMons_Delaney[] = -{ - FRONTIER_MONS_PKMN_RANGER_1 -}; - -const u16 gBattleFrontierTrainerMons_Meghan[] = -{ - FRONTIER_MONS_PKMN_RANGER_1 -}; - -const u16 gBattleFrontierTrainerMons_Roberto[] = -{ - FRONTIER_MONS_DRAGON_TAMER_1 -}; - -const u16 gBattleFrontierTrainerMons_Damian[] = -{ - FRONTIER_MONS_DRAGON_TAMER_1 -}; - -const u16 gBattleFrontierTrainerMons_Brody[] = -{ - FRONTIER_MONS_DRAGON_TAMER_1 -}; - -const u16 gBattleFrontierTrainerMons_Graham[] = -{ - FRONTIER_MONS_DRAGON_TAMER_1 -}; - -const u16 gBattleFrontierTrainerMons_Tylor[] = -{ - FRONTIER_MONS_POKEFAN_2 -}; - -const u16 gBattleFrontierTrainerMons_Jaren[] = -{ - FRONTIER_MONS_POKEFAN_2 -}; - -const u16 gBattleFrontierTrainerMons_Cordell[] = -{ - FRONTIER_MONS_PKMN_BREEDER_M_1 -}; - -const u16 gBattleFrontierTrainerMons_Jazlyn[] = -{ - FRONTIER_MONS_PKMN_BREEDER_F_1 -}; - -const u16 gBattleFrontierTrainerMons_Zachery[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_2 -}; - -const u16 gBattleFrontierTrainerMons_Johan[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_2_NO_DUGTRIO -}; - -const u16 gBattleFrontierTrainerMons_Shea[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_2 -}; - -const u16 gBattleFrontierTrainerMons_Kaila[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_2 -}; - -const u16 gBattleFrontierTrainerMons_Isiah[] = -{ - FRONTIER_MONS_SCHOOL_KID_2 -}; - -const u16 gBattleFrontierTrainerMons_Garrett[] = -{ - FRONTIER_MONS_SCHOOL_KID_2 -}; - -const u16 gBattleFrontierTrainerMons_Haylie[] = -{ - FRONTIER_MONS_SCHOOL_KID_2 -}; - -const u16 gBattleFrontierTrainerMons_Megan[] = -{ - FRONTIER_MONS_SCHOOL_KID_2 -}; - -const u16 gBattleFrontierTrainerMons_Issac[] = -{ - FRONTIER_MONS_RICH_BOY_LADY_2 -}; - -const u16 gBattleFrontierTrainerMons_Quinton[] = -{ - FRONTIER_MONS_RICH_BOY_LADY_2 -}; - -const u16 gBattleFrontierTrainerMons_Salma[] = -{ - FRONTIER_MONS_RICH_BOY_LADY_2 -}; - -const u16 gBattleFrontierTrainerMons_Ansley[] = -{ - FRONTIER_MONS_RICH_BOY_LADY_2 -}; - -const u16 gBattleFrontierTrainerMons_Holden[] = -{ - FRONTIER_MONS_BUG_CATCHER_2 -}; - -const u16 gBattleFrontierTrainerMons_Luca[] = -{ - FRONTIER_MONS_BUG_CATCHER_2 -}; - -const u16 gBattleFrontierTrainerMons_Jamison[] = -{ - FRONTIER_MONS_NINJA_BOY_2 -}; - -const u16 gBattleFrontierTrainerMons_Gunnar[] = -{ - FRONTIER_MONS_NINJA_BOY_2 -}; - -const u16 gBattleFrontierTrainerMons_Craig[] = -{ - FRONTIER_MONS_TUBER_2 -}; - -const u16 gBattleFrontierTrainerMons_Pierce[] = -{ - FRONTIER_MONS_TUBER_2 -}; - -const u16 gBattleFrontierTrainerMons_Regina[] = -{ - FRONTIER_MONS_TUBER_2 -}; - -const u16 gBattleFrontierTrainerMons_Alison[] = -{ - FRONTIER_MONS_TUBER_2 -}; - -const u16 gBattleFrontierTrainerMons_Hank[] = -{ - FRONTIER_MONS_BUG_MANIAC_3 -}; - -const u16 gBattleFrontierTrainerMons_Earl[] = -{ - FRONTIER_MONS_BUG_MANIAC_3 -}; - -const u16 gBattleFrontierTrainerMons_Ramiro[] = -{ - FRONTIER_MONS_FISHERMAN_2 -}; - -const u16 gBattleFrontierTrainerMons_Hunter[] = -{ - FRONTIER_MONS_FISHERMAN_2 -}; - -const u16 gBattleFrontierTrainerMons_Aiden[] = -{ - FRONTIER_MONS_RUIN_MANIAC_3 -}; - -const u16 gBattleFrontierTrainerMons_Xavier[] = -{ - FRONTIER_MONS_RUIN_MANIAC_3 -}; - -const u16 gBattleFrontierTrainerMons_Clinton[] = -{ - FRONTIER_MONS_COLLECTOR_2 -}; - -const u16 gBattleFrontierTrainerMons_Jesse[] = -{ - FRONTIER_MONS_COLLECTOR_2 -}; - -const u16 gBattleFrontierTrainerMons_Eduardo[] = -{ - FRONTIER_MONS_GUITARIST_2 -}; - -const u16 gBattleFrontierTrainerMons_Hal[] = -{ - FRONTIER_MONS_GUITARIST_2 -}; - -const u16 gBattleFrontierTrainerMons_Gage[] = -{ - FRONTIER_MONS_BIRD_KEEPER_2 -}; - -const u16 gBattleFrontierTrainerMons_Arnold[] = -{ - FRONTIER_MONS_BIRD_KEEPER_2 -}; - -const u16 gBattleFrontierTrainerMons_Jarrett[] = -{ - FRONTIER_MONS_SAILOR_2 -}; - -const u16 gBattleFrontierTrainerMons_Garett[] = -{ - FRONTIER_MONS_SAILOR_2 -}; - -const u16 gBattleFrontierTrainerMons_Emanuel[] = -{ - FRONTIER_MONS_HIKER_2 -}; - -const u16 gBattleFrontierTrainerMons_Gustavo[] = -{ - FRONTIER_MONS_HIKER_2 -}; - -const u16 gBattleFrontierTrainerMons_Kameron[] = -{ - FRONTIER_MONS_KINDLER_2 -}; - -const u16 gBattleFrontierTrainerMons_Alfredo[] = -{ - FRONTIER_MONS_KINDLER_2 -}; - -const u16 gBattleFrontierTrainerMons_Ruben[] = -{ - FRONTIER_MONS_GENTLEMAN_2 -}; - -const u16 gBattleFrontierTrainerMons_Lamar[] = -{ - FRONTIER_MONS_GENTLEMAN_2 -}; - -const u16 gBattleFrontierTrainerMons_Jaxon[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_3 -}; - -const u16 gBattleFrontierTrainerMons_Logan[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_3 -}; - -const u16 gBattleFrontierTrainerMons_Emilee[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_3 -}; - -const u16 gBattleFrontierTrainerMons_Josie[] = -{ - FRONTIER_MONS_YOUNGSTER_LASS_3 -}; - -const u16 gBattleFrontierTrainerMons_Armando[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_2 -}; - -const u16 gBattleFrontierTrainerMons_Skyler[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_2 -}; - -const u16 gBattleFrontierTrainerMons_Ruth[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_2 -}; - -const u16 gBattleFrontierTrainerMons_Melody[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_2 -}; - -const u16 gBattleFrontierTrainerMons_Pedro[] = -{ - FRONTIER_MONS_SWIMMER_M_2 -}; - -const u16 gBattleFrontierTrainerMons_Erick[] = -{ - FRONTIER_MONS_SWIMMER_M_2 -}; - -const u16 gBattleFrontierTrainerMons_Elaine[] = -{ - FRONTIER_MONS_SWIMMER_F_2 -}; - -const u16 gBattleFrontierTrainerMons_Joyce[] = -{ - FRONTIER_MONS_SWIMMER_F_2 -}; - -const u16 gBattleFrontierTrainerMons_Todd[] = -{ - FRONTIER_MONS_POKEFAN_3 -}; - -const u16 gBattleFrontierTrainerMons_Gavin[] = -{ - FRONTIER_MONS_POKEFAN_3 -}; - -const u16 gBattleFrontierTrainerMons_Malory[] = -{ - FRONTIER_MONS_POKEFAN_3 -}; - -const u16 gBattleFrontierTrainerMons_Esther[] = -{ - FRONTIER_MONS_POKEFAN_3 -}; - -const u16 gBattleFrontierTrainerMons_Oscar[] = -{ - FRONTIER_MONS_PKMN_BREEDER_2 -}; - -const u16 gBattleFrontierTrainerMons_Wilson[] = -{ - FRONTIER_MONS_PKMN_BREEDER_2 -}; - -const u16 gBattleFrontierTrainerMons_Clare[] = -{ - FRONTIER_MONS_PKMN_BREEDER_2 -}; - -const u16 gBattleFrontierTrainerMons_Tess[] = -{ - FRONTIER_MONS_PKMN_BREEDER_2 -}; - -const u16 gBattleFrontierTrainerMons_Leon[] = -{ - FRONTIER_MONS_COOLTRAINER_M_2A -}; - -const u16 gBattleFrontierTrainerMons_Alonzo[] = -{ - FRONTIER_MONS_COOLTRAINER_M_2B -}; - -const u16 gBattleFrontierTrainerMons_Vince[] = -{ - FRONTIER_MONS_COOLTRAINER_2C(LATIOS) -}; - -const u16 gBattleFrontierTrainerMons_Bryon[] = -{ - FRONTIER_MONS_COOLTRAINER_2D(LATIOS) -}; - -const u16 gBattleFrontierTrainerMons_Ava[] = -{ - FRONTIER_MONS_COOLTRAINER_F_2A -}; - -const u16 gBattleFrontierTrainerMons_Miriam[] = -{ - FRONTIER_MONS_COOLTRAINER_F_2B -}; - -const u16 gBattleFrontierTrainerMons_Carrie[] = -{ - FRONTIER_MONS_COOLTRAINER_2C(LATIAS) -}; - -const u16 gBattleFrontierTrainerMons_Gillian2[] = -{ - FRONTIER_MONS_COOLTRAINER_2D(LATIAS) -}; - -const u16 gBattleFrontierTrainerMons_Tyler[] = -{ - FRONTIER_MONS_GENERAL_A -}; - -const u16 gBattleFrontierTrainerMons_Chaz[] = -{ - FRONTIER_MONS_GENERAL_B -}; - -const u16 gBattleFrontierTrainerMons_Nelson[] = -{ - FRONTIER_MONS_COOLTRAINER_2D(LATIOS) -}; - -const u16 gBattleFrontierTrainerMons_Shania[] = -{ - FRONTIER_MONS_GENERAL_C -}; - -const u16 gBattleFrontierTrainerMons_Stella[] = -{ - FRONTIER_MONS_GENERAL_D -}; - -const u16 gBattleFrontierTrainerMons_Dorine[] = -{ - FRONTIER_MONS_COOLTRAINER_2D(LATIAS) -}; - -const u16 gBattleFrontierTrainerMons_Maddox[] = -{ - FRONTIER_MONS_DRAGON_TAMER_2 -}; - -const u16 gBattleFrontierTrainerMons_Davin[] = -{ - FRONTIER_MONS_DRAGON_TAMER_2 -}; - -const u16 gBattleFrontierTrainerMons_Trevon[] = -{ - FRONTIER_MONS_DRAGON_TAMER_2 -}; - -const u16 gBattleFrontierTrainerMons_Mateo[] = -{ - FRONTIER_MONS_BLACK_BELT_2A -}; - -const u16 gBattleFrontierTrainerMons_Bret[] = -{ - FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2B -}; - -const u16 gBattleFrontierTrainerMons_Raul[] = -{ - FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2C -}; - -const u16 gBattleFrontierTrainerMons_Kay[] = -{ - FRONTIER_MONS_BATTLE_GIRL_2A -}; - -const u16 gBattleFrontierTrainerMons_Elena[] = -{ - FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2B -}; - -const u16 gBattleFrontierTrainerMons_Alana[] = -{ - FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2C -}; - -const u16 gBattleFrontierTrainerMons_Alexas[] = -{ - FRONTIER_MONS_EXPERT_2A(TYRANITAR) -}; - -const u16 gBattleFrontierTrainerMons_Weston[] = -{ - FRONTIER_MONS_EXPERT_2B(LATIOS) -}; - -const u16 gBattleFrontierTrainerMons_Jasper[] = -{ - FRONTIER_MONS_EXPERT_2C(TYRANITAR) -}; - -const u16 gBattleFrontierTrainerMons_Nadia[] = -{ - FRONTIER_MONS_EXPERT_2A(DRAGONITE) -}; - -const u16 gBattleFrontierTrainerMons_Miranda[] = -{ - FRONTIER_MONS_EXPERT_2B(LATIAS) -}; - -const u16 gBattleFrontierTrainerMons_Emma[] = -{ - FRONTIER_MONS_EXPERT_2C(DRAGONITE) -}; - -const u16 gBattleFrontierTrainerMons_Rolando[] = -{ - FRONTIER_MONS_PSYCHIC_2A(LATIOS) -}; - -const u16 gBattleFrontierTrainerMons_Stanly[] = -{ - FRONTIER_MONS_PSYCHIC_2B(LATIOS) -}; - -const u16 gBattleFrontierTrainerMons_Dario[] = -{ - FRONTIER_MONS_PSYCHIC_2C(LATIOS) -}; - -const u16 gBattleFrontierTrainerMons_Karlee[] = -{ - FRONTIER_MONS_PSYCHIC_2A(LATIAS) -}; - -const u16 gBattleFrontierTrainerMons_Jaylin[] = -{ - FRONTIER_MONS_PSYCHIC_2B(LATIAS) -}; - -const u16 gBattleFrontierTrainerMons_Ingrid[] = -{ - FRONTIER_MONS_PSYCHIC_2C(LATIAS) -}; - -const u16 gBattleFrontierTrainerMons_Delilah[] = -{ - FRONTIER_MONS_HEX_MANIAC_2A -}; - -const u16 gBattleFrontierTrainerMons_Carly[] = -{ - FRONTIER_MONS_HEX_MANIAC_2B -}; - -const u16 gBattleFrontierTrainerMons_Lexie[] = -{ - FRONTIER_MONS_HEX_MANIAC_2C -}; - -const u16 gBattleFrontierTrainerMons_Miller[] = -{ - FRONTIER_MONS_POKEMANIAC_2A -}; - -const u16 gBattleFrontierTrainerMons_Marv[] = -{ - FRONTIER_MONS_POKEMANIAC_2B -}; - -const u16 gBattleFrontierTrainerMons_Layton[] = -{ - FRONTIER_MONS_POKEMANIAC_2C -}; - -const u16 gBattleFrontierTrainerMons_Brooks[] = -{ - FRONTIER_MONS_GENERAL_A -}; - -const u16 gBattleFrontierTrainerMons_Gregory[] = -{ - FRONTIER_MONS_GENTLEMAN_3A -}; - -const u16 gBattleFrontierTrainerMons_Reese[] = -{ - FRONTIER_MONS_GENTLEMAN_3B -}; - -const u16 gBattleFrontierTrainerMons_Mason[] = -{ - FRONTIER_MONS_GENERAL_A -}; - -const u16 gBattleFrontierTrainerMons_Toby[] = -{ - FRONTIER_MONS_GENERAL_B -}; - -const u16 gBattleFrontierTrainerMons_Dorothy[] = -{ - FRONTIER_MONS_GENERAL_C -}; - -const u16 gBattleFrontierTrainerMons_Piper[] = -{ - FRONTIER_MONS_GENERAL_D -}; - -const u16 gBattleFrontierTrainerMons_Finn[] = -{ - FRONTIER_MONS_SWIMMING_TRIATHLETE_M_3 -}; - -const u16 gBattleFrontierTrainerMons_Samir[] = -{ - FRONTIER_MONS_SWIMMING_TRIATHLETE_M_3 -}; - -const u16 gBattleFrontierTrainerMons_Fiona[] = -{ - FRONTIER_MONS_SWIMMING_TRIATHLETE_F_3 -}; - -const u16 gBattleFrontierTrainerMons_Gloria[] = -{ - FRONTIER_MONS_SWIMMING_TRIATHLETE_F_3 -}; - -const u16 gBattleFrontierTrainerMons_Nico[] = -{ - FRONTIER_MONS_GENERAL_A -}; - -const u16 gBattleFrontierTrainerMons_Jeremy[] = -{ - FRONTIER_MONS_GENERAL_B -}; - -const u16 gBattleFrontierTrainerMons_Caitlin[] = -{ - FRONTIER_MONS_GENERAL_C -}; - -const u16 gBattleFrontierTrainerMons_Reena[] = -{ - FRONTIER_MONS_GENERAL_D -}; - -const u16 gBattleFrontierTrainerMons_Avery[] = -{ - FRONTIER_MONS_BUG_MANIAC_4 -}; - -const u16 gBattleFrontierTrainerMons_Liam[] = -{ - FRONTIER_MONS_BUG_MANIAC_4 -}; - -const u16 gBattleFrontierTrainerMons_Theo[] = -{ - FRONTIER_MONS_FISHERMAN_3 -}; - -const u16 gBattleFrontierTrainerMons_Bailey[] = -{ - FRONTIER_MONS_FISHERMAN_3 -}; - -const u16 gBattleFrontierTrainerMons_Hugo[] = -{ - FRONTIER_MONS_RUIN_MANIAC_4 -}; - -const u16 gBattleFrontierTrainerMons_Bryce[] = -{ - FRONTIER_MONS_RUIN_MANIAC_4 -}; - -const u16 gBattleFrontierTrainerMons_Gideon[] = -{ - FRONTIER_MONS_COLLECTOR_3 -}; - -const u16 gBattleFrontierTrainerMons_Triston[] = -{ - FRONTIER_MONS_COLLECTOR_3 -}; - -const u16 gBattleFrontierTrainerMons_Charles[] = -{ - FRONTIER_MONS_GUITARIST_3A -}; - -const u16 gBattleFrontierTrainerMons_Raymond[] = -{ - FRONTIER_MONS_GUITARIST_3B -}; - -const u16 gBattleFrontierTrainerMons_Dirk[] = -{ - FRONTIER_MONS_BIRD_KEEPER_3 -}; - -const u16 gBattleFrontierTrainerMons_Harold[] = -{ - FRONTIER_MONS_BIRD_KEEPER_3 -}; - -const u16 gBattleFrontierTrainerMons_Omar[] = -{ - FRONTIER_MONS_SAILOR_3 -}; - -const u16 gBattleFrontierTrainerMons_Peter[] = -{ - FRONTIER_MONS_SAILOR_3 -}; - -const u16 gBattleFrontierTrainerMons_Dev[] = -{ - FRONTIER_MONS_HIKER_3 -}; - -const u16 gBattleFrontierTrainerMons_Corey[] = -{ - FRONTIER_MONS_HIKER_3 -}; - -const u16 gBattleFrontierTrainerMons_Andre[] = -{ - FRONTIER_MONS_KINDLER_3 -}; - -const u16 gBattleFrontierTrainerMons_Ferris[] = -{ - FRONTIER_MONS_KINDLER_3 -}; - -const u16 gBattleFrontierTrainerMons_Alivia[] = -{ - FRONTIER_MONS_PARASOL_LADY_3 -}; - -const u16 gBattleFrontierTrainerMons_Paige[] = -{ - FRONTIER_MONS_PARASOL_LADY_3 -}; - -const u16 gBattleFrontierTrainerMons_Anya[] = -{ - FRONTIER_MONS_EEVEELUTIONS -}; - -const u16 gBattleFrontierTrainerMons_Dawn[] = -{ - FRONTIER_MONS_BEAUTY_2 -}; - -const u16 gBattleFrontierTrainerMons_Abby[] = -{ - FRONTIER_MONS_AROMA_LADY_3 -}; - -const u16 gBattleFrontierTrainerMons_Gretel[] = -{ - FRONTIER_MONS_AROMA_LADY_3 -}; diff --git a/src/data/battle_frontier/battle_frontier_trainers.h b/src/data/battle_frontier/battle_frontier_trainers.h index 1cae890c25..1014ffaae2 100644 --- a/src/data/battle_frontier/battle_frontier_trainers.h +++ b/src/data/battle_frontier/battle_frontier_trainers.h @@ -6,7 +6,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_NEVER, EC_WORD_GOING, EC_WORD_TO, EC_WORD_LOSE, EC_WORD_EXCL}, .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_QUES, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WHAT, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Brady + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_1} }, [FRONTIER_TRAINER_CONNER] = { .facilityClass = FACILITY_CLASS_YOUNGSTER, @@ -14,7 +14,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_BUG, EC_WORD_ME, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechWin = {EC_WORD_A, EC_WORD_WIN, EC_WORD_IS, EC_WORD_JUST, EC_WORD_AWESOME, EC_EMPTY_WORD}, .speechLose = {EC_WORD_DARN, EC_WORD_ELLIPSIS, EC_WORD_LOSING, EC_WORD_DOES, EC_WORD_BUG, EC_WORD_ME}, - .monSet = gBattleFrontierTrainerMons_Conner + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_1} }, [FRONTIER_TRAINER_BRADLEY] = { .facilityClass = FACILITY_CLASS_YOUNGSTER, @@ -22,7 +22,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HEY_THERE, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_MY, EC_WORD_OPPONENT, EC_WORD_TODAY}, .speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_SEE_YA, EC_WORD_LATER, EC_WORD_EXCL}, .speechLose = {EC_WORD_TOMORROW, EC_WORD_IS, EC_WORD_WHEN, EC_WORD_WE, EC_WORD_REALLY, EC_WORD_BATTLE}, - .monSet = gBattleFrontierTrainerMons_Bradley + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_1} }, [FRONTIER_TRAINER_CYBIL] = { .facilityClass = FACILITY_CLASS_LASS, @@ -30,7 +30,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU_RE, EC_WORD_REALLY, EC_WORD_NOT_VERY, EC_WORD_SCARY, EC_WORD_AT, EC_WORD_ALL}, .speechWin = {EC_WORD_IT_S, EC_WORD_SAD, EC_WORD_TO, EC_WORD_SEE, EC_WORD_YOU, EC_MOVE2(STRUGGLE)}, .speechLose = {EC_WORD_THIS, EC_WORD_CAN_T, EC_WORD_BE, EC_WORD_HAPPENING, EC_WORD_TO_ME, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Cybil + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_1} }, [FRONTIER_TRAINER_RODETTE] = { .facilityClass = FACILITY_CLASS_LASS, @@ -38,7 +38,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_OH, EC_WORD_THIS, EC_WORD_IS, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_EXCL}, .speechWin = {EC_WORD_IT_S, EC_WORD_INCREDIBLE, EC_WORD_HOW, EC_WORD_STRONG, EC_WORD_I_AM, EC_WORD_EXCL}, .speechLose = {EC_WORD_OH_DEAR, EC_WORD_ELLIPSIS, EC_WORD_I_AM, EC_WORD_JUST, EC_WORD_NO, EC_WORD_GOOD}, - .monSet = gBattleFrontierTrainerMons_Rodette + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_1} }, [FRONTIER_TRAINER_PEGGY] = { .facilityClass = FACILITY_CLASS_LASS, @@ -46,7 +46,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_TO, EC_WORD_BE, EC_WORD_DESTROYED, EC_WORD_EXCL}, .speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_LOLLING, EC_WORD_EXCL}, .speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_SAD, EC_WORD_THANKS, EC_WORD_TO, EC_WORD_YOU}, - .monSet = gBattleFrontierTrainerMons_Peggy + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_1} }, [FRONTIER_TRAINER_KEITH] = { .facilityClass = FACILITY_CLASS_SCHOOL_KID_M, @@ -54,7 +54,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_JUST, EC_WORD_STUDY, EC_WORD_YOU, EC_WORD_KNOW}, .speechWin = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_STUDY, EC_WORD_ENOUGH, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MORE, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Keith + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_1} }, [FRONTIER_TRAINER_GRAYSON] = { .facilityClass = FACILITY_CLASS_SCHOOL_KID_M, @@ -62,7 +62,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_BATTLE, EC_WORD_ISN_T, EC_WORD_CHILD_S_PLAY, EC_WORD_EXCL}, .speechWin = {EC_WORD_YOU_RE, EC_WORD_DONE, EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_QUES, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WE, EC_WORD_WERE, EC_WORD_LIKE, EC_WORD_TOYS, EC_WORD_TO, EC_WORD_YOU}, - .monSet = gBattleFrontierTrainerMons_Grayson + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_1} }, [FRONTIER_TRAINER_GLENN] = { .facilityClass = FACILITY_CLASS_SCHOOL_KID_M, @@ -70,7 +70,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_COOL, EC_WORD_IF_I_WIN, EC_EMPTY_WORD}, .speechWin = {EC_WORD_COOL, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM}, .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_GOING, EC_WORD_TO, EC_WORD_BE, EC_WORD_COOL}, - .monSet = gBattleFrontierTrainerMons_Glenn + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_1} }, [FRONTIER_TRAINER_LILIANA] = { .facilityClass = FACILITY_CLASS_SCHOOL_KID_F, @@ -78,7 +78,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_GIVE_UP, EC_WORD_UNTIL, EC_WORD_I, EC_WORD_WIN}, .speechWin = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NO, EC_WORD_SURRENDER, EC_WORD_IN, EC_WORD_ME}, .speechLose = {EC_WORD_THAT_S, EC_WORD_IT, EC_WORD_ELLIPSIS, EC_WORD_I, EC_WORD_GIVE_UP, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Liliana + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_1} }, [FRONTIER_TRAINER_ELISE] = { .facilityClass = FACILITY_CLASS_SCHOOL_KID_F, @@ -86,7 +86,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_IS, EC_WORD_FROM, EC_WORD_MY, EC_WORD_FATHER}, .speechWin = {EC_WORD_I, EC_WORD_WIN, EC_WORD_EXCL, EC_WORD_FATHER, EC_WORD_I_VE, EC_WORD_WON}, .speechLose = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_FATHER, EC_WORD_FOR, EC_WORD_I_VE, EC_WORD_LOST}, - .monSet = gBattleFrontierTrainerMons_Elise + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_1} }, [FRONTIER_TRAINER_ZOEY] = { .facilityClass = FACILITY_CLASS_SCHOOL_KID_F, @@ -94,7 +94,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_PLEASE, EC_WORD_BATTLE, EC_WORD_LIKE, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_IT}, .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH}, .speechLose = {EC_WORD_WERE, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_BEING, EC_WORD_SERIOUS, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Zoey + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_1} }, [FRONTIER_TRAINER_MANUEL] = { .facilityClass = FACILITY_CLASS_RICH_BOY, @@ -102,7 +102,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_ME, EC_WORD_LOSE, EC_WORD_QUES, EC_WORD_THAT_S, EC_WORD_PREPOSTEROUS, EC_WORD_EXCL}, .speechWin = {EC_WORD_NATURALLY, EC_WORD_I, EC_WORD_WIN, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_LOST, EC_WORD_MOTHER}, - .monSet = gBattleFrontierTrainerMons_Manuel + .monSet = (const u16[]){FRONTIER_MONS_RICH_BOY_LADY_1} }, [FRONTIER_TRAINER_RUSS] = { .facilityClass = FACILITY_CLASS_RICH_BOY, @@ -110,7 +110,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THEY, EC_WORD_ALL, EC_WORD_WANT, EC_WORD_MY, EC_WORD_FABULOUS, EC_WORD_POKEMON}, .speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_HAVE, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_PARTY}, .speechLose = {EC_WORD_HOW, EC_WORD_COULD, EC_WORD_YOU, EC_WORD_DO, EC_WORD_THAT, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Russ + .monSet = (const u16[]){FRONTIER_MONS_RICH_BOY_LADY_1} }, [FRONTIER_TRAINER_DUSTIN] = { .facilityClass = FACILITY_CLASS_RICH_BOY, @@ -118,7 +118,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_COOL, EC_WORD_POKEMON, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_MYSELF, EC_WORD_WHEN_I_WIN, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_MYSELF, EC_WORD_IF_I_LOSE, EC_WORD_TOO, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Dustin + .monSet = (const u16[]){FRONTIER_MONS_RICH_BOY_LADY_1} }, [FRONTIER_TRAINER_TINA] = { .facilityClass = FACILITY_CLASS_LADY, @@ -126,7 +126,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_IF_I_WIN, EC_WORD_YOU, EC_WORD_CAN, EC_WORD_HAVE, EC_WORD_A, EC_MOVE2(SWEET_KISS)}, .speechWin = {EC_WORD_HERE_IT_IS, EC_WORD_YOUR, EC_MOVE2(SWEET_KISS), EC_WORD_FROM, EC_WORD_MY, EC_POKEMON_NATIONAL(JYNX)}, .speechLose = {EC_WORD_YOU, EC_WORD_WANT, EC_WORD_A, EC_MOVE(SWIFT), EC_MOVE2(MEGA_KICK), EC_WORD_INSTEAD}, - .monSet = gBattleFrontierTrainerMons_Tina + .monSet = (const u16[]){FRONTIER_MONS_RICH_BOY_LADY_1} }, [FRONTIER_TRAINER_GILLIAN1] = { .facilityClass = FACILITY_CLASS_LADY, @@ -134,7 +134,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THE, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_IS, EC_WORD_SO, EC_WORD_YESTERDAY}, .speechWin = {EC_WORD_POKEMON, EC_WORD_NEVER, EC_WORD_GO, EC_WORD_OUT, EC_WORD_OF, EC_WORD_FASHION}, .speechLose = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_DISAPPOINT, EC_WORD_ME, EC_EMPTY_WORD, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Gillian + .monSet = (const u16[]){FRONTIER_MONS_RICH_BOY_LADY_1} }, [FRONTIER_TRAINER_ZOE] = { .facilityClass = FACILITY_CLASS_LADY, @@ -142,7 +142,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_HAVEN_T, EC_WORD_A, EC_WORD_WORRY, EC_WORD_AT, EC_WORD_ALL}, .speechWin = {EC_WORD_LIFE, EC_WORD_IS, EC_WORD_ALWAYS, EC_WORD_GOOD, EC_WORD_TO_ME, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_WORRY, EC_WORD_ABOUT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_SKILL}, - .monSet = gBattleFrontierTrainerMons_Zoe + .monSet = (const u16[]){FRONTIER_MONS_RICH_BOY_LADY_1} }, [FRONTIER_TRAINER_CHEN] = { .facilityClass = FACILITY_CLASS_CAMPER, @@ -150,7 +150,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_TOTALLY, EC_WORD_READY, EC_WORD_TO, EC_WORD_ROCK, EC_WORD_TODAY}, .speechWin = {EC_WORD_I_AM, EC_WORD_READY, EC_WORD_TO, EC_WORD_GO, EC_WORD_ON, EC_WORD_EXCL}, .speechLose = {EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_MY, EC_MOVE(FOCUS_ENERGY), EC_WORD_AND, EC_WORD_TOUGHNESS}, - .monSet = gBattleFrontierTrainerMons_Chen + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_1} }, [FRONTIER_TRAINER_AL] = { .facilityClass = FACILITY_CLASS_CAMPER, @@ -158,7 +158,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOUR, EC_WORD_LOOK, EC_WORD_SAYS, EC_WORD_YOU_RE, EC_WORD_REALLY, EC_WORD_TOUGH}, .speechWin = {EC_WORD_IT_S, EC_WORD_ME, EC_WORD_WHO_IS, EC_WORD_REALLY, EC_WORD_TOUGH, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I_AM, EC_WORD_RIGHT, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_REALLY, EC_WORD_TOUGH}, - .monSet = gBattleFrontierTrainerMons_Al + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_1} }, [FRONTIER_TRAINER_MITCH] = { .facilityClass = FACILITY_CLASS_CAMPER, @@ -166,7 +166,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MOTHER, EC_WORD_NATURE, EC_WORD_IS, EC_WORD_MY, EC_WORD_ALLY, EC_WORD_EXCL}, .speechWin = {EC_WORD_WAS, EC_WORD_THAT, EC_WORD_ENOUGH, EC_WORD_FOR, EC_WORD_YOU, EC_WORD_QUES}, .speechLose = {EC_WORD_MOTHER, EC_WORD_NATURE, EC_WORD_DIDN_T, EC_WORD_LET_ME_WIN, EC_WORD_QUES, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Mitch + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_1} }, [FRONTIER_TRAINER_ANNE] = { .facilityClass = FACILITY_CLASS_PICNICKER, @@ -174,7 +174,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_LET_S, EC_WORD_BATTLE, EC_WORD_NOW}, .speechWin = {EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_IS, EC_WORD_OVERWHELMING, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Anne + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_1} }, [FRONTIER_TRAINER_ALIZE] = { .facilityClass = FACILITY_CLASS_PICNICKER, @@ -182,7 +182,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_CUTE, EC_WORD_AND, EC_WORD_AWFULLY, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_ME}, .speechWin = {EC_WORD_YUP, EC_WORD_I_AM, EC_WORD_CUTE, EC_WORD_AND, EC_WORD_AWFULLY, EC_WORD_STRONG}, .speechLose = {EC_WORD_I_AM, EC_WORD_WEAK, EC_WORD_ELLIPSIS, EC_WORD_BUT, EC_WORD_I_AM, EC_WORD_CUTE}, - .monSet = gBattleFrontierTrainerMons_Alize + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_1} }, [FRONTIER_TRAINER_LAUREN] = { .facilityClass = FACILITY_CLASS_PICNICKER, @@ -190,7 +190,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_OLD, EC_WORD_BUT, EC_WORD_I_AM, EC_WORD_ALSO, EC_WORD_GOOD}, .speechWin = {EC_WORD_I, EC_WORD_SAID, EC_WORD_I_WAS, EC_WORD_OLD, EC_WORD_BUT, EC_WORD_GOOD}, .speechLose = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_WEIRD, EC_WORD_DREAM, EC_WORD_THAT_WAS, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Lauren + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_1} }, [FRONTIER_TRAINER_KIPP] = { .facilityClass = FACILITY_CLASS_TUBER_M, @@ -198,7 +198,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_IF_I_WIN, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_GO, EC_MOVE2(SURF)}, .speechWin = {EC_WORD_YEAH, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_OFF, EC_WORD_TO, EC_MOVE2(SURF)}, .speechLose = {EC_WORD_OH, EC_WORD_NO, EC_WORD_EXCL, EC_WORD_A, EC_MOVE(WHIRLPOOL), EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Kipp + .monSet = (const u16[]){FRONTIER_MONS_TUBER_1} }, [FRONTIER_TRAINER_JASON] = { .facilityClass = FACILITY_CLASS_TUBER_M, @@ -206,7 +206,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_TEACH, EC_WORD_ME, EC_WORD_A, EC_WORD_GOOD, EC_WORD_STRATEGY, EC_EMPTY_WORD}, .speechWin = {EC_WORD_THAT_WAS, EC_WORD_YOUR, EC_WORD_GOOD, EC_WORD_STRATEGY, EC_WORD_QUES_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WOW, EC_WORD_THAT, EC_WORD_IS, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_STRATEGY}, - .monSet = gBattleFrontierTrainerMons_Jason + .monSet = (const u16[]){FRONTIER_MONS_TUBER_1} }, [FRONTIER_TRAINER_JOHN] = { .facilityClass = FACILITY_CLASS_TUBER_M, @@ -214,7 +214,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_PRETTY, EC_WORD_NEW, EC_WORD_TRAINER, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I_AM, EC_WORD_NEW, EC_WORD_BUT, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL}, .speechLose = {EC_WORD_I_AM, EC_WORD_NEW, EC_WORD_SO, EC_WORD_WHAT, EC_WORD_IF_I_LOSE, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_John + .monSet = (const u16[]){FRONTIER_MONS_TUBER_1} }, [FRONTIER_TRAINER_ANN] = { .facilityClass = FACILITY_CLASS_TUBER_F, @@ -222,7 +222,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_IT_S, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_IT, EC_WORD_REALLY, EC_WORD_IS}, .speechWin = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_I, EC_WORD_CAN, EC_WORD_CRY}, .speechLose = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SAD, EC_WORD_I, EC_WORD_WILL, EC_WORD_CRY}, - .monSet = gBattleFrontierTrainerMons_Ann + .monSet = (const u16[]){FRONTIER_MONS_TUBER_1} }, [FRONTIER_TRAINER_EILEEN] = { .facilityClass = FACILITY_CLASS_TUBER_F, @@ -230,7 +230,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_LET_S, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_OK_QUES}, .speechWin = {EC_WORD_SO, EC_WORD_THIS, EC_WORD_IS, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_FEELING}, .speechLose = {EC_WORD_AN, EC_WORD_ADULT, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_YOU, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Eileen + .monSet = (const u16[]){FRONTIER_MONS_TUBER_1} }, [FRONTIER_TRAINER_CARLIE] = { .facilityClass = FACILITY_CLASS_TUBER_F, @@ -238,7 +238,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_SUMMER, EC_WORD_VACATION, EC_WORD_IS, EC_WORD_FOR, EC_WORD_POKEMON}, .speechWin = {EC_WORD_MY, EC_WORD_SUMMER, EC_WORD_VACATION, EC_WORD_WILL, EC_WORD_BE, EC_WORD_AWESOME}, .speechLose = {EC_WORD_I, EC_WORD_CAN_T_WIN, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Carlie + .monSet = (const u16[]){FRONTIER_MONS_TUBER_1} }, [FRONTIER_TRAINER_GORDON] = { .facilityClass = FACILITY_CLASS_SWIMMER_M, @@ -246,7 +246,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_VICTORY, EC_WORD_WILL, EC_WORD_COME, EC_WORD_TO_ME, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_OH_YEAH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_REALLY, EC_WORD_WON}, .speechLose = {EC_WORD_NOTHING, EC_WORD_IS, EC_WORD_WORKING, EC_WORD_OUT, EC_WORD_FOR, EC_WORD_ME}, - .monSet = gBattleFrontierTrainerMons_Gordon + .monSet = (const u16[]){FRONTIER_MONS_SWIMMER_M_1} }, [FRONTIER_TRAINER_AYDEN] = { .facilityClass = FACILITY_CLASS_SWIMMER_M, @@ -254,7 +254,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_COME_ON, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_HOT, EC_WORD_BATTLE}, .speechWin = {EC_WORD_I, EC_WORD_NEED, EC_WORD_WATER, EC_WORD_TO, EC_WORD_COOL, EC_WORD_DOWN}, .speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_ICE, EC_WORD_COLD}, - .monSet = gBattleFrontierTrainerMons_Ayden + .monSet = (const u16[]){FRONTIER_MONS_SWIMMER_M_1} }, [FRONTIER_TRAINER_MARCO] = { .facilityClass = FACILITY_CLASS_SWIMMER_M, @@ -262,7 +262,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_MOVE2(SURF), EC_WORD_IN, EC_WORD_THE, EC_WORD_WINTER, EC_WORD_TOO}, .speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_GO, EC_MOVE2(SURF), EC_WORD_RIGHT, EC_WORD_NOW}, .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_MOVE2(BEAT_UP), EC_WORD_MY, EC_MOVE2(SURF), EC_WORD_BOARD}, - .monSet = gBattleFrontierTrainerMons_Marco + .monSet = (const u16[]){FRONTIER_MONS_SWIMMER_M_1} }, [FRONTIER_TRAINER_CIERRA] = { .facilityClass = FACILITY_CLASS_SWIMMER_F, @@ -270,7 +270,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_SYNCHRONIZE, EC_WORD_MY, EC_WORD_SWIFT_SWIM}, .speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_SYNCHRONIZE, EC_WORD_WITH, EC_WORD_ME, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_SYNCHRONIZE, EC_WORD_BETTER, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Cierra + .monSet = (const u16[]){FRONTIER_MONS_SWIMMER_F_1} }, [FRONTIER_TRAINER_MARCY] = { .facilityClass = FACILITY_CLASS_SWIMMER_F, @@ -278,7 +278,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_KNOCKOUT, EC_WORD_YOU, EC_WORD_CAN_T_WIN, EC_WORD_EXCL}, .speechWin = {EC_WORD_AFTER, EC_WORD_ALL, EC_WORD_I_AM, EC_WORD_A, EC_WORD_KNOCKOUT, EC_WORD_EXCL}, .speechLose = {EC_WORD_THAT_S, EC_WORD_NOT, EC_WORD_THE, EC_WORD_KNOCKOUT, EC_WORD_I, EC_WORD_MEAN}, - .monSet = gBattleFrontierTrainerMons_Marcy + .monSet = (const u16[]){FRONTIER_MONS_SWIMMER_F_1} }, [FRONTIER_TRAINER_KATHY] = { .facilityClass = FACILITY_CLASS_SWIMMER_F, @@ -286,7 +286,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_VE, EC_WORD_WON, EC_WORD_EVERY, EC_WORD_MATCH, EC_WORD_TODAY, EC_WORD_EXCL}, .speechWin = {EC_WORD_IT_S, EC_WORD_SO, EC_WORD_GREAT, EC_WORD_TO, EC_WORD_WIN, EC_WORD_EXCL}, .speechLose = {EC_WORD_HUH_QUES, EC_WORD_I, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_HAVE, EC_WORD_LOST}, - .monSet = gBattleFrontierTrainerMons_Kathy + .monSet = (const u16[]){FRONTIER_MONS_SWIMMER_F_1} }, [FRONTIER_TRAINER_PEYTON] = { .facilityClass = FACILITY_CLASS_POKEFAN_M, @@ -294,7 +294,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_NEVER, EC_WORD_DISAPPOINTED, EC_WORD_WITH, EC_WORD_MY, EC_WORD_POKEMON}, .speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_IF, EC_WORD_WE, EC_WORD_WIN, EC_WORD_TOGETHER}, .speechLose = {EC_WORD_I, EC_WORD_ADORE, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_MORE, EC_WORD_IF_I_LOSE}, - .monSet = gBattleFrontierTrainerMons_Peyton + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_M_1} }, [FRONTIER_TRAINER_JULIAN] = { .facilityClass = FACILITY_CLASS_POKEFAN_M, @@ -302,7 +302,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU, EC_WORD_ADORE, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_RIGHT, EC_WORD_QUES}, .speechWin = {EC_WORD_YOU_RE, EC_WORD_TOTALLY, EC_WORD_OUT, EC_WORD_OF, EC_WORD_THE, EC_WORD_QUESTION}, .speechLose = {EC_WORD_YOU, EC_WORD_DO, EC_WORD_ADORE, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Julian + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_M_1} }, [FRONTIER_TRAINER_QUINN] = { .facilityClass = FACILITY_CLASS_POKEFAN_M, @@ -310,7 +310,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_BUT, EC_WORD_A, EC_WORD_DREAM}, .speechWin = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_A, EC_WORD_BEAUTIFUL, EC_WORD_DREAM, EC_WORD_EXCL}, .speechLose = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_AN, EC_WORD_AWFUL, EC_MOVE(NIGHTMARE), EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Quinn + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_M_1} }, [FRONTIER_TRAINER_HAYLEE] = { .facilityClass = FACILITY_CLASS_POKEFAN_F, @@ -318,7 +318,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_HOW, EC_WORD_I_AM, EC_WORD_FEELING}, .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_OVERWHELMING, EC_WORD_JOY, EC_WORD_OVER, EC_WORD_THIS}, .speechLose = {EC_WORD_DESTROYED, EC_WORD_IS, EC_WORD_THE, EC_WORD_WAY, EC_WORD_I_AM, EC_WORD_FEELING}, - .monSet = gBattleFrontierTrainerMons_Haylee + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_F_1} }, [FRONTIER_TRAINER_AMANDA] = { .facilityClass = FACILITY_CLASS_POKEFAN_F, @@ -326,7 +326,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_COME, EC_WORD_FROM, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_FAMILY}, .speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_TREASURE, EC_WORD_THIS, EC_WORD_WIN, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_RIGHT, EC_WORD_NOW}, - .monSet = gBattleFrontierTrainerMons_Amanda + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_F_1} }, [FRONTIER_TRAINER_STACY] = { .facilityClass = FACILITY_CLASS_POKEFAN_F, @@ -334,15 +334,16 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_ALL, EC_WORD_POKEMON, EC_WORD_HAVE, EC_WORD_THEIR, EC_WORD_OWN, EC_WORD_CUTE_CHARM}, .speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_WHAT, EC_WORD_I, EC_WORD_MEAN, EC_WORD_QUES}, .speechLose = {EC_WORD_SHOULD, EC_WORD_I, EC_WORD_NOT, EC_WORD_ADORE, EC_WORD_POKEMON, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Stacy + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_F_1} }, + // The below 6 are the early Pkmn Breeder class trainers, which use groups from other general classes [FRONTIER_TRAINER_RAFAEL] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, .trainerName = _("RAFAEL"), .speechBefore = {EC_WORD_COME_ON, EC_WORD_EXCL, EC_WORD_LET_S, EC_WORD_SEE, EC_WORD_SOME, EC_WORD_SPIRIT}, .speechWin = {EC_WORD_THAT_S_IT_EXCL, EC_WORD_THAT_S, EC_WORD_THE, EC_WORD_SPIRIT, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WELL, EC_WORD_SO, EC_WORD_MUCH, EC_WORD_FOR, EC_WORD_OUR, EC_WORD_SPIRIT}, - .monSet = gBattleFrontierTrainerMons_Rafael + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_1} }, [FRONTIER_TRAINER_OLIVER] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, @@ -350,7 +351,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A, EC_WORD_GENIUS, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL}, .speechWin = {EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_WORKS, EC_WORD_EXCL}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_MORE, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_THAN, EC_WORD_I_AM}, - .monSet = gBattleFrontierTrainerMons_Oliver + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_1} }, [FRONTIER_TRAINER_PAYTON] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, @@ -358,7 +359,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_TRAIN, EC_WORD_FROM, EC_WORD_THE, EC_WORD_EGG, EC_WORD_UP}, .speechWin = {EC_WORD_WELL, EC_WORD_DONE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechLose = {EC_WORD_THAT_WAS, EC_WORD_A, EC_MOVE2(SOFT_BOILED), EC_WORD_LOSS, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Payton + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_1} }, [FRONTIER_TRAINER_PAMELA] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, @@ -366,7 +367,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_ALL, EC_WORD_POKEMON, EC_WORD_ADORE, EC_WORD_A, EC_WORD_KIND, EC_WORD_TRAINER}, .speechWin = {EC_WORD_IT_S, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_LOST, EC_EMPTY_WORD}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_KIND, EC_WORD_AND, EC_WORD_YOU_RE, EC_WORD_ALSO, EC_WORD_STRONG}, - .monSet = gBattleFrontierTrainerMons_Pamela + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_1} }, [FRONTIER_TRAINER_ELIZA] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, @@ -374,7 +375,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_ADORE, EC_WORD_POKEMON, EC_WORD_LIKE, EC_WORD_MY, EC_WORD_CHILDREN}, .speechWin = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POKEMON}, .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, EC_WORD_ABOUT, EC_WORD_THIS}, - .monSet = gBattleFrontierTrainerMons_Eliza + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_1} }, [FRONTIER_TRAINER_MARISA] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, @@ -382,7 +383,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_TO, EC_WORD_BATTLE, EC_WORD_SERIOUSLY, EC_EMPTY_WORD}, .speechWin = {EC_WORD_PROMISE, EC_WORD_ME, EC_WORD_YOU, EC_WORD_WILL, EC_WORD_DO, EC_WORD_BETTER}, .speechLose = {EC_WORD_PROMISE, EC_WORD_ME, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_PLEASE, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Marisa + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_1} }, [FRONTIER_TRAINER_LEWIS] = { .facilityClass = FACILITY_CLASS_BUG_CATCHER, @@ -390,7 +391,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A_LITTLE, EC_WORD_BUG, EC_WORD_IS, EC_WORD_SCARY, EC_WORD_QUES, EC_WORD_HAHAHA}, .speechWin = {EC_WORD_LOOK, EC_WORD_LOOK, EC_WORD_EXCL, EC_WORD_A, EC_WORD_SCARY, EC_WORD_BUG}, .speechLose = {EC_WORD_OH, EC_WORD_A, EC_WORD_BUG, EC_WORD_ISN_T, EC_WORD_SCARY, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Lewis + .monSet = (const u16[]){FRONTIER_MONS_BUG_CATCHER_1_EXTRA(METAPOD, KAKUNA)} }, [FRONTIER_TRAINER_YOSHI] = { .facilityClass = FACILITY_CLASS_BUG_CATCHER, @@ -398,7 +399,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_LOVEY_DOVEY}, .speechWin = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_THE, EC_WORD_BEST, EC_WORD_EXCL}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_IGNORANT, EC_WORD_ABOUT, EC_WORD_BUG, EC_WORD_POKEMON, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Yoshi + .monSet = (const u16[]){FRONTIER_MONS_BUG_CATCHER_1_EXTRA(SILCOON, CASCOON)} }, [FRONTIER_TRAINER_DESTIN] = { .facilityClass = FACILITY_CLASS_BUG_CATCHER, @@ -406,7 +407,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_IT_S, EC_WORD_WAY, EC_WORD_TOO, EC_WORD_HOT, EC_WORD_HERE, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I_AM, EC_WORD_ABOUT, EC_WORD_TO, EC_MOVE(OVERHEAT), EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechLose = {EC_WORD_PLEASE, EC_WORD_I, EC_WORD_NEED, EC_WORD_SOME, EC_WORD_WATER, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Destin + .monSet = (const u16[]){FRONTIER_MONS_BUG_CATCHER_1} }, [FRONTIER_TRAINER_KEON] = { .facilityClass = FACILITY_CLASS_NINJA_BOY, @@ -414,7 +415,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_BUT, EC_WORD_HERE_I_COME, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_FOR, EC_WORD_MY, EC_WORD_OVERWHELMING, EC_WORD_POWER}, .speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Keon + .monSet = (const u16[]){FRONTIER_MONS_NINJA_BOY_1} }, [FRONTIER_TRAINER_STUART] = { .facilityClass = FACILITY_CLASS_NINJA_BOY, @@ -422,7 +423,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_YOU, EC_WORD_A, EC_WORD_HOT, EC_WORD_BATTLE}, .speechWin = {EC_WORD_THE, EC_WORD_MASTER, EC_WORD_OF, EC_WORD_COOL, EC_WORD_THAT_S, EC_WORD_ME}, .speechLose = {EC_WORD_I, EC_WORD_SEE, EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_SO, EC_WORD_COOL}, - .monSet = gBattleFrontierTrainerMons_Stuart + .monSet = (const u16[]){FRONTIER_MONS_NINJA_BOY_1} }, [FRONTIER_TRAINER_NESTOR] = { .facilityClass = FACILITY_CLASS_NINJA_BOY, @@ -430,7 +431,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_A, EC_WORD_REALLY, EC_WORD_SMOOTH, EC_WORD_MOVE}, .speechWin = {EC_WORD_THERE, EC_WORD_WAS, EC_WORD_NOTHING, EC_WORD_SMOOTH, EC_WORD_ABOUT, EC_WORD_THAT}, .speechLose = {EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_ARE, EC_WORD_SMOOTH, EC_WORD_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Nestor + .monSet = (const u16[]){FRONTIER_MONS_NINJA_BOY_1} }, [FRONTIER_TRAINER_DERRICK] = { .facilityClass = FACILITY_CLASS_BUG_MANIAC, @@ -438,7 +439,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_LET_S, EC_WORD_SEE, EC_WORD_YOU, EC_MOVE2(MEDITATE), EC_WORD_LIKE, EC_WORD_ME}, .speechWin = {EC_WORD_HOW, EC_WORD_I, EC_MOVE2(MEDITATE), EC_WORD_IS, EC_WORD_JUST, EC_WORD_BEAUTIFUL}, .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_MOVE2(MEDITATE), EC_WORD_FOR, EC_WORD_A, EC_MOVE2(CALM_MIND)}, - .monSet = gBattleFrontierTrainerMons_Derrick + .monSet = (const u16[]){FRONTIER_MONS_BUG_MANIAC_1} }, [FRONTIER_TRAINER_BRYSON] = { .facilityClass = FACILITY_CLASS_BUG_MANIAC, @@ -446,7 +447,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_MOVE2(POISON_POWDER), EC_WORD_IS, EC_WORD_IN, EC_WORD_OUR, EC_MOVE2(COTTON_SPORE), EC_WORD_MOVE}, .speechWin = {EC_WORD_HOW_DO, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_OUR, EC_MOVE2(POISON_POWDER), EC_WORD_QUES}, .speechLose = {EC_WORD_MY, EC_MOVE2(COTTON_SPORE), EC_WORD_WAS, EC_WORD_USELESS, EC_EMPTY_WORD, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Bryson + .monSet = (const u16[]){FRONTIER_MONS_BUG_MANIAC_1} }, [FRONTIER_TRAINER_CLAYTON] = { .facilityClass = FACILITY_CLASS_BUG_MANIAC, @@ -454,7 +455,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HUH_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_WHERE, EC_WORD_IS_IT_QUES, EC_EMPTY_WORD}, .speechWin = {EC_WORD_WHERE, EC_WORD_IS_IT_QUES, EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_MY, EC_WORD_POKENAV}, .speechLose = {EC_WORD_WHERE, EC_WORD_IS_IT_QUES, EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_MY, EC_WORD_SENSE}, - .monSet = gBattleFrontierTrainerMons_Clayton + .monSet = (const u16[]){FRONTIER_MONS_BUG_MANIAC_1} }, [FRONTIER_TRAINER_TRENTON] = { .facilityClass = FACILITY_CLASS_FISHERMAN, @@ -462,7 +463,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_COME_OVER, EC_WORD_FOR, EC_WORD_SOME, EC_WORD_TASTY, EC_WORD_WATER, EC_EMPTY_WORD}, .speechWin = {EC_WORD_MMM, EC_WORD_DO, EC_WORD_YOU, EC_WORD_WANT, EC_WORD_SOME, EC_WORD_QUES}, .speechLose = {EC_WORD_I, EC_WORD_GOT, EC_WORD_THIS, EC_WORD_TASTY, EC_WORD_WATER, EC_WORD_SHOPPING}, - .monSet = gBattleFrontierTrainerMons_Trenton + .monSet = (const u16[]){FRONTIER_MONS_FISHERMAN_1} }, [FRONTIER_TRAINER_JENSON] = { .facilityClass = FACILITY_CLASS_FISHERMAN, @@ -470,7 +471,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_DOWNCAST}, .speechWin = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_DON_T, EC_WORD_MAKE, EC_WORD_THE, EC_MOVE(CUT)}, .speechLose = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_TRAINER, EC_WORD_WHO_IS, EC_WORD_FEELING, EC_WORD_DOWNCAST}, - .monSet = gBattleFrontierTrainerMons_Jenson + .monSet = (const u16[]){FRONTIER_MONS_FISHERMAN_1} }, [FRONTIER_TRAINER_WESLEY] = { .facilityClass = FACILITY_CLASS_FISHERMAN, @@ -478,7 +479,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_POKEMON_NATIONAL(MEW), EC_POKEMON_NATIONAL(MEW), EC_WORD_IS, EC_WORD_HOW, EC_WORD_I, EC_WORD_CRY}, .speechWin = {EC_WORD_YES, EC_WORD_I, EC_WORD_KNOW, EC_WORD_I_AM, EC_WORD_CUTE, EC_WORD_EXCL}, .speechLose = {EC_POKEMON_NATIONAL(MEW), EC_POKEMON_NATIONAL(MEW), EC_WORD_EXCL, EC_POKEMON_NATIONAL(MEW), EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Wesley + .monSet = (const u16[]){FRONTIER_MONS_FISHERMAN_1} }, [FRONTIER_TRAINER_ANTON] = { .facilityClass = FACILITY_CLASS_RUIN_MANIAC, @@ -486,7 +487,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_FOR, EC_WORD_ME, EC_WORD_TO, EC_MOVE(THRASH)}, .speechWin = {EC_WORD_WAHAHAHA, EC_WORD_EXCL, EC_WORD_SORRY, EC_WORD_ABOUT, EC_WORD_THAT, EC_WORD_EXCL}, .speechLose = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_TOUGH, EC_WORD_LOSS, EC_WORD_TO, EC_MOVE2(SWALLOW)}, - .monSet = gBattleFrontierTrainerMons_Anton + .monSet = (const u16[]){FRONTIER_MONS_RUIN_MANIAC_1} }, [FRONTIER_TRAINER_LAWSON] = { .facilityClass = FACILITY_CLASS_RUIN_MANIAC, @@ -494,7 +495,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_YOUNG, EC_WORD_AT, EC_WORD_HEART, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_NOT, EC_WORD_COOL, EC_WORD_EXCL, EC_WORD_NOT, EC_WORD_AT, EC_WORD_ALL}, .speechLose = {EC_WORD_I_AM, EC_WORD_OLD, EC_WORD_AND, EC_WORD_FEELING, EC_WORD_SHAKY, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Lawson + .monSet = (const u16[]){FRONTIER_MONS_RUIN_MANIAC_1} }, [FRONTIER_TRAINER_SAMMY] = { .facilityClass = FACILITY_CLASS_RUIN_MANIAC, @@ -502,15 +503,16 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_PARTY, EC_WORD_IS, EC_WORD_READY, EC_WORD_TO, EC_WORD_ROCK}, .speechWin = {EC_WORD_MY, EC_WORD_PARTY, EC_WORD_IS, EC_WORD_JUST, EC_WORD_INCREDIBLE, EC_WORD_EXCL}, .speechLose = {EC_WORD_I, EC_WORD_CRY, EC_WORD_FOR, EC_WORD_MY, EC_WORD_PARTY, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Sammy + .monSet = (const u16[]){FRONTIER_MONS_RUIN_MANIAC_1} }, + // The below 3 are the early Collector class trainers, which use groups from other general classes [FRONTIER_TRAINER_ARNIE] = { .facilityClass = FACILITY_CLASS_COLLECTOR, .trainerName = _("ARNIE"), .speechBefore = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_I, EC_WORD_HAVE, EC_WORD_NO, EC_WORD_RIVAL}, .speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE}, .speechLose = {EC_WORD_NO, EC_WORD_EXCL, EC_WORD_I, EC_WORD_WON_T, EC_WORD_ACCEPT, EC_WORD_THIS}, - .monSet = gBattleFrontierTrainerMons_Arnie + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_1} }, [FRONTIER_TRAINER_ADRIAN] = { .facilityClass = FACILITY_CLASS_COLLECTOR, @@ -518,7 +520,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YAHOO, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_YAHOO, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_THANK_YOU, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_GOOD_BYE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_GOOD_BYE, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Adrian + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_1} }, [FRONTIER_TRAINER_TRISTAN] = { .facilityClass = FACILITY_CLASS_COLLECTOR, @@ -526,7 +528,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_CONFUSED, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS}, .speechWin = {EC_WORD_SEE, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS}, .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_IN, EC_WORD_BATTLE}, - .monSet = gBattleFrontierTrainerMons_Tristan + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_1} }, [FRONTIER_TRAINER_JULIANA] = { .facilityClass = FACILITY_CLASS_PARASOL_LADY, @@ -534,7 +536,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_THINK, EC_WORD_I_AM, EC_WORD_SHOPPING, EC_WORD_TOO, EC_WORD_MUCH}, .speechWin = {EC_WORD_BUT, EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_PLUSH_DOLL}, .speechLose = {EC_WORD_I, EC_WORD_SO, EC_WORD_WANT, EC_WORD_ANOTHER, EC_WORD_POKEMON, EC_WORD_PLUSH_DOLL}, - .monSet = gBattleFrontierTrainerMons_Juliana + .monSet = (const u16[]){FRONTIER_MONS_PARASOL_LADY_1} }, [FRONTIER_TRAINER_RYLEE] = { .facilityClass = FACILITY_CLASS_PARASOL_LADY, @@ -542,7 +544,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THAT, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_GUTS}, .speechWin = {EC_WORD_BYE_BYE, EC_WORD_EXCL, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_NO, EC_WORD_GUTS}, .speechLose = {EC_WORD_THAT_WAS, EC_WORD_GUTSY, EC_WORD_ELLIPSIS, EC_WORD_YOU_RE, EC_WORD_QUITE, EC_WORD_SUPER}, - .monSet = gBattleFrontierTrainerMons_Rylee + .monSet = (const u16[]){FRONTIER_MONS_PARASOL_LADY_1} }, [FRONTIER_TRAINER_CHELSEA] = { .facilityClass = FACILITY_CLASS_PARASOL_LADY, @@ -550,15 +552,16 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_SERIOUSLY, EC_WORD_MEAN, EC_WORD_TO, EC_WORD_WIN, EC_WORD_EXCL}, .speechWin = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_WORD_WILL, EC_WORD_TO, EC_WORD_WIN, EC_EMPTY_WORD}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_FAR, EC_WORD_TOO_STRONG, EC_WORD_FOR, EC_WORD_ME, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Chelsea + .monSet = (const u16[]){FRONTIER_MONS_PARASOL_LADY_1} }, + // The below 3 are the early Beauty class trainers, which use groups from other general classes [FRONTIER_TRAINER_DANELA] = { .facilityClass = FACILITY_CLASS_BEAUTY, .trainerName = _("DANELA"), .speechBefore = {EC_WORD_YOU, EC_WORD_MUST_BE, EC_WORD_MY, EC_WORD_OPPONENT, EC_WORD_NOW, EC_WORD_EXCL}, .speechWin = {EC_WORD_OH_DEAR, EC_WORD_TOO_WEAK, EC_WORD_EXCL, EC_WORD_DON_T, EC_WORD_GIVE_UP, EC_WORD_EXCL}, .speechLose = {EC_WORD_THAT_WAS, EC_WORD_GOOD, EC_WORD_AND, EC_WORD_THIS, EC_WORD_IS, EC_WORD_GOOD_BYE}, - .monSet = gBattleFrontierTrainerMons_Danela + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_1} }, [FRONTIER_TRAINER_LIZBETH] = { .facilityClass = FACILITY_CLASS_BEAUTY, @@ -566,7 +569,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_IF_I_LOSE, EC_WORD_YOU, EC_WORD_CAN, EC_WORD_HAVE, EC_WORD_A, EC_MOVE2(PRESENT)}, .speechWin = {EC_WORD_HERE_IT_IS, EC_WORD_A_LITTLE, EC_WORD_PRAISE, EC_WORD_AS, EC_WORD_YOUR, EC_MOVE2(PRESENT)}, .speechLose = {EC_WORD_YOUR, EC_MOVE2(PRESENT), EC_WORD_QUES_EXCL, EC_WORD_HERE_IT_IS, EC_WORD_A, EC_MOVE(DOUBLE_SLAP)}, - .monSet = gBattleFrontierTrainerMons_Lizbeth + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_1} }, [FRONTIER_TRAINER_AMELIA] = { .facilityClass = FACILITY_CLASS_BEAUTY, @@ -574,7 +577,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_BELIEVE, EC_WORD_IN, EC_WORD_CUTE, EC_WORD_FASHION, EC_WORD_APPEAL}, .speechWin = {EC_WORD_YOUR, EC_WORD_FASHION, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_A, EC_WORD_DISASTER}, .speechLose = {EC_WORD_THAT_WAS, EC_WORD_AWFUL, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_HOME}, - .monSet = gBattleFrontierTrainerMons_Amelia + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_1} }, [FRONTIER_TRAINER_JILLIAN] = { .facilityClass = FACILITY_CLASS_AROMA_LADY, @@ -582,7 +585,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WHAT, EC_WORD_IS, EC_WORD_THAT, EC_WORD_I, EC_WORD_SMELL, EC_WORD_QUES}, .speechWin = {EC_WORD_IT_S, EC_WORD_THE, EC_MOVE(SWEET_SCENT), EC_WORD_OF, EC_WORD_TASTY, EC_WORD_WATER}, .speechLose = {EC_WORD_IT_S, EC_WORD_YOUR, EC_WORD_OFFENSIVE, EC_WORD_STENCH, EC_WORD_THAT_S, EC_WORD_WHAT}, - .monSet = gBattleFrontierTrainerMons_Jillian + .monSet = (const u16[]){FRONTIER_MONS_AROMA_LADY_1} }, [FRONTIER_TRAINER_ABBIE] = { .facilityClass = FACILITY_CLASS_AROMA_LADY, @@ -590,7 +593,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU, EC_WORD_TRY, EC_WORD_MY, EC_WORD_SECRET, EC_MOVE(AROMATHERAPY), EC_WORD_OK_QUES}, .speechWin = {EC_WORD_MY, EC_MOVE(AROMATHERAPY), EC_WORD_IS, EC_WORD_TERRIBLE, EC_WORD_FOR, EC_WORD_YOU}, .speechLose = {EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_SMELL, EC_WORD_A, EC_WORD_THING, EC_WORD_QUES_EXCL}, - .monSet = gBattleFrontierTrainerMons_Abbie + .monSet = (const u16[]){FRONTIER_MONS_AROMA_LADY_1} }, [FRONTIER_TRAINER_BRIANA] = { .facilityClass = FACILITY_CLASS_AROMA_LADY, @@ -598,7 +601,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_BOY, EC_WORD_FRIEND, EC_WORD_WORKS, EC_WORD_TOO, EC_WORD_MUCH}, .speechWin = {EC_WORD_I, EC_WORD_ONLY, EC_WORD_MISS, EC_WORD_HIM, EC_WORD_MORE, EC_WORD_ELLIPSIS}, .speechLose = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_LONESOME, EC_WORD_WITHOUT, EC_WORD_HIM, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Briana + .monSet = (const u16[]){FRONTIER_MONS_AROMA_LADY_1} }, [FRONTIER_TRAINER_ANTONIO] = { .facilityClass = FACILITY_CLASS_GUITARIST, @@ -606,7 +609,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_HOW, EC_WORD_TO, EC_WORD_GO, EC_WORD_GO}, .speechWin = {EC_WORD_BUT, EC_WORD_I, EC_WORD_DON_T, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_DANCE}, .speechLose = {EC_WORD_GO, EC_WORD_GO, EC_WORD_ELLIPSIS, EC_WORD_JUST, EC_MOVE(FLAIL), EC_WORD_ABOUT}, - .monSet = gBattleFrontierTrainerMons_Antonio + .monSet = (const u16[]){FRONTIER_MONS_GUITARIST_1} }, [FRONTIER_TRAINER_JADEN] = { .facilityClass = FACILITY_CLASS_GUITARIST, @@ -614,7 +617,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HELLO, EC_WORD_I, EC_WORD_THINK, EC_WORD_I, EC_WORD_ADORE, EC_WORD_YOU}, .speechWin = {EC_WORD_YOU, EC_WORD_MAKE, EC_WORD_ME, EC_MOVE(THRASH), EC_WORD_IN, EC_MOVE2(FRUSTRATION)}, .speechLose = {EC_WORD_THIS_IS_IT_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_GOOD_BYE, EC_WORD_FOREVER, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Jaden + .monSet = (const u16[]){FRONTIER_MONS_GUITARIST_1} }, [FRONTIER_TRAINER_DAKOTA] = { .facilityClass = FACILITY_CLASS_GUITARIST, @@ -622,7 +625,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_DANCE, EC_WORD_WITH, EC_WORD_POWER}, .speechWin = {EC_WORD_GOT, EC_WORD_IT, EC_WORD_QUES, EC_WORD_DANCE, EC_WORD_WITH, EC_WORD_POWER}, .speechLose = {EC_WORD_OKAY, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_ALL_RIGHT, EC_WORD_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Dakota + .monSet = (const u16[]){FRONTIER_MONS_GUITARIST_1} }, [FRONTIER_TRAINER_BRAYDEN] = { .facilityClass = FACILITY_CLASS_BIRD_KEEPER, @@ -630,7 +633,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_COLOR_CHANGE, EC_WORD_VERSION, EC_WORD_TOYS, EC_WORD_ARE, EC_WORD_USELESS, EC_WORD_EXCL}, .speechWin = {EC_WORD_I, EC_WORD_ONLY, EC_WORD_COLLECT, EC_WORD_NORMAL, EC_WORD_VERSION, EC_WORD_TOYS}, .speechLose = {EC_WORD_I, EC_MOVE2(ATTRACT), EC_WORD_COLOR_CHANGE, EC_WORD_VERSION, EC_WORD_TOYS, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Brayden + .monSet = (const u16[]){FRONTIER_MONS_BIRD_KEEPER_1} }, [FRONTIER_TRAINER_CORSON] = { .facilityClass = FACILITY_CLASS_BIRD_KEEPER, @@ -638,7 +641,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_GET, EC_WORD_TO, EC_MOVE2(BEAT_UP), EC_WORD_ON, EC_WORD_YOU}, .speechWin = {EC_WORD_TOO, EC_WORD_EASY, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_COOL}, .speechLose = {EC_WORD_WHY, EC_WORD_QUES_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_MOVE2(CURSE), EC_WORD_YOU}, - .monSet = gBattleFrontierTrainerMons_Corson + .monSet = (const u16[]){FRONTIER_MONS_BIRD_KEEPER_1} }, [FRONTIER_TRAINER_TREVIN] = { .facilityClass = FACILITY_CLASS_BIRD_KEEPER, @@ -646,7 +649,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NONE, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_ME}, .speechWin = {EC_WORD_YES_SIR_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_THE, EC_WORD_BEST}, .speechLose = {EC_WORD_SERIOUS, EC_WORD_QUES_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Trevin + .monSet = (const u16[]){FRONTIER_MONS_BIRD_KEEPER_1} }, [FRONTIER_TRAINER_PATRICK] = { .facilityClass = FACILITY_CLASS_SAILOR, @@ -654,7 +657,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_PERFECT, EC_WORD_EXCL, EC_WORD_GIVE_UP, EC_WORD_NOW, EC_EMPTY_WORD}, .speechWin = {EC_WORD_DON_T, EC_WORD_BE, EC_WORD_DISAPPOINTED, EC_WORD_I_AM, EC_WORD_PERFECT, EC_EMPTY_WORD}, .speechLose = {EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_PERFECT, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Patrick + .monSet = (const u16[]){FRONTIER_MONS_SAILOR_1} }, [FRONTIER_TRAINER_KADEN] = { .facilityClass = FACILITY_CLASS_SAILOR, @@ -662,7 +665,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WHAT, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_UP, EC_WORD_TO, EC_WORD_QUES}, .speechWin = {EC_WORD_YOU, EC_WORD_WERE, EC_WORD_A, EC_WORD_SURPRISE, EC_WORD_TO_ME, EC_WORD_EXCL}, .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_WHO, EC_WORD_I_AM, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Kaden + .monSet = (const u16[]){FRONTIER_MONS_SAILOR_1} }, [FRONTIER_TRAINER_MAXWELL] = { .facilityClass = FACILITY_CLASS_SAILOR, @@ -670,7 +673,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HEY_THERE, EC_WORD_WHO_IS, EC_WORD_YOUR, EC_WORD_RIVAL, EC_WORD_QUES, EC_EMPTY_WORD}, .speechWin = {EC_WORD_MY, EC_WORD_RIVAL, EC_WORD_IS, EC_WORD_MY, EC_WORD_GIRL, EC_WORD_FRIEND}, .speechLose = {EC_WORD_I_AM, EC_WORD_MAKING, EC_WORD_YOU, EC_WORD_MY, EC_WORD_RIVAL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Maxwell + .monSet = (const u16[]){FRONTIER_MONS_SAILOR_1} }, [FRONTIER_TRAINER_DARYL] = { .facilityClass = FACILITY_CLASS_HIKER, @@ -678,7 +681,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_ONLY, EC_WORD_KNOW, EC_WORD_HOW, EC_WORD_TO, EC_MOVE(CHARGE)}, .speechWin = {EC_WORD_AM, EC_WORD_I, EC_WORD_OVERWHELMING, EC_WORD_OR, EC_WORD_WHAT, EC_WORD_QUES}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_TO, EC_WORD_A, EC_WORD_LEGEND, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Daryl + .monSet = (const u16[]){FRONTIER_MONS_HIKER_1} }, [FRONTIER_TRAINER_KENNETH] = { .facilityClass = FACILITY_CLASS_HIKER, @@ -686,7 +689,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU, EC_WORD_BETTER, EC_WORD_NOT, EC_MOVE2(SLACK_OFF), EC_WORD_WITH, EC_WORD_ME}, .speechWin = {EC_WORD_DID, EC_WORD_MY, EC_MOVE2(TAUNT), EC_WORD_INTIMIDATE, EC_WORD_YOU, EC_WORD_QUES}, .speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Kenneth + .monSet = (const u16[]){FRONTIER_MONS_HIKER_1} }, [FRONTIER_TRAINER_RICH] = { .facilityClass = FACILITY_CLASS_HIKER, @@ -694,7 +697,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOUR, EC_MOVE(FACADE), EC_WORD_DOESN_T, EC_MOVE2(TRICK), EC_WORD_ME, EC_EMPTY_WORD}, .speechWin = {EC_WORD_SERIOUSLY, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_OK_QUES, EC_EMPTY_WORD}, .speechLose = {EC_WORD_THAT_WAS, EC_WORD_REALLY, EC_WORD_TOUGH, EC_WORD_ON, EC_WORD_ME, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Rich + .monSet = (const u16[]){FRONTIER_MONS_HIKER_1} }, [FRONTIER_TRAINER_CADEN] = { .facilityClass = FACILITY_CLASS_KINDLER, @@ -702,7 +705,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_BE, EC_WORD_DEFEATED, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_FIRE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_FIRE, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_SO, EC_WORD_HOT}, - .monSet = gBattleFrontierTrainerMons_Caden + .monSet = (const u16[]){FRONTIER_MONS_KINDLER_1} }, [FRONTIER_TRAINER_MARLON] = { .facilityClass = FACILITY_CLASS_KINDLER, @@ -710,7 +713,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A, EC_WORD_POKEDEX, EC_WORD_IS, EC_WORD_A_LITTLE, EC_WORD_RADIO, EC_WORD_QUES}, .speechWin = {EC_WORD_A_LITTLE, EC_WORD_RADIO, EC_WORD_HUH_QUES, EC_WORD_THAT_S, EC_WORD_TOTALLY, EC_WORD_COOL}, .speechLose = {EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_QUES, EC_WORD_IS, EC_WORD_POKENAV, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Marlon + .monSet = (const u16[]){FRONTIER_MONS_KINDLER_1} }, [FRONTIER_TRAINER_NASH] = { .facilityClass = FACILITY_CLASS_KINDLER, @@ -718,7 +721,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_BABY, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I, EC_WORD_LEFT, EC_WORD_YOU, EC_WORD_JUST, EC_WORD_AN, EC_MOVE2(EMBER)}, .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_NO, EC_WORD_WATER, EC_WORD_PLEASE}, - .monSet = gBattleFrontierTrainerMons_Nash + .monSet = (const u16[]){FRONTIER_MONS_KINDLER_1} }, [FRONTIER_TRAINER_ROBBY] = { .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M, @@ -726,7 +729,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_HAPPY, EC_WORD_TO, EC_WORD_MEET_YOU, EC_WORD_EXCL}, .speechWin = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_LEADER, EC_WORD_WITH, EC_WORD_REFRESHING, EC_WORD_SERENE_GRACE}, .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_MOVE(THRASH), EC_WORD_MY, EC_WORD_TOYS, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Robby + .monSet = (const u16[]){FRONTIER_MONS_RUNNING_TRIATHLETE_1} }, [FRONTIER_TRAINER_REECE] = { .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M, @@ -734,7 +737,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_MOVE2(QUICK_ATTACK), EC_WORD_CAN, EC_WORD_BEAT, EC_WORD_A, EC_MOVE2(TELEPORT)}, .speechWin = {EC_WORD_LIKE, EC_WORD_I, EC_WORD_SAID, EC_WORD_I_AM, EC_WORD_DARN, EC_WORD_FAST}, .speechLose = {EC_WORD_I_WAS, EC_WORD_KIDDING, EC_WORD_ABOUT, EC_WORD_THAT, EC_MOVE2(TELEPORT), EC_WORD_THING}, - .monSet = gBattleFrontierTrainerMons_Reece + .monSet = (const u16[]){FRONTIER_MONS_RUNNING_TRIATHLETE_1} }, [FRONTIER_TRAINER_KATHRYN] = { .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F, @@ -742,7 +745,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_TRAIN, EC_WORD_GOOD, EC_WORD_ENOUGH, EC_WORD_QUES}, .speechWin = {EC_WORD_DON_T, EC_MOVE2(TAUNT), EC_WORD_ME, EC_WORD_LIKE, EC_WORD_THAT, EC_WORD_OK_QUES}, .speechLose = {EC_WORD_WHY, EC_WORD_COULDN_T, EC_WORD_I, EC_WORD_WIN, EC_WORD_THIS, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Kathryn + .monSet = (const u16[]){FRONTIER_MONS_RUNNING_TRIATHLETE_1} }, [FRONTIER_TRAINER_ELLEN] = { .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F, @@ -750,7 +753,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_CRUSH, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_EGG, EC_WORD_EXCL}, .speechWin = {EC_WORD_THAT_WAS, EC_WORD_A, EC_WORD_TASTY, EC_WORD_VICTORY, EC_WORD_FOR, EC_WORD_ME}, .speechLose = {EC_WORD_TOO, EC_WORD_TOUGH, EC_WORD_TO, EC_WORD_CRUSH, EC_WORD_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Ellen + .monSet = (const u16[]){FRONTIER_MONS_RUNNING_TRIATHLETE_1} }, [FRONTIER_TRAINER_RAMON] = { .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M, @@ -758,7 +761,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_OKAY, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_THIS, EC_WORD_IS, EC_WORD_PERFECTION}, .speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_THAT, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL}, .speechLose = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_SECRET, EC_WORD_WHY, EC_WORD_I_AM, EC_WORD_HAPPY}, - .monSet = gBattleFrontierTrainerMons_Ramon + .monSet = (const u16[]){FRONTIER_MONS_SWIMMING_TRIATHLETE_1} }, [FRONTIER_TRAINER_ARTHUR] = { .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M, @@ -766,7 +769,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HERE_I_COME, EC_WORD_FEELING, EC_WORD_READY, EC_WORD_FOR, EC_WORD_IT, EC_WORD_ALL}, .speechWin = {EC_WORD_THAT_S_IT_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_THAT_WAS, EC_WORD_FABULOUS, EC_WORD_EXCL}, .speechLose = {EC_WORD_THAT_WAS, EC_WORD_NOT, EC_WORD_WHAT, EC_WORD_I, EC_WORD_NEED, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Arthur + .monSet = (const u16[]){FRONTIER_MONS_SWIMMING_TRIATHLETE_1} }, [FRONTIER_TRAINER_ALONDRA] = { .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, @@ -774,7 +777,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_IS, EC_WORD_A, EC_WORD_GREAT, EC_WORD_DAY}, .speechWin = {EC_WORD_MY, EC_MOVE2(DIVE), EC_WORD_WILL, EC_WORD_BE, EC_WORD_A, EC_WORD_LEGEND}, .speechLose = {EC_WORD_MY, EC_MOVE2(DIVE), EC_WORD_LEFT, EC_WORD_ME, EC_WORD_COLD, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Alondra + .monSet = (const u16[]){FRONTIER_MONS_SWIMMING_TRIATHLETE_1} }, [FRONTIER_TRAINER_ADRIANA] = { .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, @@ -782,7 +785,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_COME, EC_WORD_SEE, EC_WORD_AN, EC_WORD_INCREDIBLE, EC_WORD_SWIFT_SWIM, EC_WORD_EXCL}, .speechWin = {EC_WORD_I, EC_WORD_MAKE, EC_WORD_IT, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_EASY}, .speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(BEAT_UP), EC_WORD_AND, EC_WORD_TIRED, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Adriana + .monSet = (const u16[]){FRONTIER_MONS_SWIMMING_TRIATHLETE_1} }, [FRONTIER_TRAINER_MALIK] = { .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, @@ -790,7 +793,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_OH, EC_WORD_NOT, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_PLEASE, EC_WORD_ELLIPSIS}, .speechWin = {EC_WORD_I, EC_WORD_FINALLY, EC_WORD_WON, EC_WORD_ELLIPSIS, EC_WORD_I_AM, EC_WORD_TIRED}, .speechLose = {EC_WORD_I, EC_WORD_FINALLY, EC_WORD_LOST, EC_WORD_ELLIPSIS, EC_WORD_I_AM, EC_WORD_TIRED}, - .monSet = gBattleFrontierTrainerMons_Malik + .monSet = (const u16[]){FRONTIER_MONS_CYCLING_TRIATHLETE_1} }, [FRONTIER_TRAINER_JILL] = { .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F, @@ -798,7 +801,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_WINS, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_GIVES, EC_WORD_UP, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Jill + .monSet = (const u16[]){FRONTIER_MONS_CYCLING_TRIATHLETE_1} }, [FRONTIER_TRAINER_ERIK] = { .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M, @@ -806,7 +809,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_SPEED_BOOST, EC_WORD_HERO, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_THANK_YOU, EC_WORD_FROM, EC_WORD_THE, EC_WORD_SPEED_BOOST, EC_WORD_HERO, EC_WORD_EXCL}, .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_NO, EC_WORD_NO, EC_WORD_EXCL_EXCL}, - .monSet = gBattleFrontierTrainerMons_Erik + .monSet = (const u16[]){FRONTIER_MONS_RUNNING_TRIATHLETE_2} }, [FRONTIER_TRAINER_YAZMIN] = { .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F, @@ -814,7 +817,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_RATHER, EC_WORD_RUN, EC_WORD_THAN, EC_WORD_BIKE}, .speechWin = {EC_WORD_YES, EC_WORD_I, EC_WORD_WOULD, EC_WORD_MUCH, EC_WORD_RATHER, EC_WORD_RUN}, .speechLose = {EC_WORD_BYE_BYE, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_RUN_AWAY}, - .monSet = gBattleFrontierTrainerMons_Yazmin + .monSet = (const u16[]){FRONTIER_MONS_RUNNING_TRIATHLETE_2} }, [FRONTIER_TRAINER_JAMAL] = { .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M, @@ -822,7 +825,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_BE, EC_WORD_A, EC_WORD_FATHER}, .speechWin = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_FOR, EC_WORD_MY, EC_WORD_BABY}, .speechLose = {EC_WORD_MY, EC_WORD_BABY, EC_WORD_WILL, EC_WORD_BE, EC_WORD_TOTALLY, EC_WORD_AWESOME}, - .monSet = gBattleFrontierTrainerMons_Jamal + .monSet = (const u16[]){FRONTIER_MONS_SWIMMING_TRIATHLETE_2} }, [FRONTIER_TRAINER_LESLIE] = { .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, @@ -830,7 +833,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_BE, EC_WORD_A, EC_WORD_MOTHER}, .speechWin = {EC_WORD_A, EC_WORD_BABY, EC_WORD_WILL, EC_WORD_BE, EC_WORD_A_LITTLE, EC_WORD_CHALLENGE}, .speechLose = {EC_WORD_I_AM, EC_WORD_TOO, EC_WORD_HAPPY, EC_WORD_TO, EC_WORD_BE, EC_WORD_ANGRY}, - .monSet = gBattleFrontierTrainerMons_Leslie + .monSet = (const u16[]){FRONTIER_MONS_SWIMMING_TRIATHLETE_2} }, [FRONTIER_TRAINER_DAVE] = { .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, @@ -838,7 +841,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WHAT, EC_WORD_SHOULD, EC_WORD_I, EC_WORD_DO, EC_WORD_TODAY, EC_WORD_QUES}, .speechWin = {EC_WORD_I, EC_WORD_SHOULD, EC_WORD_ENJOY, EC_WORD_SOME, EC_WORD_SPORTS, EC_WORD_EXCL}, .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_GO, EC_WORD_PLAY, EC_WORD_A, EC_WORD_GAME}, - .monSet = gBattleFrontierTrainerMons_Dave + .monSet = (const u16[]){FRONTIER_MONS_CYCLING_TRIATHLETE_2} }, [FRONTIER_TRAINER_CARLO] = { .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, @@ -846,7 +849,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_YEAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I, EC_WORD_DO, EC_WORD_THINGS, EC_WORD_AT, EC_MOVE(EXTREME_SPEED), EC_WORD_EXCL}, .speechLose = {EC_WORD_I, EC_WORD_LOST, EC_WORD_AT, EC_MOVE(EXTREME_SPEED), EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Carlo + .monSet = (const u16[]){FRONTIER_MONS_CYCLING_TRIATHLETE_2} }, [FRONTIER_TRAINER_EMILIA] = { .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F, @@ -854,7 +857,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_ME, EC_WORD_WORRY, EC_WORD_QUES, EC_WORD_I, EC_WORD_HAVE, EC_WORD_NONE}, .speechWin = {EC_WORD_AHAHA, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_THAT_WAS, EC_WORD_FANTASTIC, EC_WORD_EXCL}, .speechLose = {EC_WORD_AHAHA, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_THAT_WAS, EC_WORD_ENTERTAINING, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Emilia + .monSet = (const u16[]){FRONTIER_MONS_CYCLING_TRIATHLETE_2} }, [FRONTIER_TRAINER_DALIA] = { .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F, @@ -862,7 +865,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_IS, EC_WORD_VERY, EC_WORD_EXPENSIVE, EC_EMPTY_WORD}, .speechWin = {EC_WORD_DON_T, EC_WORD_COME, EC_WORD_NEAR, EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL}, .speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_IS, EC_WORD_MY, EC_WORD_BEST, EC_WORD_FRIEND}, - .monSet = gBattleFrontierTrainerMons_Dalia + .monSet = (const u16[]){FRONTIER_MONS_CYCLING_TRIATHLETE_2} }, [FRONTIER_TRAINER_HITOMI] = { .facilityClass = FACILITY_CLASS_BLACK_BELT, @@ -870,7 +873,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YEAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_HAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_WHAT, EC_WORD_QUES_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_WON, EC_WORD_QUES_EXCL}, .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_EXCL_EXCL}, - .monSet = gBattleFrontierTrainerMons_Hitomi + .monSet = (const u16[]){FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1} }, [FRONTIER_TRAINER_RICARDO] = { .facilityClass = FACILITY_CLASS_BLACK_BELT, @@ -878,7 +881,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_COME_ON, EC_WORD_EXCL, EC_WORD_PLAY, EC_WORD_TIME, EC_WORD_IS, EC_WORD_OVER}, .speechWin = {EC_WORD_YOU_RE, EC_WORD_OUT, EC_WORD_OF, EC_WORD_HERE, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_PLEASE, EC_WORD_DON_T, EC_WORD_HIT, EC_WORD_ME, EC_WORD_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Ricardo + .monSet = (const u16[]){FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1} }, [FRONTIER_TRAINER_SHIZUKA] = { .facilityClass = FACILITY_CLASS_BLACK_BELT, @@ -886,7 +889,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THAT, EC_WORD_YOU_RE, EC_WORD_SERIOUS, EC_WORD_EXCL}, .speechWin = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_FORGET, EC_WORD_ABOUT, EC_WORD_YOU, EC_EMPTY_WORD}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_PERFECT, EC_WORD_IN, EC_WORD_EVERY, EC_WORD_WAY, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Shizuka + .monSet = (const u16[]){FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1} }, [FRONTIER_TRAINER_JOANA] = { .facilityClass = FACILITY_CLASS_BATTLE_GIRL, @@ -894,7 +897,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_TO, EC_WORD_LOSE, EC_WORD_RIGHT, EC_WORD_AWAY}, .speechWin = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_WINNER, EC_WORD_HEAR, EC_WORD_ME, EC_MOVE2(ROAR)}, .speechLose = {EC_WORD_I, EC_WORD_REFUSE, EC_WORD_TO, EC_WORD_ACCEPT, EC_WORD_THAT, EC_MOVE(OUTRAGE)}, - .monSet = gBattleFrontierTrainerMons_Joana + .monSet = (const u16[]){FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1} }, [FRONTIER_TRAINER_KELLY] = { .facilityClass = FACILITY_CLASS_BATTLE_GIRL, @@ -902,7 +905,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_NIGHT, EC_WORD_SCHOOL, EC_WORD_IS, EC_WORD_REALLY, EC_WORD_SCARY}, .speechWin = {EC_WORD_A, EC_WORD_LADY, EC_WORD_GHOST, EC_WORD_APPEARS, EC_WORD_THERE, EC_EMPTY_WORD}, .speechLose = {EC_WORD_THE, EC_WORD_HOME, EC_WORD_WORK, EC_WORD_IS, EC_WORD_AWFULLY, EC_WORD_SCARY}, - .monSet = gBattleFrontierTrainerMons_Kelly + .monSet = (const u16[]){FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1} }, [FRONTIER_TRAINER_RAYNA] = { .facilityClass = FACILITY_CLASS_BATTLE_GIRL, @@ -910,7 +913,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_WHEN, EC_WORD_IT_S, EC_WORD_ABOUT, EC_WORD_POWER}, .speechWin = {EC_WORD_UNDERSTAND, EC_WORD_MY, EC_WORD_POWER, EC_WORD_NOW, EC_WORD_QUES, EC_EMPTY_WORD}, .speechLose = {EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Rayna + .monSet = (const u16[]){FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1} }, [FRONTIER_TRAINER_EVAN] = { .facilityClass = FACILITY_CLASS_EXPERT_M, @@ -918,7 +921,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_EVERY, EC_WORD_BATTLE, EC_WORD_HAS, EC_WORD_A, EC_WORD_SMELL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_OH, EC_WORD_EXCL, EC_WORD_THE, EC_MOVE(SWEET_SCENT), EC_WORD_OF, EC_WORD_VICTORY}, .speechLose = {EC_WORD_THE, EC_WORD_AWFUL, EC_WORD_STENCH, EC_WORD_OF, EC_WORD_A, EC_WORD_LOSS}, - .monSet = gBattleFrontierTrainerMons_Evan + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_1A} }, [FRONTIER_TRAINER_JORDAN] = { .facilityClass = FACILITY_CLASS_EXPERT_M, @@ -926,7 +929,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_GOOD, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_COME_ON, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WHAT, EC_WORD_QUES_EXCL, EC_EMPTY_WORD, EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Jordan + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_1B} }, [FRONTIER_TRAINER_JOEL] = { .facilityClass = FACILITY_CLASS_EXPERT_M, @@ -934,7 +937,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_FUFUFU, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechLose = {EC_WORD_HAHAHA, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Joel + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_1C} }, [FRONTIER_TRAINER_KRISTEN] = { .facilityClass = FACILITY_CLASS_EXPERT_F, @@ -942,7 +945,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HAHAHA, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_A, EC_WORD_KID, EC_WORD_ELLIPSIS}, .speechWin = {EC_WORD_JUST, EC_WORD_A_LITTLE, EC_WORD_KID, EC_WORD_AFTER, EC_WORD_ALL, EC_WORD_EXCL}, .speechLose = {EC_WORD_A, EC_WORD_TOUGH, EC_WORD_KID, EC_WORD_HUH_QUES, EC_WORD_HUMPH, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Kristen + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_1A} }, [FRONTIER_TRAINER_SELPHY] = { .facilityClass = FACILITY_CLASS_EXPERT_F, @@ -950,7 +953,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HUH_QUES, EC_WORD_WHAT, EC_WORD_IS_IT_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechWin = {EC_WORD_OH, EC_WORD_YES, EC_WORD_EXCL, EC_WORD_WHY, EC_WORD_NOT, EC_WORD_QUES}, .speechLose = {EC_WORD_OH, EC_WORD_NO, EC_WORD_EXCL, EC_WORD_WHY, EC_WORD_NOT, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Selphy + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_1B} }, [FRONTIER_TRAINER_CHLOE] = { .facilityClass = FACILITY_CLASS_EXPERT_F, @@ -958,7 +961,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_COME, EC_WORD_WE, EC_WORD_WILL, EC_WORD_DO, EC_WORD_BATTLE, EC_WORD_NOW}, .speechWin = {EC_WORD_MORE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_EXCL}, .speechLose = {EC_WORD_OH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_STRONG, EC_WORD_YOU, EC_WORD_ARE}, - .monSet = gBattleFrontierTrainerMons_Chloe + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_1C} }, [FRONTIER_TRAINER_NORTON] = { .facilityClass = FACILITY_CLASS_PSYCHIC_M, @@ -966,7 +969,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_ONLY, EC_WORD_YOU, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechWin = {EC_WORD_EXCUSE_ME, EC_WORD_BUT, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_PUSHOVER, EC_WORD_EXCL}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_SOME, EC_WORD_KIND, EC_WORD_OF, EC_WORD_AWESOME, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Norton + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_1} }, [FRONTIER_TRAINER_LUKAS] = { .facilityClass = FACILITY_CLASS_PSYCHIC_M, @@ -974,7 +977,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_JOKING, EC_WORD_IS, EC_WORD_PRETTY, EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS}, .speechWin = {EC_WORD_YOUR, EC_WORD_ROCK_HEAD, EC_WORD_EXISTS, EC_WORD_TO, EC_WORD_SHINE, EC_WORD_EXCL}, .speechLose = {EC_WORD_YOUR, EC_WORD_ROCK_HEAD, EC_WORD_COME, EC_WORD_TO, EC_WORD_SHINE, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Lukas + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_1} }, [FRONTIER_TRAINER_ZACH] = { .facilityClass = FACILITY_CLASS_PSYCHIC_M, @@ -982,7 +985,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_EXCELLENT, EC_MOVE2(MIMIC), EC_WORD_OF, EC_WORD_POKEMON}, .speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_LIKE, EC_WORD_A_LITTLE, EC_POKEMON_NATIONAL(TOGEPI), EC_WORD_EXCL}, .speechLose = {EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_LIKE, EC_WORD_A, EC_POKEMON_NATIONAL(MANKEY), EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Zach + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_1} }, [FRONTIER_TRAINER_KAITLYN] = { .facilityClass = FACILITY_CLASS_PSYCHIC_F, @@ -990,7 +993,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_CRUSH, EC_WORD_THINGS, EC_WORD_WITH, EC_WORD_PSYCHIC, EC_WORD_POWER}, .speechWin = {EC_WORD_MY, EC_WORD_VICTORY, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_THE, EC_WORD_NEWS}, .speechLose = {EC_WORD_NO, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_WORD_THIS, EC_WORD_WON_T, EC_WORD_DO}, - .monSet = gBattleFrontierTrainerMons_Kaitlyn + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_1} }, [FRONTIER_TRAINER_BREANNA] = { .facilityClass = FACILITY_CLASS_PSYCHIC_F, @@ -998,7 +1001,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_WILL, EC_WORD_CRUSH, EC_WORD_YOU, EC_WORD_EXCL}, .speechWin = {EC_WORD_HAVE, EC_WORD_SOME, EC_WORD_MORE, EC_WORD_OF, EC_WORD_THIS, EC_WORD_EXCL}, .speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_GUTS, EC_WORD_AND, EC_WORD_SKILL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Breanna + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_1} }, [FRONTIER_TRAINER_KENDRA] = { .facilityClass = FACILITY_CLASS_PSYCHIC_F, @@ -1006,7 +1009,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_IF, EC_WORD_YOU_RE, EC_WORD_SMART, EC_WORD_STOP, EC_WORD_RIGHT, EC_WORD_NOW}, .speechWin = {EC_WORD_I, EC_WORD_SAID, EC_WORD_THAT, EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_STOP}, .speechLose = {EC_WORD_WHY, EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_STOP, EC_WORD_QUES, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Kendra + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_1} }, [FRONTIER_TRAINER_MOLLY] = { .facilityClass = FACILITY_CLASS_HEX_MANIAC, @@ -1014,7 +1017,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WILL, EC_WORD_MY, EC_WORD_CUTE_CHARM, EC_MOVE2(ATTRACT), EC_WORD_YOU, EC_WORD_QUES}, .speechWin = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_MY, EC_WORD_TOYS, EC_WORD_NOW}, .speechLose = {EC_WORD_OH, EC_WORD_HOW, EC_WORD_COULD, EC_WORD_YOU, EC_WORD_QUES, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Molly + .monSet = (const u16[]){FRONTIER_MONS_HEX_MANIAC_1} }, [FRONTIER_TRAINER_JAZMIN] = { .facilityClass = FACILITY_CLASS_HEX_MANIAC, @@ -1022,7 +1025,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_FORECAST, EC_WORD_TERRIBLE, EC_WORD_THINGS, EC_WORD_FOR, EC_WORD_YOU}, .speechWin = {EC_WORD_THERE, EC_WORD_WASN_T, EC_WORD_MY, EC_WORD_FORECAST, EC_WORD_RIGHT, EC_WORD_QUES}, .speechLose = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_DIDN_T, EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THIS}, - .monSet = gBattleFrontierTrainerMons_Jazmin + .monSet = (const u16[]){FRONTIER_MONS_HEX_MANIAC_1} }, [FRONTIER_TRAINER_KELSEY] = { .facilityClass = FACILITY_CLASS_HEX_MANIAC, @@ -1030,7 +1033,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_HAVEN_T, EC_WORD_SLEPT, EC_WORD_IN, EC_WORD_DAYS, EC_WORD_ELLIPSIS}, .speechWin = {EC_WORD_MY, EC_WORD_SLEEP, EC_WORD_WILL, EC_WORD_BE, EC_WORD_EXCELLENT, EC_WORD_NOW}, .speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_DESTROYED, EC_WORD_MY, EC_WORD_SLEEP, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Kelsey + .monSet = (const u16[]){FRONTIER_MONS_HEX_MANIAC_1} }, [FRONTIER_TRAINER_JALEN] = { .facilityClass = FACILITY_CLASS_POKEMANIAC, @@ -1038,7 +1041,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_ALLOW, EC_WORD_POKEMON, EC_WORD_TO, EC_MOVE(THRASH)}, .speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_ANGRY, EC_WORD_QUES}, .speechLose = {EC_WORD_WHY, EC_WORD_IS, EC_WORD_THIS, EC_WORD_SO, EC_WORD_HARD, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Jalen + .monSet = (const u16[]){FRONTIER_MONS_POKEMANIAC_1} }, [FRONTIER_TRAINER_GRIFFEN] = { .facilityClass = FACILITY_CLASS_POKEMANIAC, @@ -1046,7 +1049,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_MOVE2(SWALLOW), EC_MOVE2(SLUDGE), EC_WORD_TO, EC_MOVE2(TRANSFORM), EC_WORD_MYSELF}, .speechWin = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_MOVE(GROWTH), EC_WORD_OF, EC_MOVE2(ACID_ARMOR)}, .speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_MOVE(GROWTH), EC_WORD_OF, EC_WORD_SUCTION_CUPS}, - .monSet = gBattleFrontierTrainerMons_Griffen + .monSet = (const u16[]){FRONTIER_MONS_POKEMANIAC_1} }, [FRONTIER_TRAINER_XANDER] = { .facilityClass = FACILITY_CLASS_POKEMANIAC, @@ -1054,7 +1057,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_GOT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ON, EC_WORD_RENTAL}, .speechWin = {EC_WORD_IT_S, EC_WORD_INCREDIBLE, EC_WORD_MY, EC_WORD_RENTAL, EC_WORD_POKEMON, EC_WORD_WON}, .speechLose = {EC_WORD_RENTAL, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_UP, EC_WORD_TO, EC_MOVE2(SCRATCH)}, - .monSet = gBattleFrontierTrainerMons_Xander + .monSet = (const u16[]){FRONTIER_MONS_POKEMANIAC_1} }, [FRONTIER_TRAINER_MARVIN] = { .facilityClass = FACILITY_CLASS_GENTLEMAN, @@ -1062,7 +1065,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU_RE, EC_WORD_UP, EC_WORD_TO, EC_WORD_THE, EC_WORD_CHALLENGE, EC_WORD_QUES}, .speechWin = {EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_THINK, EC_WORD_YOU_RE, EC_WORD_GOOD, EC_WORD_ENOUGH}, .speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_PERFECT, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH}, - .monSet = gBattleFrontierTrainerMons_Marvin + .monSet = (const u16[]){FRONTIER_MONS_GENTLEMAN_1A} }, [FRONTIER_TRAINER_BRENNAN] = { .facilityClass = FACILITY_CLASS_GENTLEMAN, @@ -1070,7 +1073,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_MOVE2(WISH), EC_WORD_TO, EC_WORD_SEE, EC_WORD_THE, EC_WORD_NEWS}, .speechWin = {EC_WORD_COMICS, EC_WORD_GET, EC_WORD_DAMP, EC_WORD_FROM, EC_WORD_DRIZZLE, EC_WORD_QUES}, .speechLose = {EC_WORD_THE, EC_WORD_TIGHT, EC_WORD_MONEY, EC_WORD_LIVING, EC_WORD_CHANNEL, EC_WORD_QUES_EXCL}, - .monSet = gBattleFrontierTrainerMons_Brennan + .monSet = (const u16[]){FRONTIER_MONS_GENTLEMAN_1B} }, [FRONTIER_TRAINER_BALEY] = { .facilityClass = FACILITY_CLASS_BUG_MANIAC, @@ -1078,7 +1081,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_MOVE(SCREECH), EC_WORD_IS, EC_WORD_LIKE, EC_WORD_MUSIC, EC_WORD_TO_ME, EC_WORD_EXCL}, .speechWin = {EC_WORD_MY, EC_MOVE(SCREECH), EC_WORD_STRATEGY, EC_WORD_IS, EC_WORD_THE, EC_WORD_BEST}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_SOUNDPROOF, EC_WORD_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Baley + .monSet = (const u16[]){FRONTIER_MONS_BUG_MANIAC_2} }, [FRONTIER_TRAINER_ZACKARY] = { .facilityClass = FACILITY_CLASS_RUIN_MANIAC, @@ -1086,7 +1089,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_MOVE(DIG), EC_WORD_IT, EC_WORD_YO, EC_WORD_QUES}, .speechWin = {EC_MOVE2(TAKE_DOWN), EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(DIVE), EC_WORD_YO, EC_WORD_YO}, .speechLose = {EC_WORD_BREAK, EC_WORD_DOWN, EC_MOVE2(DIVE), EC_WORD_TIME, EC_WORD_FOR, EC_WORD_ME}, - .monSet = gBattleFrontierTrainerMons_Zackary + .monSet = (const u16[]){FRONTIER_MONS_RUIN_MANIAC_2} }, [FRONTIER_TRAINER_GABRIEL] = { .facilityClass = FACILITY_CLASS_COLLECTOR, @@ -1094,7 +1097,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_MOVE2(POUND), EC_WORD_THE, EC_WORD_THICK_FAT, EC_WORD_ON, EC_WORD_MY, EC_MOVE2(BELLY_DRUM)}, .speechWin = {EC_MOVE2(POUND), EC_WORD_MY, EC_MOVE2(BELLY_DRUM), EC_MOVE2(POUND), EC_WORD_MY, EC_MOVE2(BELLY_DRUM)}, .speechLose = {EC_WORD_MY, EC_MOVE2(BELLY_DRUM), EC_WORD_WAS, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Gabriel + .monSet = (const u16[]){FRONTIER_MONS_COLLECTOR_1} }, [FRONTIER_TRAINER_EMILY] = { .facilityClass = FACILITY_CLASS_PARASOL_LADY, @@ -1102,7 +1105,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HOW, EC_WORD_ABOUT, EC_WORD_A_TINY_BIT, EC_WORD_OF, EC_MOVE(HYPNOSIS), EC_WORD_QUES}, .speechWin = {EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_STRATEGY, EC_WORD_WORKS, EC_WORD_TO, EC_WORD_PERFECTION}, .speechLose = {EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_STRATEGY, EC_WORD_WENT, EC_WORD_BADLY, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Emily + .monSet = (const u16[]){FRONTIER_MONS_PARASOL_LADY_2} }, [FRONTIER_TRAINER_JORDYN] = { .facilityClass = FACILITY_CLASS_BEAUTY, @@ -1110,7 +1113,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_MY, EC_WORD_SECRET, EC_WORD_ELLIPSIS}, .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_AS, EC_WORD_I, EC_WORD_APPEAR, EC_WORD_ELLIPSIS}, .speechLose = {EC_WORD_BUT, EC_WORD_HOW, EC_WORD_DID, EC_WORD_YOU, EC_WORD_KNOW, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Jordyn + .monSet = (const u16[]){FRONTIER_MONS_BEAUTY_1} }, [FRONTIER_TRAINER_SOFIA] = { .facilityClass = FACILITY_CLASS_AROMA_LADY, @@ -1118,7 +1121,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_POKEMON(LOUDRED), EC_WORD_PROBABLY, EC_WORD_HAS, EC_WORD_A, EC_MOVE(SWEET_SCENT), EC_EMPTY_WORD}, .speechWin = {EC_WORD_THAT_S, EC_WORD_THE, EC_WORD_FEELING, EC_WORD_THAT, EC_WORD_I, EC_WORD_GET}, .speechLose = {EC_WORD_I, EC_WORD_WORK, EC_WORD_AT, EC_WORD_THE, EC_WORD_DEPT_STORE, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Sofia + .monSet = (const u16[]){FRONTIER_MONS_AROMA_LADY_2} }, [FRONTIER_TRAINER_BRADEN] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_M, @@ -1126,7 +1129,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_CHOOSE_YOU, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_THIS_IS_IT_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_PRETTY, EC_WORD_AWESOME, EC_WORD_ABOUT, EC_WORD_MYSELF}, .speechLose = {EC_WORD_ALL_RIGHT, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_SURRENDER, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Braden + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_1A} }, [FRONTIER_TRAINER_KAYDEN] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_M, @@ -1134,7 +1137,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THEY, EC_WORD_OVERDO, EC_WORD_THAT, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_ELLIPSIS}, .speechWin = {EC_WORD_THAT, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_ISN_T, EC_WORD_FOR, EC_WORD_ME}, .speechLose = {EC_WORD_HEY, EC_WORD_THIS, EC_WORD_IS, EC_WORD_PRETTY, EC_WORD_TASTY, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Kayden + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_1B} }, [FRONTIER_TRAINER_COOPER] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_M, @@ -1142,7 +1145,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_ABSOLUTELY, EC_WORD_BE, EC_WORD_A, EC_WORD_PUSHOVER}, .speechWin = {EC_WORD_THAT_WAS, EC_WORD_TOO, EC_WORD_EXCITING, EC_WORD_FOR, EC_WORD_ME, EC_WORD_ELLIPSIS}, .speechLose = {EC_WORD_PLEASE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_SORRY, EC_WORD_I_AM, EC_WORD_SORRY}, - .monSet = gBattleFrontierTrainerMons_Cooper + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_1C} }, [FRONTIER_TRAINER_JULIA] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_F, @@ -1150,7 +1153,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_SPIRIT, EC_WORD_ALONE, EC_WORD_WON_T, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_WIN}, .speechWin = {EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_ACCEPT, EC_WORD_THIS, EC_WORD_WITH, EC_WORD_SERENE_GRACE}, .speechLose = {EC_WORD_FOR_NOW, EC_WORD_GOOD_BYE, EC_WORD_BUT, EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_OVER}, - .monSet = gBattleFrontierTrainerMons_Julia + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_1A} }, [FRONTIER_TRAINER_AMARA] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_F, @@ -1158,7 +1161,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WROOOAAR_EXCL, EC_WORD_EXCL_EXCL, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_READY, EC_WORD_EXCL_EXCL}, .speechWin = {EC_WORD_I, EC_WORD_LOSE, EC_WORD_MYSELF, EC_WORD_IF, EC_WORD_IT_S, EC_WORD_EXCITING}, .speechLose = {EC_WORD_THAT_S, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_TO, EC_MOVE2(TACKLE), EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Amara + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_1B} }, [FRONTIER_TRAINER_LYNN] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_F, @@ -1166,7 +1169,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOUR, EC_WORD_SECRET, EC_WORD_CAN_T, EC_WORD_BE, EC_WORD_HIDDEN, EC_WORD_FOREVER}, .speechWin = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_YOUR, EC_WORD_SECRET, EC_WORD_NOW, EC_WORD_EXCL}, .speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_MOVE(SAFEGUARD), EC_WORD_YOUR, EC_WORD_OWN, EC_WORD_SECRET}, - .monSet = gBattleFrontierTrainerMons_Lynn + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_1C} }, [FRONTIER_TRAINER_JOVAN] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, @@ -1174,7 +1177,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOUR, EC_WORD_BATTLE, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_SADLY, EC_WORD_LACKING}, .speechWin = {EC_WORD_MY, EC_WORD_BATTLE, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_COOL, EC_WORD_ISN_T_IT_QUES}, .speechLose = {EC_WORD_I_WAS, EC_WORD_MINUS, EC_WORD_MY, EC_WORD_NORMAL, EC_WORD_POWER, EC_WORD_TODAY}, - .monSet = gBattleFrontierTrainerMons_Jovan + .monSet = (const u16[]){FRONTIER_MONS_PKMN_RANGER_1} }, [FRONTIER_TRAINER_DOMINIC] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, @@ -1182,7 +1185,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_THIS, EC_WORD_EXCELLENT, EC_WORD_CAMERA, EC_EMPTY_WORD}, .speechWin = {EC_WORD_MY, EC_WORD_CAMERA, EC_WORD_WAS, EC_WORD_AWFULLY, EC_WORD_EXPENSIVE, EC_EMPTY_WORD}, .speechLose = {EC_WORD_MY, EC_WORD_CAMERA, EC_WORD_DOESN_T, EC_WORD_MISS, EC_WORD_A, EC_WORD_THING}, - .monSet = gBattleFrontierTrainerMons_Dominic + .monSet = (const u16[]){FRONTIER_MONS_PKMN_RANGER_1} }, [FRONTIER_TRAINER_NIKOLAS] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, @@ -1190,7 +1193,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_MOVE2(MIMIC), EC_WORD_POKEMON, EC_WORD_AFTER, EC_WORD_EVERY, EC_WORD_BATTLE}, .speechWin = {EC_WORD_IF_I_WIN, EC_WORD_I, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_A, EC_POKEMON_NATIONAL(TAUROS)}, .speechLose = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_A, EC_POKEMON_NATIONAL(MILTANK)}, - .monSet = gBattleFrontierTrainerMons_Nikolas + .monSet = (const u16[]){FRONTIER_MONS_PKMN_RANGER_1} }, [FRONTIER_TRAINER_VALERIA] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, @@ -1198,7 +1201,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_MOVE2(WISH), EC_WORD_YOU, EC_WORD_WOULD, EC_WORD_NOT, EC_MOVE2(GLARE)}, .speechWin = {EC_WORD_YOU_RE, EC_WORD_MEAN, EC_WORD_EXCL, EC_WORD_I, EC_WORD_MEAN, EC_WORD_REALLY}, .speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_A, EC_WORD_REALLY, EC_MOVE(SCARY_FACE), EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Valeria + .monSet = (const u16[]){FRONTIER_MONS_PKMN_RANGER_1} }, [FRONTIER_TRAINER_DELANEY] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, @@ -1206,7 +1209,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_SCHOOL, EC_WORD_IS, EC_WORD_OVER, EC_WORD_TIME, EC_WORD_TO, EC_WORD_PLAY}, .speechWin = {EC_WORD_MY, EC_WORD_BOY, EC_WORD_FRIEND, EC_WORD_IS, EC_WORD_FROM, EC_WORD_SCHOOL}, .speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_WORK, EC_WORD_NEXT, EC_WORD_WEEK}, - .monSet = gBattleFrontierTrainerMons_Delaney + .monSet = (const u16[]){FRONTIER_MONS_PKMN_RANGER_1} }, [FRONTIER_TRAINER_MEGHAN] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, @@ -1214,7 +1217,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_SCHOOL, EC_WORD_IS, EC_WORD_OUT, EC_WORD_TIME, EC_WORD_TO, EC_WORD_PLAY}, .speechWin = {EC_WORD_MY, EC_WORD_BOY, EC_WORD_FRIEND, EC_WORD_LIKES, EC_WORD_COMICS, EC_EMPTY_WORD}, .speechLose = {EC_WORD_IT_S, EC_WORD_BACK, EC_WORD_TO, EC_WORD_SCHOOL, EC_WORD_SOON, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Meghan + .monSet = (const u16[]){FRONTIER_MONS_PKMN_RANGER_1} }, [FRONTIER_TRAINER_ROBERTO] = { .facilityClass = FACILITY_CLASS_DRAGON_TAMER, @@ -1222,7 +1225,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_INVINCIBLE, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_YOU, EC_WORD_WEREN_T, EC_WORD_BAD, EC_WORD_I_WAS, EC_WORD_JUST, EC_WORD_BETTER}, .speechLose = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_SATISFIED, EC_WORD_YET, EC_WORD_QUES, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Roberto + .monSet = (const u16[]){FRONTIER_MONS_DRAGON_TAMER_1} }, [FRONTIER_TRAINER_DAMIAN] = { .facilityClass = FACILITY_CLASS_DRAGON_TAMER, @@ -1230,7 +1233,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_PURE_POWER, EC_WORD_IS, EC_WORD_MACHINE, EC_WORD_LIKE, EC_WORD_EXCL}, .speechWin = {EC_WORD_MY, EC_MOVE2(MACH_PUNCH), EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_A, EC_MOVE(BRICK_BREAK)}, .speechLose = {EC_WORD_ARRGH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_NO, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Damian + .monSet = (const u16[]){FRONTIER_MONS_DRAGON_TAMER_1} }, [FRONTIER_TRAINER_BRODY] = { .facilityClass = FACILITY_CLASS_DRAGON_TAMER, @@ -1238,7 +1241,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_FASHION, EC_WORD_SENSE, EC_WORD_SEEMS, EC_POKEMON(ODDISH), EC_WORD_QUES}, .speechWin = {EC_WORD_IT_S, EC_WORD_MY, EC_WORD_FAMILY, EC_WORD_STAY_AT_HOME, EC_WORD_LOOK, EC_WORD_EXCL}, .speechLose = {EC_WORD_I, EC_WORD_QUESTION, EC_WORD_YOUR, EC_WORD_FASHION, EC_WORD_SENSE, EC_WORD_SERIOUSLY}, - .monSet = gBattleFrontierTrainerMons_Brody + .monSet = (const u16[]){FRONTIER_MONS_DRAGON_TAMER_1} }, [FRONTIER_TRAINER_GRAHAM] = { .facilityClass = FACILITY_CLASS_DRAGON_TAMER, @@ -1246,7 +1249,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YEAH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_YEAH_YEAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_WAHAHAHA, EC_WORD_WAHAHAHA, EC_WORD_EXCL, EC_WORD_WAHAHAHA, EC_WORD_WAHAHAHA, EC_WORD_EXCL_EXCL}, .speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_MY, EC_WORD_BAD}, - .monSet = gBattleFrontierTrainerMons_Graham + .monSet = (const u16[]){FRONTIER_MONS_DRAGON_TAMER_1} }, [FRONTIER_TRAINER_TYLOR] = { .facilityClass = FACILITY_CLASS_POKEFAN_M, @@ -1254,7 +1257,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_MY, EC_MOVE2(HEAT_WAVE), EC_WORD_QUES}, .speechWin = {EC_WORD_YES, EC_WORD_I_AM, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_BUT, EC_WORD_I_WAS, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_FOR, EC_WORD_YOU}, - .monSet = gBattleFrontierTrainerMons_Tylor + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_2} }, [FRONTIER_TRAINER_JAREN] = { .facilityClass = FACILITY_CLASS_POKEFAN_F, @@ -1262,7 +1265,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_FIGHTING, EC_WORD_SPIRIT, EC_WORD_QUES, EC_WORD_ME, EC_WORD_QUES, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I, EC_WORD_WANT, EC_WORD_MORE, EC_WORD_CUTE, EC_WORD_POKEMON, EC_EMPTY_WORD}, .speechLose = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_LOOK, EC_WORD_QUITE, EC_WORD_CUTE, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Jaren + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_2} }, [FRONTIER_TRAINER_CORDELL] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, @@ -1270,7 +1273,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_DECIDED, EC_WORD_ON, EC_WORD_SPIRIT}, .speechWin = {EC_WORD_CAN_T, EC_WORD_YOU, EC_WORD_ACCEPT, EC_WORD_THAT, EC_WORD_QUES, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_BE, EC_WORD_ON, EC_WORD_MY, EC_WORD_WAY}, - .monSet = gBattleFrontierTrainerMons_Cordell + .monSet = (const u16[]){FRONTIER_MONS_PKMN_BREEDER_M_1} }, [FRONTIER_TRAINER_JAZLYN] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, @@ -1278,7 +1281,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_POKEDEX, EC_WORD_REALLY, EC_WORD_AWESOME, EC_WORD_QUES}, .speechWin = {EC_WORD_OH_YEAH, EC_WORD_WOW, EC_WORD_YOUR, EC_WORD_POKEDEX, EC_WORD_IS, EC_WORD_SUPER}, .speechLose = {EC_WORD_AN, EC_WORD_AVANT_GARDE, EC_WORD_POKEDEX, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_AWESOME}, - .monSet = gBattleFrontierTrainerMons_Jazlyn + .monSet = (const u16[]){FRONTIER_MONS_PKMN_BREEDER_F_1} }, [FRONTIER_TRAINER_ZACHERY] = { .facilityClass = FACILITY_CLASS_YOUNGSTER, @@ -1286,7 +1289,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_MY, EC_WORD_OWN, EC_WORD_PLACE, EC_WORD_YEEHAW_EXCL}, .speechWin = {EC_WORD_IT_S, EC_WORD_AN, EC_WORD_EXCITING, EC_WORD_TIME, EC_WORD_FOR, EC_WORD_ME}, .speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_FLATTEN, EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Zachery + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_2} }, [FRONTIER_TRAINER_JOHAN] = { .facilityClass = FACILITY_CLASS_YOUNGSTER, @@ -1294,7 +1297,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WINTER, EC_WORD_WILL, EC_WORD_SOON, EC_WORD_BE, EC_WORD_HERE, EC_EMPTY_WORD}, .speechWin = {EC_WORD_MY, EC_WORD_ALLOWANCE, EC_WORD_COULD, EC_WORD_USE, EC_WORD_A, EC_MOVE2(HELPING_HAND)}, .speechLose = {EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_USE, EC_WORD_MY, EC_WORD_ALLOWANCE, EC_WORD_UP}, - .monSet = gBattleFrontierTrainerMons_Johan + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_2_NO_DUGTRIO} }, [FRONTIER_TRAINER_SHEA] = { .facilityClass = FACILITY_CLASS_LASS, @@ -1302,7 +1305,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_BATTLE, EC_WORD_WITH, EC_WORD_BEAUTY, EC_WORD_QUES}, .speechWin = {EC_WORD_YOU, EC_WORD_BATTLE, EC_WORD_IN, EC_WORD_AN, EC_WORD_UGLY, EC_WORD_WAY}, .speechLose = {EC_WORD_WHAT, EC_WORD_IS, EC_WORD_BEAUTY, EC_WORD_TO, EC_WORD_YOU, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Shea + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_2} }, [FRONTIER_TRAINER_KAILA] = { .facilityClass = FACILITY_CLASS_LASS, @@ -1310,7 +1313,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_THIRSTY, EC_WORD_RIGHT, EC_WORD_NOW, EC_WORD_ELLIPSIS}, .speechWin = {EC_WORD_I, EC_WORD_COULD, EC_WORD_USE, EC_WORD_A, EC_WORD_COLD, EC_WORD_DRINK}, .speechLose = {EC_WORD_THAT, EC_WORD_LOSS, EC_WORD_IS, EC_WORD_HARD, EC_WORD_TO, EC_MOVE2(SWALLOW)}, - .monSet = gBattleFrontierTrainerMons_Kaila + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_2} }, [FRONTIER_TRAINER_ISIAH] = { .facilityClass = FACILITY_CLASS_SCHOOL_KID_M, @@ -1318,7 +1321,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_PRETEND, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_A_LOT, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I, EC_MOVE2(TRICK), EC_WORD_MOTHER, EC_WORD_FOR, EC_WORD_MY, EC_WORD_ALLOWANCE}, .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_WANT, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MORE}, - .monSet = gBattleFrontierTrainerMons_Isiah + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_2} }, [FRONTIER_TRAINER_GARRETT] = { .facilityClass = FACILITY_CLASS_SCHOOL_KID_M, @@ -1326,7 +1329,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_ENJOY, EC_WORD_COMICS, EC_WORD_AND, EC_WORD_THIS, EC_WORD_GAME}, .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_MUSIC, EC_WORD_IDOL, EC_WORD_TOO}, .speechLose = {EC_WORD_BUT, EC_WORD_I, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MORE}, - .monSet = gBattleFrontierTrainerMons_Garrett + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_2} }, [FRONTIER_TRAINER_HAYLIE] = { .facilityClass = FACILITY_CLASS_SCHOOL_KID_F, @@ -1334,7 +1337,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WORRY, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_SLEEP}, .speechWin = {EC_WORD_A, EC_WORD_WIN, EC_WORD_GIVES, EC_WORD_ME, EC_WORD_A, EC_MOVE2(CALM_MIND)}, .speechLose = {EC_WORD_MY, EC_WORD_INSOMNIA, EC_WORD_WILL, EC_WORD_GET, EC_WORD_BAD, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Haylie + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_2} }, [FRONTIER_TRAINER_MEGAN] = { .facilityClass = FACILITY_CLASS_SCHOOL_KID_F, @@ -1342,7 +1345,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_BELIEVE, EC_WORD_IN, EC_WORD_AN, EC_MOVE(AROMATHERAPY), EC_WORD_BATH}, .speechWin = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_WORD_HEALTHY, EC_WORD_CLEAR_BODY, EC_EMPTY_WORD}, .speechLose = {EC_WORD_IF, EC_WORD_ONLY, EC_MOVE(AROMATHERAPY), EC_WORD_WERE, EC_WORD_LESS, EC_WORD_EXPENSIVE}, - .monSet = gBattleFrontierTrainerMons_Megan + .monSet = (const u16[]){FRONTIER_MONS_SCHOOL_KID_2} }, [FRONTIER_TRAINER_ISSAC] = { .facilityClass = FACILITY_CLASS_RICH_BOY, @@ -1350,7 +1353,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_HOBBY, EC_WORD_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_ANY, EC_WORD_KIND, EC_WORD_OF, EC_MOVE2(WATER_SPORT)}, .speechLose = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_ANY, EC_WORD_KIND, EC_WORD_OF, EC_MOVE2(MUD_SPORT)}, - .monSet = gBattleFrontierTrainerMons_Issac + .monSet = (const u16[]){FRONTIER_MONS_RICH_BOY_LADY_2} }, [FRONTIER_TRAINER_QUINTON] = { .facilityClass = FACILITY_CLASS_RICH_BOY, @@ -1358,7 +1361,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_CAUSE, EC_WORD_I_AM, EC_WORD_TOO_WEAK, EC_EMPTY_WORD}, .speechWin = {EC_WORD_YOU, EC_WORD_AREN_T, EC_WORD_TOO_STRONG, EC_WORD_FOR, EC_WORD_ME, EC_EMPTY_WORD}, .speechLose = {EC_WORD_HEY, EC_WORD_WHAT, EC_WORD_DID, EC_WORD_I, EC_WORD_DO, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Quinton + .monSet = (const u16[]){FRONTIER_MONS_RICH_BOY_LADY_2} }, [FRONTIER_TRAINER_SALMA] = { .facilityClass = FACILITY_CLASS_LADY, @@ -1366,7 +1369,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU_VE, EC_WORD_GOT, EC_WORD_YOUR, EC_WORD_HUSTLE, EC_WORD_ON, EC_WORD_EXCL}, .speechWin = {EC_WORD_I, EC_WORD_WIN, EC_WORD_YOU, EC_WORD_HUSTLE, EC_WORD_ON, EC_WORD_OUT}, .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_GET, EC_WORD_HOW, EC_WORD_I, EC_WORD_LOST}, - .monSet = gBattleFrontierTrainerMons_Salma + .monSet = (const u16[]){FRONTIER_MONS_RICH_BOY_LADY_2} }, [FRONTIER_TRAINER_ANSLEY] = { .facilityClass = FACILITY_CLASS_LADY, @@ -1374,7 +1377,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_BORED, EC_WORD_ELLIPSIS, EC_WORD_DANCE, EC_WORD_FOR, EC_WORD_ME}, .speechWin = {EC_WORD_YOU_VE, EC_WORD_BORED, EC_WORD_ME, EC_WORD_SOME, EC_WORD_MORE, EC_EMPTY_WORD}, .speechLose = {EC_WORD_TAKE, EC_WORD_YOUR, EC_MOVE2(FRUSTRATION), EC_WORD_SOME, EC_WORD_OTHER, EC_WORD_PLACE}, - .monSet = gBattleFrontierTrainerMons_Ansley + .monSet = (const u16[]){FRONTIER_MONS_RICH_BOY_LADY_2} }, [FRONTIER_TRAINER_HOLDEN] = { .facilityClass = FACILITY_CLASS_BUG_CATCHER, @@ -1382,7 +1385,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_LET_S, EC_WORD_COMMEMORATE, EC_WORD_MY, EC_WORD_COOLNESS, EC_WORD_IN, EC_WORD_BATTLE}, .speechWin = {EC_WORD_YOU_RE, EC_WORD_TOO_WEAK, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_PRAISE, EC_EMPTY_WORD}, .speechLose = {EC_WORD_YOUR, EC_WORD_BATTLE, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_AMUSING, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Holden + .monSet = (const u16[]){FRONTIER_MONS_BUG_CATCHER_2} }, [FRONTIER_TRAINER_LUCA] = { .facilityClass = FACILITY_CLASS_BUG_CATCHER, @@ -1390,7 +1393,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WE, EC_WORD_WILL, EC_WORD_HAVE, EC_WORD_A, EC_WORD_COOL, EC_WORD_BATTLE}, .speechWin = {EC_WORD_I, EC_WORD_WON, EC_WORD_IN, EC_WORD_A, EC_WORD_COOL, EC_WORD_WAY}, .speechLose = {EC_WORD_HELLO, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_JUST, EC_WORD_A, EC_WORD_KID}, - .monSet = gBattleFrontierTrainerMons_Luca + .monSet = (const u16[]){FRONTIER_MONS_BUG_CATCHER_2} }, [FRONTIER_TRAINER_JAMISON] = { .facilityClass = FACILITY_CLASS_NINJA_BOY, @@ -1398,7 +1401,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_MOVE2(SECRET_POWER), EC_WORD_IS, EC_WORD_OVERWHELMING, EC_WORD_TO, EC_WORD_POKEMON}, .speechWin = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_USE, EC_MOVE(SMOKESCREEN), EC_WORD_TO, EC_WORD_ESCAPE}, - .monSet = gBattleFrontierTrainerMons_Jamison + .monSet = (const u16[]){FRONTIER_MONS_NINJA_BOY_2} }, [FRONTIER_TRAINER_GUNNAR] = { .facilityClass = FACILITY_CLASS_NINJA_BOY, @@ -1406,7 +1409,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_MOVE(CUT), EC_WORD_DOWN, EC_WORD_EVERY, EC_WORD_OPPONENT, EC_EMPTY_WORD}, .speechWin = {EC_WORD_DON_T, EC_MOVE(GRUDGE), EC_WORD_ME, EC_WORD_FOR, EC_WORD_YOUR, EC_WORD_LOSS}, .speechLose = {EC_WORD_PLEASE, EC_WORD_LOSE, EC_WORD_THAT, EC_MOVE(SCARY_FACE), EC_WORD_OF, EC_WORD_YOURS}, - .monSet = gBattleFrontierTrainerMons_Gunnar + .monSet = (const u16[]){FRONTIER_MONS_NINJA_BOY_2} }, [FRONTIER_TRAINER_CRAIG] = { .facilityClass = FACILITY_CLASS_TUBER_M, @@ -1414,7 +1417,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_FOR, EC_WORD_MY, EC_WORD_TRAIN}, .speechWin = {EC_WORD_MY, EC_WORD_TRAIN, EC_WORD_ISN_T, EC_WORD_HERE, EC_WORD_YET, EC_WORD_ELLIPSIS}, .speechLose = {EC_WORD_HERE_IT_IS, EC_WORD_MY, EC_WORD_TRAIN, EC_WORD_SEE_YA, EC_WORD_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Craig + .monSet = (const u16[]){FRONTIER_MONS_TUBER_2} }, [FRONTIER_TRAINER_PIERCE] = { .facilityClass = FACILITY_CLASS_TUBER_M, @@ -1422,7 +1425,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THERE, EC_WORD_WAS, EC_WORD_A, EC_MOVE2(HEAT_WAVE), EC_WORD_LAST, EC_WORD_WEEK}, .speechWin = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(HEAT_WAVE), EC_EMPTY_WORD}, .speechLose = {EC_WORD_DIDN_T, EC_WORD_IT, EC_MOVE(HAIL), EC_WORD_TOO, EC_WORD_QUES, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Pierce + .monSet = (const u16[]){FRONTIER_MONS_TUBER_2} }, [FRONTIER_TRAINER_REGINA] = { .facilityClass = FACILITY_CLASS_TUBER_F, @@ -1430,7 +1433,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_PLAY, EC_WORD_IN, EC_WORD_WATER}, .speechWin = {EC_WORD_I, EC_WORD_REFUSE, EC_WORD_TO, EC_WORD_COME, EC_WORD_OUT, EC_EMPTY_WORD}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_NOT, EC_WORD_MUCH, EC_WORD_GOOD, EC_WORD_IN, EC_WORD_WATER}, - .monSet = gBattleFrontierTrainerMons_Regina + .monSet = (const u16[]){FRONTIER_MONS_TUBER_2} }, [FRONTIER_TRAINER_ALISON] = { .facilityClass = FACILITY_CLASS_TUBER_F, @@ -1438,7 +1441,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THIS, EC_WORD_KINDERGARTEN, EC_WORD_MAGAZINE, EC_WORD_IS, EC_WORD_TOO, EC_WORD_MUCH}, .speechWin = {EC_WORD_HOW, EC_WORD_TO, EC_WORD_BUG, EC_WORD_YOUR, EC_WORD_TEACHER, EC_WORD_QUES}, .speechLose = {EC_WORD_ENJOY, EC_WORD_A, EC_WORD_TASTY, EC_WORD_SCHOOL, EC_WORD_DIET, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Alison + .monSet = (const u16[]){FRONTIER_MONS_TUBER_2} }, [FRONTIER_TRAINER_HANK] = { .facilityClass = FACILITY_CLASS_BUG_MANIAC, @@ -1446,7 +1449,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_A, EC_WORD_BUG, EC_WORD_EVENT, EC_WORD_SOON}, .speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_BUG, EC_WORD_FASHION, EC_WORD_SHOW, EC_WORD_EXCL}, .speechLose = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Hank + .monSet = (const u16[]){FRONTIER_MONS_BUG_MANIAC_3} }, [FRONTIER_TRAINER_EARL] = { .facilityClass = FACILITY_CLASS_BUG_MANIAC, @@ -1454,7 +1457,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THE, EC_WORD_INVINCIBLE, EC_WORD_BUG, EC_WORD_TRAINER, EC_WORD_IS, EC_WORD_HERE}, .speechWin = {EC_WORD_THE, EC_WORD_INVINCIBLE, EC_WORD_BUG, EC_WORD_TRAINER, EC_WORD_AM, EC_WORD_I}, .speechLose = {EC_WORD_SEE, EC_WORD_HOW, EC_WORD_FAST, EC_WORD_I, EC_WORD_RUN_AWAY, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Earl + .monSet = (const u16[]){FRONTIER_MONS_BUG_MANIAC_3} }, [FRONTIER_TRAINER_RAMIRO] = { .facilityClass = FACILITY_CLASS_FISHERMAN, @@ -1462,7 +1465,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WENT, EC_WORD_TO, EC_WORD_A, EC_WORD_FISHING, EC_WORD_SCHOOL}, .speechWin = {EC_WORD_SERIOUSLY, EC_WORD_I_AM, EC_WORD_IN, EC_WORD_THE, EC_WORD_FISHING, EC_WORD_HALL_OF_FAME}, .speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_BACK, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Ramiro + .monSet = (const u16[]){FRONTIER_MONS_FISHERMAN_2} }, [FRONTIER_TRAINER_HUNTER] = { .facilityClass = FACILITY_CLASS_FISHERMAN, @@ -1470,7 +1473,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_A, EC_WORD_TOTALLY, EC_WORD_COOL, EC_MOVE(CROSS_CHOP)}, .speechWin = {EC_WORD_YOU_RE, EC_WORD_TOO_WEAK, EC_WORD_TO, EC_WORD_DO, EC_WORD_A, EC_MOVE(CROSS_CHOP)}, .speechLose = {EC_WORD_WAS, EC_WORD_IT, EC_WORD_A, EC_WORD_MISTAKE, EC_WORD_QUES, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Hunter + .monSet = (const u16[]){FRONTIER_MONS_FISHERMAN_2} }, [FRONTIER_TRAINER_AIDEN] = { .facilityClass = FACILITY_CLASS_RUIN_MANIAC, @@ -1478,7 +1481,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_WORK, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_ME, EC_WORD_HEALTHY}, .speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_HEALTHY, EC_WORD_EXCL}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_MORE, EC_WORD_HEALTHY, EC_WORD_THAN, EC_WORD_I_AM, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Aiden + .monSet = (const u16[]){FRONTIER_MONS_RUIN_MANIAC_3} }, [FRONTIER_TRAINER_XAVIER] = { .facilityClass = FACILITY_CLASS_RUIN_MANIAC, @@ -1486,7 +1489,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HEY_THERE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_LOOK, EC_WORD_LOOK, EC_WORD_EXCL_EXCL}, .speechWin = {EC_WORD_GOOD_BYE, EC_WORD_AND, EC_WORD_THANK_YOU, EC_WORD_THAT_WAS, EC_WORD_FUNNY, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WOWEE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_NO, EC_WORD_NO, EC_WORD_EXCL_EXCL}, - .monSet = gBattleFrontierTrainerMons_Xavier + .monSet = (const u16[]){FRONTIER_MONS_RUIN_MANIAC_3} }, [FRONTIER_TRAINER_CLINTON] = { .facilityClass = FACILITY_CLASS_COLLECTOR, @@ -1494,7 +1497,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_SEE, EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_QUES}, .speechWin = {EC_WORD_YOUR, EC_MOVE2(FURY_SWIPES), EC_WORD_YOUR, EC_MOVE(STRENGTH), EC_WORD_YOUNG, EC_WORD_TRAINER}, .speechLose = {EC_WORD_TCH, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Clinton + .monSet = (const u16[]){FRONTIER_MONS_COLLECTOR_2} }, [FRONTIER_TRAINER_JESSE] = { .facilityClass = FACILITY_CLASS_COLLECTOR, @@ -1502,7 +1505,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THIS, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_FOR, EC_WORD_MY, EC_WORD_MOTHER}, .speechWin = {EC_WORD_MOTHER, EC_WORD_WILL, EC_WORD_BE, EC_WORD_HAPPY, EC_WORD_FOR, EC_WORD_ME}, .speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_MY, EC_WORD_MOTHER, EC_WORD_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Jesse + .monSet = (const u16[]){FRONTIER_MONS_COLLECTOR_2} }, [FRONTIER_TRAINER_EDUARDO] = { .facilityClass = FACILITY_CLASS_GUITARIST, @@ -1510,7 +1513,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_OUR, EC_WORD_MUSIC, EC_WORD_WILL, EC_WORD_PLAY, EC_WORD_ALL, EC_WORD_NIGHT}, .speechWin = {EC_WORD_NIGHTTIME, EC_WORD_IS, EC_WORD_WHEN, EC_WORD_I, EC_WORD_PLAY, EC_WORD_BEST}, .speechLose = {EC_WORD_LET_S, EC_WORD_PARTY, EC_WORD_UNTIL, EC_WORD_THE, EC_MOVE(MORNING_SUN), EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Eduardo + .monSet = (const u16[]){FRONTIER_MONS_GUITARIST_2} }, [FRONTIER_TRAINER_HAL] = { .facilityClass = FACILITY_CLASS_GUITARIST, @@ -1518,7 +1521,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_TRENDY, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_QUES, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_HIP_AND, EC_WORD_HAPPENING, EC_WORD_OH_YEAH, EC_WORD_EXCL}, .speechLose = {EC_WORD_I_AM, EC_WORD_ALWAYS, EC_WORD_TRENDY, EC_WORD_THANK_YOU, EC_WORD_VERY, EC_WORD_MUCH}, - .monSet = gBattleFrontierTrainerMons_Hal + .monSet = (const u16[]){FRONTIER_MONS_GUITARIST_2} }, [FRONTIER_TRAINER_GAGE] = { .facilityClass = FACILITY_CLASS_BIRD_KEEPER, @@ -1526,7 +1529,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HERE_IT_IS, EC_WORD_A, EC_WORD_FLYING, EC_WORD_TYPE, EC_WORD_HIDDEN, EC_WORD_MOVE}, .speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_FLYING, EC_WORD_TYPE, EC_WORD_VICTORY, EC_WORD_EXCL}, .speechLose = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_JUST, EC_MOVE(FLY), EC_WORD_AWAY, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Gage + .monSet = (const u16[]){FRONTIER_MONS_BIRD_KEEPER_2} }, [FRONTIER_TRAINER_ARNOLD] = { .facilityClass = FACILITY_CLASS_BIRD_KEEPER, @@ -1534,7 +1537,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_WEIRD, EC_WORD_FROM, EC_WORD_A, EC_WORD_DREAM}, .speechWin = {EC_WORD_YOUR, EC_MOVE(SCARY_FACE), EC_WORD_WAS, EC_WORD_IN, EC_WORD_MY, EC_WORD_DREAM}, .speechLose = {EC_WORD_MY, EC_WORD_INCREDIBLE, EC_WORD_DREAM, EC_WORD_WAS, EC_WORD_SO, EC_WORD_WEIRD}, - .monSet = gBattleFrontierTrainerMons_Arnold + .monSet = (const u16[]){FRONTIER_MONS_BIRD_KEEPER_2} }, [FRONTIER_TRAINER_JARRETT] = { .facilityClass = FACILITY_CLASS_SAILOR, @@ -1542,7 +1545,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_COME_ON, EC_WORD_LET_S, EC_WORD_DANCE, EC_WORD_LIKE, EC_WORD_IT_S, EC_WORD_YESTERDAY}, .speechWin = {EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_HOW, EC_WORD_I, EC_WORD_DANCE, EC_WORD_QUES}, .speechLose = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_APPRECIATE, EC_WORD_HOW, EC_WORD_I, EC_WORD_DANCE}, - .monSet = gBattleFrontierTrainerMons_Jarrett + .monSet = (const u16[]){FRONTIER_MONS_SAILOR_2} }, [FRONTIER_TRAINER_GARETT] = { .facilityClass = FACILITY_CLASS_SAILOR, @@ -1550,7 +1553,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_GIRL, EC_WORD_GIVES, EC_WORD_ME, EC_WORD_A_LITTLE, EC_MOVE2(SWEET_KISS)}, .speechWin = {EC_WORD_MY, EC_WORD_GIRL, EC_WORD_FRIEND, EC_WORD_IS, EC_WORD_MY, EC_WORD_TREASURE}, .speechLose = {EC_WORD_A, EC_WORD_TREASURE, EC_WORD_ISN_T, EC_WORD_ALWAYS, EC_WORD_ABOUT, EC_WORD_MONEY}, - .monSet = gBattleFrontierTrainerMons_Garett + .monSet = (const u16[]){FRONTIER_MONS_SAILOR_2} }, [FRONTIER_TRAINER_EMANUEL] = { .facilityClass = FACILITY_CLASS_HIKER, @@ -1558,7 +1561,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_SMARTNESS, EC_WORD_ALONE, EC_WORD_WON_T, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_WIN}, .speechWin = {EC_WORD_I_AM, EC_WORD_NOT_VERY, EC_WORD_SMART, EC_WORD_BUT, EC_WORD_I, EC_WORD_WON}, .speechLose = {EC_WORD_HOW, EC_WORD_DID, EC_WORD_YOU, EC_MOVE2(FAKE_OUT), EC_WORD_ME, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Emanuel + .monSet = (const u16[]){FRONTIER_MONS_HIKER_2} }, [FRONTIER_TRAINER_GUSTAVO] = { .facilityClass = FACILITY_CLASS_HIKER, @@ -1566,7 +1569,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_MOVE(CHARGE), EC_WORD_EXCL, EC_EMPTY_WORD, EC_MOVE(CHARGE), EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_SURRENDER, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES}, .speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_SURRENDER, EC_WORD_YET}, - .monSet = gBattleFrontierTrainerMons_Gustavo + .monSet = (const u16[]){FRONTIER_MONS_HIKER_2} }, [FRONTIER_TRAINER_KAMERON] = { .facilityClass = FACILITY_CLASS_KINDLER, @@ -1574,7 +1577,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_TAKE_THAT, EC_WORD_EXCL, EC_WORD_IT_S, EC_WORD_MY, EC_WORD_FIERY, EC_MOVE2(TRICK)}, .speechWin = {EC_WORD_DID, EC_WORD_MY, EC_WORD_FIERY, EC_MOVE2(TRICK), EC_MOVE(ASTONISH), EC_WORD_QUES}, .speechLose = {EC_WORD_YOU, EC_WORD_DIDN_T, EC_WORD_FALL, EC_WORD_FOR, EC_WORD_MY, EC_MOVE2(TRICK)}, - .monSet = gBattleFrontierTrainerMons_Kameron + .monSet = (const u16[]){FRONTIER_MONS_KINDLER_2} }, [FRONTIER_TRAINER_ALFREDO] = { .facilityClass = FACILITY_CLASS_KINDLER, @@ -1582,7 +1585,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A, EC_WORD_FIERY, EC_WORD_GOURMET, EC_WORD_AM, EC_WORD_I, EC_WORD_EXCL}, .speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_TASTY, EC_WORD_GOURMET, EC_WORD_VICTORY, EC_WORD_EXCL}, .speechLose = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_DISASTER, EC_WORD_THAT_WAS, EC_WORD_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Alfredo + .monSet = (const u16[]){FRONTIER_MONS_KINDLER_2} }, [FRONTIER_TRAINER_RUBEN] = { .facilityClass = FACILITY_CLASS_GENTLEMAN, @@ -1590,7 +1593,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_TO, EC_WORD_GET, EC_WORD_GOING}, .speechWin = {EC_WORD_GET, EC_WORD_GOING, EC_WORD_EXCL, EC_WORD_THIS, EC_WORD_IS, EC_WORD_GOOD_BYE}, .speechLose = {EC_WORD_I_VE, EC_WORD_GOT, EC_WORD_TO, EC_WORD_GET, EC_WORD_GOING, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Ruben + .monSet = (const u16[]){FRONTIER_MONS_GENTLEMAN_2} }, [FRONTIER_TRAINER_LAMAR] = { .facilityClass = FACILITY_CLASS_GENTLEMAN, @@ -1598,7 +1601,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A, EC_MOVE2(PRESENT), EC_WORD_FOR, EC_WORD_ME, EC_WORD_QUES, EC_EMPTY_WORD}, .speechWin = {EC_WORD_MMM, EC_WORD_THIS, EC_WORD_IS, EC_WORD_QUITE, EC_WORD_TASTY, EC_WORD_ELLIPSIS}, .speechLose = {EC_WORD_OH, EC_WORD_IT_S, EC_WORD_A, EC_WORD_GAME, EC_WORD_IS_IT_QUES, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Lamar + .monSet = (const u16[]){FRONTIER_MONS_GENTLEMAN_2} }, [FRONTIER_TRAINER_JAXON] = { .facilityClass = FACILITY_CLASS_YOUNGSTER, @@ -1606,7 +1609,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A, EC_WORD_SHELL_ARMOR, EC_WORD_IS, EC_WORD_WHAT, EC_WORD_I, EC_WORD_WANT}, .speechWin = {EC_WORD_MY, EC_WORD_FATHER, EC_WORD_AND, EC_WORD_MOTHER, EC_WORD_WON_T, EC_WORD_ACCEPT}, .speechLose = {EC_WORD_PLEASE, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_SHELL_ARMOR, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Jaxon + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_3} }, [FRONTIER_TRAINER_LOGAN] = { .facilityClass = FACILITY_CLASS_YOUNGSTER, @@ -1614,7 +1617,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_WILL, EC_WORD_STUDY, EC_WORD_FOR, EC_WORD_SCHOOL}, .speechWin = {EC_WORD_ME, EC_WORD_STUDY, EC_WORD_QUES, EC_WORD_NOT_VERY, EC_WORD_LIKELY_TO, EC_WORD_SEE}, .speechLose = {EC_WORD_NO, EC_WORD_THANKS, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_SLEEP}, - .monSet = gBattleFrontierTrainerMons_Logan + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_3} }, [FRONTIER_TRAINER_EMILEE] = { .facilityClass = FACILITY_CLASS_LASS, @@ -1622,7 +1625,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_IS, EC_WORD_THIS, EC_WORD_KIND, EC_WORD_OF, EC_WORD_BATTLE, EC_WORD_OK_QUES}, .speechWin = {EC_WORD_LET_S, EC_WORD_GO, EC_WORD_FOR, EC_WORD_AN, EC_MOVE(ICY_WIND), EC_MOVE2(SURF)}, .speechLose = {EC_WORD_HOW, EC_WORD_ABOUT, EC_WORD_A, EC_MOVE(ROCK_SLIDE), EC_WORD_SHOW, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Emilee + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_3} }, [FRONTIER_TRAINER_JOSIE] = { .facilityClass = FACILITY_CLASS_LASS, @@ -1630,7 +1633,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_FASHION, EC_WORD_CONTEST, EC_WORD_IS, EC_WORD_PRETTY}, .speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_MODE, EC_WORD_FASHION, EC_WORD_THINGS}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_TOTALLY, EC_WORD_LACKING, EC_WORD_IN, EC_WORD_FASHION, EC_WORD_SENSE}, - .monSet = gBattleFrontierTrainerMons_Josie + .monSet = (const u16[]){FRONTIER_MONS_YOUNGSTER_LASS_3} }, [FRONTIER_TRAINER_ARMANDO] = { .facilityClass = FACILITY_CLASS_CAMPER, @@ -1638,7 +1641,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_NEED, EC_WORD_MORE, EC_WORD_GRASS, EC_WORD_TYPE, EC_WORD_POKEMON}, .speechWin = {EC_WORD_TRADE, EC_WORD_ME, EC_WORD_A, EC_WORD_GRASS, EC_WORD_POKEMON, EC_WORD_PLEASE}, .speechLose = {EC_WORD_THERE, EC_WORD_AREN_T, EC_WORD_ENOUGH, EC_WORD_GRASS, EC_WORD_TYPE, EC_WORD_POKEMON}, - .monSet = gBattleFrontierTrainerMons_Armando + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_2} }, [FRONTIER_TRAINER_SKYLER] = { .facilityClass = FACILITY_CLASS_CAMPER, @@ -1646,7 +1649,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_MOVE2(INGRAIN), EC_WORD_IS, EC_WORD_MY, EC_WORD_CHOICE, EC_WORD_BATTLE, EC_WORD_MOVE}, .speechWin = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_MOVE, EC_WORD_ME, EC_WORD_NOW, EC_WORD_EXCL}, .speechLose = {EC_WORD_YOU, EC_MOVE(CUT), EC_WORD_ME, EC_WORD_DOWN, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Skyler + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_2} }, [FRONTIER_TRAINER_RUTH] = { .facilityClass = FACILITY_CLASS_PICNICKER, @@ -1654,7 +1657,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_ENJOY, EC_WORD_THIS, EC_WORD_BATTLE}, .speechWin = {EC_WORD_THAT_WAS, EC_WORD_MUCH, EC_WORD_TOO, EC_WORD_EASY, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_PLEASE, EC_WORD_STOP, EC_WORD_I, EC_WORD_DON_T, EC_WORD_ENJOY, EC_WORD_THIS}, - .monSet = gBattleFrontierTrainerMons_Ruth + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_2} }, [FRONTIER_TRAINER_MELODY] = { .facilityClass = FACILITY_CLASS_PICNICKER, @@ -1662,7 +1665,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_MOVE2(WISH), EC_WORD_SUNDAY, EC_WORD_IS, EC_WORD_A, EC_MOVE2(SUNNY_DAY)}, .speechWin = {EC_WORD_SUNDAY, EC_WORD_SEEMS, EC_WORD_FOREVER, EC_WORD_TO, EC_WORD_COME, EC_WORD_ELLIPSIS}, .speechLose = {EC_WORD_THE, EC_WORD_FORECAST, EC_WORD_SAYS, EC_WORD_IT, EC_WORD_WILL, EC_MOVE(HAIL)}, - .monSet = gBattleFrontierTrainerMons_Melody + .monSet = (const u16[]){FRONTIER_MONS_CAMPER_PICNICKER_2} }, [FRONTIER_TRAINER_PEDRO] = { .facilityClass = FACILITY_CLASS_SWIMMER_M, @@ -1670,7 +1673,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A, EC_WORD_SWIFT_SWIM, EC_WORD_WILL, EC_WORD_DO, EC_WORD_YOU, EC_WORD_GOOD}, .speechWin = {EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_I, EC_WORD_SINK, EC_WORD_AN, EC_WORD_OPPONENT}, .speechLose = {EC_WORD_UH_OH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_A, EC_MOVE(WHIRLPOOL), EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Pedro + .monSet = (const u16[]){FRONTIER_MONS_SWIMMER_M_2} }, [FRONTIER_TRAINER_ERICK] = { .facilityClass = FACILITY_CLASS_SWIMMER_M, @@ -1678,7 +1681,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_MOVE2(TACKLE), EC_WORD_YOU, EC_WORD_DOWN, EC_WORD_EXCL}, .speechWin = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_RUN_AWAY, EC_WORD_YOU, EC_WORD_LOSER, EC_WORD_EXCL}, .speechLose = {EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_THINK, EC_WORD_YOU, EC_WORD_WOULD, EC_MOVE(COUNTER)}, - .monSet = gBattleFrontierTrainerMons_Erick + .monSet = (const u16[]){FRONTIER_MONS_SWIMMER_M_2} }, [FRONTIER_TRAINER_ELAINE] = { .facilityClass = FACILITY_CLASS_SWIMMER_F, @@ -1686,7 +1689,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_HEROINE, EC_WORD_ADVENTURE, EC_WORD_ISN_T, EC_WORD_GOING, EC_WORD_WELL}, .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I, EC_WORD_NEED}, .speechLose = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_A, EC_WORD_HEROINE}, - .monSet = gBattleFrontierTrainerMons_Elaine + .monSet = (const u16[]){FRONTIER_MONS_SWIMMER_F_2} }, [FRONTIER_TRAINER_JOYCE] = { .facilityClass = FACILITY_CLASS_SWIMMER_F, @@ -1694,7 +1697,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_GO, EC_WORD_AHAHA, EC_WORD_EXCL}, .speechWin = {EC_WORD_LALALA, EC_WORD_NO, EC_WORD_LOSING, EC_WORD_FOR, EC_WORD_ME, EC_WORD_EXCL}, .speechLose = {EC_WORD_LALALA, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_HUH_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Joyce + .monSet = (const u16[]){FRONTIER_MONS_SWIMMER_F_2} }, [FRONTIER_TRAINER_TODD] = { .facilityClass = FACILITY_CLASS_POKEFAN_M, @@ -1702,7 +1705,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_LIGHTNINGROD, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POWER}, .speechWin = {EC_WORD_THAT_S, EC_WORD_ALL, EC_WORD_YOU, EC_WORD_COULD, EC_MOVE(ABSORB), EC_WORD_QUES}, .speechLose = {EC_WORD_YOU, EC_MOVE2(REFLECT), EC_WORD_MY, EC_WORD_POWER, EC_WORD_BACK, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Todd + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_3} }, [FRONTIER_TRAINER_GAVIN] = { .facilityClass = FACILITY_CLASS_POKEFAN_M, @@ -1710,7 +1713,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_MOVE(BIDE), EC_WORD_MY, EC_WORD_TIME, EC_EMPTY_WORD}, .speechWin = {EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES, EC_EMPTY_WORD}, .speechLose = {EC_WORD_MY, EC_WORD_MISTAKE, EC_WORD_WAS, EC_WORD_TOO, EC_WORD_EXPENSIVE, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Gavin + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_3} }, [FRONTIER_TRAINER_MALORY] = { .facilityClass = FACILITY_CLASS_POKEFAN_F, @@ -1718,7 +1721,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_PROMISE, EC_WORD_TO, EC_WORD_SHOW, EC_WORD_ME, EC_WORD_CUTE, EC_WORD_POKEMON}, .speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH}, .speechLose = {EC_WORD_TCH, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_VERY, EC_WORD_NICE}, - .monSet = gBattleFrontierTrainerMons_Malory + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_3} }, [FRONTIER_TRAINER_ESTHER] = { .facilityClass = FACILITY_CLASS_POKEFAN_F, @@ -1726,7 +1729,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_WORD_NICE, EC_MOVE2(PRESENT), EC_WORD_ELLIPSIS}, .speechWin = {EC_WORD_PLEASE, EC_WORD_GET, EC_WORD_ME, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_GAME}, .speechLose = {EC_WORD_MESSAGE, EC_WORD_CARDS, EC_WORD_MAKE, EC_WORD_A, EC_WORD_WEAK, EC_MOVE2(PRESENT)}, - .monSet = gBattleFrontierTrainerMons_Esther + .monSet = (const u16[]){FRONTIER_MONS_POKEFAN_3} }, [FRONTIER_TRAINER_OSCAR] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, @@ -1734,7 +1737,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_LET_S, EC_WORD_SEE, EC_WORD_YOUR, EC_WORD_POWER, EC_WORD_IN, EC_WORD_FULL}, .speechWin = {EC_WORD_THAT_WAS, EC_WORD_NOT, EC_WORD_YOUR, EC_WORD_FULL, EC_WORD_POWER, EC_WORD_EXCL}, .speechLose = {EC_WORD_NOT, EC_WORD_FUNNY, EC_WORD_ELLIPSIS, EC_WORD_YOU_RE, EC_WORD_TOO_STRONG, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Oscar + .monSet = (const u16[]){FRONTIER_MONS_PKMN_BREEDER_2} }, [FRONTIER_TRAINER_WILSON] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, @@ -1742,7 +1745,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WORK, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_ME, EC_WORD_AN, EC_WORD_EARLY_BIRD}, .speechWin = {EC_WORD_ALL, EC_WORD_WORK, EC_WORD_AND, EC_WORD_NO, EC_WORD_PLAY, EC_WORD_ELLIPSIS}, .speechLose = {EC_MOVE(ENDURE), EC_WORD_IS, EC_WORD_ALL, EC_WORD_I, EC_WORD_CAN, EC_WORD_DO}, - .monSet = gBattleFrontierTrainerMons_Wilson + .monSet = (const u16[]){FRONTIER_MONS_PKMN_BREEDER_2} }, [FRONTIER_TRAINER_CLARE] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, @@ -1750,7 +1753,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YAY, EC_WORD_EXCL, EC_WORD_A, EC_WORD_TOUGH, EC_WORD_TRAINER, EC_WORD_EXCL}, .speechWin = {EC_WORD_AWW, EC_WORD_EXCL, EC_WORD_A, EC_WORD_WIMPY, EC_WORD_TRAINER, EC_WORD_EXCL}, .speechLose = {EC_WORD_COOL, EC_WORD_EXCL, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_TRAINER, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Clare + .monSet = (const u16[]){FRONTIER_MONS_PKMN_BREEDER_2} }, [FRONTIER_TRAINER_TESS] = { .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, @@ -1758,7 +1761,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WANT, EC_WORD_SOME, EC_POKEMON(GULPIN), EC_WORD_DESIGN, EC_WORD_SWEETS, EC_WORD_QUES}, .speechWin = {EC_WORD_THEY_RE, EC_WORD_A, EC_WORD_SECRET, EC_WORD_POKEMON, EC_WORD_GOURMET, EC_WORD_ITEM}, .speechLose = {EC_WORD_THEY_RE, EC_WORD_TASTY, EC_WORD_EXCL, EC_WORD_REFRESHING, EC_WORD_TOO, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Tess + .monSet = (const u16[]){FRONTIER_MONS_PKMN_BREEDER_2} }, [FRONTIER_TRAINER_LEON] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_M, @@ -1766,7 +1769,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_ANY, EC_WORD_OTHER, EC_WORD_TRAINER}, .speechWin = {EC_WORD_I, EC_WORD_DID, EC_WORD_IT, EC_MOVE2(JUMP_KICK), EC_WORD_FOR, EC_WORD_JOY}, .speechLose = {EC_WORD_BACK, EC_WORD_HOME, EC_WORD_I, EC_WORD_WILL, EC_WORD_GO, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Leon + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_M_2A} }, [FRONTIER_TRAINER_ALONZO] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_M, @@ -1774,7 +1777,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_VE, EC_WORD_NOT, EC_WORD_LOST, EC_WORD_ONCE, EC_WORD_YET, EC_WORD_EXCL}, .speechWin = {EC_WORD_YOUR, EC_WORD_SAD, EC_WORD_LOOK, EC_WORD_BECOMES, EC_WORD_YOU, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_BELIEVE, EC_WORD_THIS, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Alonzo + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_M_2B} }, [FRONTIER_TRAINER_VINCE] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_M, @@ -1782,7 +1785,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THE, EC_WORD_TOP, EC_WORD_TRAINER, EC_WORD_THAT_S, EC_WORD_ME, EC_WORD_EXCL}, .speechWin = {EC_WORD_THE, EC_WORD_TOP, EC_WORD_RANK, EC_WORD_BELONGS_TO, EC_WORD_ME, EC_WORD_EXCL}, .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_APPEAL, EC_WORD_THIS, EC_MOVE(OUTRAGE), EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Vince + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_2C(LATIOS)} }, [FRONTIER_TRAINER_BRYON] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_M, @@ -1790,7 +1793,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_MOVE2(BARRAGE), EC_WORD_WILL, EC_MOVE2(SLAM), EC_WORD_YOU, EC_WORD_EXCL}, .speechWin = {EC_WORD_YOU, EC_WORD_DIDN_T, EC_WORD_COUNT_ON, EC_WORD_ANY, EC_WORD_LESS, EC_WORD_QUES}, .speechLose = {EC_WORD_I, EC_WORD_JUST, EC_WORD_DON_T, EC_WORD_GET, EC_WORD_IT, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Bryon + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_2D(LATIOS)} }, [FRONTIER_TRAINER_AVA] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_F, @@ -1798,7 +1801,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_TREASURE, EC_WORD_OF, EC_WORD_THIS, EC_WORD_WORLD}, .speechWin = {EC_WORD_MY, EC_WORD_WORLD, EC_WORD_IS, EC_WORD_FULL, EC_WORD_OF, EC_WORD_WONDER}, .speechLose = {EC_WORD_WHY, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_SO, EC_WORD_TERRIBLE, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Ava + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_F_2A} }, [FRONTIER_TRAINER_MIRIAM] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_F, @@ -1806,7 +1809,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_OH, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_WITH, EC_WORD_A, EC_MOVE(SCARY_FACE)}, .speechWin = {EC_WORD_AHAHA, EC_WORD_YOU, EC_WORD_ONLY, EC_WORD_LOOK, EC_WORD_SCARY, EC_WORD_EXCL}, .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_ARE, EC_WORD_SCARY}, - .monSet = gBattleFrontierTrainerMons_Miriam + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_F_2B} }, [FRONTIER_TRAINER_CARRIE] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_F, @@ -1814,7 +1817,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_WORD_SHOW, EC_WORD_YOU, EC_WORD_GUTSY, EC_WORD_EXCL}, .speechWin = {EC_WORD_IT_S, EC_WORD_ALL, EC_WORD_ABOUT, EC_WORD_GUTS, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_OH, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_MOVE(SELF_DESTRUCT), EC_WORD_MODE, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Carrie + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_2C(LATIAS)} }, [FRONTIER_TRAINER_GILLIAN2] = { .facilityClass = FACILITY_CLASS_COOLTRAINER_F, @@ -1822,7 +1825,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_SEEK, EC_WORD_A, EC_WORD_TRULY, EC_WORD_GREAT, EC_WORD_BATTLE}, .speechWin = {EC_WORD_I, EC_WORD_NEED, EC_WORD_A_LOT, EC_WORD_BETTER, EC_WORD_BATTLE, EC_WORD_ELLIPSIS}, .speechLose = {EC_WORD_THAT_WAS, EC_WORD_A_LITTLE, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_TAKE}, - .monSet = gBattleFrontierTrainerMons_Gillian2 + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_2D(LATIAS)} }, [FRONTIER_TRAINER_TYLER] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, @@ -1830,7 +1833,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YO, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_LET_S, EC_WORD_GO, EC_WORD_EXCL_EXCL}, .speechWin = {EC_WORD_YO, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_WON, EC_WORD_YO}, .speechLose = {EC_WORD_YO, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_LOST, EC_WORD_YO}, - .monSet = gBattleFrontierTrainerMons_Tyler + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_A} }, [FRONTIER_TRAINER_CHAZ] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, @@ -1838,7 +1841,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_HAVE, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_POWER}, .speechWin = {EC_WORD_THEY, EC_WORD_HAVE, EC_WORD_MORE, EC_WORD_POWER, EC_WORD_NOW, EC_WORD_EXCL}, .speechLose = {EC_WORD_YEAH, EC_MOVE2(TAKE_DOWN), EC_WORD_THEIR, EC_WORD_POWER, EC_WORD_A_TINY_BIT, EC_WORD_PLEASE}, - .monSet = gBattleFrontierTrainerMons_Chaz + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_B} }, [FRONTIER_TRAINER_NELSON] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, @@ -1846,7 +1849,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WELL_THEN, EC_WORD_WILL, EC_WORD_THIS, EC_WORD_POKEMON, EC_WORD_WORK, EC_WORD_QUES}, .speechWin = {EC_WORD_I, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_IT, EC_WORD_WAS, EC_WORD_TOO_STRONG}, .speechLose = {EC_WORD_IT, EC_WORD_DIDN_T, EC_WORD_MATCH_UP, EC_WORD_WELL, EC_WORD_I, EC_WORD_THINK}, - .monSet = gBattleFrontierTrainerMons_Nelson + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_2D(LATIOS)} }, [FRONTIER_TRAINER_SHANIA] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, @@ -1854,7 +1857,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_ALL, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ABSOLUTELY, EC_WORD_ADORE, EC_WORD_ME}, .speechWin = {EC_WORD_HAPPINESS, EC_WORD_IS, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_WITH, EC_WORD_CUTE_CHARM}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_SO, EC_WORD_MEAN, EC_WORD_TO, EC_WORD_CUTE, EC_WORD_POKEMON}, - .monSet = gBattleFrontierTrainerMons_Shania + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_C} }, [FRONTIER_TRAINER_STELLA] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, @@ -1862,7 +1865,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_SEE, EC_WORD_YOUR, EC_WORD_POKEMON}, .speechWin = {EC_WORD_WELL, EC_WORD_AREN_T, EC_WORD_THEY, EC_WORD_BORING, EC_WORD_QUES, EC_WORD_AHAHA}, .speechLose = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_SOMETHING, EC_WORD_ELSE, EC_WORD_ALL_RIGHT}, - .monSet = gBattleFrontierTrainerMons_Stella + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_D} }, [FRONTIER_TRAINER_DORINE] = { .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, @@ -1870,7 +1873,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_YOUNG, EC_WORD_AND, EC_WORD_STRONG, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_SEE, EC_WORD_QUES, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_GOOD, EC_WORD_QUES}, .speechLose = {EC_WORD_THIS, EC_WORD_ISN_T, EC_WORD_WORKING, EC_WORD_OUT, EC_WORD_AT, EC_WORD_ALL}, - .monSet = gBattleFrontierTrainerMons_Dorine + .monSet = (const u16[]){FRONTIER_MONS_COOLTRAINER_2D(LATIAS)} }, [FRONTIER_TRAINER_MADDOX] = { .facilityClass = FACILITY_CLASS_DRAGON_TAMER, @@ -1878,7 +1881,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_MY, EC_WORD_NO_1, EC_WORD_CHOICE}, .speechWin = {EC_WORD_IT_S, EC_WORD_NO, EC_WORD_SECRET, EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_WIN}, .speechLose = {EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_LOSE, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Maddox + .monSet = (const u16[]){FRONTIER_MONS_DRAGON_TAMER_2} }, [FRONTIER_TRAINER_DAVIN] = { .facilityClass = FACILITY_CLASS_DRAGON_TAMER, @@ -1886,7 +1889,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_LET_S, EC_WORD_HEAR, EC_WORD_YOU, EC_MOVE2(ROAR), EC_WORD_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_WROOOAAR_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_VICTORY, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WROOOAAR_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_WHY, EC_WORD_QUES_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Davin + .monSet = (const u16[]){FRONTIER_MONS_DRAGON_TAMER_2} }, [FRONTIER_TRAINER_TREVON] = { .facilityClass = FACILITY_CLASS_DRAGON_TAMER, @@ -1894,7 +1897,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_LIVING, EC_WORD_ONLY, EC_WORD_WITH, EC_WORD_DRAGON, EC_WORD_POKEMON}, .speechWin = {EC_WORD_THE, EC_WORD_WAY, EC_WORD_I_AM, EC_WORD_LIVING, EC_WORD_IS, EC_WORD_PERFECT}, .speechLose = {EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_THE, EC_WORD_WAY, EC_WORD_I_AM, EC_WORD_LIVING}, - .monSet = gBattleFrontierTrainerMons_Trevon + .monSet = (const u16[]){FRONTIER_MONS_DRAGON_TAMER_2} }, [FRONTIER_TRAINER_MATEO] = { .facilityClass = FACILITY_CLASS_BLACK_BELT, @@ -1902,7 +1905,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_OVER, EC_WORD_SOON, EC_WORD_ENOUGH}, .speechWin = {EC_WORD_WELL, EC_WORD_THAT, EC_WORD_DIDN_T, EC_WORD_TAKE, EC_WORD_VERY, EC_WORD_MUCH}, .speechLose = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE, EC_WORD_SO, EC_WORD_SOON, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Mateo + .monSet = (const u16[]){FRONTIER_MONS_BLACK_BELT_2A} }, [FRONTIER_TRAINER_BRET] = { .facilityClass = FACILITY_CLASS_BLACK_BELT, @@ -1910,7 +1913,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_ROCK_SOLID, EC_WORD_POKEMON, EC_WORD_THE, EC_WORD_BEST}, .speechWin = {EC_WORD_TOUGHNESS, EC_WORD_IS, EC_WORD_THE, EC_WORD_WAY, EC_WORD_TO, EC_WORD_GO}, .speechLose = {EC_WORD_I, EC_WORD_ALSO, EC_WORD_HAVE, EC_WORD_A, EC_WORD_PLUSH_DOLL, EC_WORD_COLLECTION}, - .monSet = gBattleFrontierTrainerMons_Bret + .monSet = (const u16[]){FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2B} }, [FRONTIER_TRAINER_RAUL] = { .facilityClass = FACILITY_CLASS_BLACK_BELT, @@ -1918,7 +1921,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_REJECT, EC_WORD_EVERY, EC_WORD_WEAK, EC_WORD_TRAINER, EC_EMPTY_WORD}, .speechWin = {EC_WORD_HUMPH, EC_WORD_EXCL, EC_WORD_ANOTHER, EC_WORD_WEAK, EC_WORD_TRAINER, EC_WORD_ELLIPSIS}, .speechLose = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NOTHING, EC_WORD_WEAK, EC_WORD_ABOUT, EC_WORD_YOU}, - .monSet = gBattleFrontierTrainerMons_Raul + .monSet = (const u16[]){FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2C} }, [FRONTIER_TRAINER_KAY] = { .facilityClass = FACILITY_CLASS_BATTLE_GIRL, @@ -1926,7 +1929,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_AND, EC_WORD_YET, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_QUES, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I, EC_WORD_WON, EC_WORD_BUT, EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_ELLIPSIS}, .speechLose = {EC_WORD_GOOD, EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_AT, EC_WORD_LAST, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Kay + .monSet = (const u16[]){FRONTIER_MONS_BATTLE_GIRL_2A} }, [FRONTIER_TRAINER_ELENA] = { .facilityClass = FACILITY_CLASS_BATTLE_GIRL, @@ -1934,7 +1937,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A, EC_WORD_BATTLE, EC_WORD_GIRL, EC_WORD_THAT_S, EC_WORD_ME, EC_WORD_EXCL}, .speechWin = {EC_WORD_ISN_T, EC_WORD_A, EC_WORD_BATTLE, EC_WORD_GIRL, EC_WORD_AWESOME, EC_WORD_QUES}, .speechLose = {EC_WORD_YOU, EC_WORD_DISLIKE, EC_WORD_A, EC_WORD_BATTLE, EC_WORD_GIRL, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Elena + .monSet = (const u16[]){FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2B} }, [FRONTIER_TRAINER_ALANA] = { .facilityClass = FACILITY_CLASS_BATTLE_GIRL, @@ -1942,7 +1945,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_EAT, EC_WORD_MY, EC_WORD_INVINCIBLE, EC_WORD_ATTACK, EC_WORD_YOU, EC_WORD_EXCL}, .speechWin = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_LEARN, EC_EMPTY_WORD}, .speechLose = {EC_WORD_SO, EC_WORD_MUCH, EC_WORD_FOR, EC_WORD_MY, EC_WORD_INVINCIBLE, EC_WORD_ATTACK}, - .monSet = gBattleFrontierTrainerMons_Alana + .monSet = (const u16[]){FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2C} }, [FRONTIER_TRAINER_ALEXAS] = { .facilityClass = FACILITY_CLASS_EXPERT_M, @@ -1950,7 +1953,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_GOOD, EC_WORD_TO, EC_WORD_MEET_YOU, EC_WORD_YOUNG, EC_WORD_TRAINER, EC_WORD_EXCL}, .speechWin = {EC_WORD_WAHAHAHA, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_GIVE, EC_WORD_IT, EC_WORD_UP}, .speechLose = {EC_WORD_YOU, EC_WORD_ARE, EC_WORD_A, EC_WORD_STRONG, EC_WORD_TRAINER, EC_WORD_KID}, - .monSet = gBattleFrontierTrainerMons_Alexas + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_2A(TYRANITAR)} }, [FRONTIER_TRAINER_WESTON] = { .facilityClass = FACILITY_CLASS_EXPERT_M, @@ -1958,7 +1961,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_PLAY, EC_WORD_DOWN, EC_WORD_ALL_RIGHT, EC_WORD_QUES}, .speechWin = {EC_WORD_YOU_RE, EC_WORD_FAR, EC_WORD_TOO, EC_WORD_EASY, EC_WORD_TO, EC_WORD_ATTACK}, .speechLose = {EC_WORD_WELL, EC_WORD_WELL, EC_WORD_ELLIPSIS, EC_WORD_I, EC_WORD_SURRENDER, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Weston + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_2B(LATIOS)} }, [FRONTIER_TRAINER_JASPER] = { .facilityClass = FACILITY_CLASS_EXPERT_M, @@ -1966,7 +1969,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_OLD, EC_WORD_I_AM, EC_WORD_SKILLED, EC_WORD_EXCL}, .speechWin = {EC_WORD_SKILLED, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I_AM, EC_WORD_SHOCKED, EC_WORD_EXCL, EC_WORD_DOWN, EC_WORD_I, EC_WORD_GO}, - .monSet = gBattleFrontierTrainerMons_Jasper + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_2C(TYRANITAR)} }, [FRONTIER_TRAINER_NADIA] = { .facilityClass = FACILITY_CLASS_EXPERT_F, @@ -1974,7 +1977,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_DOWN, EC_WORD_EXCL}, .speechWin = {EC_WORD_HAH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_BEAT, EC_WORD_YOU}, .speechLose = {EC_WORD_I_AM, EC_MOVE2(BEAT_UP), EC_WORD_AND, EC_WORD_DOWNCAST, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Nadia + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_2A(DRAGONITE)} }, [FRONTIER_TRAINER_MIRANDA] = { .facilityClass = FACILITY_CLASS_EXPERT_F, @@ -1982,7 +1985,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WELL, EC_WORD_WELL, EC_EMPTY_WORD, EC_WORD_LET_S, EC_WORD_START, EC_EMPTY_WORD}, .speechWin = {EC_WORD_WHAT, EC_WORD_QUES, EC_WORD_DONE, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES}, .speechLose = {EC_WORD_WELL, EC_WORD_I, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_I_AM, EC_WORD_TOO_WEAK}, - .monSet = gBattleFrontierTrainerMons_Miranda + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_2B(LATIAS)} }, [FRONTIER_TRAINER_EMMA] = { .facilityClass = FACILITY_CLASS_EXPERT_F, @@ -1990,7 +1993,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_VE, EC_WORD_BEEN, EC_WORD_HEARING, EC_WORD_ABOUT, EC_WORD_YOU, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I, EC_WORD_THINK, EC_WORD_I_VE, EC_WORD_MISHEARD, EC_WORD_THINGS, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WHAT, EC_WORD_I_VE, EC_WORD_BEEN, EC_WORD_HEARING, EC_WORD_IS, EC_WORD_RIGHT}, - .monSet = gBattleFrontierTrainerMons_Emma + .monSet = (const u16[]){FRONTIER_MONS_EXPERT_2C(DRAGONITE)} }, [FRONTIER_TRAINER_ROLANDO] = { .facilityClass = FACILITY_CLASS_PSYCHIC_M, @@ -1998,7 +2001,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_SUPER, EC_WORD_POKEMON, EC_WORD_HERO, EC_WORD_EXCL}, .speechWin = {EC_WORD_WAS, EC_WORD_THAT, EC_WORD_ENOUGH, EC_WORD_FOR, EC_WORD_YOU, EC_WORD_QUES}, .speechLose = {EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_BEAT, EC_WORD_A, EC_WORD_HERO}, - .monSet = gBattleFrontierTrainerMons_Rolando + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_2(LATIOS, ARTICUNO, ZAPDOS, MOLTRES)} }, [FRONTIER_TRAINER_STANLY] = { .facilityClass = FACILITY_CLASS_PSYCHIC_M, @@ -2006,7 +2009,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_AN, EC_WORD_EASY, EC_WORD_MATCH}, .speechWin = {EC_WORD_IT, EC_WORD_REALLY, EC_WORD_WAS, EC_WORD_EASY, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechLose = {EC_WORD_ARE, EC_WORD_YOU, EC_WORD_HAPPY, EC_WORD_NOW, EC_WORD_QUES, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Stanly + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_2(LATIOS, RAIKOU, ENTEI, SUICUNE)} }, [FRONTIER_TRAINER_DARIO] = { .facilityClass = FACILITY_CLASS_PSYCHIC_M, @@ -2014,7 +2017,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_SAYS, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN}, .speechWin = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_HAS, EC_WORD_BEEN, EC_WORD_PERFECT, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_SEE, EC_WORD_THIS, EC_MOVE(REVERSAL), EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Dario + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_2(LATIOS, REGIROCK, REGICE, REGISTEEL)} }, [FRONTIER_TRAINER_KARLEE] = { .facilityClass = FACILITY_CLASS_PSYCHIC_F, @@ -2022,7 +2025,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_SOMETHING, EC_WORD_GOOD, EC_WORD_WILL, EC_WORD_COME, EC_WORD_OF, EC_WORD_THIS}, .speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_FANTASTIC, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_THAT, EC_WORD_SOMETHING, EC_WORD_GOOD, EC_WORD_WENT, EC_WORD_TO, EC_WORD_YOU}, - .monSet = gBattleFrontierTrainerMons_Karlee + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_2(LATIAS, ARTICUNO, ZAPDOS, MOLTRES)} }, [FRONTIER_TRAINER_JAYLIN] = { .facilityClass = FACILITY_CLASS_PSYCHIC_F, @@ -2030,7 +2033,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_EVERY, EC_WORD_TRAINER, EC_WORD_HAS, EC_WORD_BEEN, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS}, .speechWin = {EC_WORD_IT_S, EC_WORD_MAKING, EC_WORD_ME, EC_MOVE(YAWN), EC_WORD_THAT, EC_WORD_BATTLE}, .speechLose = {EC_WORD_I, EC_WORD_SLEPT, EC_WORD_AND, EC_WORD_SO, EC_WORD_I, EC_WORD_LOST}, - .monSet = gBattleFrontierTrainerMons_Jaylin + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_2(LATIAS, RAIKOU, ENTEI, SUICUNE)} }, [FRONTIER_TRAINER_INGRID] = { .facilityClass = FACILITY_CLASS_PSYCHIC_F, @@ -2038,7 +2041,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_A, EC_WORD_VERY, EC_WORD_MEAN, EC_WORD_TRAINER}, .speechWin = {EC_WORD_WASN_T, EC_WORD_THAT, EC_WORD_A, EC_WORD_GOOD, EC_WORD_MATCH, EC_WORD_QUES}, .speechLose = {EC_WORD_I, EC_WORD_LOST, EC_WORD_CAUSE, EC_WORD_YOU_RE, EC_WORD_MEAN, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Ingrid + .monSet = (const u16[]){FRONTIER_MONS_PSYCHIC_2(LATIAS, REGIROCK, REGICE, REGISTEEL)} }, [FRONTIER_TRAINER_DELILAH] = { .facilityClass = FACILITY_CLASS_HEX_MANIAC, @@ -2046,7 +2049,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_DON_T, EC_MOVE(GRUDGE), EC_WORD_ME, EC_WORD_IF_I_WIN, EC_WORD_OK_QUES, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_SEE, EC_WORD_YOU, EC_WORD_ANGRY}, .speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_MOVE(GRUDGE), EC_WORD_WITH, EC_WORD_YOU}, - .monSet = gBattleFrontierTrainerMons_Delilah + .monSet = (const u16[]){FRONTIER_MONS_HEX_MANIAC_2A} }, [FRONTIER_TRAINER_CARLY] = { .facilityClass = FACILITY_CLASS_HEX_MANIAC, @@ -2054,7 +2057,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_WORD_SCATTER, EC_WORD_SOME, EC_MOVE2(POISON_POWDER), EC_WORD_ABOUT}, .speechWin = {EC_WORD_IT_S, EC_WORD_SCARY, EC_WORD_HOW, EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_WORKS}, .speechLose = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_YOU, EC_WORD_AND, EC_WORD_YOUR, EC_WORD_POKEMON}, - .monSet = gBattleFrontierTrainerMons_Carly + .monSet = (const u16[]){FRONTIER_MONS_HEX_MANIAC_2B} }, [FRONTIER_TRAINER_LEXIE] = { .facilityClass = FACILITY_CLASS_HEX_MANIAC, @@ -2062,7 +2065,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_SEE, EC_WORD_SCARY, EC_WORD_POKEMON, EC_WORD_QUES}, .speechWin = {EC_WORD_WASN_T, EC_WORD_THAT, EC_WORD_SCARY, EC_WORD_EH_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_MORE, EC_WORD_SCARY, EC_WORD_THAN, EC_WORD_MY, EC_WORD_POKEMON}, - .monSet = gBattleFrontierTrainerMons_Lexie + .monSet = (const u16[]){FRONTIER_MONS_HEX_MANIAC_2C} }, [FRONTIER_TRAINER_MILLER] = { .facilityClass = FACILITY_CLASS_POKEMANIAC, @@ -2070,7 +2073,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_HELLO, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_HELLO, EC_WORD_QUES_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_HELLO, EC_WORD_MOTHER, EC_WORD_EXCL, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL}, .speechLose = {EC_WORD_MY, EC_WORD_PHONE, EC_WORD_ISN_T, EC_WORD_WORKING, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Miller + .monSet = (const u16[]){FRONTIER_MONS_POKEMANIAC_2A} }, [FRONTIER_TRAINER_MARV] = { .facilityClass = FACILITY_CLASS_POKEMANIAC, @@ -2078,7 +2081,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_LOSE, EC_WORD_YOUR, EC_MOVE(SWAGGER), EC_WORD_NOW}, .speechWin = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NO, EC_MOVE(SWAGGER), EC_WORD_LEFT, EC_WORD_EH_QUES}, .speechLose = {EC_WORD_GO, EC_WORD_ON, EC_MOVE(SWAGGER), EC_WORD_ALL, EC_WORD_YOU, EC_WORD_WANT}, - .monSet = gBattleFrontierTrainerMons_Marv + .monSet = (const u16[]){FRONTIER_MONS_POKEMANIAC_2B} }, [FRONTIER_TRAINER_LAYTON] = { .facilityClass = FACILITY_CLASS_POKEMANIAC, @@ -2086,7 +2089,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_I_AM, EC_WORD_TOTALLY, EC_WORD_COOL, EC_WORD_EXCL}, .speechWin = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_LOOK, EC_WORD_UP, EC_WORD_TO, EC_WORD_ME}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_COOL, EC_WORD_EXCL, EC_WORD_NO, EC_WORD_REALLY, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Layton + .monSet = (const u16[]){FRONTIER_MONS_POKEMANIAC_2C} }, [FRONTIER_TRAINER_BROOKS] = { .facilityClass = FACILITY_CLASS_GENTLEMAN, @@ -2094,7 +2097,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_A, EC_WORD_HIGH, EC_WORD_LEVEL, EC_WORD_BATTLE}, .speechWin = {EC_WORD_THAT_WAS, EC_WORD_HIGH, EC_WORD_LEVEL, EC_WORD_AND, EC_WORD_EXCITING, EC_WORD_TOO}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_TOO, EC_WORD_HIGH, EC_WORD_IN, EC_WORD_LEVEL, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Brooks + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_A} }, [FRONTIER_TRAINER_GREGORY] = { .facilityClass = FACILITY_CLASS_GENTLEMAN, @@ -2102,7 +2105,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_THAT, EC_WORD_OLD, EC_WORD_YET, EC_EMPTY_WORD}, .speechWin = {EC_WORD_WHO, EC_WORD_SAYS, EC_WORD_I_AM, EC_WORD_TOO, EC_WORD_OLD, EC_WORD_QUES}, .speechLose = {EC_WORD_PLEASE, EC_WORD_I_AM, EC_WORD_REALLY, EC_WORD_NOT, EC_WORD_THAT, EC_WORD_OLD}, - .monSet = gBattleFrontierTrainerMons_Gregory + .monSet = (const u16[]){FRONTIER_MONS_GENTLEMAN_3A} }, [FRONTIER_TRAINER_REESE] = { .facilityClass = FACILITY_CLASS_GENTLEMAN, @@ -2110,7 +2113,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_VE, EC_WORD_A, EC_WORD_COUPLE, EC_WORD_THINGS, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechWin = {EC_WORD_DON_T, EC_WORD_DIET, EC_WORD_PLAY, EC_WORD_SPORTS, EC_WORD_INSTEAD, EC_EMPTY_WORD}, .speechLose = {EC_WORD_INSTEAD, EC_WORD_OF, EC_WORD_TELEVISION, EC_WORD_GET, EC_WORD_A, EC_WORD_BOOK}, - .monSet = gBattleFrontierTrainerMons_Reese + .monSet = (const u16[]){FRONTIER_MONS_GENTLEMAN_3B} }, [FRONTIER_TRAINER_MASON] = { .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M, @@ -2118,7 +2121,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_PLEASE, EC_WORD_DON_T, EC_WORD_MAKE, EC_WORD_THIS, EC_WORD_SCARY, EC_EMPTY_WORD}, .speechWin = {EC_WORD_THANK_YOU, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_NOW}, .speechLose = {EC_WORD_I_AM, EC_WORD_DISAPPOINTED, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Mason + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_A} }, [FRONTIER_TRAINER_TOBY] = { .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M, @@ -2126,7 +2129,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_LISTEN, EC_WORD_UP, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_WIN}, .speechWin = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_OR, EC_WORD_WHAT, EC_WORD_QUES}, .speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_BEAT, EC_WORD_YOU, EC_WORD_AT, EC_WORD_SMARTNESS}, - .monSet = gBattleFrontierTrainerMons_Toby + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_B} }, [FRONTIER_TRAINER_DOROTHY] = { .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F, @@ -2134,7 +2137,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_THE, EC_WORD_SPORTS, EC_WORD_WORLD, EC_WORD_SHOULD, EC_WORD_ACCEPT, EC_WORD_POKEMON}, .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL, EC_WORD_THAT, EC_WORD_WIN, EC_WORD_WAS, EC_WORD_REFRESHING}, .speechLose = {EC_WORD_THANK_YOU, EC_WORD_EXCL, EC_WORD_THAT, EC_WORD_LOSS, EC_WORD_WAS, EC_WORD_REFRESHING}, - .monSet = gBattleFrontierTrainerMons_Dorothy + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_C} }, [FRONTIER_TRAINER_PIPER] = { .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F, @@ -2142,7 +2145,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_COME_ON, EC_WORD_YOU, EC_WORD_NEED, EC_WORD_A, EC_WORD_SPEED_BOOST, EC_WORD_QUES}, .speechWin = {EC_WORD_YOU, EC_WORD_NEED, EC_WORD_TO, EC_WORD_SHOW, EC_WORD_MORE, EC_WORD_GUTS}, .speechLose = {EC_WORD_OH, EC_WORD_YOU, EC_WORD_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Piper + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_D} }, [FRONTIER_TRAINER_FINN] = { .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M, @@ -2150,7 +2153,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_NOT, EC_WORD_ANOTHER, EC_WORD_TRAINER, EC_WORD_BATTLE, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, .speechWin = {EC_WORD_WON_T, EC_WORD_THIS, EC_WORD_EVER, EC_WORD_END, EC_WORD_QUES, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_FINALLY, EC_WORD_GET, EC_WORD_TO, EC_MOVE2(REST), EC_WORD_A_LITTLE}, - .monSet = gBattleFrontierTrainerMons_Finn + .monSet = (const u16[]){FRONTIER_MONS_SWIMMING_TRIATHLETE_M_3} }, [FRONTIER_TRAINER_SAMIR] = { .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M, @@ -2158,7 +2161,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_MOVE2(DIVE), EC_WORD_BELOW, EC_WORD_THE, EC_MOVE2(SURF), EC_WORD_EXCL}, .speechWin = {EC_WORD_YAHOO, EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(DIVE), EC_WORD_YOU, EC_WORD_EXCL}, .speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_SINK, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Samir + .monSet = (const u16[]){FRONTIER_MONS_SWIMMING_TRIATHLETE_M_3} }, [FRONTIER_TRAINER_FIONA] = { .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, @@ -2166,7 +2169,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_LIMBER, EC_WORD_UP, EC_WORD_BEFORE, EC_WORD_QUES}, .speechWin = {EC_WORD_YOU, EC_WORD_NEED, EC_WORD_TO, EC_WORD_BE, EC_WORD_MORE, EC_WORD_READY}, .speechLose = {EC_WORD_BEING, EC_WORD_LIMBER, EC_WORD_DIDN_T, EC_WORD_WORK, EC_WORD_FOR, EC_WORD_ME}, - .monSet = gBattleFrontierTrainerMons_Fiona + .monSet = (const u16[]){FRONTIER_MONS_SWIMMING_TRIATHLETE_F_3} }, [FRONTIER_TRAINER_GLORIA] = { .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, @@ -2174,7 +2177,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_ATTACK, EC_WORD_WITH, EC_WORD_SUCTION_CUPS}, .speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_FOR, EC_WORD_YOU}, .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_GET, EC_WORD_HOW, EC_WORD_SUCTION_CUPS, EC_WORD_WORK}, - .monSet = gBattleFrontierTrainerMons_Gloria + .monSet = (const u16[]){FRONTIER_MONS_SWIMMING_TRIATHLETE_F_3} }, [FRONTIER_TRAINER_NICO] = { .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, @@ -2182,7 +2185,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_LIKE, EC_WORD_A, EC_MOVE(SONIC_BOOM), EC_WORD_I_VE_ARRIVED, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechWin = {EC_WORD_SORRY, EC_WORD_TO, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SO, EC_WORD_DOWNCAST}, .speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_WITH, EC_WORD_A, EC_MOVE2(SUPERSONIC), EC_WORD_SPEED_BOOST}, - .monSet = gBattleFrontierTrainerMons_Nico + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_A} }, [FRONTIER_TRAINER_JEREMY] = { .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, @@ -2190,7 +2193,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_MASTER, EC_WORD_THAT_S, EC_WORD_MY, EC_WORD_DREAM}, .speechWin = {EC_WORD_MY, EC_WORD_DREAM, EC_WORD_ISN_T, EC_WORD_FAR, EC_WORD_OFF, EC_WORD_EXCL}, .speechLose = {EC_WORD_WHAT, EC_WORD_I, EC_WORD_DREAM, EC_WORD_ISN_T, EC_WORD_HAPPENING, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Jeremy + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_B} }, [FRONTIER_TRAINER_CAITLIN] = { .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F, @@ -2198,7 +2201,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_I_AM, EC_WORD_CUTE, EC_WORD_QUES}, .speechWin = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_MORE, EC_WORD_TO_ME, EC_WORD_THAN, EC_WORD_CUTENESS}, .speechLose = {EC_WORD_MY, EC_WORD_CUTE_CHARM, EC_WORD_DOESN_T, EC_MOVE2(ATTRACT), EC_WORD_YOU, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Caitlin + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_C} }, [FRONTIER_TRAINER_REENA] = { .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F, @@ -2206,7 +2209,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_ALWAYS, EC_WORD_HAPPY, EC_WORD_HAPPY, EC_WORD_HAPPY, EC_WORD_EXCL}, .speechWin = {EC_WORD_OH, EC_WORD_YAY, EC_WORD_EXCL, EC_WORD_YAHOO, EC_WORD_FOR, EC_WORD_ME}, .speechLose = {EC_WORD_YAHOO, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_FOR, EC_WORD_YOU}, - .monSet = gBattleFrontierTrainerMons_Reena + .monSet = (const u16[]){FRONTIER_MONS_GENERAL_D} }, [FRONTIER_TRAINER_AVERY] = { .facilityClass = FACILITY_CLASS_BUG_MANIAC, @@ -2214,7 +2217,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_VE, EC_WORD_GOT, EC_WORD_A_LOT, EC_WORD_OF, EC_WORD_BUG, EC_WORD_POKEMON}, .speechWin = {EC_WORD_MY, EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_ALL, EC_WORD_UNBELIEVABLE}, .speechLose = {EC_WORD_MY, EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_ALL, EC_WORD_UPSIDE_DOWN}, - .monSet = gBattleFrontierTrainerMons_Avery + .monSet = (const u16[]){FRONTIER_MONS_BUG_MANIAC_4} }, [FRONTIER_TRAINER_LIAM] = { .facilityClass = FACILITY_CLASS_BUG_MANIAC, @@ -2222,7 +2225,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WE, EC_WORD_REALLY, EC_WORD_DISLIKE, EC_WORD_FIRE, EC_WORD_AND, EC_WORD_FLYING}, .speechWin = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_BAD, EC_WORD_HEY_QUES, EC_EMPTY_WORD}, .speechLose = {EC_WORD_YOU, EC_WORD_KNOW, EC_WORD_WHAT, EC_WORD_WE, EC_WORD_DISLIKE, EC_WORD_HEY_QUES}, - .monSet = gBattleFrontierTrainerMons_Liam + .monSet = (const u16[]){FRONTIER_MONS_BUG_MANIAC_4} }, [FRONTIER_TRAINER_THEO] = { .facilityClass = FACILITY_CLASS_FISHERMAN, @@ -2230,7 +2233,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_FISHING, EC_WORD_IS, EC_WORD_MY, EC_WORD_CHOICE, EC_WORD_IN, EC_WORD_LIFE}, .speechWin = {EC_WORD_WATER, EC_WORD_POKEMON, EC_MOVE2(ATTRACT), EC_WORD_ME, EC_WORD_WITHOUT, EC_WORD_END}, .speechLose = {EC_WORD_DON_T, EC_WORD_COUNT_ON, EC_WORD_THAT, EC_WORD_HAPPENING, EC_WORD_ANOTHER, EC_WORD_TIME}, - .monSet = gBattleFrontierTrainerMons_Theo + .monSet = (const u16[]){FRONTIER_MONS_FISHERMAN_3} }, [FRONTIER_TRAINER_BAILEY] = { .facilityClass = FACILITY_CLASS_FISHERMAN, @@ -2238,7 +2241,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_I, EC_WORD_BATTLE, EC_WORD_EASY}, .speechWin = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_I, EC_MOVE2(SWALLOW), EC_WORD_JOY}, .speechLose = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_I, EC_MOVE2(SWALLOW), EC_MOVE2(FRUSTRATION)}, - .monSet = gBattleFrontierTrainerMons_Bailey + .monSet = (const u16[]){FRONTIER_MONS_FISHERMAN_3} }, [FRONTIER_TRAINER_HUGO] = { .facilityClass = FACILITY_CLASS_RUIN_MANIAC, @@ -2246,7 +2249,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_TRY, EC_WORD_THE, EC_WORD_BEST, EC_WORD_I, EC_WORD_CAN}, .speechWin = {EC_WORD_I, EC_WORD_CAN_WIN, EC_WORD_IF, EC_WORD_I, EC_WORD_TRY, EC_WORD_ENOUGH}, .speechLose = {EC_WORD_I, EC_WORD_DID, EC_WORD_TRY, EC_WORD_DIDN_T, EC_WORD_I, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Hugo + .monSet = (const u16[]){FRONTIER_MONS_RUIN_MANIAC_4} }, [FRONTIER_TRAINER_BRYCE] = { .facilityClass = FACILITY_CLASS_RUIN_MANIAC, @@ -2254,7 +2257,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_WAS, EC_WORD_ON, EC_WORD_VACATION, EC_WORD_UNTIL, EC_WORD_ONLY, EC_WORD_YESTERDAY}, .speechWin = {EC_WORD_I, EC_WORD_HAVEN_T, EC_WORD_LOST, EC_WORD_MY, EC_WORD_SKILL, EC_WORD_YET}, .speechLose = {EC_WORD_THAT_S, EC_WORD_IT, EC_WORD_ELLIPSIS, EC_WORD_I, EC_WORD_NEED, EC_WORD_SLEEP}, - .monSet = gBattleFrontierTrainerMons_Bryce + .monSet = (const u16[]){FRONTIER_MONS_RUIN_MANIAC_4} }, [FRONTIER_TRAINER_GIDEON] = { .facilityClass = FACILITY_CLASS_COLLECTOR, @@ -2262,7 +2265,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WHAT_S_UP_QUES, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_I_AM, EC_WORD_SCARY, EC_WORD_QUES}, .speechWin = {EC_WORD_I_AM, EC_WORD_COOL, EC_WORD_BUT, EC_WORD_NOT, EC_WORD_SCARY, EC_WORD_EXCL}, .speechLose = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_WORD_FABULOUS, EC_WORD_FASHION, EC_WORD_SENSE}, - .monSet = gBattleFrontierTrainerMons_Gideon + .monSet = (const u16[]){FRONTIER_MONS_COLLECTOR_3} }, [FRONTIER_TRAINER_TRISTON] = { .facilityClass = FACILITY_CLASS_COLLECTOR, @@ -2270,7 +2273,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_RATHER, EC_WORD_LOOK, EC_WORD_AT, EC_WORD_POKEMON}, .speechWin = {EC_WORD_HUH_QUES, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_I, EC_WORD_WON, EC_WORD_QUES_EXCL}, .speechLose = {EC_WORD_SEE, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_LOSE}, - .monSet = gBattleFrontierTrainerMons_Triston + .monSet = (const u16[]){FRONTIER_MONS_COLLECTOR_3} }, [FRONTIER_TRAINER_CHARLES] = { .facilityClass = FACILITY_CLASS_GUITARIST, @@ -2278,7 +2281,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_IT_S, EC_WORD_HOPELESS, EC_WORD_TO, EC_MOVE2(STRUGGLE), EC_WORD_WITH, EC_WORD_ME}, .speechWin = {EC_MOVE(SUBMISSION), EC_WORD_WAS, EC_WORD_YOUR, EC_WORD_ONLY, EC_WORD_CHOICE, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_DOWN, EC_WORD_DOWN, EC_WORD_DOWN, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Charles + .monSet = (const u16[]){FRONTIER_MONS_GUITARIST_3A} }, [FRONTIER_TRAINER_RAYMOND] = { .facilityClass = FACILITY_CLASS_GUITARIST, @@ -2286,7 +2289,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_HEAR, EC_WORD_MY, EC_WORD_SONG, EC_WORD_QUES}, .speechWin = {EC_WORD_SATISFIED, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_SATISFIED, EC_WORD_IS, EC_WORD_WHAT, EC_WORD_I, EC_WORD_CAN_T, EC_WORD_BE}, - .monSet = gBattleFrontierTrainerMons_Raymond + .monSet = (const u16[]){FRONTIER_MONS_GUITARIST_3B} }, [FRONTIER_TRAINER_DIRK] = { .facilityClass = FACILITY_CLASS_BIRD_KEEPER, @@ -2294,7 +2297,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_FLYING, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_ABOVE, EC_WORD_THE, EC_MOVE2(REST)}, .speechWin = {EC_WORD_YOU, EC_WORD_CAN_T_WIN, EC_WORD_EXCL, EC_WORD_FLYING, EC_WORD_POKEMON, EC_WORD_RULE}, .speechLose = {EC_WORD_AREN_T, EC_WORD_THERE, EC_WORD_MORE, EC_WORD_FLYING, EC_WORD_POKEMON, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Dirk + .monSet = (const u16[]){FRONTIER_MONS_BIRD_KEEPER_3} }, [FRONTIER_TRAINER_HAROLD] = { .facilityClass = FACILITY_CLASS_BIRD_KEEPER, @@ -2302,7 +2305,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_APPEAL, EC_WORD_TO, EC_WORD_YOU, EC_WORD_QUES}, .speechWin = {EC_WORD_YOU, EC_WORD_DO, EC_WORD_LIKE, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_QUES}, .speechLose = {EC_WORD_SO, EC_WORD_YOU, EC_WORD_DISLIKE, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Harold + .monSet = (const u16[]){FRONTIER_MONS_BIRD_KEEPER_3} }, [FRONTIER_TRAINER_OMAR] = { .facilityClass = FACILITY_CLASS_SAILOR, @@ -2310,7 +2313,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_LET_ME_WIN, EC_WORD_IN, EC_MOVE(RETURN), EC_WORD_FOR, EC_WORD_A, EC_MOVE2(PRESENT)}, .speechWin = {EC_WORD_HERE, EC_WORD_YOU, EC_WORD_ARE, EC_WORD_SOME, EC_MOVE2(TOXIC), EC_WORD_SWEETS}, .speechLose = {EC_WORD_YOUR, EC_MOVE2(PRESENT), EC_WORD_QUES, EC_WORD_WHAT, EC_WORD_FOR, EC_WORD_QUES_EXCL}, - .monSet = gBattleFrontierTrainerMons_Omar + .monSet = (const u16[]){FRONTIER_MONS_SAILOR_3} }, [FRONTIER_TRAINER_PETER] = { .facilityClass = FACILITY_CLASS_SAILOR, @@ -2318,7 +2321,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_BRAG, EC_WORD_ABOUT, EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_OK_QUES}, .speechWin = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_LISTEN, EC_WORD_TO_ME, EC_WORD_BRAG}, .speechLose = {EC_WORD_I_AM, EC_WORD_DISAPPOINTED, EC_WORD_YOU, EC_WORD_WON_T, EC_WORD_LISTEN, EC_WORD_TO_ME}, - .monSet = gBattleFrontierTrainerMons_Peter + .monSet = (const u16[]){FRONTIER_MONS_SAILOR_3} }, [FRONTIER_TRAINER_DEV] = { .facilityClass = FACILITY_CLASS_HIKER, @@ -2326,7 +2329,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_COME_ON, EC_WORD_LET_S, EC_WORD_GET, EC_WORD_A, EC_WORD_MOVE, EC_WORD_ON}, .speechWin = {EC_WORD_I, EC_WORD_GET, EC_WORD_TO, EC_WORD_NAP, EC_WORD_AFTER, EC_WORD_THAT}, .speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_NAP, EC_WORD_AFTER, EC_WORD_THAT}, - .monSet = gBattleFrontierTrainerMons_Dev + .monSet = (const u16[]){FRONTIER_MONS_HIKER_3} }, [FRONTIER_TRAINER_COREY] = { .facilityClass = FACILITY_CLASS_HIKER, @@ -2334,7 +2337,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_LET_S, EC_WORD_TEACH, EC_WORD_YOU, EC_WORD_HOW, EC_WORD_TOUGH, EC_WORD_I_AM}, .speechWin = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_ME, EC_WORD_MAKE, EC_WORD_A, EC_MOVE(BRICK_BREAK)}, .speechLose = {EC_WORD_MY, EC_MOVE2(FRUSTRATION), EC_WORD_IS, EC_WORD_CLOSE, EC_WORD_TO, EC_MOVE2(ERUPTION)}, - .monSet = gBattleFrontierTrainerMons_Corey + .monSet = (const u16[]){FRONTIER_MONS_HIKER_3} }, [FRONTIER_TRAINER_ANDRE] = { .facilityClass = FACILITY_CLASS_KINDLER, @@ -2342,7 +2345,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_NOW, EC_WORD_THIS, EC_WORD_IS, EC_WORD_A, EC_WORD_PERFECT, EC_WORD_FLAME_BODY}, .speechWin = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_WORD_FIERY, EC_WORD_DANCE, EC_WORD_EXCL}, .speechLose = {EC_WORD_YOU, EC_WORD_WANT, EC_WORD_AN, EC_MOVE2(EXPLOSION), EC_WORD_HERE, EC_WORD_QUES}, - .monSet = gBattleFrontierTrainerMons_Andre + .monSet = (const u16[]){FRONTIER_MONS_KINDLER_3} }, [FRONTIER_TRAINER_FERRIS] = { .facilityClass = FACILITY_CLASS_KINDLER, @@ -2350,7 +2353,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_IN, EC_WORD_THE, EC_WORD_OLD, EC_WORD_CLASS}, .speechWin = {EC_WORD_NO_1, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_NO_1, EC_WORD_ANY, EC_WORD_MORE, EC_WORD_ELLIPSIS}, - .monSet = gBattleFrontierTrainerMons_Ferris + .monSet = (const u16[]){FRONTIER_MONS_KINDLER_3} }, [FRONTIER_TRAINER_ALIVIA] = { .facilityClass = FACILITY_CLASS_PARASOL_LADY, @@ -2358,7 +2361,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_GIDDY, EC_WORD_SO, EC_WORD_SHOULD, EC_WORD_YOU}, .speechWin = {EC_WORD_IT, EC_WORD_WAS, EC_WORD_ALL, EC_WORD_TOGETHER, EC_WORD_TOO, EC_WORD_EASY}, .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_GIDDY, EC_WORD_UP, EC_WORD_AND, EC_WORD_AWAY}, - .monSet = gBattleFrontierTrainerMons_Alivia + .monSet = (const u16[]){FRONTIER_MONS_PARASOL_LADY_3} }, [FRONTIER_TRAINER_PAIGE] = { .facilityClass = FACILITY_CLASS_PARASOL_LADY, @@ -2366,7 +2369,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_LET_S, EC_WORD_ENJOY, EC_WORD_OUR, EC_WORD_BATTLE, EC_WORD_TOGETHER, EC_EMPTY_WORD}, .speechWin = {EC_WORD_THAT_S_IT_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_THANK_YOU, EC_WORD_VERY, EC_WORD_MUCH}, .speechLose = {EC_WORD_THAT_S_IT_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_DO, EC_WORD_GO, EC_WORD_ON}, - .monSet = gBattleFrontierTrainerMons_Paige + .monSet = (const u16[]){FRONTIER_MONS_PARASOL_LADY_3} }, [FRONTIER_TRAINER_ANYA] = { .facilityClass = FACILITY_CLASS_BEAUTY, @@ -2374,7 +2377,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_OH, EC_WORD_SO, EC_WORD_PRETTY, EC_WORD_FASHION}, .speechWin = {EC_WORD_FASHION, EC_WORD_SHOULD, EC_WORD_MATCH, EC_WORD_THE, EC_WORD_PERSON, EC_EMPTY_WORD}, .speechLose = {EC_WORD_PRETTY, EC_WORD_COULD, EC_WORD_BE, EC_WORD_GOOD, EC_EMPTY_WORD, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Anya + .monSet = (const u16[]){FRONTIER_MONS_EEVEELUTIONS} }, [FRONTIER_TRAINER_DAWN] = { .facilityClass = FACILITY_CLASS_BEAUTY, @@ -2382,7 +2385,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_GO, EC_WORD_ALL, EC_WORD_OUT, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechWin = {EC_WORD_DON_T, EC_WORD_BE, EC_WORD_A, EC_WORD_BABY, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_YOU, EC_WORD_WON, EC_WORD_EXCL, EC_WORD_MOVE, EC_WORD_ON, EC_WORD_EXCL}, - .monSet = gBattleFrontierTrainerMons_Dawn + .monSet = (const u16[]){FRONTIER_MONS_BEAUTY_2} }, [FRONTIER_TRAINER_ABBY] = { .facilityClass = FACILITY_CLASS_AROMA_LADY, @@ -2390,7 +2393,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_THAT_S, EC_WORD_REFRESHING}, .speechWin = {EC_WORD_VICTORY, EC_WORD_HAS, EC_WORD_A, EC_MOVE(SWEET_SCENT), EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_AWFUL, EC_WORD_STENCH, EC_WORD_EXCL, EC_EMPTY_WORD}, - .monSet = gBattleFrontierTrainerMons_Abby + .monSet = (const u16[]){FRONTIER_MONS_AROMA_LADY_3} }, [FRONTIER_TRAINER_GRETEL] = { .facilityClass = FACILITY_CLASS_AROMA_LADY, @@ -2398,6 +2401,6 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU .speechBefore = {EC_WORD_I, EC_WORD_CAUSE, EC_MOVE(OUTRAGE), EC_WORD_AS, EC_WORD_A, EC_WORD_TRAINER}, .speechWin = {EC_WORD_IT_S, EC_WORD_ONLY, EC_WORD_NATURAL, EC_WORD_SEE_YA, EC_WORD_BYE_BYE, EC_WORD_EXCL}, .speechLose = {EC_WORD_IT_S, EC_WORD_HARD, EC_WORD_TO, EC_WORD_BELIEVE, EC_WORD_BUT, EC_WORD_CONGRATS}, - .monSet = gBattleFrontierTrainerMons_Gretel + .monSet = (const u16[]){FRONTIER_MONS_AROMA_LADY_3} } }; diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index c3077632f9..e2970afcaf 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -1592,7 +1592,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_HIT_SWITCH_TARGET] = { - .battleScript = BattleScript_EffectHitSwitchTarget, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, @@ -1895,12 +1895,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_SPARKLY_SWIRL] = - { - .battleScript = BattleScript_EffectSparklySwirl, - .battleTvScore = 0, // TODO: Assign points - }, - [EFFECT_HYPERSPACE_FURY] = { .battleScript = BattleScript_EffectHyperspaceFury, @@ -1915,7 +1909,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_PHOTON_GEYSER] = { - .battleScript = BattleScript_EffectPhotonGeyser, + .battleScript = BattleScript_EffectDynamicCategory, .battleTvScore = 0, // TODO: Assign points }, @@ -2207,13 +2201,13 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_TERA_BLAST] = { - .battleScript = BattleScript_EffectPhotonGeyser, + .battleScript = BattleScript_EffectDynamicCategory, .battleTvScore = 0, // TODO: Assign points }, [EFFECT_TERA_STARSTORM] = { - .battleScript = BattleScript_EffectPhotonGeyser, + .battleScript = BattleScript_EffectDynamicCategory, .battleTvScore = 0, // TODO: Assign points }, @@ -2246,4 +2240,10 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, + + [EFFECT_SPECTRAL_THIEF] = + { + .battleScript = BattleScript_EffectSpectralThief, + .battleTvScore = 0, // TODO: Assign points + }, }; diff --git a/src/data/battle_pool_rules.h b/src/data/battle_pool_rules.h new file mode 100644 index 0000000000..b88db3c797 --- /dev/null +++ b/src/data/battle_pool_rules.h @@ -0,0 +1,68 @@ +#include "battle_main.h" + +const u16 poolItemClauseExclusions[] = +{ + ITEM_ORAN_BERRY, + ITEM_SITRUS_BERRY, +}; + +const struct PoolRules defaultPoolRules = +{ + .speciesClause = B_POOL_RULE_SPECIES_CLAUSE, + .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, + .itemClause = B_POOL_RULE_ITEM_CLAUSE, + .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, +}; + +const struct PoolRules gPoolRulesetsList[] = { + [POOL_RULESET_BASIC] = { + .speciesClause = B_POOL_RULE_SPECIES_CLAUSE, + .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, + .itemClause = B_POOL_RULE_ITEM_CLAUSE, + .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, + .tagMaxMembers[POOL_TAG_LEAD] = 1, + .tagMaxMembers[POOL_TAG_ACE] = 1, + }, + [POOL_RULESET_DOUBLES] = { + .speciesClause = B_POOL_RULE_SPECIES_CLAUSE, + .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, + .itemClause = B_POOL_RULE_ITEM_CLAUSE, + .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, + .tagMaxMembers[POOL_TAG_LEAD] = 2, + .tagMaxMembers[POOL_TAG_ACE] = 2, + }, + [POOL_RULESET_WEATHER_SINGLES] = { + .speciesClause = B_POOL_RULE_SPECIES_CLAUSE, + .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, + .itemClause = B_POOL_RULE_ITEM_CLAUSE, + .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, + .tagMaxMembers[POOL_TAG_LEAD] = 1, + .tagMaxMembers[POOL_TAG_ACE] = 1, + .tagMaxMembers[POOL_TAG_WEATHER_SETTER] = 1, + .tagRequired[POOL_TAG_WEATHER_SETTER] = TRUE, + .tagMaxMembers[POOL_TAG_WEATHER_ABUSER] = POOL_MEMBER_COUNT_UNLIMITED, + .tagRequired[POOL_TAG_WEATHER_ABUSER] = TRUE, + }, + [POOL_RULESET_WEATHER_DOUBLES] = { + .speciesClause = B_POOL_RULE_SPECIES_CLAUSE, + .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, + .itemClause = B_POOL_RULE_ITEM_CLAUSE, + .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, + .tagMaxMembers[POOL_TAG_LEAD] = 2, + .tagMaxMembers[POOL_TAG_ACE] = 2, + .tagMaxMembers[POOL_TAG_WEATHER_SETTER] = 1, + .tagRequired[POOL_TAG_WEATHER_SETTER] = TRUE, + .tagMaxMembers[POOL_TAG_WEATHER_ABUSER] = POOL_MEMBER_COUNT_UNLIMITED, + .tagRequired[POOL_TAG_WEATHER_ABUSER] = TRUE, + }, + [POOL_RULESET_SUPPORT_DOUBLES] = { + .speciesClause = B_POOL_RULE_SPECIES_CLAUSE, + .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, + .itemClause = B_POOL_RULE_ITEM_CLAUSE, + .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, + .tagMaxMembers[POOL_TAG_LEAD] = 2, + .tagMaxMembers[POOL_TAG_ACE] = 2, + .tagMaxMembers[POOL_TAG_SUPPORT] = 1, + .tagRequired[POOL_TAG_SUPPORT] = TRUE, + }, +}; diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index d3f02d33ab..d5928b64db 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -220,6 +220,7 @@ const struct ContestWinner gDefaultContestWinners[] = const struct ContestPokemon gContestOpponents[] = { [CONTEST_OPPONENT_JIMMY] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_POOCHYENA, .nickname = _("POOCHY"), .trainerName = _("JIMMY"), @@ -248,6 +249,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_EDITH] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_ILLUMISE, .nickname = _("MUSILLE"), .trainerName = _("EDITH"), @@ -276,6 +278,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_EVAN] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_DUSTOX, .nickname = _("DUSTER"), .trainerName = _("EVAN"), @@ -304,6 +307,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KELSEY] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SEEDOT, .nickname = _("DOTS"), .trainerName = _("KELSEY"), @@ -332,6 +336,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MADISON] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_TAILLOW, .nickname = _("TATAY"), .trainerName = _("MADISON"), @@ -360,6 +365,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RAYMOND] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_NINCADA, .nickname = _("NINDA"), .trainerName = _("RAYMOND"), @@ -388,6 +394,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_GRANT] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SHROOMISH, .nickname = _("SMISH"), .trainerName = _("GRANT"), @@ -416,6 +423,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_PAIGE] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SPHEAL, .nickname = _("SLEAL"), .trainerName = _("PAIGE"), @@ -444,6 +452,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ALEC] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SLAKOTH, .nickname = _("SLOKTH"), .trainerName = _("ALEC"), @@ -472,6 +481,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SYDNEY] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_WHISMUR, .nickname = _("WHIRIS"), .trainerName = _("SYDNEY"), @@ -500,6 +510,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MORRIS] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_MAKUHITA, .nickname = _("MAHITA"), .trainerName = _("MORRIS"), @@ -528,6 +539,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MARIAH] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_ARON, .nickname = _("RONAR"), .trainerName = _("MARIAH"), @@ -556,6 +568,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RUSSELL] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_CROBAT, .nickname = _("BATRO"), .trainerName = _("RUSSELL"), @@ -584,6 +597,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MELANIE] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_GULPIN, .nickname = _("GULIN"), .trainerName = _("MELANIE"), @@ -612,6 +626,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CHANCE] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_MANECTRIC, .nickname = _("RIKELEC"), .trainerName = _("CHANCE"), @@ -640,6 +655,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AGATHA] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_BULBASAUR, .nickname = _("BULBY"), .trainerName = _("AGATHA"), @@ -668,6 +684,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_BEAU] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_BUTTERFREE, .nickname = _("FUTTERBE"), .trainerName = _("BEAU"), @@ -696,6 +713,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KAY] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_PIDGEOTTO, .nickname = _("PIDEOT"), .trainerName = _("KAY"), @@ -724,6 +742,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CALE] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_DIGLETT, .nickname = _("DIGLE"), .trainerName = _("CALE"), @@ -752,6 +771,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CAITLIN] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_POLIWAG, .nickname = _("WAGIL"), .trainerName = _("CAITLIN"), @@ -780,6 +800,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_COLBY] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_TOTODILE, .nickname = _("TOTDIL"), .trainerName = _("COLBY"), @@ -808,6 +829,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KYLIE] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_LEDYBA, .nickname = _("BALEDY"), .trainerName = _("KYLIE"), @@ -836,6 +858,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LIAM] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_DELIBIRD, .nickname = _("BIRDLY"), .trainerName = _("LIAM"), @@ -864,6 +887,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MILO] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_LARVITAR, .nickname = _("TARVITAR"), .trainerName = _("MILO"), @@ -892,6 +916,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KARINA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_ROSELIA, .nickname = _("RELIA"), .trainerName = _("KARINA"), @@ -920,6 +945,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_BOBBY] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_DODRIO, .nickname = _("DUODO"), .trainerName = _("BOBBY"), @@ -948,6 +974,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CLAIRE] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_TRAPINCH, .nickname = _("PINCHIN"), .trainerName = _("CLAIRE"), @@ -976,6 +1003,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_WILLIE] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_CACNEA, .nickname = _("NACAC"), .trainerName = _("WILLIE"), @@ -1004,6 +1032,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CASSIDY] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SANDSLASH, .nickname = _("SHRAND"), .trainerName = _("CASSIDY"), @@ -1032,6 +1061,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MORGAN] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_BALTOY, .nickname = _("TOYBAL"), .trainerName = _("MORGAN"), @@ -1060,6 +1090,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SUMMER] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_MEDICHAM, .nickname = _("CHAMCHAM"), .trainerName = _("SUMMER"), @@ -1088,6 +1119,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MILES] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SPINDA, .nickname = _("SPININ"), .trainerName = _("MILES"), @@ -1116,6 +1148,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AUDREY] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SWABLU, .nickname = _("SWABY"), .trainerName = _("AUDREY"), @@ -1144,6 +1177,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AVERY] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SPOINK, .nickname = _("POINKER"), .trainerName = _("AVERY"), @@ -1172,6 +1206,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ARIANA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_KECLEON, .nickname = _("KECON"), .trainerName = _("ARIANA"), @@ -1200,6 +1235,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ASHTON] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_GOLDEEN, .nickname = _("GOLDEN"), .trainerName = _("ASHTON"), @@ -1228,6 +1264,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SANDRA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_BARBOACH, .nickname = _("BOBOACH"), .trainerName = _("SANDRA"), @@ -1256,6 +1293,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CARSON] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SKARMORY, .nickname = _("CORPY"), .trainerName = _("CARSON"), @@ -1284,6 +1322,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KATRINA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_LOTAD, .nickname = _("TADO"), .trainerName = _("KATRINA"), @@ -1312,6 +1351,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LUKE] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_SLOWBRO, .nickname = _("BROWLO"), .trainerName = _("LUKE"), @@ -1340,6 +1380,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RAUL] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_FARFETCHD, .nickname = _("FETCHIN"), .trainerName = _("RAUL"), @@ -1368,6 +1409,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JADA] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_SEEL, .nickname = _("SEELEY"), .trainerName = _("JADA"), @@ -1396,6 +1438,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ZEEK] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_DROWZEE, .nickname = _("DROWZIN"), .trainerName = _("ZEEK"), @@ -1424,6 +1467,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DIEGO] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_HITMONCHAN, .nickname = _("HITEMON"), .trainerName = _("DIEGO"), @@ -1452,6 +1496,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ALIYAH] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_BLISSEY, .nickname = _("BLISS"), .trainerName = _("ALIYAH"), @@ -1480,6 +1525,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_NATALIA] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_ELEKID, .nickname = _("KIDLEK"), .trainerName = _("NATALIA"), @@ -1508,6 +1554,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DEVIN] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_SNUBBULL, .nickname = _("SNUBBINS"), .trainerName = _("DEVIN"), @@ -1536,6 +1583,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_TYLOR] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_MISDREAVUS, .nickname = _("DREAVIS"), .trainerName = _("TYLOR"), @@ -1564,6 +1612,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RONNIE] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_LAIRON, .nickname = _("LAIRN"), .trainerName = _("RONNIE"), @@ -1592,6 +1641,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CLAUDIA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SHIFTRY, .nickname = _("SHIFTY"), .trainerName = _("CLAUDIA"), @@ -1620,6 +1670,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ELIAS] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_NINJASK, .nickname = _("NINAS"), .trainerName = _("ELIAS"), @@ -1648,6 +1699,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JADE] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SWELLOW, .nickname = _("WELOW"), .trainerName = _("JADE"), @@ -1676,6 +1728,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_FRANCIS] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_MIGHTYENA, .nickname = _("YENA"), .trainerName = _("FRANCIS"), @@ -1704,6 +1757,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ALISHA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_BEAUTIFLY, .nickname = _("TIFLY"), .trainerName = _("ALISHA"), @@ -1732,6 +1786,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SAUL] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SEAKING, .nickname = _("KINGSEA"), .trainerName = _("SAUL"), @@ -1760,6 +1815,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_FELICIA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_CASTFORM_NORMAL, .nickname = _("CASTER"), .trainerName = _("FELICIA"), @@ -1788,6 +1844,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_EMILIO] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_MACHOKE, .nickname = _("CHOKEM"), .trainerName = _("EMILIO"), @@ -1816,6 +1873,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KARLA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_LOMBRE, .nickname = _("LOMBE"), .trainerName = _("KARLA"), @@ -1844,6 +1902,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DARRYL] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SEVIPER, .nickname = _("VIPES"), .trainerName = _("DARRYL"), @@ -1872,6 +1931,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SELENA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_WAILMER, .nickname = _("MERAIL"), .trainerName = _("SELENA"), @@ -1900,6 +1960,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_NOEL] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_MAGIKARP, .nickname = _("KARPAG"), .trainerName = _("NOEL"), @@ -1928,6 +1989,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LACEY] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_LUNATONE, .nickname = _("LUNONE"), .trainerName = _("LACEY"), @@ -1956,6 +2018,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CORBIN] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_ABSOL, .nickname = _("ABSO"), .trainerName = _("CORBIN"), @@ -1984,6 +2047,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_GRACIE] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_EXEGGUTOR, .nickname = _("EGGSOR"), .trainerName = _("GRACIE"), @@ -2012,6 +2076,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_COLTIN] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_CUBONE, .nickname = _("CUBIN"), .trainerName = _("COLTIN"), @@ -2040,6 +2105,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ELLIE] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_HITMONLEE, .nickname = _("HITMON"), .trainerName = _("ELLIE"), @@ -2068,6 +2134,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MARCUS] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_SQUIRTLE, .nickname = _("SURTLE"), .trainerName = _("MARCUS"), @@ -2096,6 +2163,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KIARA] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_KANGASKHAN, .nickname = _("KHANKAN"), .trainerName = _("KIARA"), @@ -2124,6 +2192,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_BRYCE] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_PINECO, .nickname = _("PINOC"), .trainerName = _("BRYCE"), @@ -2152,6 +2221,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JAMIE] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_DUNSPARCE, .nickname = _("DILTOT"), .trainerName = _("JAMIE"), @@ -2180,6 +2250,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JORGE] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_HOUNDOOM, .nickname = _("DOOMOND"), .trainerName = _("JORGE"), @@ -2208,6 +2279,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DEVON] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_MILTANK, .nickname = _("MILKAN"), .trainerName = _("DEVON"), @@ -2236,6 +2308,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JUSTINA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_GYARADOS, .nickname = _("RADOS"), .trainerName = _("JUSTINA"), @@ -2264,6 +2337,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RALPH] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_LOUDRED, .nickname = _("LOUDERD"), .trainerName = _("RALPH"), @@ -2292,6 +2366,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ROSA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SKITTY, .nickname = _("SITTY"), .trainerName = _("ROSA"), @@ -2320,6 +2395,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KEATON] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SLAKING, .nickname = _("SLING"), .trainerName = _("KEATON"), @@ -2348,6 +2424,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MAYRA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_ALTARIA, .nickname = _("TARIA"), .trainerName = _("MAYRA"), @@ -2376,6 +2453,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LAMAR] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_KIRLIA, .nickname = _("LIRKI"), .trainerName = _("LAMAR"), @@ -2404,6 +2482,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AUBREY] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_BELLOSSOM, .nickname = _("BLOSSOM"), .trainerName = _("AUBREY"), @@ -2432,6 +2511,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_NIGEL] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SABLEYE, .nickname = _("EYESAB"), .trainerName = _("NIGEL"), @@ -2460,6 +2540,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CAMILLE] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_NATU, .nickname = _("UTAN"), .trainerName = _("CAMILLE"), @@ -2488,6 +2569,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DEON] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_SHARPEDO, .nickname = _("PEDOS"), .trainerName = _("DEON"), @@ -2516,6 +2598,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JANELLE] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_LUVDISC, .nickname = _("LUVIS"), .trainerName = _("JANELLE"), @@ -2544,6 +2627,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_HEATH] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_HERACROSS, .nickname = _("HEROSS"), .trainerName = _("HEATH"), @@ -2572,6 +2656,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SASHA] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_ELECTRODE, .nickname = _("RODLECT"), .trainerName = _("SASHA"), @@ -2600,6 +2685,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_FRANKIE] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_PICHU, .nickname = _("CHUPY"), .trainerName = _("FRANKIE"), @@ -2628,6 +2714,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_HELEN] = { + .filter = CONTEST_FILTER_NONE, .species = SPECIES_WOBBUFFET, .nickname = _("WOBET"), .trainerName = _("HELEN"), @@ -2656,6 +2743,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CAMILE] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_GENGAR, .nickname = _("GAREN"), .trainerName = _("CAMILE"), @@ -2684,6 +2772,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MARTIN] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_PORYGON, .nickname = _("GONPOR"), .trainerName = _("MARTIN"), @@ -2712,6 +2801,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SERGIO] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_DRAGONITE, .nickname = _("DRITE"), .trainerName = _("SERGIO"), @@ -2740,6 +2830,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KAILEY] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_MEOWTH, .nickname = _("MEOWY"), .trainerName = _("KAILEY"), @@ -2768,6 +2859,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_PERLA] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_JYNX, .nickname = _("NYX"), .trainerName = _("PERLA"), @@ -2796,6 +2888,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CLARA] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_TOGEPI, .nickname = _("GEPITO"), .trainerName = _("CLARA"), @@ -2824,6 +2917,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JAKOB] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_ESPEON, .nickname = _("SPEON"), .trainerName = _("JAKOB"), @@ -2852,6 +2946,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_TREY] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_SLOWKING, .nickname = _("SLOWGO"), .trainerName = _("TREY"), @@ -2880,6 +2975,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LANE] = { + .filter = CONTEST_FILTER_ONLY_POSTGAME, .species = SPECIES_URSARING, .nickname = _("URSING"), .trainerName = _("LANE"), @@ -2908,104 +3004,3 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, } }; - - -const u8 gPostgameContestOpponentFilter[] = -{ - [CONTEST_OPPONENT_JIMMY] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_EDITH] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_EVAN] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_KELSEY] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_MADISON] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_RAYMOND] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_GRANT] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_PAIGE] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_ALEC] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_SYDNEY] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_MORRIS] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_MARIAH] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_RUSSELL] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_MELANIE] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_CHANCE] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_AGATHA] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_BEAU] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_KAY] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_CALE] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_CAITLIN] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_COLBY] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_KYLIE] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_LIAM] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_MILO] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_KARINA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_BOBBY] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_CLAIRE] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_WILLIE] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_CASSIDY] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_MORGAN] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_SUMMER] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_MILES] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_AUDREY] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_AVERY] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_ARIANA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_ASHTON] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_SANDRA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_CARSON] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_KATRINA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_LUKE] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_RAUL] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_JADA] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_ZEEK] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_DIEGO] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_ALIYAH] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_NATALIA] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_DEVIN] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_TYLOR] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_RONNIE] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_CLAUDIA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_ELIAS] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_JADE] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_FRANCIS] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_ALISHA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_SAUL] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_FELICIA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_EMILIO] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_KARLA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_DARRYL] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_SELENA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_NOEL] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_LACEY] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_CORBIN] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_GRACIE] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_COLTIN] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_ELLIE] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_MARCUS] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_KIARA] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_BRYCE] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_JAMIE] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_JORGE] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_DEVON] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_JUSTINA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_RALPH] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_ROSA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_KEATON] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_MAYRA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_LAMAR] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_AUBREY] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_NIGEL] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_CAMILLE] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_DEON] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_JANELLE] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_HEATH] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_SASHA] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_FRANKIE] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_HELEN] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_CAMILE] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_MARTIN] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_SERGIO] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_KAILEY] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_PERLA] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_CLARA] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_JAKOB] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_TREY] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_LANE] = CONTEST_FILTER_ONLY_POSTGAME -}; diff --git a/src/data/easy_chat/easy_chat_group_actions.h b/src/data/easy_chat/easy_chat_group_actions.h index 6ad297efcf..38f623ea56 100755 --- a/src/data/easy_chat/easy_chat_group_actions.h +++ b/src/data/easy_chat/easy_chat_group_actions.h @@ -81,469 +81,469 @@ const struct EasyChatWordInfo gEasyChatGroup_Actions[] = { [EC_INDEX(EC_WORD_MEETS)] = { .text = gEasyChatWord_Meets, - .alphabeticalOrder = 72, + .alphabeticalOrder = EC_INDEX(EC_WORD_ALLOW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CONCEDE)] = { .text = gEasyChatWord_Concede, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_ANGERS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GIVE)] = { .text = gEasyChatWord_Give, - .alphabeticalOrder = 48, + .alphabeticalOrder = EC_INDEX(EC_WORD_APPEAR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GIVES)] = { .text = gEasyChatWord_Gives, - .alphabeticalOrder = 75, + .alphabeticalOrder = EC_INDEX(EC_WORD_APPEARS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PLAYED)] = { .text = gEasyChatWord_Played, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_BELIEVE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PLAYS)] = { .text = gEasyChatWord_Plays, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_BRAG), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COLLECT)] = { .text = gEasyChatWord_Collect, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_CAME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WALKING)] = { .text = gEasyChatWord_Walking, - .alphabeticalOrder = 46, + .alphabeticalOrder = EC_INDEX(EC_WORD_CAPABLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WALKS)] = { .text = gEasyChatWord_Walks, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_CAUSE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SAYS)] = { .text = gEasyChatWord_Says, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_CHANGE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WENT)] = { .text = gEasyChatWord_Went, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_CHOOSE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SAID)] = { .text = gEasyChatWord_Said, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_COLLECT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WAKE_UP)] = { .text = gEasyChatWord_WakeUp, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_COME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WAKES_UP)] = { .text = gEasyChatWord_WakesUp, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_CONCEDE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ANGERS)] = { .text = gEasyChatWord_Angers, - .alphabeticalOrder = 45, + .alphabeticalOrder = EC_INDEX(EC_WORD_COULDN_T), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TEACH)] = { .text = gEasyChatWord_Teach, - .alphabeticalOrder = 47, + .alphabeticalOrder = EC_INDEX(EC_WORD_DISAPPEAR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TEACHES)] = { .text = gEasyChatWord_Teaches, - .alphabeticalOrder = 54, + .alphabeticalOrder = EC_INDEX(EC_WORD_DRINKS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PLEASE)] = { .text = gEasyChatWord_Please, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_EATS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LEARN)] = { .text = gEasyChatWord_Learn, - .alphabeticalOrder = 76, + .alphabeticalOrder = EC_INDEX(EC_WORD_FAINT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CHANGE)] = { .text = gEasyChatWord_Change, - .alphabeticalOrder = 77, + .alphabeticalOrder = EC_INDEX(EC_WORD_FAINTED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STORY)] = { .text = gEasyChatWord_Story, - .alphabeticalOrder = 73, + .alphabeticalOrder = EC_INDEX(EC_WORD_FORGET), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRUST)] = { .text = gEasyChatWord_Trust, - .alphabeticalOrder = 74, + .alphabeticalOrder = EC_INDEX(EC_WORD_FORGETS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LAVISH)] = { .text = gEasyChatWord_Lavish, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_GIVE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LISTENS)] = { .text = gEasyChatWord_Listens, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_GIVES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEARING)] = { .text = gEasyChatWord_Hearing, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEARING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRAINS)] = { .text = gEasyChatWord_Trains, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_IGNORANT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CHOOSE)] = { .text = gEasyChatWord_Choose, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_KNOW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COME)] = { .text = gEasyChatWord_Come, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_KNOWS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CAME)] = { .text = gEasyChatWord_Came, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_LAVISH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SEARCH)] = { .text = gEasyChatWord_Search, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_LEARN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MAKE)] = { .text = gEasyChatWord_Make, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_LISTENS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CAUSE)] = { .text = gEasyChatWord_Cause, - .alphabeticalOrder = 67, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOOKS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_KNOW)] = { .text = gEasyChatWord_Know, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_MAKE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_KNOWS)] = { .text = gEasyChatWord_Knows, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_MEETS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_REFUSE)] = { .text = gEasyChatWord_Refuse, - .alphabeticalOrder = 65, + .alphabeticalOrder = EC_INDEX(EC_WORD_OVERDO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STORES)] = { .text = gEasyChatWord_Stores, - .alphabeticalOrder = 70, + .alphabeticalOrder = EC_INDEX(EC_WORD_OWN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BRAG)] = { .text = gEasyChatWord_Brag, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_PLAYED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IGNORANT)] = { .text = gEasyChatWord_Ignorant, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_PLAYS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THINKS)] = { .text = gEasyChatWord_Thinks, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_PLEASE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BELIEVE)] = { .text = gEasyChatWord_Believe, - .alphabeticalOrder = 64, + .alphabeticalOrder = EC_INDEX(EC_WORD_PRAISE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SLIDE)] = { .text = gEasyChatWord_Slide, - .alphabeticalOrder = 63, + .alphabeticalOrder = EC_INDEX(EC_WORD_PRETEND), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EATS)] = { .text = gEasyChatWord_Eats, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_REFUSE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_USE)] = { .text = gEasyChatWord_Use, - .alphabeticalOrder = 53, + .alphabeticalOrder = EC_INDEX(EC_WORD_RELEASE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_USES)] = { .text = gEasyChatWord_Uses, - .alphabeticalOrder = 56, + .alphabeticalOrder = EC_INDEX(EC_WORD_RUN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_USING)] = { .text = gEasyChatWord_Using, - .alphabeticalOrder = 55, + .alphabeticalOrder = EC_INDEX(EC_WORD_RUNS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COULDN_T)] = { .text = gEasyChatWord_Couldnt, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_SAID), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CAPABLE)] = { .text = gEasyChatWord_Capable, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_SAYS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DISAPPEAR)] = { .text = gEasyChatWord_Disappear, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_SEARCH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_APPEAR)] = { .text = gEasyChatWord_Appear, - .alphabeticalOrder = 69, + .alphabeticalOrder = EC_INDEX(EC_WORD_SEEK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THROW)] = { .text = gEasyChatWord_Throw, - .alphabeticalOrder = 68, + .alphabeticalOrder = EC_INDEX(EC_WORD_SEES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WORRY)] = { .text = gEasyChatWord_Worry, - .alphabeticalOrder = 66, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHOW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SLEPT)] = { .text = gEasyChatWord_Slept, - .alphabeticalOrder = 61, + .alphabeticalOrder = EC_INDEX(EC_WORD_SINK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SLEEP)] = { .text = gEasyChatWord_Sleep, - .alphabeticalOrder = 52, + .alphabeticalOrder = EC_INDEX(EC_WORD_SLEEP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RELEASE)] = { .text = gEasyChatWord_Release, - .alphabeticalOrder = 51, + .alphabeticalOrder = EC_INDEX(EC_WORD_SLEPT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DRINKS)] = { .text = gEasyChatWord_Drinks, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_SLIDE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RUNS)] = { .text = gEasyChatWord_Runs, - .alphabeticalOrder = 62, + .alphabeticalOrder = EC_INDEX(EC_WORD_SMACK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RUN)] = { .text = gEasyChatWord_Run, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_STORES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WORKS)] = { .text = gEasyChatWord_Works, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_STORY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WORKING)] = { .text = gEasyChatWord_Working, - .alphabeticalOrder = 71, + .alphabeticalOrder = EC_INDEX(EC_WORD_TAKE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TALKING)] = { .text = gEasyChatWord_Talking, - .alphabeticalOrder = 60, + .alphabeticalOrder = EC_INDEX(EC_WORD_TALK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TALK)] = { .text = gEasyChatWord_Talk, - .alphabeticalOrder = 59, + .alphabeticalOrder = EC_INDEX(EC_WORD_TALKING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SINK)] = { .text = gEasyChatWord_Sink, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_TEACH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SMACK)] = { .text = gEasyChatWord_Smack, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_TEACHES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PRETEND)] = { .text = gEasyChatWord_Pretend, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_THINKS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PRAISE)] = { .text = gEasyChatWord_Praise, - .alphabeticalOrder = 49, + .alphabeticalOrder = EC_INDEX(EC_WORD_THROW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OVERDO)] = { .text = gEasyChatWord_Overdo, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRAINS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHOW)] = { .text = gEasyChatWord_Show, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRUST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOOKS)] = { .text = gEasyChatWord_Looks, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_USE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SEES)] = { .text = gEasyChatWord_Sees, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_USES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SEEK)] = { .text = gEasyChatWord_Seek, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_USING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OWN)] = { .text = gEasyChatWord_Own, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_WAKE_UP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TAKE)] = { .text = gEasyChatWord_Take, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_WAKES_UP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ALLOW)] = { .text = gEasyChatWord_Allow, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_WALKING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FORGET)] = { .text = gEasyChatWord_Forget, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_WALKS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FORGETS)] = { .text = gEasyChatWord_Forgets, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_WENT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_APPEARS)] = { .text = gEasyChatWord_Appears, - .alphabeticalOrder = 58, + .alphabeticalOrder = EC_INDEX(EC_WORD_WORKING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FAINT)] = { .text = gEasyChatWord_Faint, - .alphabeticalOrder = 57, + .alphabeticalOrder = EC_INDEX(EC_WORD_WORKS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FAINTED)] = { .text = gEasyChatWord_Fainted, - .alphabeticalOrder = 50, + .alphabeticalOrder = EC_INDEX(EC_WORD_WORRY), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_adjectives.h b/src/data/easy_chat/easy_chat_group_adjectives.h index 619dff6213..6a85973df4 100755 --- a/src/data/easy_chat/easy_chat_group_adjectives.h +++ b/src/data/easy_chat/easy_chat_group_adjectives.h @@ -39,217 +39,217 @@ const struct EasyChatWordInfo gEasyChatGroup_Adjectives[] = { [EC_INDEX(EC_WORD_WANDERING)] = { .text = gEasyChatWord_Wandering, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_ANTICIPATION), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RICKETY)] = { .text = gEasyChatWord_Rickety, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_AWESOME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ROCK_SOLID)] = { .text = gEasyChatWord_RockSolid, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_BREAK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HUNGRY)] = { .text = gEasyChatWord_Hungry, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_DESTROYED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TIGHT)] = { .text = gEasyChatWord_Tight, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_DROOLING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TICKLISH)] = { .text = gEasyChatWord_Ticklish, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_EXCITING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TWIRLING)] = { .text = gEasyChatWord_Twirling, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_FIERY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SPIRALING)] = { .text = gEasyChatWord_Spiraling, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_HAPPILY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THIRSTY)] = { .text = gEasyChatWord_Thirsty, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_HOPELESS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOLLING)] = { .text = gEasyChatWord_Lolling, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_HUNGRY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SILKY)] = { .text = gEasyChatWord_Silky, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_INCREASING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SADLY)] = { .text = gEasyChatWord_Sadly, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOLLING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HOPELESS)] = { .text = gEasyChatWord_Hopeless, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOVEY_DOVEY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_USELESS)] = { .text = gEasyChatWord_Useless, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_RICKETY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DROOLING)] = { .text = gEasyChatWord_Drooling, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_RIPPED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EXCITING)] = { .text = gEasyChatWord_Exciting, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_ROCK_SOLID), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THICK)] = { .text = gEasyChatWord_Thick, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_SADLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SMOOTH)] = { .text = gEasyChatWord_Smooth, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_SCATTER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SLIMY)] = { .text = gEasyChatWord_Slimy, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHAKY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THIN)] = { .text = gEasyChatWord_Thin, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHREDDED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BREAK)] = { .text = gEasyChatWord_Break, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_SILKY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_VORACIOUS)] = { .text = gEasyChatWord_Voracious, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_SLIMY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SCATTER)] = { .text = gEasyChatWord_Scatter, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_SMOOTH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AWESOME)] = { .text = gEasyChatWord_Awesome, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_SPIRALING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WIMPY)] = { .text = gEasyChatWord_Wimpy, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_THICK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WOBBLY)] = { .text = gEasyChatWord_Wobbly, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_THIN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHAKY)] = { .text = gEasyChatWord_Shaky, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_THIRSTY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RIPPED)] = { .text = gEasyChatWord_Ripped, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_TICKLISH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHREDDED)] = { .text = gEasyChatWord_Shredded, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_TIGHT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_INCREASING)] = { .text = gEasyChatWord_Increasing, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_TWIRLING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YET)] = { .text = gEasyChatWord_Yet, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_USELESS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DESTROYED)] = { .text = gEasyChatWord_Destroyed, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_VORACIOUS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FIERY)] = { .text = gEasyChatWord_Fiery, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_WANDERING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOVEY_DOVEY)] = { .text = gEasyChatWord_LoveyDovey, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_WIMPY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HAPPILY)] = { .text = gEasyChatWord_Happily, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_WOBBLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ANTICIPATION)] = { .text = gEasyChatWord_Anticipation, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_YET), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_battle.h b/src/data/easy_chat/easy_chat_group_battle.h index 2a2420b2f1..56d7ce0cd8 100755 --- a/src/data/easy_chat/easy_chat_group_battle.h +++ b/src/data/easy_chat/easy_chat_group_battle.h @@ -66,379 +66,379 @@ const struct EasyChatWordInfo gEasyChatGroup_Battle[] = { [EC_INDEX(EC_WORD_MATCH_UP)] = { .text = gEasyChatWord_MatchUp, - .alphabeticalOrder = 53, + .alphabeticalOrder = EC_INDEX(EC_WORD_ACCEPT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GO)] = { .text = gEasyChatWord_Go, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_AIM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NO_1)] = { .text = gEasyChatWord_No1, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_ATTACK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DECIDE)] = { .text = gEasyChatWord_Decide, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_BATTLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LET_ME_WIN)] = { .text = gEasyChatWord_LetMeWin, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_CAN_WIN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WINS)] = { .text = gEasyChatWord_Wins, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_CAN_T_WIN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WIN)] = { .text = gEasyChatWord_Win, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_CHALLENGE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WON)] = { .text = gEasyChatWord_Won, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_COME_ON), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IF_I_WIN)] = { .text = gEasyChatWord_IfIWin, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_DECIDE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHEN_I_WIN)] = { .text = gEasyChatWord_WhenIWin, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_DECIDED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CAN_T_WIN)] = { .text = gEasyChatWord_CantWin, - .alphabeticalOrder = 56, + .alphabeticalOrder = EC_INDEX(EC_WORD_EASY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CAN_WIN)] = { .text = gEasyChatWord_CanWin, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_ESCAPE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NO_MATCH)] = { .text = gEasyChatWord_NoMatch, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_FIGHT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SPIRIT)] = { .text = gEasyChatWord_Spirit, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_FIGHTS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DECIDED)] = { .text = gEasyChatWord_Decided, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_FOE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRUMP_CARD)] = { .text = gEasyChatWord_TrumpCard, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_GENIUS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TAKE_THAT)] = { .text = gEasyChatWord_TakeThat, - .alphabeticalOrder = 45, + .alphabeticalOrder = EC_INDEX(EC_WORD_GIVE_UP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COME_ON)] = { .text = gEasyChatWord_ComeOn, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_GO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ATTACK)] = { .text = gEasyChatWord_Attack, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_GO_EASY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SURRENDER)] = { .text = gEasyChatWord_Surrender, - .alphabeticalOrder = 50, + .alphabeticalOrder = EC_INDEX(EC_WORD_GUARD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GUTSY)] = { .text = gEasyChatWord_Gutsy, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_GUTSY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TALENT)] = { .text = gEasyChatWord_Talent, - .alphabeticalOrder = 47, + .alphabeticalOrder = EC_INDEX(EC_WORD_IF_I_LOSE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STRATEGY)] = { .text = gEasyChatWord_Strategy, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_IF_I_WIN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SMITE)] = { .text = gEasyChatWord_Smite, - .alphabeticalOrder = 54, + .alphabeticalOrder = EC_INDEX(EC_WORD_INVINCIBLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MATCH)] = { .text = gEasyChatWord_Match, - .alphabeticalOrder = 60, + .alphabeticalOrder = EC_INDEX(EC_WORD_LEADER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_VICTORY)] = { .text = gEasyChatWord_Victory, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_LEGEND), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OFFENSIVE)] = { .text = gEasyChatWord_Offensive, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_LET_ME_WIN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SENSE)] = { .text = gEasyChatWord_Sense, - .alphabeticalOrder = 49, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOSE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_VERSUS)] = { .text = gEasyChatWord_Versus, - .alphabeticalOrder = 46, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOSS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FIGHTS)] = { .text = gEasyChatWord_Fights, - .alphabeticalOrder = 48, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_POWER)] = { .text = gEasyChatWord_Power, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_MATCH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CHALLENGE)] = { .text = gEasyChatWord_Challenge, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_MATCH_UP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STRONG)] = { .text = gEasyChatWord_Strong, - .alphabeticalOrder = 62, + .alphabeticalOrder = EC_INDEX(EC_WORD_MOVE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOO_STRONG)] = { .text = gEasyChatWord_TooStrong, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_NO_MATCH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GO_EASY)] = { .text = gEasyChatWord_GoEasy, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_NO_1), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FOE)] = { .text = gEasyChatWord_Foe, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_OFFENSIVE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GENIUS)] = { .text = gEasyChatWord_Genius, - .alphabeticalOrder = 51, + .alphabeticalOrder = EC_INDEX(EC_WORD_PARTNER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LEGEND)] = { .text = gEasyChatWord_Legend, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_POINTS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ESCAPE)] = { .text = gEasyChatWord_Escape, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_POWER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AIM)] = { .text = gEasyChatWord_Aim, - .alphabeticalOrder = 59, + .alphabeticalOrder = EC_INDEX(EC_WORD_PUSHOVER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BATTLE)] = { .text = gEasyChatWord_Battle, - .alphabeticalOrder = 55, + .alphabeticalOrder = EC_INDEX(EC_WORD_RECEIVED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FIGHT)] = { .text = gEasyChatWord_Fight, - .alphabeticalOrder = 52, + .alphabeticalOrder = EC_INDEX(EC_WORD_REJECT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RESUSCITATE)] = { .text = gEasyChatWord_Resuscitate, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_RESUSCITATE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_POINTS)] = { .text = gEasyChatWord_Points, - .alphabeticalOrder = 61, + .alphabeticalOrder = EC_INDEX(EC_WORD_RULE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SERIOUS)] = { .text = gEasyChatWord_Serious, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_SENSE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GIVE_UP)] = { .text = gEasyChatWord_GiveUp, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_SERIOUS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOSS)] = { .text = gEasyChatWord_Loss, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_SMITE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IF_I_LOSE)] = { .text = gEasyChatWord_IfILose, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_SPIRIT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOST)] = { .text = gEasyChatWord_Lost, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_STRATEGY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOSE)] = { .text = gEasyChatWord_Lose, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_STRONG), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GUARD)] = { .text = gEasyChatWord_Guard, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_SURRENDER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PARTNER)] = { .text = gEasyChatWord_Partner, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_TAKE_THAT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_REJECT)] = { .text = gEasyChatWord_Reject, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_TALENT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ACCEPT)] = { .text = gEasyChatWord_Accept, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOO_STRONG), .enabled = TRUE, }, [EC_INDEX(EC_WORD_INVINCIBLE)] = { .text = gEasyChatWord_Invincible, - .alphabeticalOrder = 58, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOO_WEAK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RECEIVED)] = { .text = gEasyChatWord_Received, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRUMP_CARD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EASY)] = { .text = gEasyChatWord_Easy, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_VERSUS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WEAK)] = { .text = gEasyChatWord_Weak, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_VICTORY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOO_WEAK)] = { .text = gEasyChatWord_TooWeak, - .alphabeticalOrder = 57, + .alphabeticalOrder = EC_INDEX(EC_WORD_WEAK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PUSHOVER)] = { .text = gEasyChatWord_Pushover, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHEN_I_WIN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LEADER)] = { .text = gEasyChatWord_Leader, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_WIN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RULE)] = { .text = gEasyChatWord_Rule, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_WINS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MOVE)] = { .text = gEasyChatWord_Move, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_WON), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_conditions.h b/src/data/easy_chat/easy_chat_group_conditions.h index d0636f1628..b53816e9e9 100755 --- a/src/data/easy_chat/easy_chat_group_conditions.h +++ b/src/data/easy_chat/easy_chat_group_conditions.h @@ -72,415 +72,415 @@ const struct EasyChatWordInfo gEasyChatGroup_Conditions[] = { [EC_INDEX(EC_WORD_HOT)] = { .text = gEasyChatWord_Hot, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_ABSENT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EXISTS)] = { .text = gEasyChatWord_Exists, - .alphabeticalOrder = 55, + .alphabeticalOrder = EC_INDEX(EC_WORD_ALONE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EXCESS)] = { .text = gEasyChatWord_Excess, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_AMUSING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_APPROVED)] = { .text = gEasyChatWord_Approved, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_APPROVED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HAS)] = { .text = gEasyChatWord_Has, - .alphabeticalOrder = 54, + .alphabeticalOrder = EC_INDEX(EC_WORD_AWFUL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GOOD)] = { .text = gEasyChatWord_Good, - .alphabeticalOrder = 68, + .alphabeticalOrder = EC_INDEX(EC_WORD_BADLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LESS)] = { .text = gEasyChatWord_Less, - .alphabeticalOrder = 50, + .alphabeticalOrder = EC_INDEX(EC_WORD_BECOMES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MOMENTUM)] = { .text = gEasyChatWord_Momentum, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_BEING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GOING)] = { .text = gEasyChatWord_Going, - .alphabeticalOrder = 60, + .alphabeticalOrder = EC_INDEX(EC_WORD_BEST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WEIRD)] = { .text = gEasyChatWord_Weird, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_BIG), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BUSY)] = { .text = gEasyChatWord_Busy, - .alphabeticalOrder = 56, + .alphabeticalOrder = EC_INDEX(EC_WORD_BORED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOGETHER)] = { .text = gEasyChatWord_Together, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_BUSY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FULL)] = { .text = gEasyChatWord_Full, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_CLOSE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ABSENT)] = { .text = gEasyChatWord_Absent, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_COLD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BEING)] = { .text = gEasyChatWord_Being, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_CORRECT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NEED)] = { .text = gEasyChatWord_Need, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_DIFFERENT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TASTY)] = { .text = gEasyChatWord_Tasty, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_DOCILE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SKILLED)] = { .text = gEasyChatWord_Skilled, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_ELSE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NOISY)] = { .text = gEasyChatWord_Noisy, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_ENTERTAINING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BIG)] = { .text = gEasyChatWord_Big, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_EXCELLENT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LATE)] = { .text = gEasyChatWord_Late, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_EXCESS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CLOSE)] = { .text = gEasyChatWord_Close, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_EXISTS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DOCILE)] = { .text = gEasyChatWord_Docile, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_EXPENSIVE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AMUSING)] = { .text = gEasyChatWord_Amusing, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_FABULOUS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ENTERTAINING)] = { .text = gEasyChatWord_Entertaining, - .alphabeticalOrder = 52, + .alphabeticalOrder = EC_INDEX(EC_WORD_FAST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PERFECTION)] = { .text = gEasyChatWord_Perfection, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_FULL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PRETTY)] = { .text = gEasyChatWord_Pretty, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_GOING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEALTHY)] = { .text = gEasyChatWord_Healthy, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_GOOD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EXCELLENT)] = { .text = gEasyChatWord_Excellent, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_HAS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UPSIDE_DOWN)] = { .text = gEasyChatWord_UpsideDown, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEALTHY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COLD)] = { .text = gEasyChatWord_Cold, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_HOT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_REFRESHING)] = { .text = gEasyChatWord_Refreshing, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_IMPOSSIBLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UNAVOIDABLE)] = { .text = gEasyChatWord_Unavoidable, - .alphabeticalOrder = 63, + .alphabeticalOrder = EC_INDEX(EC_WORD_KIND), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MUCH)] = { .text = gEasyChatWord_Much, - .alphabeticalOrder = 59, + .alphabeticalOrder = EC_INDEX(EC_WORD_LACKS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OVERWHELMING)] = { .text = gEasyChatWord_Overwhelming, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_LATE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FABULOUS)] = { .text = gEasyChatWord_Fabulous, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_LESS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ELSE)] = { .text = gEasyChatWord_Else, - .alphabeticalOrder = 61, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOUSY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EXPENSIVE)] = { .text = gEasyChatWord_Expensive, - .alphabeticalOrder = 53, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CORRECT)] = { .text = gEasyChatWord_Correct, - .alphabeticalOrder = 51, + .alphabeticalOrder = EC_INDEX(EC_WORD_LUKEWARM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IMPOSSIBLE)] = { .text = gEasyChatWord_Impossible, - .alphabeticalOrder = 62, + .alphabeticalOrder = EC_INDEX(EC_WORD_MISTAKE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SMALL)] = { .text = gEasyChatWord_Small, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_MOMENTUM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DIFFERENT)] = { .text = gEasyChatWord_Different, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_MUCH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TIRED)] = { .text = gEasyChatWord_Tired, - .alphabeticalOrder = 58, + .alphabeticalOrder = EC_INDEX(EC_WORD_MYSTERY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SKILL)] = { .text = gEasyChatWord_Skill, - .alphabeticalOrder = 49, + .alphabeticalOrder = EC_INDEX(EC_WORD_NATURAL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOP)] = { .text = gEasyChatWord_Top, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_NEED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NON_STOP)] = { .text = gEasyChatWord_NonStop, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_NOISY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PREPOSTEROUS)] = { .text = gEasyChatWord_Preposterous, - .alphabeticalOrder = 45, + .alphabeticalOrder = EC_INDEX(EC_WORD_NON_STOP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NONE)] = { .text = gEasyChatWord_None, - .alphabeticalOrder = 47, + .alphabeticalOrder = EC_INDEX(EC_WORD_NONE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NOTHING)] = { .text = gEasyChatWord_Nothing, - .alphabeticalOrder = 48, + .alphabeticalOrder = EC_INDEX(EC_WORD_NOTHING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NATURAL)] = { .text = gEasyChatWord_Natural, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_OVERWHELMING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BECOMES)] = { .text = gEasyChatWord_Becomes, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_PERFECTION), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LUKEWARM)] = { .text = gEasyChatWord_Lukewarm, - .alphabeticalOrder = 46, + .alphabeticalOrder = EC_INDEX(EC_WORD_PREPOSTEROUS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FAST)] = { .text = gEasyChatWord_Fast, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_PRETTY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOW)] = { .text = gEasyChatWord_Low, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_REFRESHING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AWFUL)] = { .text = gEasyChatWord_Awful, - .alphabeticalOrder = 57, + .alphabeticalOrder = EC_INDEX(EC_WORD_SECRET), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ALONE)] = { .text = gEasyChatWord_Alone, - .alphabeticalOrder = 67, + .alphabeticalOrder = EC_INDEX(EC_WORD_SEEMS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BORED)] = { .text = gEasyChatWord_Bored, - .alphabeticalOrder = 66, + .alphabeticalOrder = EC_INDEX(EC_WORD_SIMPLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SECRET)] = { .text = gEasyChatWord_Secret, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_SKILL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MYSTERY)] = { .text = gEasyChatWord_Mystery, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_SKILLED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LACKS)] = { .text = gEasyChatWord_Lacks, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_SMALL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BEST)] = { .text = gEasyChatWord_Best, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_TASTY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOUSY)] = { .text = gEasyChatWord_Lousy, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_TIRED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MISTAKE)] = { .text = gEasyChatWord_Mistake, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOGETHER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_KIND)] = { .text = gEasyChatWord_Kind, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WELL)] = { .text = gEasyChatWord_Well, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_UNAVOIDABLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WEAKENED)] = { .text = gEasyChatWord_Weakened, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_UPSIDE_DOWN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SIMPLE)] = { .text = gEasyChatWord_Simple, - .alphabeticalOrder = 65, + .alphabeticalOrder = EC_INDEX(EC_WORD_WEAKENED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SEEMS)] = { .text = gEasyChatWord_Seems, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_WEIRD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BADLY)] = { .text = gEasyChatWord_Badly, - .alphabeticalOrder = 64, + .alphabeticalOrder = EC_INDEX(EC_WORD_WELL), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_endings.h b/src/data/easy_chat/easy_chat_group_endings.h index ffa5108a91..629380b039 100755 --- a/src/data/easy_chat/easy_chat_group_endings.h +++ b/src/data/easy_chat/easy_chat_group_endings.h @@ -72,415 +72,415 @@ const struct EasyChatWordInfo gEasyChatGroup_Endings[] = { [EC_INDEX(EC_WORD_WILL)] = { .text = gEasyChatWord_Will, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_A), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WILL_BE_HERE)] = { .text = gEasyChatWord_WillBeHere, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_ABOUT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OR)] = { .text = gEasyChatWord_Or, - .alphabeticalOrder = 63, + .alphabeticalOrder = EC_INDEX(EC_WORD_AFTER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TIMES)] = { .text = gEasyChatWord_Times, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_ALL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WONDER)] = { .text = gEasyChatWord_Wonder, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_AN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IS_IT_QUES)] = { .text = gEasyChatWord_IsItQues, - .alphabeticalOrder = 68, + .alphabeticalOrder = EC_INDEX(EC_WORD_ANYWHERE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BE)] = { .text = gEasyChatWord_Be, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_ARE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GIMME)] = { .text = gEasyChatWord_Gimme, - .alphabeticalOrder = 46, + .alphabeticalOrder = EC_INDEX(EC_WORD_AS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COULD)] = { .text = gEasyChatWord_Could, - .alphabeticalOrder = 54, + .alphabeticalOrder = EC_INDEX(EC_WORD_AT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LIKELY_TO)] = { .text = gEasyChatWord_LikelyTo, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_BE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WOULD)] = { .text = gEasyChatWord_Would, - .alphabeticalOrder = 64, + .alphabeticalOrder = EC_INDEX(EC_WORD_BEFORE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IS)] = { .text = gEasyChatWord_Is, - .alphabeticalOrder = 53, + .alphabeticalOrder = EC_INDEX(EC_WORD_BELONGS_TO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ISN_T_IT_QUES)] = { .text = gEasyChatWord_IsntItQues, - .alphabeticalOrder = 49, + .alphabeticalOrder = EC_INDEX(EC_WORD_BETTER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LET_S)] = { .text = gEasyChatWord_Lets, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_CAN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OTHER)] = { .text = gEasyChatWord_Other, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_CAN_T), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ARE)] = { .text = gEasyChatWord_Are, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_COULD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WAS)] = { .text = gEasyChatWord_Was, - .alphabeticalOrder = 59, + .alphabeticalOrder = EC_INDEX(EC_WORD_DID), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WERE)] = { .text = gEasyChatWord_Were, - .alphabeticalOrder = 60, + .alphabeticalOrder = EC_INDEX(EC_WORD_DIDN_T), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THOSE)] = { .text = gEasyChatWord_Those, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_DO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ISN_T)] = { .text = gEasyChatWord_Isnt, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_DOES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WON_T)] = { .text = gEasyChatWord_Wont, - .alphabeticalOrder = 61, + .alphabeticalOrder = EC_INDEX(EC_WORD_DOESN_T), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CAN_T)] = { .text = gEasyChatWord_Cant, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_DON_T), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CAN)] = { .text = gEasyChatWord_Can, - .alphabeticalOrder = 50, + .alphabeticalOrder = EC_INDEX(EC_WORD_EVER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DON_T)] = { .text = gEasyChatWord_Dont, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_FOR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DO)] = { .text = gEasyChatWord_Do, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_GIMME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DOES)] = { .text = gEasyChatWord_Does, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_HAVE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHOM)] = { .text = gEasyChatWord_Whom, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_HAVEN_T), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHICH)] = { .text = gEasyChatWord_Which, - .alphabeticalOrder = 55, + .alphabeticalOrder = EC_INDEX(EC_WORD_IN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WASN_T)] = { .text = gEasyChatWord_Wasnt, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_IS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WEREN_T)] = { .text = gEasyChatWord_Werent, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_IS_IT_QUES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HAVE)] = { .text = gEasyChatWord_Have, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_ISN_T), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HAVEN_T)] = { .text = gEasyChatWord_Havent, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_ISN_T_IT_QUES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_A)] = { .text = gEasyChatWord_A, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_IT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AN)] = { .text = gEasyChatWord_An, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_LET_S), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NOT)] = { .text = gEasyChatWord_Not, - .alphabeticalOrder = 58, + .alphabeticalOrder = EC_INDEX(EC_WORD_LIKE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THERE)] = { .text = gEasyChatWord_There, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_LIKELY_TO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OK_QUES)] = { .text = gEasyChatWord_OkQues, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_MAYBE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SO)] = { .text = gEasyChatWord_So, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_NOT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MAYBE)] = { .text = gEasyChatWord_Maybe, - .alphabeticalOrder = 52, + .alphabeticalOrder = EC_INDEX(EC_WORD_OF), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ABOUT)] = { .text = gEasyChatWord_About, - .alphabeticalOrder = 45, + .alphabeticalOrder = EC_INDEX(EC_WORD_OFF), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OVER)] = { .text = gEasyChatWord_Over, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_OK_QUES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IT)] = { .text = gEasyChatWord_It, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_ON), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ALL)] = { .text = gEasyChatWord_All, - .alphabeticalOrder = 67, + .alphabeticalOrder = EC_INDEX(EC_WORD_ONCE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FOR)] = { .text = gEasyChatWord_For, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_OR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ON)] = { .text = gEasyChatWord_On, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_OTHER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OFF)] = { .text = gEasyChatWord_Off, - .alphabeticalOrder = 56, + .alphabeticalOrder = EC_INDEX(EC_WORD_OUT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AS)] = { .text = gEasyChatWord_As, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_OVER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TO)] = { .text = gEasyChatWord_To, - .alphabeticalOrder = 51, + .alphabeticalOrder = EC_INDEX(EC_WORD_SINCE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WITH)] = { .text = gEasyChatWord_With, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_SO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BETTER)] = { .text = gEasyChatWord_Better, - .alphabeticalOrder = 66, + .alphabeticalOrder = EC_INDEX(EC_WORD_THAN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EVER)] = { .text = gEasyChatWord_Ever, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_THERE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SINCE)] = { .text = gEasyChatWord_Since, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_THOSE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OF)] = { .text = gEasyChatWord_Of, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_TIMES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BELONGS_TO)] = { .text = gEasyChatWord_BelongsTo, - .alphabeticalOrder = 47, + .alphabeticalOrder = EC_INDEX(EC_WORD_TO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AT)] = { .text = gEasyChatWord_At, - .alphabeticalOrder = 57, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IN)] = { .text = gEasyChatWord_In, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_WAS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OUT)] = { .text = gEasyChatWord_Out, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_WASN_T), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOO)] = { .text = gEasyChatWord_Too, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_WERE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LIKE)] = { .text = gEasyChatWord_Like, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_WEREN_T), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DID)] = { .text = gEasyChatWord_Did, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHICH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DIDN_T)] = { .text = gEasyChatWord_Didnt, - .alphabeticalOrder = 65, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHILE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DOESN_T)] = { .text = gEasyChatWord_Doesnt, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHOM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WITHOUT)] = { .text = gEasyChatWord_Without, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_WILL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AFTER)] = { .text = gEasyChatWord_After, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_WILL_BE_HERE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BEFORE)] = { .text = gEasyChatWord_Before, - .alphabeticalOrder = 48, + .alphabeticalOrder = EC_INDEX(EC_WORD_WITH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHILE)] = { .text = gEasyChatWord_While, - .alphabeticalOrder = 62, + .alphabeticalOrder = EC_INDEX(EC_WORD_WITHOUT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THAN)] = { .text = gEasyChatWord_Than, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_WON_T), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ONCE)] = { .text = gEasyChatWord_Once, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_WONDER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ANYWHERE)] = { .text = gEasyChatWord_Anywhere, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_WOULD), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_events.h b/src/data/easy_chat/easy_chat_group_events.h index 0fbbcc4a78..a4e5165c60 100755 --- a/src/data/easy_chat/easy_chat_group_events.h +++ b/src/data/easy_chat/easy_chat_group_events.h @@ -32,175 +32,175 @@ const struct EasyChatWordInfo gEasyChatGroup_Events[] = { [EC_INDEX(EC_WORD_APPEAL)] = { .text = gEasyChatWord_Appeal, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_APPEAL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EVENTS)] = { .text = gEasyChatWord_Events, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_BATTLE_ROOM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STAY_AT_HOME)] = { .text = gEasyChatWord_StayAtHome, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_BATTLE_TOWER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BERRY)] = { .text = gEasyChatWord_Berry, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_BERRY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CONTEST)] = { .text = gEasyChatWord_Contest, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_BLEND), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MC)] = { .text = gEasyChatWord_Mc, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_CONTEST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_JUDGE)] = { .text = gEasyChatWord_Judge, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_CRUSH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SUPER)] = { .text = gEasyChatWord_Super, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_DIRECT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STAGE)] = { .text = gEasyChatWord_Stage, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_EVENTS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HALL_OF_FAME)] = { .text = gEasyChatWord_HallOfFame, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_EVOLUTION), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EVOLUTION)] = { .text = gEasyChatWord_Evolution, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_FRONTIER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HYPER)] = { .text = gEasyChatWord_Hyper, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_HALL_OF_FAME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BATTLE_TOWER)] = { .text = gEasyChatWord_BattleTower, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_HIDDEN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LEADERS)] = { .text = gEasyChatWord_Leaders, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_HYPER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BATTLE_ROOM)] = { .text = gEasyChatWord_BattleRoom, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_JUDGE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HIDDEN)] = { .text = gEasyChatWord_Hidden, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_LEADERS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SECRET_BASE)] = { .text = gEasyChatWord_SecretBase, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_MASTER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BLEND)] = { .text = gEasyChatWord_Blend, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_MC), .enabled = TRUE, }, [EC_INDEX(EC_WORD_POKEBLOCK)] = { .text = gEasyChatWord_POKEBLOCK, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_POKEBLOCK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MASTER)] = { .text = gEasyChatWord_Master, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_RANK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RANK)] = { .text = gEasyChatWord_Rank, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_RIBBON), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RIBBON)] = { .text = gEasyChatWord_Ribbon, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_ROOM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CRUSH)] = { .text = gEasyChatWord_Crush, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_SECRET_BASE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DIRECT)] = { .text = gEasyChatWord_Direct, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_STAGE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOWER)] = { .text = gEasyChatWord_Tower, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_STAY_AT_HOME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UNION)] = { .text = gEasyChatWord_Union, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_SUPER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ROOM)] = { .text = gEasyChatWord_Room, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOWER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WIRELESS)] = { .text = gEasyChatWord_Wireless, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_UNION), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FRONTIER)] = { .text = gEasyChatWord_Frontier, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_WIRELESS), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_feelings.h b/src/data/easy_chat/easy_chat_group_feelings.h index 55fe9d00c5..5c2221530a 100755 --- a/src/data/easy_chat/easy_chat_group_feelings.h +++ b/src/data/easy_chat/easy_chat_group_feelings.h @@ -72,415 +72,415 @@ const struct EasyChatWordInfo gEasyChatGroup_Feelings[] = { [EC_INDEX(EC_WORD_MEET)] = { .text = gEasyChatWord_Meet, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_ADORE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PLAY)] = { .text = gEasyChatWord_Play, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_ALL_RIGHT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HURRIED)] = { .text = gEasyChatWord_Hurried, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_ANGER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GOES)] = { .text = gEasyChatWord_Goes, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_ANGRY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GIDDY)] = { .text = gEasyChatWord_Giddy, - .alphabeticalOrder = 46, + .alphabeticalOrder = EC_INDEX(EC_WORD_BAD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HAPPY)] = { .text = gEasyChatWord_Happy, - .alphabeticalOrder = 63, + .alphabeticalOrder = EC_INDEX(EC_WORD_BEAT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HAPPINESS)] = { .text = gEasyChatWord_Happiness, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_BORING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EXCITE)] = { .text = gEasyChatWord_Excite, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_CARE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IMPORTANT)] = { .text = gEasyChatWord_Important, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_CARES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FUNNY)] = { .text = gEasyChatWord_Funny, - .alphabeticalOrder = 61, + .alphabeticalOrder = EC_INDEX(EC_WORD_DANGER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GOT)] = { .text = gEasyChatWord_Got, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_DARN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GO_HOME)] = { .text = gEasyChatWord_GoHome, - .alphabeticalOrder = 62, + .alphabeticalOrder = EC_INDEX(EC_WORD_DEFEATED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DISAPPOINTED)] = { .text = gEasyChatWord_Disappointed, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_DISAPPOINT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DISAPPOINTS)] = { .text = gEasyChatWord_Disappoints, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_DISAPPOINTED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SAD)] = { .text = gEasyChatWord_Sad, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_DISAPPOINTS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRY)] = { .text = gEasyChatWord_Try, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_DISASTER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRIES)] = { .text = gEasyChatWord_Tries, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_DISLIKE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEARS)] = { .text = gEasyChatWord_Hears, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_DISLIKES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THINK)] = { .text = gEasyChatWord_Think, - .alphabeticalOrder = 60, + .alphabeticalOrder = EC_INDEX(EC_WORD_DONE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEAR)] = { .text = gEasyChatWord_Hear, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_DOWNCAST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WANTS)] = { .text = gEasyChatWord_Wants, - .alphabeticalOrder = 51, + .alphabeticalOrder = EC_INDEX(EC_WORD_DRINK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MISHEARD)] = { .text = gEasyChatWord_Misheard, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_EAT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DISLIKE)] = { .text = gEasyChatWord_Dislike, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_ENJOY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ANGRY)] = { .text = gEasyChatWord_Angry, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_ENJOYS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ANGER)] = { .text = gEasyChatWord_Anger, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_EXCITE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SCARY)] = { .text = gEasyChatWord_Scary, - .alphabeticalOrder = 53, + .alphabeticalOrder = EC_INDEX(EC_WORD_FEAR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LONESOME)] = { .text = gEasyChatWord_Lonesome, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_FUNNY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DISAPPOINT)] = { .text = gEasyChatWord_Disappoint, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_GETS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_JOY)] = { .text = gEasyChatWord_Joy, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_GIDDY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GETS)] = { .text = gEasyChatWord_Gets, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_GO_HOME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NEVER)] = { .text = gEasyChatWord_Never, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_GOES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DARN)] = { .text = gEasyChatWord_Darn, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_GOT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DOWNCAST)] = { .text = gEasyChatWord_Downcast, - .alphabeticalOrder = 64, + .alphabeticalOrder = EC_INDEX(EC_WORD_GREAT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_INCREDIBLE)] = { .text = gEasyChatWord_Incredible, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_HAPPINESS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LIKES)] = { .text = gEasyChatWord_Likes, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_HAPPY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DISLIKES)] = { .text = gEasyChatWord_Dislikes, - .alphabeticalOrder = 47, + .alphabeticalOrder = EC_INDEX(EC_WORD_HARD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BORING)] = { .text = gEasyChatWord_Boring, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEAR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CARE)] = { .text = gEasyChatWord_Care, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEARS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CARES)] = { .text = gEasyChatWord_Cares, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_HURRIED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ALL_RIGHT)] = { .text = gEasyChatWord_AllRight, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_IMPORTANT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ADORE)] = { .text = gEasyChatWord_Adore, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_INCREDIBLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DISASTER)] = { .text = gEasyChatWord_Disaster, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_JOY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ENJOY)] = { .text = gEasyChatWord_Enjoy, - .alphabeticalOrder = 45, + .alphabeticalOrder = EC_INDEX(EC_WORD_LACKING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ENJOYS)] = { .text = gEasyChatWord_Enjoys, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_LIKES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EAT)] = { .text = gEasyChatWord_Eat, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_LONESOME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LACKING)] = { .text = gEasyChatWord_Lacking, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_MEET), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BAD)] = { .text = gEasyChatWord_Bad, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_MISHEARD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HARD)] = { .text = gEasyChatWord_Hard, - .alphabeticalOrder = 59, + .alphabeticalOrder = EC_INDEX(EC_WORD_NEGATIVE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TERRIBLE)] = { .text = gEasyChatWord_Terrible, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_NEVER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHOULD)] = { .text = gEasyChatWord_Should, - .alphabeticalOrder = 50, + .alphabeticalOrder = EC_INDEX(EC_WORD_NICE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NICE)] = { .text = gEasyChatWord_Nice, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_PLAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DRINK)] = { .text = gEasyChatWord_Drink, - .alphabeticalOrder = 66, + .alphabeticalOrder = EC_INDEX(EC_WORD_QUESTION), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SURPRISE)] = { .text = gEasyChatWord_Surprise, - .alphabeticalOrder = 58, + .alphabeticalOrder = EC_INDEX(EC_WORD_RARE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FEAR)] = { .text = gEasyChatWord_Fear, - .alphabeticalOrder = 65, + .alphabeticalOrder = EC_INDEX(EC_WORD_ROMANTIC), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WANT)] = { .text = gEasyChatWord_Want, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_SAD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WAIT)] = { .text = gEasyChatWord_Wait, - .alphabeticalOrder = 56, + .alphabeticalOrder = EC_INDEX(EC_WORD_SATISFIED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SATISFIED)] = { .text = gEasyChatWord_Satisfied, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_SCARY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SEE)] = { .text = gEasyChatWord_See, - .alphabeticalOrder = 57, + .alphabeticalOrder = EC_INDEX(EC_WORD_SEE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RARE)] = { .text = gEasyChatWord_Rare, - .alphabeticalOrder = 49, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHOULD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NEGATIVE)] = { .text = gEasyChatWord_Negative, - .alphabeticalOrder = 52, + .alphabeticalOrder = EC_INDEX(EC_WORD_SURPRISE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DONE)] = { .text = gEasyChatWord_Done, - .alphabeticalOrder = 48, + .alphabeticalOrder = EC_INDEX(EC_WORD_TERRIBLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DANGER)] = { .text = gEasyChatWord_Danger, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_THINK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DEFEATED)] = { .text = gEasyChatWord_Defeated, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRIES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BEAT)] = { .text = gEasyChatWord_Beat, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GREAT)] = { .text = gEasyChatWord_Great, - .alphabeticalOrder = 67, + .alphabeticalOrder = EC_INDEX(EC_WORD_UNDERSTAND), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ROMANTIC)] = { .text = gEasyChatWord_Romantic, - .alphabeticalOrder = 68, + .alphabeticalOrder = EC_INDEX(EC_WORD_UNDERSTANDS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_QUESTION)] = { .text = gEasyChatWord_Question, - .alphabeticalOrder = 55, + .alphabeticalOrder = EC_INDEX(EC_WORD_WAIT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UNDERSTAND)] = { .text = gEasyChatWord_Understand, - .alphabeticalOrder = 54, + .alphabeticalOrder = EC_INDEX(EC_WORD_WANT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UNDERSTANDS)] = { .text = gEasyChatWord_Understands, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_WANTS), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_greetings.h b/src/data/easy_chat/easy_chat_group_greetings.h index fb95f7939d..aabf34c1cf 100755 --- a/src/data/easy_chat/easy_chat_group_greetings.h +++ b/src/data/easy_chat/easy_chat_group_greetings.h @@ -45,253 +45,253 @@ const struct EasyChatWordInfo gEasyChatGroup_Greetings[] = { [EC_INDEX(EC_WORD_THANKS)] = { .text = gEasyChatWord_Thanks, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_APOLOGIZE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YES)] = { .text = gEasyChatWord_Yes, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_APPRECIATE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HERE_GOES)] = { .text = gEasyChatWord_HereGoes, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_BYE_BYE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HERE_I_COME)] = { .text = gEasyChatWord_HereICome, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_COME_OVER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HERE_IT_IS)] = { .text = gEasyChatWord_HereItIs, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_CONGRATS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YEAH)] = { .text = gEasyChatWord_Yeah, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_COUNT_ON), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WELCOME)] = { .text = gEasyChatWord_Welcome, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_EXCUSE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OI)] = { .text = gEasyChatWord_Oi, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_EXCUSE_ME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HOW_DO)] = { .text = gEasyChatWord_HowDo, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_FORGIVE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CONGRATS)] = { .text = gEasyChatWord_Congrats, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_GIVE_ME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GIVE_ME)] = { .text = gEasyChatWord_GiveMe, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_GO_AHEAD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SORRY)] = { .text = gEasyChatWord_Sorry, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_GOOD_BYE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_APOLOGIZE)] = { .text = gEasyChatWord_Apologize, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_HELLO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FORGIVE)] = { .text = gEasyChatWord_Forgive, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_HERE_GOES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEY_THERE)] = { .text = gEasyChatWord_HeyThere, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_HERE_I_COME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HELLO)] = { .text = gEasyChatWord_Hello, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_HERE_IT_IS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GOOD_BYE)] = { .text = gEasyChatWord_GoodBye, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THANK_YOU)] = { .text = gEasyChatWord_ThankYou, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEY_THERE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_I_VE_ARRIVED)] = { .text = gEasyChatWord_IveArrived, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEY_QUES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PARDON)] = { .text = gEasyChatWord_Pardon, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_HI), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EXCUSE)] = { .text = gEasyChatWord_Excuse, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_HOO_HAH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SEE_YA)] = { .text = gEasyChatWord_SeeYa, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_HOW_DO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EXCUSE_ME)] = { .text = gEasyChatWord_ExcuseMe, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_HUH_QUES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WELL_THEN)] = { .text = gEasyChatWord_WellThen, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_I_VE_ARRIVED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GO_AHEAD)] = { .text = gEasyChatWord_GoAhead, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_LISTENING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_APPRECIATE)] = { .text = gEasyChatWord_Appreciate, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_MEET_YOU), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEY_QUES)] = { .text = gEasyChatWord_HeyQues, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_NO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHAT_S_UP_QUES)] = { .text = gEasyChatWord_WhatsUpQues, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_OI), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HUH_QUES)] = { .text = gEasyChatWord_HuhQues, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_PARDON), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NO)] = { .text = gEasyChatWord_No, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_SEE_YA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HI)] = { .text = gEasyChatWord_Hi, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_SMELL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YEAH_YEAH)] = { .text = gEasyChatWord_YeahYeah, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_SORRY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BYE_BYE)] = { .text = gEasyChatWord_ByeBye, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_THANK_YOU), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MEET_YOU)] = { .text = gEasyChatWord_MeetYou, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_THANKS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEY)] = { .text = gEasyChatWord_Hey, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_WELCOME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SMELL)] = { .text = gEasyChatWord_Smell, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_WELL_THEN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LISTENING)] = { .text = gEasyChatWord_Listening, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHAT_S_UP_QUES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HOO_HAH)] = { .text = gEasyChatWord_HooHah, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_YAHOO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YAHOO)] = { .text = gEasyChatWord_Yahoo, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_YEAH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YO)] = { .text = gEasyChatWord_Yo, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_YEAH_YEAH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COME_OVER)] = { .text = gEasyChatWord_ComeOver, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_YES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COUNT_ON)] = { .text = gEasyChatWord_CountOn, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_YO), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_hobbies.h b/src/data/easy_chat/easy_chat_group_hobbies.h index dd507e21b9..fb3484ae05 100755 --- a/src/data/easy_chat/easy_chat_group_hobbies.h +++ b/src/data/easy_chat/easy_chat_group_hobbies.h @@ -57,325 +57,325 @@ const struct EasyChatWordInfo gEasyChatGroup_Hobbies[] = { [EC_INDEX(EC_WORD_IDOL)] = { .text = gEasyChatWord_Idol, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_ADVENTURE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ANIME)] = { .text = gEasyChatWord_Anime, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_ANIME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SONG)] = { .text = gEasyChatWord_Song, - .alphabeticalOrder = 45, + .alphabeticalOrder = EC_INDEX(EC_WORD_BALL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MOVIE)] = { .text = gEasyChatWord_Movie, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_BIKE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SWEETS)] = { .text = gEasyChatWord_Sweets, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_BOARD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CHAT)] = { .text = gEasyChatWord_Chat, - .alphabeticalOrder = 46, + .alphabeticalOrder = EC_INDEX(EC_WORD_BOOK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CHILD_S_PLAY)] = { .text = gEasyChatWord_ChildsPlay, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_CAMERA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOYS)] = { .text = gEasyChatWord_Toys, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_CARDS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MUSIC)] = { .text = gEasyChatWord_Music, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_CHANNEL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CARDS)] = { .text = gEasyChatWord_Cards, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_CHAT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHOPPING)] = { .text = gEasyChatWord_Shopping, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_CHILD_S_PLAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CAMERA)] = { .text = gEasyChatWord_Camera, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_COLLECTION), .enabled = TRUE, }, [EC_INDEX(EC_WORD_VIEWING)] = { .text = gEasyChatWord_Viewing, - .alphabeticalOrder = 48, + .alphabeticalOrder = EC_INDEX(EC_WORD_COMICS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SPECTATOR)] = { .text = gEasyChatWord_Spectator, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_COMPLETE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GOURMET)] = { .text = gEasyChatWord_Gourmet, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_DANCE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GAME)] = { .text = gEasyChatWord_Game, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_DATE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RPG)] = { .text = gEasyChatWord_Rpg, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_DESIGN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COLLECTION)] = { .text = gEasyChatWord_Collection, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_DIET), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COMPLETE)] = { .text = gEasyChatWord_Complete, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_FASHION), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MAGAZINE)] = { .text = gEasyChatWord_Magazine, - .alphabeticalOrder = 47, + .alphabeticalOrder = EC_INDEX(EC_WORD_FESTIVAL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WALK)] = { .text = gEasyChatWord_Walk, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_FISHING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BIKE)] = { .text = gEasyChatWord_Bike, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_FLOWERS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HOBBY)] = { .text = gEasyChatWord_Hobby, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_GAME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SPORTS)] = { .text = gEasyChatWord_Sports, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_GOURMET), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SOFTWARE)] = { .text = gEasyChatWord_Software, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_HERO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SONGS)] = { .text = gEasyChatWord_Songs, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEROINE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DIET)] = { .text = gEasyChatWord_Diet, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_HOBBY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TREASURE)] = { .text = gEasyChatWord_Treasure, - .alphabeticalOrder = 49, + .alphabeticalOrder = EC_INDEX(EC_WORD_HOLIDAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRAVEL)] = { .text = gEasyChatWord_Travel, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_IDOL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DANCE)] = { .text = gEasyChatWord_Dance, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOCOMOTIVE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CHANNEL)] = { .text = gEasyChatWord_Channel, - .alphabeticalOrder = 53, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOOK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MAKING)] = { .text = gEasyChatWord_Making, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_MAGAZINE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FISHING)] = { .text = gEasyChatWord_Fishing, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_MAKING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DATE)] = { .text = gEasyChatWord_Date, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_MOVIE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DESIGN)] = { .text = gEasyChatWord_Design, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_MUSIC), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOCOMOTIVE)] = { .text = gEasyChatWord_Locomotive, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_NAP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PLUSH_DOLL)] = { .text = gEasyChatWord_PlushDoll, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_PC), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PC)] = { .text = gEasyChatWord_Pc, - .alphabeticalOrder = 50, + .alphabeticalOrder = EC_INDEX(EC_WORD_PLANS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FLOWERS)] = { .text = gEasyChatWord_Flowers, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_PLUSH_DOLL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HERO)] = { .text = gEasyChatWord_Hero, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_RPG), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NAP)] = { .text = gEasyChatWord_Nap, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHOPPING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEROINE)] = { .text = gEasyChatWord_Heroine, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_SOFTWARE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FASHION)] = { .text = gEasyChatWord_Fashion, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_SONG), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ADVENTURE)] = { .text = gEasyChatWord_Adventure, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_SONGS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BOARD)] = { .text = gEasyChatWord_Board, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_SPECTATOR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BALL)] = { .text = gEasyChatWord_Ball, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_SPORTS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BOOK)] = { .text = gEasyChatWord_Book, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_SWEETS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FESTIVAL)] = { .text = gEasyChatWord_Festival, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOYS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COMICS)] = { .text = gEasyChatWord_Comics, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRAVEL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HOLIDAY)] = { .text = gEasyChatWord_Holiday, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_TREASURE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PLANS)] = { .text = gEasyChatWord_Plans, - .alphabeticalOrder = 51, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRENDY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRENDY)] = { .text = gEasyChatWord_Trendy, - .alphabeticalOrder = 52, + .alphabeticalOrder = EC_INDEX(EC_WORD_VACATION), .enabled = TRUE, }, [EC_INDEX(EC_WORD_VACATION)] = { .text = gEasyChatWord_Vacation, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_VIEWING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOOK)] = { .text = gEasyChatWord_Look, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_WALK), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_lifestyle.h b/src/data/easy_chat/easy_chat_group_lifestyle.h index 5819d0f2e4..264f4dde90 100755 --- a/src/data/easy_chat/easy_chat_group_lifestyle.h +++ b/src/data/easy_chat/easy_chat_group_lifestyle.h @@ -48,271 +48,271 @@ const struct EasyChatWordInfo gEasyChatGroup_Lifestyle[] = { [EC_INDEX(EC_WORD_CHORES)] = { .text = gEasyChatWord_Chores, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_ALLOWANCE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HOME)] = { .text = gEasyChatWord_Home, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_BATH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MONEY)] = { .text = gEasyChatWord_Money, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_CHORES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ALLOWANCE)] = { .text = gEasyChatWord_Allowance, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_CLASS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BATH)] = { .text = gEasyChatWord_Bath, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_COMMEMORATE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CONVERSATION)] = { .text = gEasyChatWord_Conversation, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_CONVERSATION), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SCHOOL)] = { .text = gEasyChatWord_School, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_DEPT_STORE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COMMEMORATE)] = { .text = gEasyChatWord_Commemorate, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_DIGITAL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HABIT)] = { .text = gEasyChatWord_Habit, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_DREAM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GROUP)] = { .text = gEasyChatWord_Group, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_EVENT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WORD)] = { .text = gEasyChatWord_Word, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_GROUP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STORE)] = { .text = gEasyChatWord_Store, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_HABIT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SERVICE)] = { .text = gEasyChatWord_Service, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_HOME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WORK)] = { .text = gEasyChatWord_Work, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_INFORMATION), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SYSTEM)] = { .text = gEasyChatWord_System, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_ITEM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRAIN)] = { .text = gEasyChatWord_Train, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_KINDERGARTEN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CLASS)] = { .text = gEasyChatWord_Class, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_LESSONS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LESSONS)] = { .text = gEasyChatWord_Lessons, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_LETTER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_INFORMATION)] = { .text = gEasyChatWord_Information, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_LIFE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LIVING)] = { .text = gEasyChatWord_Living, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_LIVING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TEACHER)] = { .text = gEasyChatWord_Teacher, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_MACHINE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOURNAMENT)] = { .text = gEasyChatWord_Tournament, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_MAIL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LETTER)] = { .text = gEasyChatWord_Letter, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_MESSAGE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EVENT)] = { .text = gEasyChatWord_Event, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_MONEY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DIGITAL)] = { .text = gEasyChatWord_Digital, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_NAME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TEST)] = { .text = gEasyChatWord_Test, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_NEWS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DEPT_STORE)] = { .text = gEasyChatWord_DeptStore, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_PARTY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TELEVISION)] = { .text = gEasyChatWord_Television, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_PHONE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PHONE)] = { .text = gEasyChatWord_Phone, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_POPULAR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ITEM)] = { .text = gEasyChatWord_Item, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_PROMISE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NAME)] = { .text = gEasyChatWord_Name, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_RADIO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NEWS)] = { .text = gEasyChatWord_News, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_RENTAL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_POPULAR)] = { .text = gEasyChatWord_Popular, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_SCHOOL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PARTY)] = { .text = gEasyChatWord_Party, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_SERVICE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STUDY)] = { .text = gEasyChatWord_Study, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_STORE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MACHINE)] = { .text = gEasyChatWord_Machine, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_STUDY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MAIL)] = { .text = gEasyChatWord_Mail, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_SYSTEM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MESSAGE)] = { .text = gEasyChatWord_Message, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_TEACHER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PROMISE)] = { .text = gEasyChatWord_Promise, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_TELEVISION), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DREAM)] = { .text = gEasyChatWord_Dream, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_TEST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_KINDERGARTEN)] = { .text = gEasyChatWord_Kindergarten, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOURNAMENT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LIFE)] = { .text = gEasyChatWord_Life, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRAIN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RADIO)] = { .text = gEasyChatWord_Radio, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_WORD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RENTAL)] = { .text = gEasyChatWord_Rental, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_WORK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WORLD)] = { .text = gEasyChatWord_World, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_WORLD), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_misc.h b/src/data/easy_chat/easy_chat_group_misc.h index aa8f84406d..187c86fc7a 100755 --- a/src/data/easy_chat/easy_chat_group_misc.h +++ b/src/data/easy_chat/easy_chat_group_misc.h @@ -45,253 +45,253 @@ const struct EasyChatWordInfo gEasyChatGroup_Misc[] = { [EC_INDEX(EC_WORD_HIGHS)] = { .text = gEasyChatWord_Highs, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_ABOVE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOWS)] = { .text = gEasyChatWord_Lows, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_AM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UM)] = { .text = gEasyChatWord_Um, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_AWAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_REAR)] = { .text = gEasyChatWord_Rear, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_BACK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THINGS)] = { .text = gEasyChatWord_Things, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_BELOW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THING)] = { .text = gEasyChatWord_Thing, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_BESIDE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BELOW)] = { .text = gEasyChatWord_Below, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_CHOICE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ABOVE)] = { .text = gEasyChatWord_Above, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_CONFUSED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BACK)] = { .text = gEasyChatWord_Back, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_DEEP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HIGH)] = { .text = gEasyChatWord_High, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_DOWN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HERE)] = { .text = gEasyChatWord_Here, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_EVERY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_INSIDE)] = { .text = gEasyChatWord_Inside, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_FAR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OUTSIDE)] = { .text = gEasyChatWord_Outside, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_FRONT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BESIDE)] = { .text = gEasyChatWord_Beside, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_HERE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THIS_IS_IT_EXCL)] = { .text = gEasyChatWord_ThisIsItExcl, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_HIGH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THIS)] = { .text = gEasyChatWord_This, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_HIGHS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EVERY)] = { .text = gEasyChatWord_Every, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_INSIDE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THESE)] = { .text = gEasyChatWord_These, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_LEFT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THESE_WERE)] = { .text = gEasyChatWord_TheseWere, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOWS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DOWN)] = { .text = gEasyChatWord_Down, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_NEAR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THAT)] = { .text = gEasyChatWord_That, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_OPPOSITE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THOSE_ARE)] = { .text = gEasyChatWord_ThoseAre, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_OUTSIDE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THOSE_WERE)] = { .text = gEasyChatWord_ThoseWere, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_REAR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THAT_S_IT_EXCL)] = { .text = gEasyChatWord_ThatsItExcl, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_RIGHT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AM)] = { .text = gEasyChatWord_Am, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHALLOW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THAT_WAS)] = { .text = gEasyChatWord_ThatWas, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_THAT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FRONT)] = { .text = gEasyChatWord_Front, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_THAT_WAS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UP)] = { .text = gEasyChatWord_Up, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_THAT_S_IT_EXCL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CHOICE)] = { .text = gEasyChatWord_Choice, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_THESE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FAR)] = { .text = gEasyChatWord_Far, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_THESE_WERE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AWAY)] = { .text = gEasyChatWord_Away, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_THING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NEAR)] = { .text = gEasyChatWord_Near, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_THINGS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHERE)] = { .text = gEasyChatWord_Where, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_THIS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHEN)] = { .text = gEasyChatWord_When, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_THIS_IS_IT_EXCL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHAT)] = { .text = gEasyChatWord_What, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_THOSE_ARE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DEEP)] = { .text = gEasyChatWord_Deep, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_THOSE_WERE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHALLOW)] = { .text = gEasyChatWord_Shallow, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_UM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHY)] = { .text = gEasyChatWord_Why, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_UP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CONFUSED)] = { .text = gEasyChatWord_Confused, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHAT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OPPOSITE)] = { .text = gEasyChatWord_Opposite, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHEN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LEFT)] = { .text = gEasyChatWord_Left, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHERE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RIGHT)] = { .text = gEasyChatWord_Right, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHY), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_people.h b/src/data/easy_chat/easy_chat_group_people.h index 2ddd3c9d9c..fb73c8651a 100755 --- a/src/data/easy_chat/easy_chat_group_people.h +++ b/src/data/easy_chat/easy_chat_group_people.h @@ -78,451 +78,451 @@ const struct EasyChatWordInfo gEasyChatGroup_People[] = { [EC_INDEX(EC_WORD_OPPONENT)] = { .text = gEasyChatWord_Opponent, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_ADULT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_I)] = { .text = gEasyChatWord_I, - .alphabeticalOrder = 52, + .alphabeticalOrder = EC_INDEX(EC_WORD_ALLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YOU)] = { .text = gEasyChatWord_You, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_AREN_T), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YOURS)] = { .text = gEasyChatWord_Yours, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_AUNT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SON)] = { .text = gEasyChatWord_Son, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_BABE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YOUR)] = { .text = gEasyChatWord_Your, - .alphabeticalOrder = 62, + .alphabeticalOrder = EC_INDEX(EC_WORD_BEEN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YOU_RE)] = { .text = gEasyChatWord_Youre, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_BOY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YOU_VE)] = { .text = gEasyChatWord_Youve, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_BROTHER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MOTHER)] = { .text = gEasyChatWord_Mother, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_CHILDREN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GRANDFATHER)] = { .text = gEasyChatWord_Grandfather, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_DAUGHTER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UNCLE)] = { .text = gEasyChatWord_Uncle, - .alphabeticalOrder = 54, + .alphabeticalOrder = EC_INDEX(EC_WORD_DUDE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FATHER)] = { .text = gEasyChatWord_Father, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_FAMILY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BOY)] = { .text = gEasyChatWord_Boy, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_FATHER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ADULT)] = { .text = gEasyChatWord_Adult, - .alphabeticalOrder = 51, + .alphabeticalOrder = EC_INDEX(EC_WORD_FRIEND), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BROTHER)] = { .text = gEasyChatWord_Brother, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_GIRL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SISTER)] = { .text = gEasyChatWord_Sister, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_GRANDFATHER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GRANDMOTHER)] = { .text = gEasyChatWord_Grandmother, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_GRANDMOTHER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AUNT)] = { .text = gEasyChatWord_Aunt, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_HE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PARENT)] = { .text = gEasyChatWord_Parent, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_HE_S), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MAN)] = { .text = gEasyChatWord_Man, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_HER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ME)] = { .text = gEasyChatWord_Me, - .alphabeticalOrder = 72, + .alphabeticalOrder = EC_INDEX(EC_WORD_HERS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GIRL)] = { .text = gEasyChatWord_Girl, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_HIM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BABE)] = { .text = gEasyChatWord_Babe, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_HIS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FAMILY)] = { .text = gEasyChatWord_Family, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_I), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HER)] = { .text = gEasyChatWord_Her, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_I_AM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HIM)] = { .text = gEasyChatWord_Him, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_I_WAS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HE)] = { .text = gEasyChatWord_He, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_I_VE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PLACE)] = { .text = gEasyChatWord_Place, - .alphabeticalOrder = 49, + .alphabeticalOrder = EC_INDEX(EC_WORD_IT_S), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DAUGHTER)] = { .text = gEasyChatWord_Daughter, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_KID), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HIS)] = { .text = gEasyChatWord_His, - .alphabeticalOrder = 50, + .alphabeticalOrder = EC_INDEX(EC_WORD_LADY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HE_S)] = { .text = gEasyChatWord_Hes, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_MAN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AREN_T)] = { .text = gEasyChatWord_Arent, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_ME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SIBLINGS)] = { .text = gEasyChatWord_Siblings, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_MOTHER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_KID)] = { .text = gEasyChatWord_Kid, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_MR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CHILDREN)] = { .text = gEasyChatWord_Children, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_MRS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MR)] = { .text = gEasyChatWord_Mr, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_MY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MRS)] = { .text = gEasyChatWord_Mrs, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_MYSELF), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MYSELF)] = { .text = gEasyChatWord_Myself, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_OPPONENT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_I_WAS)] = { .text = gEasyChatWord_IWas, - .alphabeticalOrder = 64, + .alphabeticalOrder = EC_INDEX(EC_WORD_OUR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TO_ME)] = { .text = gEasyChatWord_ToMe, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_PARENT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MY)] = { .text = gEasyChatWord_My, - .alphabeticalOrder = 53, + .alphabeticalOrder = EC_INDEX(EC_WORD_PERSON), .enabled = TRUE, }, [EC_INDEX(EC_WORD_I_AM)] = { .text = gEasyChatWord_IAm, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_PLACE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_I_VE)] = { .text = gEasyChatWord_Ive, - .alphabeticalOrder = 66, + .alphabeticalOrder = EC_INDEX(EC_WORD_RIVAL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHO)] = { .text = gEasyChatWord_Who, - .alphabeticalOrder = 69, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SOMEONE)] = { .text = gEasyChatWord_Someone, - .alphabeticalOrder = 73, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHE_IS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHO_WAS)] = { .text = gEasyChatWord_WhoWas, - .alphabeticalOrder = 70, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHE_WAS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TO_WHOM)] = { .text = gEasyChatWord_ToWhom, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_SIBLINGS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHOSE)] = { .text = gEasyChatWord_Whose, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_SISTER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHO_IS)] = { .text = gEasyChatWord_WhoIs, - .alphabeticalOrder = 74, + .alphabeticalOrder = EC_INDEX(EC_WORD_SOME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IT_S)] = { .text = gEasyChatWord_Its, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_SOMEONE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LADY)] = { .text = gEasyChatWord_Lady, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_SON), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FRIEND)] = { .text = gEasyChatWord_Friend, - .alphabeticalOrder = 58, + .alphabeticalOrder = EC_INDEX(EC_WORD_THEIR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ALLY)] = { .text = gEasyChatWord_Ally, - .alphabeticalOrder = 55, + .alphabeticalOrder = EC_INDEX(EC_WORD_THEY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PERSON)] = { .text = gEasyChatWord_Person, - .alphabeticalOrder = 56, + .alphabeticalOrder = EC_INDEX(EC_WORD_THEY_WERE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DUDE)] = { .text = gEasyChatWord_Dude, - .alphabeticalOrder = 59, + .alphabeticalOrder = EC_INDEX(EC_WORD_THEY_RE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THEY)] = { .text = gEasyChatWord_They, - .alphabeticalOrder = 60, + .alphabeticalOrder = EC_INDEX(EC_WORD_THEY_VE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THEY_WERE)] = { .text = gEasyChatWord_TheyWere, - .alphabeticalOrder = 71, + .alphabeticalOrder = EC_INDEX(EC_WORD_TO_HER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TO_THEM)] = { .text = gEasyChatWord_ToThem, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_TO_ME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THEIR)] = { .text = gEasyChatWord_Their, - .alphabeticalOrder = 57, + .alphabeticalOrder = EC_INDEX(EC_WORD_TO_THEM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THEY_RE)] = { .text = gEasyChatWord_Theyre, - .alphabeticalOrder = 63, + .alphabeticalOrder = EC_INDEX(EC_WORD_TO_US), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THEY_VE)] = { .text = gEasyChatWord_Theyve, - .alphabeticalOrder = 46, + .alphabeticalOrder = EC_INDEX(EC_WORD_TO_WHOM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WE)] = { .text = gEasyChatWord_We, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_UNCLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BEEN)] = { .text = gEasyChatWord_Been, - .alphabeticalOrder = 61, + .alphabeticalOrder = EC_INDEX(EC_WORD_WE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TO_US)] = { .text = gEasyChatWord_ToUs, - .alphabeticalOrder = 65, + .alphabeticalOrder = EC_INDEX(EC_WORD_WE_RE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OUR)] = { .text = gEasyChatWord_Our, - .alphabeticalOrder = 67, + .alphabeticalOrder = EC_INDEX(EC_WORD_WE_VE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WE_RE)] = { .text = gEasyChatWord_WeRe, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RIVAL)] = { .text = gEasyChatWord_Rival, - .alphabeticalOrder = 48, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHO_IS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WE_VE)] = { .text = gEasyChatWord_Weve, - .alphabeticalOrder = 45, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHO_WAS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WOMAN)] = { .text = gEasyChatWord_Woman, - .alphabeticalOrder = 47, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHOSE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHE)] = { .text = gEasyChatWord_She, - .alphabeticalOrder = 68, + .alphabeticalOrder = EC_INDEX(EC_WORD_WOMAN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHE_WAS)] = { .text = gEasyChatWord_SheWas, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_YOU), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TO_HER)] = { .text = gEasyChatWord_ToHer, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_YOU_RE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HERS)] = { .text = gEasyChatWord_Hers, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_YOU_VE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHE_IS)] = { .text = gEasyChatWord_SheIs, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_YOUR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SOME)] = { .text = gEasyChatWord_Some, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_YOURS), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_speech.h b/src/data/easy_chat/easy_chat_group_speech.h index a0874a33a5..c88aedc39e 100755 --- a/src/data/easy_chat/easy_chat_group_speech.h +++ b/src/data/easy_chat/easy_chat_group_speech.h @@ -63,361 +63,361 @@ const struct EasyChatWordInfo gEasyChatGroup_Speech[] = { [EC_INDEX(EC_WORD_LISTEN)] = { .text = gEasyChatWord_Listen, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_A_LITTLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NOT_VERY)] = { .text = gEasyChatWord_NotVery, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_A_LOT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MEAN)] = { .text = gEasyChatWord_Mean, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_A_TINY_BIT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LIE)] = { .text = gEasyChatWord_Lie, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_ABSOLUTELY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LAY)] = { .text = gEasyChatWord_Lay, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_ALSO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RECOMMEND)] = { .text = gEasyChatWord_Recommend, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_ALTHOUGH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NITWIT)] = { .text = gEasyChatWord_Nitwit, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_AND), .enabled = TRUE, }, [EC_INDEX(EC_WORD_QUITE)] = { .text = gEasyChatWord_Quite, - .alphabeticalOrder = 57, + .alphabeticalOrder = EC_INDEX(EC_WORD_ANY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FROM)] = { .text = gEasyChatWord_From, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_AROUND), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FEELING)] = { .text = gEasyChatWord_Feeling, - .alphabeticalOrder = 49, + .alphabeticalOrder = EC_INDEX(EC_WORD_AS_IF), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BUT)] = { .text = gEasyChatWord_But, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_AS_MUCH_AS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HOWEVER)] = { .text = gEasyChatWord_However, - .alphabeticalOrder = 52, + .alphabeticalOrder = EC_INDEX(EC_WORD_AWFULLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CASE)] = { .text = gEasyChatWord_Case, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_BUT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THE)] = { .text = gEasyChatWord_The, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_CASE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MISS)] = { .text = gEasyChatWord_Miss, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_ENOUGH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HOW)] = { .text = gEasyChatWord_How, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_EVEN_SO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HIT)] = { .text = gEasyChatWord_Hit, - .alphabeticalOrder = 59, + .alphabeticalOrder = EC_INDEX(EC_WORD_FANTASTIC), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ENOUGH)] = { .text = gEasyChatWord_Enough, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_FEELING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_A_LOT)] = { .text = gEasyChatWord_ALot, - .alphabeticalOrder = 56, + .alphabeticalOrder = EC_INDEX(EC_WORD_FINALLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_A_LITTLE)] = { .text = gEasyChatWord_ALittle, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_FOR_NOW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ABSOLUTELY)] = { .text = gEasyChatWord_Absolutely, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_FROM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AND)] = { .text = gEasyChatWord_And, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_HIT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ONLY)] = { .text = gEasyChatWord_Only, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_HOW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AROUND)] = { .text = gEasyChatWord_Around, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_HOWEVER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PROBABLY)] = { .text = gEasyChatWord_Probably, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_IF), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IF)] = { .text = gEasyChatWord_If, - .alphabeticalOrder = 58, + .alphabeticalOrder = EC_INDEX(EC_WORD_INSTEAD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_VERY)] = { .text = gEasyChatWord_Very, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_JOKING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_A_TINY_BIT)] = { .text = gEasyChatWord_ATinyBit, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_JUST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WILD)] = { .text = gEasyChatWord_Wild, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_LAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THAT_S)] = { .text = gEasyChatWord_Thats, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_LIE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_JUST)] = { .text = gEasyChatWord_Just, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_LISTEN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EVEN_SO)] = { .text = gEasyChatWord_EvenSo, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_MEAN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MUST_BE)] = { .text = gEasyChatWord_MustBe, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_MISS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NATURALLY)] = { .text = gEasyChatWord_Naturally, - .alphabeticalOrder = 53, + .alphabeticalOrder = EC_INDEX(EC_WORD_MODE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FOR_NOW)] = { .text = gEasyChatWord_ForNow, - .alphabeticalOrder = 50, + .alphabeticalOrder = EC_INDEX(EC_WORD_MOOD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UNDERSTOOD)] = { .text = gEasyChatWord_Understood, - .alphabeticalOrder = 54, + .alphabeticalOrder = EC_INDEX(EC_WORD_MORE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_JOKING)] = { .text = gEasyChatWord_Joking, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_MUST_BE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_READY)] = { .text = gEasyChatWord_Ready, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_NATURALLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SOMETHING)] = { .text = gEasyChatWord_Something, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_NITWIT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SOMEHOW)] = { .text = gEasyChatWord_Somehow, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_NOT_VERY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ALTHOUGH)] = { .text = gEasyChatWord_Although, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_ONLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ALSO)] = { .text = gEasyChatWord_Also, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_PERFECT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PERFECT)] = { .text = gEasyChatWord_Perfect, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_PROBABLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AS_MUCH_AS)] = { .text = gEasyChatWord_AsMuchAs, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_QUITE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_REALLY)] = { .text = gEasyChatWord_Really, - .alphabeticalOrder = 51, + .alphabeticalOrder = EC_INDEX(EC_WORD_RATHER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRULY)] = { .text = gEasyChatWord_Truly, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_READY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SERIOUSLY)] = { .text = gEasyChatWord_Seriously, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_REALLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOTALLY)] = { .text = gEasyChatWord_Totally, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_RECOMMEND), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UNTIL)] = { .text = gEasyChatWord_Until, - .alphabeticalOrder = 46, + .alphabeticalOrder = EC_INDEX(EC_WORD_SERIOUSLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AS_IF)] = { .text = gEasyChatWord_AsIf, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_SOMEHOW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MOOD)] = { .text = gEasyChatWord_Mood, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_SOMETHING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RATHER)] = { .text = gEasyChatWord_Rather, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_THAT_S), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AWFULLY)] = { .text = gEasyChatWord_Awfully, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_THE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MODE)] = { .text = gEasyChatWord_Mode, - .alphabeticalOrder = 55, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOO_LATE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MORE)] = { .text = gEasyChatWord_More, - .alphabeticalOrder = 47, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOTALLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOO_LATE)] = { .text = gEasyChatWord_TooLate, - .alphabeticalOrder = 45, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRULY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FINALLY)] = { .text = gEasyChatWord_Finally, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_UNDERSTOOD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ANY)] = { .text = gEasyChatWord_Any, - .alphabeticalOrder = 48, + .alphabeticalOrder = EC_INDEX(EC_WORD_UNTIL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_INSTEAD)] = { .text = gEasyChatWord_Instead, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_VERY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FANTASTIC)] = { .text = gEasyChatWord_Fantastic, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_WILD), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_status.h b/src/data/easy_chat/easy_chat_group_status.h index af2292b446..b751fbaf18 100755 --- a/src/data/easy_chat/easy_chat_group_status.h +++ b/src/data/easy_chat/easy_chat_group_status.h @@ -112,655 +112,655 @@ const struct EasyChatWordInfo gEasyChatGroup_Status[] = { [EC_INDEX(EC_WORD_DARK)] = { .text = gEasyChatWord_Dark, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_AIR_LOCK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STENCH)] = { .text = gEasyChatWord_Stench, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_ALT_COLOR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THICK_FAT)] = { .text = gEasyChatWord_ThickFat, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_ARENA_TRAP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RAIN_DISH)] = { .text = gEasyChatWord_RainDish, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_BATTLE_ARMOR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DRIZZLE)] = { .text = gEasyChatWord_Drizzle, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_BEAUTIFUL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ARENA_TRAP)] = { .text = gEasyChatWord_ArenaTrap, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_BEAUTY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_INTIMIDATE)] = { .text = gEasyChatWord_Intimidate, - .alphabeticalOrder = 101, + .alphabeticalOrder = EC_INDEX(EC_WORD_BLAZE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ROCK_HEAD)] = { .text = gEasyChatWord_RockHead, - .alphabeticalOrder = 97, + .alphabeticalOrder = EC_INDEX(EC_WORD_BUG), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COLOR)] = { .text = gEasyChatWord_Color, - .alphabeticalOrder = 106, + .alphabeticalOrder = EC_INDEX(EC_WORD_CHLOROPHYLL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ALT_COLOR)] = { .text = gEasyChatWord_AltColor, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_CLEAR_BODY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ROCK)] = { .text = gEasyChatWord_Rock, - .alphabeticalOrder = 68, + .alphabeticalOrder = EC_INDEX(EC_WORD_CLOUD_NINE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BEAUTIFUL)] = { .text = gEasyChatWord_Beautiful, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_COLOR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BEAUTY)] = { .text = gEasyChatWord_Beauty, - .alphabeticalOrder = 86, + .alphabeticalOrder = EC_INDEX(EC_WORD_COLOR_CHANGE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AIR_LOCK)] = { .text = gEasyChatWord_AirLock, - .alphabeticalOrder = 78, + .alphabeticalOrder = EC_INDEX(EC_WORD_COMPOUNDEYES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PSYCHIC)] = { .text = gEasyChatWord_Psychic, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_COOL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HYPER_CUTTER)] = { .text = gEasyChatWord_HyperCutter, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_COOLNESS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FIGHTING)] = { .text = gEasyChatWord_Fighting, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_CUTE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHADOW_TAG)] = { .text = gEasyChatWord_ShadowTag, - .alphabeticalOrder = 99, + .alphabeticalOrder = EC_INDEX(EC_WORD_CUTE_CHARM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SMART)] = { .text = gEasyChatWord_Smart, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_CUTENESS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SMARTNESS)] = { .text = gEasyChatWord_Smartness, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_DAMP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SPEED_BOOST)] = { .text = gEasyChatWord_SpeedBoost, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_DARK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COOL)] = { .text = gEasyChatWord_Cool, - .alphabeticalOrder = 62, + .alphabeticalOrder = EC_INDEX(EC_WORD_DRAGON), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COOLNESS)] = { .text = gEasyChatWord_Coolness, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_DRIZZLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BATTLE_ARMOR)] = { .text = gEasyChatWord_BattleArmor, - .alphabeticalOrder = 76, + .alphabeticalOrder = EC_INDEX(EC_WORD_DROUGHT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CUTE)] = { .text = gEasyChatWord_Cute, - .alphabeticalOrder = 72, + .alphabeticalOrder = EC_INDEX(EC_WORD_EARLY_BIRD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CUTENESS)] = { .text = gEasyChatWord_Cuteness, - .alphabeticalOrder = 88, + .alphabeticalOrder = EC_INDEX(EC_WORD_EFFECT_SPORE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STURDY)] = { .text = gEasyChatWord_Sturdy, - .alphabeticalOrder = 57, + .alphabeticalOrder = EC_INDEX(EC_WORD_ELECTRIC), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SUCTION_CUPS)] = { .text = gEasyChatWord_SuctionCups, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_FIGHTING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GRASS)] = { .text = gEasyChatWord_Grass, - .alphabeticalOrder = 90, + .alphabeticalOrder = EC_INDEX(EC_WORD_FIRE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CLEAR_BODY)] = { .text = gEasyChatWord_ClearBody, - .alphabeticalOrder = 91, + .alphabeticalOrder = EC_INDEX(EC_WORD_FLAME_BODY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TORRENT)] = { .text = gEasyChatWord_Torrent, - .alphabeticalOrder = 104, + .alphabeticalOrder = EC_INDEX(EC_WORD_FLASH_FIRE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GHOST)] = { .text = gEasyChatWord_Ghost, - .alphabeticalOrder = 75, + .alphabeticalOrder = EC_INDEX(EC_WORD_FLYING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ICE)] = { .text = gEasyChatWord_Ice, - .alphabeticalOrder = 58, + .alphabeticalOrder = EC_INDEX(EC_WORD_FORECAST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GUTS)] = { .text = gEasyChatWord_Guts, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_GHOST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ROUGH_SKIN)] = { .text = gEasyChatWord_RoughSkin, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_GRASS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHELL_ARMOR)] = { .text = gEasyChatWord_ShellArmor, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_GROUND), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NATURAL_CURE)] = { .text = gEasyChatWord_NaturalCure, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_GUTS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DAMP)] = { .text = gEasyChatWord_Damp, - .alphabeticalOrder = 54, + .alphabeticalOrder = EC_INDEX(EC_WORD_HUGE_POWER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GROUND)] = { .text = gEasyChatWord_Ground, - .alphabeticalOrder = 73, + .alphabeticalOrder = EC_INDEX(EC_WORD_HUSTLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LIMBER)] = { .text = gEasyChatWord_Limber, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_HYPER_CUTTER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MAGNET_PULL)] = { .text = gEasyChatWord_MagnetPull, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_ICE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHITE_SMOKE)] = { .text = gEasyChatWord_WhiteSmoke, - .alphabeticalOrder = 71, + .alphabeticalOrder = EC_INDEX(EC_WORD_ILLUMINATE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SYNCHRONIZE)] = { .text = gEasyChatWord_Synchronize, - .alphabeticalOrder = 100, + .alphabeticalOrder = EC_INDEX(EC_WORD_IMMUNITY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OVERGROW)] = { .text = gEasyChatWord_Overgrow, - .alphabeticalOrder = 48, + .alphabeticalOrder = EC_INDEX(EC_WORD_INNER_FOCUS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SWIFT_SWIM)] = { .text = gEasyChatWord_SwiftSwim, - .alphabeticalOrder = 81, + .alphabeticalOrder = EC_INDEX(EC_WORD_INSOMNIA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SAND_STREAM)] = { .text = gEasyChatWord_SandStream, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_INTIMIDATE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SAND_VEIL)] = { .text = gEasyChatWord_SandVeil, - .alphabeticalOrder = 47, + .alphabeticalOrder = EC_INDEX(EC_WORD_KEEN_EYE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_KEEN_EYE)] = { .text = gEasyChatWord_KeenEye, - .alphabeticalOrder = 82, + .alphabeticalOrder = EC_INDEX(EC_WORD_LEVITATE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_INNER_FOCUS)] = { .text = gEasyChatWord_InnerFocus, - .alphabeticalOrder = 77, + .alphabeticalOrder = EC_INDEX(EC_WORD_LIGHTNINGROD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STATIC)] = { .text = gEasyChatWord_Static, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_LIMBER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TYPE)] = { .text = gEasyChatWord_Type, - .alphabeticalOrder = 85, + .alphabeticalOrder = EC_INDEX(EC_WORD_LIQUID_OOZE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOUGH)] = { .text = gEasyChatWord_Tough, - .alphabeticalOrder = 94, + .alphabeticalOrder = EC_INDEX(EC_WORD_MAGMA_ARMOR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOUGHNESS)] = { .text = gEasyChatWord_Toughness, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_MAGNET_PULL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHED_SKIN)] = { .text = gEasyChatWord_ShedSkin, - .alphabeticalOrder = 79, + .alphabeticalOrder = EC_INDEX(EC_WORD_MARVEL_SCALE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HUGE_POWER)] = { .text = gEasyChatWord_HugePower, - .alphabeticalOrder = 92, + .alphabeticalOrder = EC_INDEX(EC_WORD_MINUS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_VOLT_ABSORB)] = { .text = gEasyChatWord_VoltAbsorb, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_NATURAL_CURE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WATER_ABSORB)] = { .text = gEasyChatWord_WaterAbsorb, - .alphabeticalOrder = 69, + .alphabeticalOrder = EC_INDEX(EC_WORD_NORMAL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ELECTRIC)] = { .text = gEasyChatWord_Electric, - .alphabeticalOrder = 64, + .alphabeticalOrder = EC_INDEX(EC_WORD_OBLIVIOUS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FORECAST)] = { .text = gEasyChatWord_Forecast, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_OVERGROW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SERENE_GRACE)] = { .text = gEasyChatWord_SereneGrace, - .alphabeticalOrder = 93, + .alphabeticalOrder = EC_INDEX(EC_WORD_OWN_TEMPO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_POISON)] = { .text = gEasyChatWord_Poison, - .alphabeticalOrder = 103, + .alphabeticalOrder = EC_INDEX(EC_WORD_PATTERN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_POISON_POINT)] = { .text = gEasyChatWord_PoisonPoint, - .alphabeticalOrder = 102, + .alphabeticalOrder = EC_INDEX(EC_WORD_PICKUP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DRAGON)] = { .text = gEasyChatWord_Dragon, - .alphabeticalOrder = 89, + .alphabeticalOrder = EC_INDEX(EC_WORD_PKRS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRACE)] = { .text = gEasyChatWord_Trace, - .alphabeticalOrder = 83, + .alphabeticalOrder = EC_INDEX(EC_WORD_PLUS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OBLIVIOUS)] = { .text = gEasyChatWord_Oblivious, - .alphabeticalOrder = 60, + .alphabeticalOrder = EC_INDEX(EC_WORD_POISON), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRUANT)] = { .text = gEasyChatWord_Truant, - .alphabeticalOrder = 61, + .alphabeticalOrder = EC_INDEX(EC_WORD_POISON_POINT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RUN_AWAY)] = { .text = gEasyChatWord_RunAway, - .alphabeticalOrder = 84, + .alphabeticalOrder = EC_INDEX(EC_WORD_PRESSURE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STICKY_HOLD)] = { .text = gEasyChatWord_StickyHold, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_PSYCHIC), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CLOUD_NINE)] = { .text = gEasyChatWord_CloudNine, - .alphabeticalOrder = 107, + .alphabeticalOrder = EC_INDEX(EC_WORD_PURE_POWER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NORMAL)] = { .text = gEasyChatWord_Normal, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_RAIN_DISH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STEEL)] = { .text = gEasyChatWord_Steel, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_ROCK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ILLUMINATE)] = { .text = gEasyChatWord_Illuminate, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_ROCK_HEAD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EARLY_BIRD)] = { .text = gEasyChatWord_EarlyBird, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_ROUGH_SKIN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HUSTLE)] = { .text = gEasyChatWord_Hustle, - .alphabeticalOrder = 66, + .alphabeticalOrder = EC_INDEX(EC_WORD_RUN_AWAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHINE)] = { .text = gEasyChatWord_Shine, - .alphabeticalOrder = 45, + .alphabeticalOrder = EC_INDEX(EC_WORD_SAND_STREAM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FLYING)] = { .text = gEasyChatWord_Flying, - .alphabeticalOrder = 46, + .alphabeticalOrder = EC_INDEX(EC_WORD_SAND_VEIL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DROUGHT)] = { .text = gEasyChatWord_Drought, - .alphabeticalOrder = 59, + .alphabeticalOrder = EC_INDEX(EC_WORD_SERENE_GRACE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LIGHTNINGROD)] = { .text = gEasyChatWord_Lightningrod, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHADOW_TAG), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COMPOUNDEYES)] = { .text = gEasyChatWord_Compoundeyes, - .alphabeticalOrder = 53, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHED_SKIN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MARVEL_SCALE)] = { .text = gEasyChatWord_MarvelScale, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHELL_ARMOR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WONDER_GUARD)] = { .text = gEasyChatWord_WonderGuard, - .alphabeticalOrder = 108, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHIELD_DUST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_INSOMNIA)] = { .text = gEasyChatWord_Insomnia, - .alphabeticalOrder = 74, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHINE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LEVITATE)] = { .text = gEasyChatWord_Levitate, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_SMART), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PLUS)] = { .text = gEasyChatWord_Plus, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_SMARTNESS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PRESSURE)] = { .text = gEasyChatWord_Pressure, - .alphabeticalOrder = 87, + .alphabeticalOrder = EC_INDEX(EC_WORD_SOUNDPROOF), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LIQUID_OOZE)] = { .text = gEasyChatWord_LiquidOoze, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_SPEED_BOOST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COLOR_CHANGE)] = { .text = gEasyChatWord_ColorChange, - .alphabeticalOrder = 49, + .alphabeticalOrder = EC_INDEX(EC_WORD_STATIC), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SOUNDPROOF)] = { .text = gEasyChatWord_Soundproof, - .alphabeticalOrder = 70, + .alphabeticalOrder = EC_INDEX(EC_WORD_STEEL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EFFECT_SPORE)] = { .text = gEasyChatWord_EffectSpore, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_STENCH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PKRS)] = { .text = gEasyChatWord_Pkrs, - .alphabeticalOrder = 67, + .alphabeticalOrder = EC_INDEX(EC_WORD_STICKY_HOLD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FIRE)] = { .text = gEasyChatWord_Fire, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_STURDY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FLAME_BODY)] = { .text = gEasyChatWord_FlameBody, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_SUCTION_CUPS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MINUS)] = { .text = gEasyChatWord_Minus, - .alphabeticalOrder = 98, + .alphabeticalOrder = EC_INDEX(EC_WORD_SWARM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OWN_TEMPO)] = { .text = gEasyChatWord_OwnTempo, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_SWIFT_SWIM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MAGMA_ARMOR)] = { .text = gEasyChatWord_MagmaArmor, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_SYNCHRONIZE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WATER)] = { .text = gEasyChatWord_Water, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_THICK_FAT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WATER_VEIL)] = { .text = gEasyChatWord_WaterVeil, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_TORRENT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BUG)] = { .text = gEasyChatWord_Bug, - .alphabeticalOrder = 51, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOUGH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SWARM)] = { .text = gEasyChatWord_Swarm, - .alphabeticalOrder = 52, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOUGHNESS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CUTE_CHARM)] = { .text = gEasyChatWord_CuteCharm, - .alphabeticalOrder = 63, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRACE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_IMMUNITY)] = { .text = gEasyChatWord_Immunity, - .alphabeticalOrder = 65, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRUANT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BLAZE)] = { .text = gEasyChatWord_Blaze, - .alphabeticalOrder = 50, + .alphabeticalOrder = EC_INDEX(EC_WORD_TYPE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PICKUP)] = { .text = gEasyChatWord_Pickup, - .alphabeticalOrder = 105, + .alphabeticalOrder = EC_INDEX(EC_WORD_VITAL_SPIRIT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PATTERN)] = { .text = gEasyChatWord_Pattern, - .alphabeticalOrder = 55, + .alphabeticalOrder = EC_INDEX(EC_WORD_VOLT_ABSORB), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FLASH_FIRE)] = { .text = gEasyChatWord_FlashFire, - .alphabeticalOrder = 95, + .alphabeticalOrder = EC_INDEX(EC_WORD_WATER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_VITAL_SPIRIT)] = { .text = gEasyChatWord_VitalSpirit, - .alphabeticalOrder = 56, + .alphabeticalOrder = EC_INDEX(EC_WORD_WATER_ABSORB), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CHLOROPHYLL)] = { .text = gEasyChatWord_Chlorophyll, - .alphabeticalOrder = 96, + .alphabeticalOrder = EC_INDEX(EC_WORD_WATER_VEIL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_PURE_POWER)] = { .text = gEasyChatWord_PurePower, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHITE_SMOKE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHIELD_DUST)] = { .text = gEasyChatWord_ShieldDust, - .alphabeticalOrder = 80, + .alphabeticalOrder = EC_INDEX(EC_WORD_WONDER_GUARD), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_time.h b/src/data/easy_chat/easy_chat_group_time.h index 061abffd49..e7646f4fa7 100755 --- a/src/data/easy_chat/easy_chat_group_time.h +++ b/src/data/easy_chat/easy_chat_group_time.h @@ -48,271 +48,271 @@ const struct EasyChatWordInfo gEasyChatGroup_Time[] = { [EC_INDEX(EC_WORD_FALL)] = { .text = gEasyChatWord_Fall, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_AGE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MORNING)] = { .text = gEasyChatWord_Morning, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_ALMOST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TOMORROW)] = { .text = gEasyChatWord_Tomorrow, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_ALWAYS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LAST)] = { .text = gEasyChatWord_Last, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_ANOTHER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DAY)] = { .text = gEasyChatWord_Day, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_BEGINNING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SOMETIME)] = { .text = gEasyChatWord_Sometime, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_CURRENT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ALWAYS)] = { .text = gEasyChatWord_Always, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_DAILY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CURRENT)] = { .text = gEasyChatWord_Current, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_DAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FOREVER)] = { .text = gEasyChatWord_Forever, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_DAYS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DAYS)] = { .text = gEasyChatWord_Days, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_DAYTIME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_END)] = { .text = gEasyChatWord_End, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_EARLIER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TUESDAY)] = { .text = gEasyChatWord_Tuesday, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_END), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YESTERDAY)] = { .text = gEasyChatWord_Yesterday, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_FALL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TODAY)] = { .text = gEasyChatWord_Today, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_FINAL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FRIDAY)] = { .text = gEasyChatWord_Friday, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_FINISH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MONDAY)] = { .text = gEasyChatWord_Monday, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_FOREVER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LATER)] = { .text = gEasyChatWord_Later, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_FRIDAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EARLIER)] = { .text = gEasyChatWord_Earlier, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_LAST), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ANOTHER)] = { .text = gEasyChatWord_Another, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_LATER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TIME)] = { .text = gEasyChatWord_Time, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_MONDAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FINISH)] = { .text = gEasyChatWord_Finish, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_MONTH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WEDNESDAY)] = { .text = gEasyChatWord_Wednesday, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_MORNING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SOON)] = { .text = gEasyChatWord_Soon, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_NEARLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_START)] = { .text = gEasyChatWord_Start, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_NEXT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MONTH)] = { .text = gEasyChatWord_Month, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_NIGHT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_STOP)] = { .text = gEasyChatWord_Stop, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_NIGHTTIME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NOW)] = { .text = gEasyChatWord_Now, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_NOW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FINAL)] = { .text = gEasyChatWord_Final, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_OLDEN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NEXT)] = { .text = gEasyChatWord_Next, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_SATURDAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AGE)] = { .text = gEasyChatWord_Age, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_SOMETIME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SATURDAY)] = { .text = gEasyChatWord_Saturday, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_SOON), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SUMMER)] = { .text = gEasyChatWord_Summer, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_SPRING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SUNDAY)] = { .text = gEasyChatWord_Sunday, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_START), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BEGINNING)] = { .text = gEasyChatWord_Beginning, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_STOP), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SPRING)] = { .text = gEasyChatWord_Spring, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_SUMMER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DAYTIME)] = { .text = gEasyChatWord_Daytime, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_SUNDAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WINTER)] = { .text = gEasyChatWord_Winter, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_THURSDAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DAILY)] = { .text = gEasyChatWord_Daily, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_TIME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OLDEN)] = { .text = gEasyChatWord_Olden, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_TODAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ALMOST)] = { .text = gEasyChatWord_Almost, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_TOMORROW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NEARLY)] = { .text = gEasyChatWord_Nearly, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_TUESDAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_THURSDAY)] = { .text = gEasyChatWord_Thursday, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_WEDNESDAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NIGHTTIME)] = { .text = gEasyChatWord_Nighttime, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_WEEK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NIGHT)] = { .text = gEasyChatWord_Night, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_WINTER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WEEK)] = { .text = gEasyChatWord_Week, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_YESTERDAY), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_trainer.h b/src/data/easy_chat/easy_chat_group_trainer.h index 87966c9771..a74ac5c3f6 100755 --- a/src/data/easy_chat/easy_chat_group_trainer.h +++ b/src/data/easy_chat/easy_chat_group_trainer.h @@ -30,163 +30,163 @@ const struct EasyChatWordInfo gEasyChatGroup_Trainer[] = { [EC_INDEX(EC_WORD_I_CHOOSE_YOU)] = { .text = gEasyChatWord_IChooseYou, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_BAG), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GOTCHA)] = { .text = gEasyChatWord_Gotcha, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_CENTER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRADE)] = { .text = gEasyChatWord_Trade, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_EGG), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SAPPHIRE)] = { .text = gEasyChatWord_Sapphire, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_EMERALD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EVOLVE)] = { .text = gEasyChatWord_Evolve, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_ENCYCLOPEDIA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ENCYCLOPEDIA)] = { .text = gEasyChatWord_Encyclopedia, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_EVOLVE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NATURE)] = { .text = gEasyChatWord_Nature, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_FLAME), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CENTER)] = { .text = gEasyChatWord_Center, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_GET), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EGG)] = { .text = gEasyChatWord_Egg, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_GOLD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LINK)] = { .text = gEasyChatWord_Link, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_GOTCHA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SP_ABILITY)] = { .text = gEasyChatWord_SpAbility, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_GREEN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TRAINER)] = { .text = gEasyChatWord_Trainer, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_I_CHOOSE_YOU), .enabled = TRUE, }, [EC_INDEX(EC_WORD_VERSION)] = { .text = gEasyChatWord_Version, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_LEAF), .enabled = TRUE, }, [EC_INDEX(EC_WORD_POKENAV)] = { .text = gEasyChatWord_Pokenav, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_LEVEL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_POKEMON)] = { .text = gEasyChatWord_Pokemon, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_LINK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GET)] = { .text = gEasyChatWord_Get, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_NATURE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_POKEDEX)] = { .text = gEasyChatWord_Pokedex, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_POKEDEX), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RUBY)] = { .text = gEasyChatWord_Ruby, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_POKEMON), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LEVEL)] = { .text = gEasyChatWord_Level, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_POKENAV), .enabled = TRUE, }, [EC_INDEX(EC_WORD_RED)] = { .text = gEasyChatWord_Red, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_RED), .enabled = FALSE, }, [EC_INDEX(EC_WORD_GREEN)] = { .text = gEasyChatWord_Green, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_RUBY), .enabled = FALSE, }, [EC_INDEX(EC_WORD_BAG)] = { .text = gEasyChatWord_Bag, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_SAPPHIRE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FLAME)] = { .text = gEasyChatWord_Flame, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_SILVER), .enabled = FALSE, }, [EC_INDEX(EC_WORD_GOLD)] = { .text = gEasyChatWord_Gold, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_SP_ABILITY), .enabled = FALSE, }, [EC_INDEX(EC_WORD_LEAF)] = { .text = gEasyChatWord_Leaf, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRADE), .enabled = FALSE, }, [EC_INDEX(EC_WORD_SILVER)] = { .text = gEasyChatWord_Silver, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_TRAINER), .enabled = FALSE, }, [EC_INDEX(EC_WORD_EMERALD)] = { .text = gEasyChatWord_Emerald, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_VERSION), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_trendy_saying.h b/src/data/easy_chat/easy_chat_group_trendy_saying.h index 938073f7f8..60b5d8c725 100755 --- a/src/data/easy_chat/easy_chat_group_trendy_saying.h +++ b/src/data/easy_chat/easy_chat_group_trendy_saying.h @@ -36,199 +36,199 @@ const struct EasyChatWordInfo gEasyChatGroup_TrendySaying[] = { [EC_INDEX(EC_WORD_KTHX_BYE)] = { .text = gEasyChatWord_KthxBye, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_1_HIT_KO_EXCL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YES_SIR_EXCL)] = { .text = gEasyChatWord_YesSirExcl, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_AVANT_GARDE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AVANT_GARDE)] = { .text = gEasyChatWord_AvantGarde, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_BABY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_COUPLE)] = { .text = gEasyChatWord_Couple, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_BANG), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MUCH_OBLIGED)] = { .text = gEasyChatWord_MuchObliged, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_CANCEL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YEEHAW_EXCL)] = { .text = gEasyChatWord_YeehawExcl, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_COUPLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MEGA)] = { .text = gEasyChatWord_Mega, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_DESTINY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_1_HIT_KO_EXCL)] = { .text = gEasyChatWord_1HitKOExcl, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_FEVER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DESTINY)] = { .text = gEasyChatWord_Destiny, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_FLATTEN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CANCEL)] = { .text = gEasyChatWord_Cancel, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_HAPPENING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NEW)] = { .text = gEasyChatWord_New, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_HASSLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FLATTEN)] = { .text = gEasyChatWord_Flatten, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEART), .enabled = TRUE, }, [EC_INDEX(EC_WORD_KIDDING)] = { .text = gEasyChatWord_Kidding, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_HIP_AND), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOSER)] = { .text = gEasyChatWord_Loser, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_KIDDING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOSING)] = { .text = gEasyChatWord_Losing, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_KNOCKOUT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HAPPENING)] = { .text = gEasyChatWord_Happening, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_KTHX_BYE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HIP_AND)] = { .text = gEasyChatWord_HipAnd, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOSER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHAKE)] = { .text = gEasyChatWord_Shake, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOSING), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHADY)] = { .text = gEasyChatWord_Shady, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_MEGA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UPBEAT)] = { .text = gEasyChatWord_Upbeat, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_MODERN), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MODERN)] = { .text = gEasyChatWord_Modern, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_MUCH_OBLIGED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SMELL_YA)] = { .text = gEasyChatWord_SmellYa, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_NEW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BANG)] = { .text = gEasyChatWord_Bang, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_OLD), .enabled = TRUE, }, [EC_INDEX(EC_WORD_KNOCKOUT)] = { .text = gEasyChatWord_Knockout, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHADY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HASSLE)] = { .text = gEasyChatWord_Hassle, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHAKE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WINNER)] = { .text = gEasyChatWord_Winner, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_SMELL_YA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FEVER)] = { .text = gEasyChatWord_Fever, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_UGLY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WANNABE)] = { .text = gEasyChatWord_Wannabe, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_UPBEAT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_BABY)] = { .text = gEasyChatWord_Baby, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_WANNABE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEART)] = { .text = gEasyChatWord_Heart, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_WINNER), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OLD)] = { .text = gEasyChatWord_Old, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_YEEHAW_EXCL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YOUNG)] = { .text = gEasyChatWord_Young, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_YES_SIR_EXCL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UGLY)] = { .text = gEasyChatWord_Ugly, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_YOUNG), .enabled = TRUE, }, }; diff --git a/src/data/easy_chat/easy_chat_group_voices.h b/src/data/easy_chat/easy_chat_group_voices.h index 3ebbafd252..f50cba002e 100755 --- a/src/data/easy_chat/easy_chat_group_voices.h +++ b/src/data/easy_chat/easy_chat_group_voices.h @@ -66,379 +66,379 @@ const struct EasyChatWordInfo gEasyChatGroup_Voices[] = { [EC_INDEX(EC_WORD_EXCL)] = { .text = gEasyChatWord_Excl, - .alphabeticalOrder = 0, + .alphabeticalOrder = EC_INDEX(EC_WORD_EXCL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EXCL_EXCL)] = { .text = gEasyChatWord_ExclExcl, - .alphabeticalOrder = 1, + .alphabeticalOrder = EC_INDEX(EC_WORD_EXCL_EXCL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_QUES_EXCL)] = { .text = gEasyChatWord_QuesExcl, - .alphabeticalOrder = 7, + .alphabeticalOrder = EC_INDEX(EC_WORD_DASH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_QUES)] = { .text = gEasyChatWord_Ques, - .alphabeticalOrder = 8, + .alphabeticalOrder = EC_INDEX(EC_WORD_DASH_DASH_DASH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ELLIPSIS)] = { .text = gEasyChatWord_Ellipsis, - .alphabeticalOrder = 4, + .alphabeticalOrder = EC_INDEX(EC_WORD_ELLIPSIS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ELLIPSIS_EXCL)] = { .text = gEasyChatWord_EllipsisExcl, - .alphabeticalOrder = 5, + .alphabeticalOrder = EC_INDEX(EC_WORD_ELLIPSIS_EXCL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS)] = { .text = gEasyChatWord_EllipsisEllipsisEllipsis, - .alphabeticalOrder = 6, + .alphabeticalOrder = EC_INDEX(EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DASH)] = { .text = gEasyChatWord_Dash, - .alphabeticalOrder = 3, + .alphabeticalOrder = EC_INDEX(EC_WORD_QUES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_DASH_DASH_DASH)] = { .text = gEasyChatWord_DashDashDash, - .alphabeticalOrder = 2, + .alphabeticalOrder = EC_INDEX(EC_WORD_QUES_EXCL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UH_OH)] = { .text = gEasyChatWord_UhOh, - .alphabeticalOrder = 23, + .alphabeticalOrder = EC_INDEX(EC_WORD_AGREE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WAAAH)] = { .text = gEasyChatWord_Waaah, - .alphabeticalOrder = 11, + .alphabeticalOrder = EC_INDEX(EC_WORD_AHAHA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AHAHA)] = { .text = gEasyChatWord_Ahaha, - .alphabeticalOrder = 41, + .alphabeticalOrder = EC_INDEX(EC_WORD_AIYEEH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OH_QUES)] = { .text = gEasyChatWord_OhQues, - .alphabeticalOrder = 52, + .alphabeticalOrder = EC_INDEX(EC_WORD_ARRGH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_NOPE)] = { .text = gEasyChatWord_Nope, - .alphabeticalOrder = 59, + .alphabeticalOrder = EC_INDEX(EC_WORD_AWW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_URGH)] = { .text = gEasyChatWord_Urgh, - .alphabeticalOrder = 22, + .alphabeticalOrder = EC_INDEX(EC_WORD_CRIES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HMM)] = { .text = gEasyChatWord_Hmm, - .alphabeticalOrder = 25, + .alphabeticalOrder = EC_INDEX(EC_WORD_CRY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WHOAH)] = { .text = gEasyChatWord_Whoah, - .alphabeticalOrder = 32, + .alphabeticalOrder = EC_INDEX(EC_WORD_EEK), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WROOOAAR_EXCL)] = { .text = gEasyChatWord_WroooaarExcl, - .alphabeticalOrder = 24, + .alphabeticalOrder = EC_INDEX(EC_WORD_EH_QUES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WOW)] = { .text = gEasyChatWord_Wow, - .alphabeticalOrder = 26, + .alphabeticalOrder = EC_INDEX(EC_WORD_EHEHE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GIGGLE)] = { .text = gEasyChatWord_Giggle, - .alphabeticalOrder = 43, + .alphabeticalOrder = EC_INDEX(EC_WORD_FUFUFU), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SIGH)] = { .text = gEasyChatWord_Sigh, - .alphabeticalOrder = 19, + .alphabeticalOrder = EC_INDEX(EC_WORD_GIGGLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UNBELIEVABLE)] = { .text = gEasyChatWord_Unbelievable, - .alphabeticalOrder = 33, + .alphabeticalOrder = EC_INDEX(EC_WORD_GRAAAH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CRIES)] = { .text = gEasyChatWord_Cries, - .alphabeticalOrder = 61, + .alphabeticalOrder = EC_INDEX(EC_WORD_GWAH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AGREE)] = { .text = gEasyChatWord_Agree, - .alphabeticalOrder = 34, + .alphabeticalOrder = EC_INDEX(EC_WORD_GWAHAHAHA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EH_QUES)] = { .text = gEasyChatWord_EhQues, - .alphabeticalOrder = 38, + .alphabeticalOrder = EC_INDEX(EC_WORD_HAH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_CRY)] = { .text = gEasyChatWord_Cry, - .alphabeticalOrder = 40, + .alphabeticalOrder = EC_INDEX(EC_WORD_HAHAHA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EHEHE)] = { .text = gEasyChatWord_Ehehe, - .alphabeticalOrder = 48, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OI_OI_OI)] = { .text = gEasyChatWord_OiOiOi, - .alphabeticalOrder = 37, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEHE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OH_YEAH)] = { .text = gEasyChatWord_OhYeah, - .alphabeticalOrder = 47, + .alphabeticalOrder = EC_INDEX(EC_WORD_HEHEHE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OH)] = { .text = gEasyChatWord_Oh, - .alphabeticalOrder = 42, + .alphabeticalOrder = EC_INDEX(EC_WORD_HIYAH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OOPS)] = { .text = gEasyChatWord_Oops, - .alphabeticalOrder = 15, + .alphabeticalOrder = EC_INDEX(EC_WORD_HMM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SHOCKED)] = { .text = gEasyChatWord_Shocked, - .alphabeticalOrder = 49, + .alphabeticalOrder = EC_INDEX(EC_WORD_HOHOHO), .enabled = TRUE, }, [EC_INDEX(EC_WORD_EEK)] = { .text = gEasyChatWord_Eek, - .alphabeticalOrder = 46, + .alphabeticalOrder = EC_INDEX(EC_WORD_HUMPH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GRAAAH)] = { .text = gEasyChatWord_Graaah, - .alphabeticalOrder = 57, + .alphabeticalOrder = EC_INDEX(EC_WORD_LALALA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GWAHAHAHA)] = { .text = gEasyChatWord_Gwahahaha, - .alphabeticalOrder = 44, + .alphabeticalOrder = EC_INDEX(EC_WORD_LOL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WAY)] = { .text = gEasyChatWord_Way, - .alphabeticalOrder = 54, + .alphabeticalOrder = EC_INDEX(EC_WORD_MMM), .enabled = TRUE, }, [EC_INDEX(EC_WORD_TCH)] = { .text = gEasyChatWord_Tch, - .alphabeticalOrder = 53, + .alphabeticalOrder = EC_INDEX(EC_WORD_MUFUFU), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEHE)] = { .text = gEasyChatWord_Hehe, - .alphabeticalOrder = 13, + .alphabeticalOrder = EC_INDEX(EC_WORD_NOPE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HAH)] = { .text = gEasyChatWord_Hah, - .alphabeticalOrder = 29, + .alphabeticalOrder = EC_INDEX(EC_WORD_OH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YUP)] = { .text = gEasyChatWord_Yup, - .alphabeticalOrder = 51, + .alphabeticalOrder = EC_INDEX(EC_WORD_OH_DEAR), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HAHAHA)] = { .text = gEasyChatWord_Hahaha, - .alphabeticalOrder = 28, + .alphabeticalOrder = EC_INDEX(EC_WORD_OH_YEAH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AIYEEH)] = { .text = gEasyChatWord_Aiyeeh, - .alphabeticalOrder = 55, + .alphabeticalOrder = EC_INDEX(EC_WORD_OH_KAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HIYAH)] = { .text = gEasyChatWord_Hiyah, - .alphabeticalOrder = 12, + .alphabeticalOrder = EC_INDEX(EC_WORD_OH_QUES), .enabled = TRUE, }, [EC_INDEX(EC_WORD_FUFUFU)] = { .text = gEasyChatWord_Fufufu, - .alphabeticalOrder = 27, + .alphabeticalOrder = EC_INDEX(EC_WORD_OI_OI_OI), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LOL)] = { .text = gEasyChatWord_Lol, - .alphabeticalOrder = 56, + .alphabeticalOrder = EC_INDEX(EC_WORD_OKAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_SNORT)] = { .text = gEasyChatWord_Snort, - .alphabeticalOrder = 30, + .alphabeticalOrder = EC_INDEX(EC_WORD_OOPS), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HUMPH)] = { .text = gEasyChatWord_Humph, - .alphabeticalOrder = 31, + .alphabeticalOrder = EC_INDEX(EC_WORD_SHOCKED), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEHEHE)] = { .text = gEasyChatWord_Hehehe, - .alphabeticalOrder = 20, + .alphabeticalOrder = EC_INDEX(EC_WORD_SIGH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HEH)] = { .text = gEasyChatWord_Heh, - .alphabeticalOrder = 45, + .alphabeticalOrder = EC_INDEX(EC_WORD_SNORT), .enabled = TRUE, }, [EC_INDEX(EC_WORD_HOHOHO)] = { .text = gEasyChatWord_Hohoho, - .alphabeticalOrder = 36, + .alphabeticalOrder = EC_INDEX(EC_WORD_TCH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_UH_HUH)] = { .text = gEasyChatWord_UhHuh, - .alphabeticalOrder = 50, + .alphabeticalOrder = EC_INDEX(EC_WORD_UH_HUH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OH_DEAR)] = { .text = gEasyChatWord_OhDear, - .alphabeticalOrder = 9, + .alphabeticalOrder = EC_INDEX(EC_WORD_UH_OH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_ARRGH)] = { .text = gEasyChatWord_Arrgh, - .alphabeticalOrder = 21, + .alphabeticalOrder = EC_INDEX(EC_WORD_UNBELIEVABLE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MUFUFU)] = { .text = gEasyChatWord_Mufufu, - .alphabeticalOrder = 14, + .alphabeticalOrder = EC_INDEX(EC_WORD_URGH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_MMM)] = { .text = gEasyChatWord_Mmm, - .alphabeticalOrder = 10, + .alphabeticalOrder = EC_INDEX(EC_WORD_WAAAH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OH_KAY)] = { .text = gEasyChatWord_OhKay, - .alphabeticalOrder = 62, + .alphabeticalOrder = EC_INDEX(EC_WORD_WAHAHAHA), .enabled = TRUE, }, [EC_INDEX(EC_WORD_OKAY)] = { .text = gEasyChatWord_Okay, - .alphabeticalOrder = 35, + .alphabeticalOrder = EC_INDEX(EC_WORD_WAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_LALALA)] = { .text = gEasyChatWord_Lalala, - .alphabeticalOrder = 16, + .alphabeticalOrder = EC_INDEX(EC_WORD_WHOAH), .enabled = TRUE, }, [EC_INDEX(EC_WORD_YAY)] = { .text = gEasyChatWord_Yay, - .alphabeticalOrder = 18, + .alphabeticalOrder = EC_INDEX(EC_WORD_WOW), .enabled = TRUE, }, [EC_INDEX(EC_WORD_AWW)] = { .text = gEasyChatWord_Aww, - .alphabeticalOrder = 60, + .alphabeticalOrder = EC_INDEX(EC_WORD_WOWEE), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WOWEE)] = { .text = gEasyChatWord_Wowee, - .alphabeticalOrder = 17, + .alphabeticalOrder = EC_INDEX(EC_WORD_WROOOAAR_EXCL), .enabled = TRUE, }, [EC_INDEX(EC_WORD_GWAH)] = { .text = gEasyChatWord_Gwah, - .alphabeticalOrder = 58, + .alphabeticalOrder = EC_INDEX(EC_WORD_YAY), .enabled = TRUE, }, [EC_INDEX(EC_WORD_WAHAHAHA)] = { .text = gEasyChatWord_Wahahaha, - .alphabeticalOrder = 39, + .alphabeticalOrder = EC_INDEX(EC_WORD_YUP), .enabled = TRUE, }, }; diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 00d878ba0c..7095863741 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -114,13 +114,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/back.4bpp.lz"); const u32 gMonShinyPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/shiny.gbapal.lz"); const u8 gMonIcon_VenusaurMega[] = INCBIN_U8("graphics/pokemon/venusaur/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_VenusaurMega[] = INCBIN_COMP("graphics/pokemon/venusaur/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_VenusaurMega[] = INCBIN_COMP("graphics/pokemon/venusaur/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #if P_GIGANTAMAX_FORMS @@ -227,26 +227,26 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/back.4bpp.lz"); const u32 gMonShinyPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/shiny.gbapal.lz"); const u8 gMonIcon_CharizardMegaX[] = INCBIN_U8("graphics/pokemon/charizard/mega_x/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_CharizardMegaX[] = INCBIN_COMP("graphics/pokemon/charizard/mega_x/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_CharizardMegaX[] = INCBIN_COMP("graphics/pokemon/charizard/mega_x/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS const u32 gMonFrontPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/front.4bpp.lz"); const u32 gMonPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/normal.gbapal.lz"); const u32 gMonBackPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/back.4bpp.lz"); const u32 gMonShinyPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/shiny.gbapal.lz"); const u8 gMonIcon_CharizardMegaY[] = INCBIN_U8("graphics/pokemon/charizard/mega_y/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_CharizardMegaY[] = INCBIN_COMP("graphics/pokemon/charizard/mega_y/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_CharizardMegaY[] = INCBIN_COMP("graphics/pokemon/charizard/mega_y/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #if P_GIGANTAMAX_FORMS @@ -353,13 +353,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/back.4bpp.lz"); const u32 gMonShinyPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/shiny.gbapal.lz"); const u8 gMonIcon_BlastoiseMega[] = INCBIN_U8("graphics/pokemon/blastoise/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_BlastoiseMega[] = INCBIN_COMP("graphics/pokemon/blastoise/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_BlastoiseMega[] = INCBIN_COMP("graphics/pokemon/blastoise/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #if P_GIGANTAMAX_FORMS @@ -568,13 +568,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/back.4bpp.lz"); const u32 gMonShinyPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/shiny.gbapal.lz"); const u8 gMonIcon_BeedrillMega[] = INCBIN_U8("graphics/pokemon/beedrill/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_BeedrillMega[] = INCBIN_COMP("graphics/pokemon/beedrill/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_BeedrillMega[] = INCBIN_COMP("graphics/pokemon/beedrill/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_WEEDLE @@ -666,13 +666,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/back.4bpp.lz"); const u32 gMonShinyPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/shiny.gbapal.lz"); const u8 gMonIcon_PidgeotMega[] = INCBIN_U8("graphics/pokemon/pidgeot/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_PidgeotMega[] = INCBIN_COMP("graphics/pokemon/pidgeot/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_PidgeotMega[] = INCBIN_COMP("graphics/pokemon/pidgeot/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_PIDGEY @@ -2642,13 +2642,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/back.4bpp.lz"); const u32 gMonShinyPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/shiny.gbapal.lz"); const u8 gMonIcon_AlakazamMega[] = INCBIN_U8("graphics/pokemon/alakazam/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_AlakazamMega[] = INCBIN_COMP("graphics/pokemon/alakazam/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_AlakazamMega[] = INCBIN_COMP("graphics/pokemon/alakazam/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_ABRA @@ -3191,13 +3191,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/back.4bpp.lz"); const u32 gMonShinyPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/shiny.gbapal.lz"); const u8 gMonIcon_SlowbroMega[] = INCBIN_U8("graphics/pokemon/slowbro/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SlowbroMega[] = INCBIN_COMP("graphics/pokemon/slowbro/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_SlowbroMega[] = INCBIN_COMP("graphics/pokemon/slowbro/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #if P_GALARIAN_FORMS @@ -3734,13 +3734,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/back.4bpp.lz"); const u32 gMonShinyPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/shiny.gbapal.lz"); const u8 gMonIcon_GengarMega[] = INCBIN_U8("graphics/pokemon/gengar/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_GengarMega[] = INCBIN_COMP("graphics/pokemon/gengar/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_GengarMega[] = INCBIN_COMP("graphics/pokemon/gengar/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #if P_GIGANTAMAX_FORMS @@ -3829,13 +3829,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/back.4bpp.lz"); const u32 gMonShinyPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/shiny.gbapal.lz"); const u8 gMonIcon_SteelixMega[] = INCBIN_U8("graphics/pokemon/steelix/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SteelixMega[] = INCBIN_COMP("graphics/pokemon/steelix/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_SteelixMega[] = INCBIN_COMP("graphics/pokemon/steelix/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_GEN_2_CROSS_EVOS #endif //P_FAMILY_ONIX @@ -4695,13 +4695,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/back.4bpp.lz"); const u32 gMonShinyPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/shiny.gbapal.lz"); const u8 gMonIcon_KangaskhanMega[] = INCBIN_U8("graphics/pokemon/kangaskhan/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_KangaskhanMega[] = INCBIN_COMP("graphics/pokemon/kangaskhan/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_KangaskhanMega[] = INCBIN_COMP("graphics/pokemon/kangaskhan/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_KANGASKHAN @@ -5072,13 +5072,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/back.4bpp.lz"); const u32 gMonShinyPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/shiny.gbapal.lz"); const u8 gMonIcon_ScizorMega[] = INCBIN_U8("graphics/pokemon/scizor/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_ScizorMega[] = INCBIN_COMP("graphics/pokemon/scizor/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_ScizorMega[] = INCBIN_COMP("graphics/pokemon/scizor/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_GEN_2_CROSS_EVOS @@ -5345,13 +5345,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/back.4bpp.lz"); const u32 gMonShinyPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/shiny.gbapal.lz"); const u8 gMonIcon_PinsirMega[] = INCBIN_U8("graphics/pokemon/pinsir/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_PinsirMega[] = INCBIN_COMP("graphics/pokemon/pinsir/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_PinsirMega[] = INCBIN_COMP("graphics/pokemon/pinsir/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_PINSIR @@ -5495,13 +5495,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/back.4bpp.lz"); const u32 gMonShinyPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/shiny.gbapal.lz"); const u8 gMonIcon_GyaradosMega[] = INCBIN_U8("graphics/pokemon/gyarados/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_GyaradosMega[] = INCBIN_COMP("graphics/pokemon/gyarados/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_GyaradosMega[] = INCBIN_COMP("graphics/pokemon/gyarados/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_MAGIKARP @@ -6046,13 +6046,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/back.4bpp.lz"); const u32 gMonShinyPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/shiny.gbapal.lz"); const u8 gMonIcon_AerodactylMega[] = INCBIN_U8("graphics/pokemon/aerodactyl/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_AerodactylMega[] = INCBIN_COMP("graphics/pokemon/aerodactyl/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_AerodactylMega[] = INCBIN_COMP("graphics/pokemon/aerodactyl/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_AERODACTYL @@ -6367,26 +6367,26 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/back.4bpp.lz"); const u32 gMonShinyPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/shiny.gbapal.lz"); const u8 gMonIcon_MewtwoMegaX[] = INCBIN_U8("graphics/pokemon/mewtwo/mega_x/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_MewtwoMegaX[] = INCBIN_COMP("graphics/pokemon/mewtwo/mega_x/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_MewtwoMegaX[] = INCBIN_COMP("graphics/pokemon/mewtwo/mega_x/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS const u32 gMonFrontPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/front.4bpp.lz"); const u32 gMonPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/normal.gbapal.lz"); const u32 gMonBackPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/back.4bpp.lz"); const u32 gMonShinyPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/shiny.gbapal.lz"); const u8 gMonIcon_MewtwoMegaY[] = INCBIN_U8("graphics/pokemon/mewtwo/mega_y/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_MewtwoMegaY[] = INCBIN_COMP("graphics/pokemon/mewtwo/mega_y/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_MewtwoMegaY[] = INCBIN_COMP("graphics/pokemon/mewtwo/mega_y/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_MEWTWO @@ -7212,13 +7212,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/back.4bpp.lz"); const u32 gMonShinyPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/shiny.gbapal.lz"); const u8 gMonIcon_AmpharosMega[] = INCBIN_U8("graphics/pokemon/ampharos/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_AmpharosMega[] = INCBIN_COMP("graphics/pokemon/ampharos/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_AmpharosMega[] = INCBIN_COMP("graphics/pokemon/ampharos/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_MAREEP @@ -8447,13 +8447,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/back.4bpp.lz"); const u32 gMonShinyPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/shiny.gbapal.lz"); const u8 gMonIcon_HeracrossMega[] = INCBIN_U8("graphics/pokemon/heracross/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_HeracrossMega[] = INCBIN_COMP("graphics/pokemon/heracross/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_HeracrossMega[] = INCBIN_COMP("graphics/pokemon/heracross/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_HERACROSS @@ -9097,13 +9097,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/back.4bpp.lz"); const u32 gMonShinyPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/shiny.gbapal.lz"); const u8 gMonIcon_HoundoomMega[] = INCBIN_U8("graphics/pokemon/houndoom/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_HoundoomMega[] = INCBIN_COMP("graphics/pokemon/houndoom/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_HoundoomMega[] = INCBIN_COMP("graphics/pokemon/houndoom/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_HOUNDOUR @@ -9451,13 +9451,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/back.4bpp.lz"); const u32 gMonShinyPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/shiny.gbapal.lz"); const u8 gMonIcon_TyranitarMega[] = INCBIN_U8("graphics/pokemon/tyranitar/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_TyranitarMega[] = INCBIN_COMP("graphics/pokemon/tyranitar/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_TyranitarMega[] = INCBIN_COMP("graphics/pokemon/tyranitar/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_LARVITAR @@ -9636,13 +9636,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/back.4bpp.lz"); const u32 gMonShinyPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/shiny.gbapal.lz"); const u8 gMonIcon_SceptileMega[] = INCBIN_U8("graphics/pokemon/sceptile/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SceptileMega[] = INCBIN_COMP("graphics/pokemon/sceptile/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_SceptileMega[] = INCBIN_COMP("graphics/pokemon/sceptile/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_TREECKO @@ -9757,13 +9757,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/back.4bpp.lz"); const u32 gMonShinyPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/shiny.gbapal.lz"); const u8 gMonIcon_BlazikenMega[] = INCBIN_U8("graphics/pokemon/blaziken/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_BlazikenMega[] = INCBIN_COMP("graphics/pokemon/blaziken/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_BlazikenMega[] = INCBIN_COMP("graphics/pokemon/blaziken/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_TORCHIC @@ -9855,13 +9855,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/back.4bpp.lz"); const u32 gMonShinyPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/shiny.gbapal.lz"); const u8 gMonIcon_SwampertMega[] = INCBIN_U8("graphics/pokemon/swampert/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SwampertMega[] = INCBIN_COMP("graphics/pokemon/swampert/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_SwampertMega[] = INCBIN_COMP("graphics/pokemon/swampert/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_MUDKIP @@ -10568,13 +10568,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/back.4bpp.lz"); const u32 gMonShinyPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/shiny.gbapal.lz"); const u8 gMonIcon_GardevoirMega[] = INCBIN_U8("graphics/pokemon/gardevoir/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_GardevoirMega[] = INCBIN_COMP("graphics/pokemon/gardevoir/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_GardevoirMega[] = INCBIN_COMP("graphics/pokemon/gardevoir/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #if P_GEN_4_CROSS_EVOS @@ -10600,13 +10600,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/back.4bpp.lz"); const u32 gMonShinyPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/shiny.gbapal.lz"); const u8 gMonIcon_GalladeMega[] = INCBIN_U8("graphics/pokemon/gallade/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_GalladeMega[] = INCBIN_COMP("graphics/pokemon/gallade/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_GalladeMega[] = INCBIN_COMP("graphics/pokemon/gallade/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_RALTS @@ -11169,13 +11169,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/back.4bpp.lz"); const u32 gMonShinyPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/shiny.gbapal.lz"); const u8 gMonIcon_SableyeMega[] = INCBIN_U8("graphics/pokemon/sableye/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SableyeMega[] = INCBIN_COMP("graphics/pokemon/sableye/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_SableyeMega[] = INCBIN_COMP("graphics/pokemon/sableye/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_SABLEYE @@ -11217,13 +11217,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/back.4bpp.lz"); const u32 gMonShinyPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/shiny.gbapal.lz"); const u8 gMonIcon_MawileMega[] = INCBIN_U8("graphics/pokemon/mawile/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_MawileMega[] = INCBIN_COMP("graphics/pokemon/mawile/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_MawileMega[] = INCBIN_COMP("graphics/pokemon/mawile/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_MAWILE @@ -11315,13 +11315,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/back.4bpp.lz"); const u32 gMonShinyPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/shiny.gbapal.lz"); const u8 gMonIcon_AggronMega[] = INCBIN_U8("graphics/pokemon/aggron/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_AggronMega[] = INCBIN_COMP("graphics/pokemon/aggron/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_AggronMega[] = INCBIN_COMP("graphics/pokemon/aggron/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_ARON @@ -11402,13 +11402,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/back.4bpp.lz"); const u32 gMonShinyPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/shiny.gbapal.lz"); const u8 gMonIcon_MedichamMega[] = INCBIN_U8("graphics/pokemon/medicham/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_MedichamMega[] = INCBIN_COMP("graphics/pokemon/medicham/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_MedichamMega[] = INCBIN_COMP("graphics/pokemon/medicham/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_MEDITITE @@ -11473,13 +11473,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/back.4bpp.lz"); const u32 gMonShinyPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/shiny.gbapal.lz"); const u8 gMonIcon_ManectricMega[] = INCBIN_U8("graphics/pokemon/manectric/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_ManectricMega[] = INCBIN_COMP("graphics/pokemon/manectric/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_ManectricMega[] = INCBIN_COMP("graphics/pokemon/manectric/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_ELECTRIKE @@ -11811,13 +11811,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/back.4bpp.lz"); const u32 gMonShinyPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/shiny.gbapal.lz"); const u8 gMonIcon_SharpedoMega[] = INCBIN_U8("graphics/pokemon/sharpedo/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SharpedoMega[] = INCBIN_COMP("graphics/pokemon/sharpedo/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_SharpedoMega[] = INCBIN_COMP("graphics/pokemon/sharpedo/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_CARVANHA @@ -11954,13 +11954,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/back.4bpp.lz"); const u32 gMonShinyPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/shiny.gbapal.lz"); const u8 gMonIcon_CameruptMega[] = INCBIN_U8("graphics/pokemon/camerupt/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_CameruptMega[] = INCBIN_COMP("graphics/pokemon/camerupt/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_CameruptMega[] = INCBIN_COMP("graphics/pokemon/camerupt/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_NUMEL @@ -12274,13 +12274,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/back.4bpp.lz"); const u32 gMonShinyPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/shiny.gbapal.lz"); const u8 gMonIcon_AltariaMega[] = INCBIN_U8("graphics/pokemon/altaria/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_AltariaMega[] = INCBIN_COMP("graphics/pokemon/altaria/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_AltariaMega[] = INCBIN_COMP("graphics/pokemon/altaria/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_SWABLU @@ -12880,13 +12880,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/back.4bpp.lz"); const u32 gMonShinyPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/shiny.gbapal.lz"); const u8 gMonIcon_BanetteMega[] = INCBIN_U8("graphics/pokemon/banette/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_BanetteMega[] = INCBIN_COMP("graphics/pokemon/banette/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_BanetteMega[] = INCBIN_COMP("graphics/pokemon/banette/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_SHUPPET @@ -13074,13 +13074,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/back.4bpp.lz"); const u32 gMonShinyPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/shiny.gbapal.lz"); const u8 gMonIcon_AbsolMega[] = INCBIN_U8("graphics/pokemon/absol/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_AbsolMega[] = INCBIN_COMP("graphics/pokemon/absol/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_AbsolMega[] = INCBIN_COMP("graphics/pokemon/absol/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_ABSOL @@ -13145,13 +13145,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/back.4bpp.lz"); const u32 gMonShinyPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/shiny.gbapal.lz"); const u8 gMonIcon_GlalieMega[] = INCBIN_U8("graphics/pokemon/glalie/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_GlalieMega[] = INCBIN_COMP("graphics/pokemon/glalie/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_GlalieMega[] = INCBIN_COMP("graphics/pokemon/glalie/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #if P_GEN_4_CROSS_EVOS @@ -13493,13 +13493,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/back.4bpp.lz"); const u32 gMonShinyPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/shiny.gbapal.lz"); const u8 gMonIcon_SalamenceMega[] = INCBIN_U8("graphics/pokemon/salamence/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SalamenceMega[] = INCBIN_COMP("graphics/pokemon/salamence/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_SalamenceMega[] = INCBIN_COMP("graphics/pokemon/salamence/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_BAGON @@ -13591,13 +13591,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/back.4bpp.lz"); const u32 gMonShinyPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/shiny.gbapal.lz"); const u8 gMonIcon_MetagrossMega[] = INCBIN_U8("graphics/pokemon/metagross/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_MetagrossMega[] = INCBIN_COMP("graphics/pokemon/metagross/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_MetagrossMega[] = INCBIN_COMP("graphics/pokemon/metagross/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_BELDUM @@ -13722,13 +13722,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/back.4bpp.lz"); const u32 gMonShinyPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/shiny.gbapal.lz"); const u8 gMonIcon_LatiasMega[] = INCBIN_U8("graphics/pokemon/latias/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_LatiasMega[] = INCBIN_COMP("graphics/pokemon/latias/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_LatiasMega[] = INCBIN_COMP("graphics/pokemon/latias/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_LATIAS @@ -13766,13 +13766,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/back.4bpp.lz"); const u32 gMonShinyPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/shiny.gbapal.lz"); const u8 gMonIcon_LatiosMega[] = INCBIN_U8("graphics/pokemon/latios/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_LatiosMega[] = INCBIN_COMP("graphics/pokemon/latios/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_LatiosMega[] = INCBIN_COMP("graphics/pokemon/latios/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_LATIOS @@ -13810,13 +13810,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/back.4bpp.lz"); const u32 gMonShinyPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/shiny.gbapal.lz"); const u8 gMonIcon_KyogrePrimal[] = INCBIN_U8("graphics/pokemon/kyogre/primal/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_KyogrePrimal[] = INCBIN_COMP("graphics/pokemon/kyogre/primal/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_KyogrePrimal[] = INCBIN_COMP("graphics/pokemon/kyogre/primal/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_PRIMAL_REVERSIONS #endif //P_FAMILY_KYOGRE @@ -13854,13 +13854,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/back.4bpp.lz"); const u32 gMonShinyPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/shiny.gbapal.lz"); const u8 gMonIcon_GroudonPrimal[] = INCBIN_U8("graphics/pokemon/groudon/primal/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_GroudonPrimal[] = INCBIN_COMP("graphics/pokemon/groudon/primal/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_GroudonPrimal[] = INCBIN_COMP("graphics/pokemon/groudon/primal/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_PRIMAL_REVERSIONS #endif //P_FAMILY_GROUDON @@ -13898,13 +13898,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/back.4bpp.lz"); const u32 gMonShinyPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/shiny.gbapal.lz"); const u8 gMonIcon_RayquazaMega[] = INCBIN_U8("graphics/pokemon/rayquaza/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_RayquazaMega[] = INCBIN_COMP("graphics/pokemon/rayquaza/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_RayquazaMega[] = INCBIN_COMP("graphics/pokemon/rayquaza/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_RAYQUAZA @@ -14831,13 +14831,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/back.4bpp.lz"); const u32 gMonShinyPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/shiny.gbapal.lz"); const u8 gMonIcon_LopunnyMega[] = INCBIN_U8("graphics/pokemon/lopunny/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_LopunnyMega[] = INCBIN_COMP("graphics/pokemon/lopunny/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_LopunnyMega[] = INCBIN_COMP("graphics/pokemon/lopunny/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_BUNEARY @@ -15057,13 +15057,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/back.4bpp.lz"); const u32 gMonShinyPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/shiny.gbapal.lz"); const u8 gMonIcon_GarchompMega[] = INCBIN_U8("graphics/pokemon/garchomp/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_GarchompMega[] = INCBIN_COMP("graphics/pokemon/garchomp/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_GarchompMega[] = INCBIN_COMP("graphics/pokemon/garchomp/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_GIBLE @@ -15106,13 +15106,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/back.4bpp.lz"); const u32 gMonShinyPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/shiny.gbapal.lz"); const u8 gMonIcon_LucarioMega[] = INCBIN_U8("graphics/pokemon/lucario/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_LucarioMega[] = INCBIN_COMP("graphics/pokemon/lucario/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_LucarioMega[] = INCBIN_COMP("graphics/pokemon/lucario/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_RIOLU @@ -15381,13 +15381,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/back.4bpp.lz"); const u32 gMonShinyPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/shiny.gbapal.lz"); const u8 gMonIcon_AbomasnowMega[] = INCBIN_U8("graphics/pokemon/abomasnow/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_AbomasnowMega[] = INCBIN_COMP("graphics/pokemon/abomasnow/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_AbomasnowMega[] = INCBIN_COMP("graphics/pokemon/abomasnow/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_SNOVER @@ -16561,12 +16561,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/shiny.gbapal.lz"); const u8 gMonIcon_AudinoMega[] = INCBIN_U8("graphics/pokemon/audino/mega/icon.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_AudinoMega[] = INCBIN_COMP("graphics/pokemon/audino/mega/overworld.4bpp"); + const u32 gObjectEventPic_AudinoMega[] = INCBIN_COMP("graphics/pokemon/audino/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_AUDINO @@ -20743,13 +20743,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/back.4bpp.lz"); const u32 gMonShinyPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/shiny.gbapal.lz"); const u8 gMonIcon_DiancieMega[] = INCBIN_U8("graphics/pokemon/diancie/mega/icon.4bpp"); -#if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_DiancieMega[] = INCBIN_COMP("graphics/pokemon/diancie/mega/overworld.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS + const u32 gObjectEventPic_DiancieMega[] = INCBIN_COMP("graphics/pokemon/diancie/mega/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES -#endif //OW_POKEMON_OBJECT_EVENTS +#endif //OW_POKEMON_OBJECT_EVENTS && OW_BATTLE_ONLY_FORMS #endif //P_MEGA_EVOLUTIONS #endif //P_FAMILY_DIANCIE @@ -22379,10 +22379,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_NecrozmaUltra[] = INCBIN_U32("graphics/pokemon/necrozma/ultra/shiny.gbapal.lz"); const u8 gMonIcon_NecrozmaUltra[] = INCBIN_U8("graphics/pokemon/necrozma/ultra/icon.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_NecrozmaUltra[] = INCBIN_COMP("graphics/pokemon/necrozma/ultra/overworld.4bpp"); + const u32 gObjectEventPic_NecrozmaUltra[] = INCBIN_COMP("graphics/pokemon/necrozma/ultra/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_NecrozmaUltra[] = INCBIN_U32("graphics/pokemon/necrozma/ultra/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_NecrozmaUltra[] = INCBIN_U32("graphics/pokemon/necrozma/ultra/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_NecrozmaUltra[] = INCBIN_U32("graphics/pokemon/necrozma/ultra/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_NecrozmaUltra[] = INCBIN_U32("graphics/pokemon/necrozma/ultra/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_ULTRA_BURST_FORMS @@ -24186,7 +24186,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //P_FAMILY_ARCTOVISH #if P_FAMILY_DURALUDON - const u32 gMonFrontPic_Duraludon[] = INCBIN_U32("graphics/pokemon/duraludon/front.4bpp.lz"); + const u32 gMonFrontPic_Duraludon[] = INCBIN_U32("graphics/pokemon/duraludon/anim_front.4bpp.lz"); const u32 gMonPalette_Duraludon[] = INCBIN_U32("graphics/pokemon/duraludon/normal.gbapal.lz"); const u32 gMonBackPic_Duraludon[] = INCBIN_U32("graphics/pokemon/duraludon/back.4bpp.lz"); const u32 gMonShinyPalette_Duraludon[] = INCBIN_U32("graphics/pokemon/duraludon/shiny.gbapal.lz"); diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 6f8d658560..389fc8d5eb 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -170,6 +170,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, .battleAnimScript = gBattleAnimMove_KarateChop, + .validApprenticeMove = TRUE, }, [MOVE_DOUBLE_SLAP] = @@ -192,6 +193,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_POUND}, .battleAnimScript = gBattleAnimMove_DoubleSlap, + .validApprenticeMove = TRUE, }, [MOVE_COMET_PUNCH] = @@ -238,6 +240,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, .battleAnimScript = gBattleAnimMove_MegaPunch, + .validApprenticeMove = TRUE, }, [MOVE_PAY_DAY] = @@ -289,6 +292,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_FIRE_PUNCH, .contestComboMoves = {COMBO_STARTER_ICE_PUNCH, COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_THUNDER_PUNCH}, .battleAnimScript = gBattleAnimMove_FirePunch, + .validApprenticeMove = TRUE, }, [MOVE_ICE_PUNCH] = @@ -320,6 +324,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_ICE_PUNCH, .contestComboMoves = {COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_THUNDER_PUNCH}, .battleAnimScript = gBattleAnimMove_IcePunch, + .validApprenticeMove = TRUE, }, [MOVE_THUNDER_PUNCH] = @@ -347,6 +352,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_THUNDER_PUNCH, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_ICE_PUNCH}, .battleAnimScript = gBattleAnimMove_ThunderPunch, + .validApprenticeMove = TRUE, }, [MOVE_SCRATCH] = @@ -413,6 +419,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_VICE_GRIP}, .battleAnimScript = gBattleAnimMove_Guillotine, + .validApprenticeMove = TRUE, }, [MOVE_RAZOR_WIND] = @@ -463,6 +470,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_SWORDS_DANCE, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SwordsDance, + .validApprenticeMove = TRUE, }, [MOVE_CUT] = @@ -560,6 +568,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Whirlwind, + .validApprenticeMove = TRUE, }, [MOVE_FLY] = @@ -587,6 +596,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Fly, + .validApprenticeMove = TRUE, }, [MOVE_BIND] = @@ -613,6 +623,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_VICE_GRIP}, .battleAnimScript = gBattleAnimMove_Bind, + .validApprenticeMove = TRUE, }, [MOVE_SLAM] = @@ -636,6 +647,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_POUND}, .battleAnimScript = gBattleAnimMove_Slam, + .validApprenticeMove = TRUE, }, [MOVE_VINE_WHIP] = @@ -692,6 +704,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER}, .battleAnimScript = gBattleAnimMove_Stomp, + .validApprenticeMove = TRUE, }, [MOVE_DOUBLE_KICK] = @@ -715,6 +728,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_DoubleKick, + .validApprenticeMove = TRUE, }, [MOVE_MEGA_KICK] = @@ -737,6 +751,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, .battleAnimScript = gBattleAnimMove_MegaKick, + .validApprenticeMove = TRUE, }, [MOVE_JUMP_KICK] = @@ -766,6 +781,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, .battleAnimScript = gBattleAnimMove_JumpKick, + .validApprenticeMove = TRUE, }, [MOVE_ROLLING_KICK] = @@ -793,6 +809,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_RollingKick, + .validApprenticeMove = TRUE, }, [MOVE_SAND_ATTACK] = @@ -816,6 +833,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_SAND_ATTACK, .contestComboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM}, .battleAnimScript = gBattleAnimMove_SandAttack, + .validApprenticeMove = TRUE, }, [MOVE_HEADBUTT] = @@ -842,6 +860,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, .battleAnimScript = gBattleAnimMove_Headbutt, + .validApprenticeMove = TRUE, }, [MOVE_HORN_ATTACK] = @@ -908,6 +927,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HORN_ATTACK}, .battleAnimScript = gBattleAnimMove_HornDrill, + .validApprenticeMove = TRUE, }, [MOVE_TACKLE] = @@ -964,6 +984,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_BodySlam, + .validApprenticeMove = TRUE, }, [MOVE_WRAP] = @@ -989,6 +1010,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Wrap, + .validApprenticeMove = TRUE, }, [MOVE_TAKE_DOWN] = @@ -1012,6 +1034,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_HARDEN}, .battleAnimScript = gBattleAnimMove_TakeDown, + .validApprenticeMove = TRUE, }, [MOVE_THRASH] = @@ -1039,6 +1062,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAGE}, .battleAnimScript = gBattleAnimMove_Thrash, + .validApprenticeMove = TRUE, }, [MOVE_DOUBLE_EDGE] = @@ -1062,6 +1086,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_HARDEN}, .battleAnimScript = gBattleAnimMove_DoubleEdge, + .validApprenticeMove = TRUE, }, [MOVE_TAIL_WHIP] = @@ -1137,6 +1162,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Twineedle, + .validApprenticeMove = TRUE, }, [MOVE_PIN_MISSILE] = @@ -1208,6 +1234,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_SCARY_FACE}, .battleAnimScript = gBattleAnimMove_Bite, + .validApprenticeMove = TRUE, }, [MOVE_GROWL] = @@ -1261,6 +1288,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Roar, + .validApprenticeMove = TRUE, }, [MOVE_SING] = @@ -1286,6 +1314,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_SING, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Sing, + .validApprenticeMove = TRUE, }, [MOVE_SUPERSONIC] = @@ -1311,6 +1340,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Supersonic, + .validApprenticeMove = TRUE, }, [MOVE_SONIC_BOOM] = @@ -1333,6 +1363,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SonicBoom, + .validApprenticeMove = TRUE, }, [MOVE_DISABLE] = @@ -1363,6 +1394,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Disable, + .validApprenticeMove = TRUE, }, [MOVE_ACID] = @@ -1442,6 +1474,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_Flamethrower, + .validApprenticeMove = TRUE, }, [MOVE_MIST] = @@ -1467,6 +1500,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Mist, + .validApprenticeMove = TRUE, }, [MOVE_WATER_GUN] = @@ -1509,6 +1543,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_HydroPump, + .validApprenticeMove = TRUE, }, [MOVE_SURF] = @@ -1532,6 +1567,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_SURF, .contestComboMoves = {COMBO_STARTER_DIVE, COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_Surf, + .validApprenticeMove = TRUE, }, [MOVE_ICE_BEAM] = @@ -1563,6 +1599,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, .battleAnimScript = gBattleAnimMove_IceBeam, + .validApprenticeMove = TRUE, }, [MOVE_BLIZZARD] = @@ -1593,6 +1630,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_POWDER_SNOW}, .battleAnimScript = gBattleAnimMove_Blizzard, + .validApprenticeMove = TRUE, }, [MOVE_PSYBEAM] = @@ -1618,6 +1656,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, .battleAnimScript = gBattleAnimMove_Psybeam, + .validApprenticeMove = TRUE, }, [MOVE_BUBBLE_BEAM] = @@ -1692,6 +1731,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_HyperBeam, + .validApprenticeMove = TRUE, }, [MOVE_PECK] = @@ -1736,6 +1776,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_PECK}, .battleAnimScript = gBattleAnimMove_DrillPeck, + .validApprenticeMove = TRUE, }, [MOVE_SUBMISSION] = @@ -1759,6 +1800,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, .battleAnimScript = gBattleAnimMove_Submission, + .validApprenticeMove = TRUE, }, [MOVE_LOW_KICK] = @@ -1781,6 +1823,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_LowKick, + .validApprenticeMove = TRUE, }, [MOVE_COUNTER] = @@ -1808,6 +1851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, .battleAnimScript = gBattleAnimMove_Counter, + .validApprenticeMove = TRUE, }, [MOVE_SEISMIC_TOSS] = @@ -1831,6 +1875,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, .battleAnimScript = gBattleAnimMove_SeismicToss, + .validApprenticeMove = TRUE, }, [MOVE_STRENGTH] = @@ -1853,6 +1898,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Strength, + .validApprenticeMove = TRUE, }, [MOVE_ABSORB] = @@ -1923,6 +1969,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_LEECH_SEED, .contestComboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_WORRY_SEED}, .battleAnimScript = gBattleAnimMove_LeechSeed, + .validApprenticeMove = TRUE, }, [MOVE_GROWTH] = @@ -1953,6 +2000,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_GROWTH, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Growth, + .validApprenticeMove = TRUE, }, [MOVE_RAZOR_LEAF] = @@ -1976,6 +2024,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, .battleAnimScript = gBattleAnimMove_RazorLeaf, + .validApprenticeMove = TRUE, }, [MOVE_SOLAR_BEAM] = @@ -2000,6 +2049,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_SolarBeam, + .validApprenticeMove = TRUE, }, [MOVE_POISON_POWDER] = @@ -2024,6 +2074,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, .battleAnimScript = gBattleAnimMove_PoisonPowder, + .validApprenticeMove = TRUE, }, [MOVE_STUN_SPORE] = @@ -2048,6 +2099,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, .battleAnimScript = gBattleAnimMove_StunSpore, + .validApprenticeMove = TRUE, }, [MOVE_SLEEP_POWDER] = @@ -2072,6 +2124,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, .battleAnimScript = gBattleAnimMove_SleepPowder, + .validApprenticeMove = TRUE, }, [MOVE_PETAL_DANCE] = @@ -2106,6 +2159,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, .battleAnimScript = gBattleAnimMove_PetalDance, + .validApprenticeMove = TRUE, }, [MOVE_STRING_SHOT] = @@ -2152,6 +2206,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_DRAGON_RAGE, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, .battleAnimScript = gBattleAnimMove_DragonRage, + .validApprenticeMove = TRUE, }, [MOVE_FIRE_SPIN] = @@ -2177,6 +2232,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_FireSpin, + .validApprenticeMove = TRUE, }, [MOVE_THUNDER_SHOCK] = @@ -2227,6 +2283,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, .battleAnimScript = gBattleAnimMove_Thunderbolt, + .validApprenticeMove = TRUE, }, [MOVE_THUNDER_WAVE] = @@ -2250,6 +2307,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, .battleAnimScript = gBattleAnimMove_ThunderWave, + .validApprenticeMove = TRUE, }, [MOVE_THUNDER] = @@ -2276,6 +2334,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_Thunder, + .validApprenticeMove = TRUE, }, [MOVE_ROCK_THROW] = @@ -2321,6 +2380,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_EARTHQUAKE, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Earthquake, + .validApprenticeMove = TRUE, }, [MOVE_FISSURE] = @@ -2344,6 +2404,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_EARTHQUAKE}, .battleAnimScript = gBattleAnimMove_Fissure, + .validApprenticeMove = TRUE, }, [MOVE_DIG] = @@ -2371,6 +2432,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Dig, + .validApprenticeMove = TRUE, }, [MOVE_TOXIC] = @@ -2394,6 +2456,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_TOXIC, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Toxic, + .validApprenticeMove = TRUE, }, [MOVE_CONFUSION] = @@ -2444,6 +2507,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_PSYCHIC, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS}, .battleAnimScript = gBattleAnimMove_Psychic, + .validApprenticeMove = TRUE, }, [MOVE_HYPNOSIS] = @@ -2467,6 +2531,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_HYPNOSIS, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Hypnosis, + .validApprenticeMove = TRUE, }, [MOVE_MEDITATE] = @@ -2492,6 +2557,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, .battleAnimScript = gBattleAnimMove_Meditate, + .validApprenticeMove = TRUE, }, [MOVE_AGILITY] = @@ -2517,6 +2583,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM}, .battleAnimScript = gBattleAnimMove_Agility, + .validApprenticeMove = TRUE, }, [MOVE_QUICK_ATTACK] = @@ -2539,6 +2606,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM}, .battleAnimScript = gBattleAnimMove_QuickAttack, + .validApprenticeMove = TRUE, }, [MOVE_RAGE] = @@ -2606,6 +2674,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_NightShade, + .validApprenticeMove = TRUE, }, [MOVE_MIMIC] = @@ -2636,6 +2705,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Mimic, + .validApprenticeMove = TRUE, }, [MOVE_SCREECH] = @@ -2661,6 +2731,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Screech, + .validApprenticeMove = TRUE, }, [MOVE_DOUBLE_TEAM] = @@ -2686,6 +2757,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_DOUBLE_TEAM, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_DoubleTeam, + .validApprenticeMove = TRUE, }, [MOVE_RECOVER] = @@ -2718,6 +2790,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Recover, + .validApprenticeMove = TRUE, }, [MOVE_HARDEN] = @@ -2743,6 +2816,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_HARDEN, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Harden, + .validApprenticeMove = TRUE, }, [MOVE_MINIMIZE] = @@ -2768,6 +2842,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Minimize, + .validApprenticeMove = TRUE, }, [MOVE_SMOKESCREEN] = @@ -2791,6 +2866,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SMOG}, .battleAnimScript = gBattleAnimMove_Smokescreen, + .validApprenticeMove = TRUE, }, [MOVE_CONFUSE_RAY] = @@ -2814,6 +2890,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_ConfuseRay, + .validApprenticeMove = TRUE, }, [MOVE_WITHDRAW] = @@ -2839,6 +2916,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_Withdraw, + .validApprenticeMove = TRUE, }, [MOVE_DEFENSE_CURL] = @@ -2864,6 +2942,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_DEFENSE_CURL, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_DefenseCurl, + .validApprenticeMove = TRUE, }, [MOVE_BARRIER] = @@ -2889,6 +2968,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Barrier, + .validApprenticeMove = TRUE, }, [MOVE_LIGHT_SCREEN] = @@ -2914,6 +2994,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, .battleAnimScript = gBattleAnimMove_LightScreen, + .validApprenticeMove = TRUE, }, [MOVE_HAZE] = @@ -2939,6 +3020,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, .battleAnimScript = gBattleAnimMove_Haze, + .validApprenticeMove = TRUE, }, [MOVE_REFLECT] = @@ -2964,6 +3046,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, .battleAnimScript = gBattleAnimMove_Reflect, + .validApprenticeMove = TRUE, }, [MOVE_FOCUS_ENERGY] = @@ -2990,6 +3073,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_FOCUS_ENERGY, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_FocusEnergy, + .validApprenticeMove = TRUE, }, [MOVE_BIDE] = @@ -3045,6 +3129,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Metronome, + .validApprenticeMove = TRUE, }, [MOVE_MIRROR_MOVE] = @@ -3074,6 +3159,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_MirrorMove, + .validApprenticeMove = TRUE, }, [MOVE_SELF_DESTRUCT] = @@ -3096,6 +3182,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SelfDestruct, + .validApprenticeMove = TRUE, }, [MOVE_EGG_BOMB] = @@ -3118,6 +3205,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SOFT_BOILED}, .battleAnimScript = gBattleAnimMove_EggBomb, + .validApprenticeMove = TRUE, }, [MOVE_LICK] = @@ -3144,6 +3232,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Lick, + .validApprenticeMove = TRUE, }, [MOVE_SMOG] = @@ -3244,6 +3333,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_FireBlast, + .validApprenticeMove = TRUE, }, [MOVE_WATERFALL] = @@ -3272,6 +3362,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_Waterfall, + .validApprenticeMove = TRUE, }, [MOVE_CLAMP] = @@ -3298,6 +3389,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_Clamp, + .validApprenticeMove = TRUE, }, [MOVE_SWIFT] = @@ -3319,6 +3411,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Swift, + .validApprenticeMove = TRUE, }, [MOVE_SKULL_BASH] = @@ -3349,6 +3442,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SkullBash, + .validApprenticeMove = TRUE, }, [MOVE_SPIKE_CANNON] = @@ -3421,6 +3515,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Amnesia, + .validApprenticeMove = TRUE, }, [MOVE_KINESIS] = @@ -3444,6 +3539,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_KINESIS, .contestComboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_PSYCHIC}, .battleAnimScript = gBattleAnimMove_Kinesis, + .validApprenticeMove = TRUE, }, [MOVE_SOFT_BOILED] = @@ -3470,6 +3566,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_SOFT_BOILED, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SoftBoiled, + .validApprenticeMove = TRUE, }, [MOVE_HIGH_JUMP_KICK] = @@ -3499,6 +3596,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, .battleAnimScript = gBattleAnimMove_HighJumpKick, + .validApprenticeMove = TRUE, }, [MOVE_GLARE] = @@ -3528,6 +3626,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER}, .battleAnimScript = gBattleAnimMove_Glare, + .validApprenticeMove = TRUE, }, [MOVE_DREAM_EATER] = @@ -3545,11 +3644,13 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .healingMove = B_HEAL_BLOCKING >= GEN_6, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_5, .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_HYPNOSIS}, .battleAnimScript = gBattleAnimMove_DreamEater, + .validApprenticeMove = TRUE, }, [MOVE_POISON_GAS] = @@ -3649,6 +3750,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_LovelyKiss, + .validApprenticeMove = TRUE, }, [MOVE_SKY_ATTACK] = @@ -3680,6 +3782,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SkyAttack, + .validApprenticeMove = TRUE, }, [MOVE_TRANSFORM] = @@ -3710,6 +3813,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Transform, + .validApprenticeMove = TRUE, }, [MOVE_BUBBLE] = @@ -3762,6 +3866,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_DizzyPunch, + .validApprenticeMove = TRUE, }, [MOVE_SPORE] = @@ -3786,6 +3891,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Spore, + .validApprenticeMove = TRUE, }, [MOVE_FLASH] = @@ -3809,6 +3915,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Flash, + .validApprenticeMove = TRUE, }, [MOVE_PSYWAVE] = @@ -3830,6 +3937,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, .battleAnimScript = gBattleAnimMove_Psywave, + .validApprenticeMove = TRUE, }, [MOVE_SPLASH] = @@ -3880,6 +3988,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_AcidArmor, + .validApprenticeMove = TRUE, }, [MOVE_CRABHAMMER] = @@ -3903,6 +4012,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SWORDS_DANCE}, .battleAnimScript = gBattleAnimMove_Crabhammer, + .validApprenticeMove = TRUE, }, [MOVE_EXPLOSION] = @@ -3925,6 +4035,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Explosion, + .validApprenticeMove = TRUE, }, [MOVE_FURY_SWIPES] = @@ -3969,6 +4080,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_BONEMERANG, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE}, .battleAnimScript = gBattleAnimMove_Bonemerang, + .validApprenticeMove = TRUE, }, [MOVE_REST] = @@ -3995,6 +4107,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_REST, .contestComboMoves = {COMBO_STARTER_BELLY_DRUM, COMBO_STARTER_CHARM, COMBO_STARTER_YAWN}, .battleAnimScript = gBattleAnimMove_Rest, + .validApprenticeMove = TRUE, }, [MOVE_ROCK_SLIDE] = @@ -4020,6 +4133,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ROCK_THROW}, .battleAnimScript = gBattleAnimMove_RockSlide, + .validApprenticeMove = TRUE, }, [MOVE_HYPER_FANG] = @@ -4047,6 +4161,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_HyperFang, + .validApprenticeMove = TRUE, }, [MOVE_SHARPEN] = @@ -4072,6 +4187,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Sharpen, + .validApprenticeMove = TRUE, }, [MOVE_CONVERSION] = @@ -4097,6 +4213,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Conversion, + .validApprenticeMove = TRUE, }, [MOVE_TRI_ATTACK] = @@ -4122,6 +4239,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON}, .battleAnimScript = gBattleAnimMove_TriAttack, + .validApprenticeMove = TRUE, }, [MOVE_SUPER_FANG] = @@ -4145,6 +4263,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCARY_FACE}, .battleAnimScript = gBattleAnimMove_SuperFang, + .validApprenticeMove = TRUE, }, [MOVE_SLASH] = @@ -4169,6 +4288,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCRATCH, COMBO_STARTER_SWORDS_DANCE}, .battleAnimScript = gBattleAnimMove_Slash, + .validApprenticeMove = TRUE, }, [MOVE_SUBSTITUTE] = @@ -4195,6 +4315,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Substitute, + .validApprenticeMove = TRUE, }, [MOVE_STRUGGLE] = @@ -4233,6 +4354,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .assistBanned = TRUE, .sketchBanned = TRUE, .battleAnimScript = gBattleAnimMove_Struggle, + .validApprenticeMove = TRUE, }, [MOVE_SKETCH] = @@ -4266,6 +4388,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Sketch, + .validApprenticeMove = TRUE, }, [MOVE_TRIPLE_KICK] = @@ -4289,6 +4412,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, .battleAnimScript = gBattleAnimMove_TripleKick, + .validApprenticeMove = TRUE, }, [MOVE_THIEF] = @@ -4319,6 +4443,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Thief, + .validApprenticeMove = TRUE, }, [MOVE_SPIDER_WEB] = @@ -4343,6 +4468,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STRING_SHOT}, .battleAnimScript = gBattleAnimMove_SpiderWeb, + .validApprenticeMove = TRUE, }, [MOVE_MIND_READER] = @@ -4365,6 +4491,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_MIND_READER, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_MindReader, + .validApprenticeMove = TRUE, }, [MOVE_NIGHTMARE] = @@ -4388,6 +4515,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Nightmare, + .validApprenticeMove = TRUE, }, [MOVE_FLAME_WHEEL] = @@ -4443,6 +4571,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_REST}, .battleAnimScript = gBattleAnimMove_Snore, + .validApprenticeMove = TRUE, }, [MOVE_CURSE] = @@ -4468,6 +4597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_CURSE, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Curse, + .validApprenticeMove = TRUE, }, [MOVE_FLAIL] = @@ -4490,6 +4620,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, .battleAnimScript = gBattleAnimMove_Flail, + .validApprenticeMove = TRUE, }, [MOVE_CONVERSION_2] = @@ -4515,6 +4646,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Conversion2, + .validApprenticeMove = TRUE, }, [MOVE_AEROBLAST] = @@ -4538,6 +4670,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Aeroblast, + .validApprenticeMove = TRUE, }, [MOVE_COTTON_SPORE] = @@ -4562,6 +4695,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_CottonSpore, + .validApprenticeMove = TRUE, }, [MOVE_REVERSAL] = @@ -4584,6 +4718,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, .battleAnimScript = gBattleAnimMove_Reversal, + .validApprenticeMove = TRUE, }, [MOVE_SPITE] = @@ -4608,6 +4743,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE}, .battleAnimScript = gBattleAnimMove_Spite, + .validApprenticeMove = TRUE, }, [MOVE_POWDER_SNOW] = @@ -4662,6 +4798,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HARDEN}, .battleAnimScript = gBattleAnimMove_Protect, + .validApprenticeMove = TRUE, }, [MOVE_MACH_PUNCH] = @@ -4685,6 +4822,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_MachPunch, + .validApprenticeMove = TRUE, }, [MOVE_SCARY_FACE] = @@ -4708,6 +4846,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_SCARY_FACE, .contestComboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_RAGE}, .battleAnimScript = gBattleAnimMove_ScaryFace, + .validApprenticeMove = TRUE, }, [MOVE_FEINT_ATTACK] = @@ -4730,6 +4869,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT, COMBO_STARTER_LEER, COMBO_STARTER_POUND}, .battleAnimScript = gBattleAnimMove_FeintAttack, + .validApprenticeMove = TRUE, }, [MOVE_SWEET_KISS] = @@ -4753,6 +4893,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, .battleAnimScript = gBattleAnimMove_SweetKiss, + .validApprenticeMove = TRUE, }, [MOVE_BELLY_DRUM] = @@ -4778,6 +4919,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_BELLY_DRUM, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_BellyDrum, + .validApprenticeMove = TRUE, }, [MOVE_SLUDGE_BOMB] = @@ -4804,6 +4946,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_SLUDGE_BOMB, .contestComboMoves = {COMBO_STARTER_SLUDGE}, .battleAnimScript = gBattleAnimMove_SludgeBomb, + .validApprenticeMove = TRUE, }, [MOVE_MUD_SLAP] = @@ -4829,6 +4972,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_MUD_SLAP, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_SAND_ATTACK, COMBO_STARTER_SANDSTORM}, .battleAnimScript = gBattleAnimMove_MudSlap, + .validApprenticeMove = TRUE, }, [MOVE_OCTAZOOKA] = @@ -4855,6 +4999,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_Octazooka, + .validApprenticeMove = TRUE, }, [MOVE_SPIKES] = @@ -4882,6 +5027,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Spikes, + .validApprenticeMove = TRUE, }, [MOVE_ZAP_CANNON] = @@ -4908,6 +5054,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON}, .battleAnimScript = gBattleAnimMove_ZapCannon, + .validApprenticeMove = TRUE, }, [MOVE_FORESIGHT] = @@ -4932,6 +5079,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Foresight, + .validApprenticeMove = TRUE, }, [MOVE_DESTINY_BOND] = @@ -4960,6 +5108,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE, COMBO_STARTER_ENDURE, COMBO_STARTER_MEAN_LOOK}, .battleAnimScript = gBattleAnimMove_DestinyBond, + .validApprenticeMove = TRUE, }, [MOVE_PERISH_SONG] = @@ -4986,6 +5135,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MEAN_LOOK, COMBO_STARTER_SING}, .battleAnimScript = gBattleAnimMove_PerishSong, + .validApprenticeMove = TRUE, }, [MOVE_ICY_WIND] = @@ -5012,6 +5162,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, .battleAnimScript = gBattleAnimMove_IcyWind, + .validApprenticeMove = TRUE, }, [MOVE_DETECT] = @@ -5039,6 +5190,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, .battleAnimScript = gBattleAnimMove_Detect, + .validApprenticeMove = TRUE, }, [MOVE_BONE_RUSH] = @@ -5082,6 +5234,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_LOCK_ON, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_LockOn, + .validApprenticeMove = TRUE, }, [MOVE_OUTRAGE] = @@ -5109,6 +5262,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Outrage, + .validApprenticeMove = TRUE, }, [MOVE_SANDSTORM] = @@ -5134,6 +5288,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_SANDSTORM, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Sandstorm, + .validApprenticeMove = TRUE, }, [MOVE_GIGA_DRAIN] = @@ -5158,6 +5313,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, .battleAnimScript = gBattleAnimMove_GigaDrain, + .validApprenticeMove = TRUE, }, [MOVE_ENDURE] = @@ -5185,6 +5341,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_ENDURE, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Endure, + .validApprenticeMove = TRUE, }, [MOVE_CHARM] = @@ -5208,6 +5365,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_CHARM, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Charm, + .validApprenticeMove = TRUE, }, [MOVE_ROLLOUT] = @@ -5232,6 +5390,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_HARDEN}, .battleAnimScript = gBattleAnimMove_Rollout, + .validApprenticeMove = TRUE, }, [MOVE_FALSE_SWIPE] = @@ -5252,6 +5411,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, .battleAnimScript = gBattleAnimMove_FalseSwipe, + .validApprenticeMove = TRUE, }, [MOVE_SWAGGER] = @@ -5275,6 +5435,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Swagger, + .validApprenticeMove = TRUE, }, [MOVE_MILK_DRINK] = @@ -5301,6 +5462,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_MilkDrink, + .validApprenticeMove = TRUE, }, [MOVE_SPARK] = @@ -5356,6 +5518,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, .battleAnimScript = gBattleAnimMove_FuryCutter, + .validApprenticeMove = TRUE, }, [MOVE_STEEL_WING] = @@ -5383,6 +5546,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SteelWing, + .validApprenticeMove = TRUE, }, [MOVE_MEAN_LOOK] = @@ -5407,6 +5571,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_MEAN_LOOK, .contestComboMoves = {COMBO_STARTER_CURSE}, .battleAnimScript = gBattleAnimMove_MeanLook, + .validApprenticeMove = TRUE, }, [MOVE_ATTRACT] = @@ -5431,6 +5596,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Attract, + .validApprenticeMove = TRUE, }, [MOVE_SLEEP_TALK] = @@ -5462,6 +5628,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_REST}, .battleAnimScript = gBattleAnimMove_SleepTalk, + .validApprenticeMove = TRUE, }, [MOVE_HEAL_BELL] = @@ -5489,6 +5656,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_HEAL_BELL, .contestComboMoves = {COMBO_STARTER_LUCKY_CHANT}, .battleAnimScript = gBattleAnimMove_HealBell, + .validApprenticeMove = TRUE, }, [MOVE_RETURN] = @@ -5511,6 +5679,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Return, + .validApprenticeMove = TRUE, }, [MOVE_PRESENT] = @@ -5533,6 +5702,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Present, + .validApprenticeMove = TRUE, }, [MOVE_FRUSTRATION] = @@ -5555,6 +5725,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Frustration, + .validApprenticeMove = TRUE, }, [MOVE_SAFEGUARD] = @@ -5580,6 +5751,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Safeguard, + .validApprenticeMove = TRUE, }, [MOVE_PAIN_SPLIT] = @@ -5602,6 +5774,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, .battleAnimScript = gBattleAnimMove_PainSplit, + .validApprenticeMove = TRUE, }, [MOVE_SACRED_FIRE] = @@ -5628,6 +5801,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_SacredFire, + .validApprenticeMove = TRUE, }, [MOVE_MAGNITUDE] = @@ -5678,6 +5852,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, .battleAnimScript = gBattleAnimMove_DynamicPunch, + .validApprenticeMove = TRUE, }, [MOVE_MEGAHORN] = @@ -5700,6 +5875,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Megahorn, + .validApprenticeMove = TRUE, }, [MOVE_DRAGON_BREATH] = @@ -5726,6 +5902,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_DRAGON_BREATH, .contestComboMoves = {COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, .battleAnimScript = gBattleAnimMove_DragonBreath, + .validApprenticeMove = TRUE, }, [MOVE_BATON_PASS] = @@ -5750,6 +5927,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_BatonPass, + .validApprenticeMove = TRUE, }, [MOVE_ENCORE] = @@ -5775,6 +5953,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Encore, + .validApprenticeMove = TRUE, }, [MOVE_PURSUIT] = @@ -5798,6 +5977,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Pursuit, + .validApprenticeMove = TRUE, }, [MOVE_RAPID_SPIN] = @@ -5829,6 +6009,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_RapidSpin, + .validApprenticeMove = TRUE, }, [MOVE_SWEET_SCENT] = @@ -5852,6 +6033,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_SWEET_SCENT, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SweetScent, + .validApprenticeMove = TRUE, }, [MOVE_IRON_TAIL] = @@ -5878,6 +6060,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_IronTail, + .validApprenticeMove = TRUE, }, [MOVE_METAL_CLAW] = @@ -5905,6 +6088,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_METAL_SOUND}, .battleAnimScript = gBattleAnimMove_MetalClaw, + .validApprenticeMove = TRUE, }, [MOVE_VITAL_THROW] = @@ -5927,6 +6111,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, .battleAnimScript = gBattleAnimMove_VitalThrow, + .validApprenticeMove = TRUE, }, [MOVE_MORNING_SUN] = @@ -5953,6 +6138,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_MorningSun, + .validApprenticeMove = TRUE, }, [MOVE_SYNTHESIS] = @@ -5979,6 +6165,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_Synthesis, + .validApprenticeMove = TRUE, }, [MOVE_MOONLIGHT] = @@ -6005,6 +6192,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_Moonlight, + .validApprenticeMove = TRUE, }, [MOVE_HIDDEN_POWER] = @@ -6026,6 +6214,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_HiddenPower, + .validApprenticeMove = TRUE, }, [MOVE_CROSS_CHOP] = @@ -6049,6 +6238,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, .battleAnimScript = gBattleAnimMove_CrossChop, + .validApprenticeMove = TRUE, }, [MOVE_TWISTER] = @@ -6100,6 +6290,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_RAIN_DANCE, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_RainDance, + .validApprenticeMove = TRUE, }, [MOVE_SUNNY_DAY] = @@ -6124,6 +6315,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_SUNNY_DAY, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SunnyDay, + .validApprenticeMove = TRUE, }, [MOVE_CRUNCH] = @@ -6159,6 +6351,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCARY_FACE}, .battleAnimScript = gBattleAnimMove_Crunch, + .validApprenticeMove = TRUE, }, [MOVE_MIRROR_COAT] = @@ -6184,6 +6377,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, .battleAnimScript = gBattleAnimMove_MirrorCoat, + .validApprenticeMove = TRUE, }, [MOVE_PSYCH_UP] = @@ -6210,6 +6404,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_PsychUp, + .validApprenticeMove = TRUE, }, [MOVE_EXTREME_SPEED] = @@ -6232,6 +6427,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_ExtremeSpeed, + .validApprenticeMove = TRUE, }, [MOVE_ANCIENT_POWER] = @@ -6259,6 +6455,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_AncientPower, + .validApprenticeMove = TRUE, }, [MOVE_SHADOW_BALL] = @@ -6285,6 +6482,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_ShadowBall, + .validApprenticeMove = TRUE, }, [MOVE_FUTURE_SIGHT] = @@ -6314,6 +6512,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, .battleAnimScript = gBattleAnimMove_FutureSight, + .validApprenticeMove = TRUE, }, [MOVE_ROCK_SMASH] = @@ -6340,6 +6539,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_RockSmash, + .validApprenticeMove = TRUE, }, [MOVE_WHIRLPOOL] = @@ -6365,6 +6565,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_Whirlpool, + .validApprenticeMove = TRUE, }, [MOVE_BEAT_UP] = @@ -6386,6 +6587,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_BeatUp, + .validApprenticeMove = TRUE, }, [MOVE_FAKE_OUT] = @@ -6412,6 +6614,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_FAKE_OUT, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_FakeOut, + .validApprenticeMove = TRUE, }, [MOVE_UPROAR] = @@ -6445,6 +6648,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Uproar, + .validApprenticeMove = TRUE, }, [MOVE_STOCKPILE] = @@ -6470,6 +6674,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_STOCKPILE, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Stockpile, + .validApprenticeMove = TRUE, }, [MOVE_SPIT_UP] = @@ -6492,6 +6697,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STOCKPILE}, .battleAnimScript = gBattleAnimMove_SpitUp, + .validApprenticeMove = TRUE, }, [MOVE_SWALLOW] = @@ -6518,6 +6724,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STOCKPILE}, .battleAnimScript = gBattleAnimMove_Swallow, + .validApprenticeMove = TRUE, }, [MOVE_HEAT_WAVE] = @@ -6544,6 +6751,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_HeatWave, + .validApprenticeMove = TRUE, }, [MOVE_HAIL] = @@ -6568,6 +6776,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_HAIL, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Hail, + .validApprenticeMove = TRUE, }, [MOVE_TORMENT] = @@ -6591,6 +6800,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Torment, + .validApprenticeMove = TRUE, }, [MOVE_FLATTER] = @@ -6614,6 +6824,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, .battleAnimScript = gBattleAnimMove_Flatter, + .validApprenticeMove = TRUE, }, [MOVE_WILL_O_WISP] = @@ -6637,6 +6848,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_WillOWisp, + .validApprenticeMove = TRUE, }, [MOVE_MEMENTO] = @@ -6659,6 +6871,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Memento, + .validApprenticeMove = TRUE, }, [MOVE_FACADE] = @@ -6681,6 +6894,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Facade, + .validApprenticeMove = TRUE, }, [MOVE_FOCUS_PUNCH] = @@ -6711,6 +6925,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, .battleAnimScript = gBattleAnimMove_FocusPunch, + .validApprenticeMove = TRUE, }, [MOVE_SMELLING_SALTS] = @@ -6737,6 +6952,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SmellingSalts, + .validApprenticeMove = TRUE, }, [MOVE_FOLLOW_ME] = @@ -6764,6 +6980,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_FollowMe, + .validApprenticeMove = TRUE, }, [MOVE_NATURE_POWER] = @@ -6792,6 +7009,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_NaturePower, + .validApprenticeMove = TRUE, }, [MOVE_CHARGE] = @@ -6817,6 +7035,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_CHARGE, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Charge, + .validApprenticeMove = TRUE, }, [MOVE_TAUNT] = @@ -6841,6 +7060,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_TAUNT, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Taunt, + .validApprenticeMove = TRUE, }, [MOVE_HELPING_HAND] = @@ -6869,6 +7089,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_HelpingHand, + .validApprenticeMove = TRUE, }, [MOVE_TRICK] = @@ -6894,6 +7115,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Trick, + .validApprenticeMove = TRUE, }, [MOVE_ROLE_PLAY] = @@ -6919,6 +7141,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_RolePlay, + .validApprenticeMove = TRUE, }, [MOVE_WISH] = @@ -6945,6 +7168,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Wish, + .validApprenticeMove = TRUE, }, [MOVE_ASSIST] = @@ -6975,6 +7199,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Assist, + .validApprenticeMove = TRUE, }, [MOVE_INGRAIN] = @@ -7001,6 +7226,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Ingrain, + .validApprenticeMove = TRUE, }, [MOVE_SUPERPOWER] = @@ -7027,6 +7253,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_MIND_READER}, .battleAnimScript = gBattleAnimMove_Superpower, + .validApprenticeMove = TRUE, }, [MOVE_MAGIC_COAT] = @@ -7051,6 +7278,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_MagicCoat, + .validApprenticeMove = TRUE, }, [MOVE_RECYCLE] = @@ -7076,6 +7304,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Recycle, + .validApprenticeMove = TRUE, }, [MOVE_REVENGE] = @@ -7096,6 +7325,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_REVENGE, .contestComboMoves = {COMBO_STARTER_PAYBACK}, .battleAnimScript = gBattleAnimMove_Revenge, + .validApprenticeMove = TRUE, }, [MOVE_BRICK_BREAK] = @@ -7118,6 +7348,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, .battleAnimScript = gBattleAnimMove_BrickBreak, + .validApprenticeMove = TRUE, }, [MOVE_YAWN] = @@ -7141,6 +7372,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_YAWN, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Yawn, + .validApprenticeMove = TRUE, }, [MOVE_KNOCK_OFF] = @@ -7166,6 +7398,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, .battleAnimScript = gBattleAnimMove_KnockOff, + .validApprenticeMove = TRUE, }, [MOVE_ENDEAVOR] = @@ -7189,6 +7422,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, .battleAnimScript = gBattleAnimMove_Endeavor, + .validApprenticeMove = TRUE, }, [MOVE_ERUPTION] = @@ -7210,6 +7444,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_EARTHQUAKE, COMBO_STARTER_ENDURE, COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_Eruption, + .validApprenticeMove = TRUE, }, [MOVE_SKILL_SWAP] = @@ -7233,6 +7468,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SkillSwap, + .validApprenticeMove = TRUE, }, [MOVE_IMPRISON] = @@ -7260,6 +7496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Imprison, + .validApprenticeMove = TRUE, }, [MOVE_REFRESH] = @@ -7285,6 +7522,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SING, COMBO_STARTER_WATER_SPORT}, .battleAnimScript = gBattleAnimMove_Refresh, + .validApprenticeMove = TRUE, }, [MOVE_GRUDGE] = @@ -7310,6 +7548,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE}, .battleAnimScript = gBattleAnimMove_Grudge, + .validApprenticeMove = TRUE, }, [MOVE_SNATCH] = @@ -7337,6 +7576,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Snatch, + .validApprenticeMove = TRUE, }, [MOVE_SECRET_POWER] = @@ -7362,6 +7602,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SecretPower, + .validApprenticeMove = TRUE, }, [MOVE_DIVE] = @@ -7389,6 +7630,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_DIVE, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SURF}, .battleAnimScript = gBattleAnimMove_Dive, + .validApprenticeMove = TRUE, }, [MOVE_ARM_THRUST] = @@ -7436,6 +7678,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Camouflage, + .validApprenticeMove = TRUE, }, [MOVE_TAIL_GLOW] = @@ -7461,6 +7704,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_TailGlow, + .validApprenticeMove = TRUE, }, [MOVE_LUSTER_PURGE] = @@ -7486,6 +7730,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, .battleAnimScript = gBattleAnimMove_LusterPurge, + .validApprenticeMove = TRUE, }, [MOVE_MIST_BALL] = @@ -7512,6 +7757,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, .battleAnimScript = gBattleAnimMove_MistBall, + .validApprenticeMove = TRUE, }, [MOVE_FEATHER_DANCE] = @@ -7536,6 +7782,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_FeatherDance, + .validApprenticeMove = TRUE, }, [MOVE_TEETER_DANCE] = @@ -7560,6 +7807,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_TeeterDance, + .validApprenticeMove = TRUE, }, [MOVE_BLAZE_KICK] = @@ -7587,6 +7835,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_BlazeKick, + .validApprenticeMove = TRUE, }, [MOVE_MUD_SPORT] = @@ -7612,6 +7861,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_MUD_SPORT, .contestComboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM, COMBO_STARTER_WATER_SPORT}, .battleAnimScript = gBattleAnimMove_MudSport, + .validApprenticeMove = TRUE, }, [MOVE_ICE_BALL] = @@ -7664,6 +7914,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_NeedleArm, + .validApprenticeMove = TRUE, }, [MOVE_SLACK_OFF] = @@ -7690,6 +7941,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SlackOff, + .validApprenticeMove = TRUE, }, [MOVE_HYPER_VOICE] = @@ -7713,6 +7965,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_HyperVoice, + .validApprenticeMove = TRUE, }, [MOVE_POISON_FANG] = @@ -7766,6 +8019,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, .battleAnimScript = gBattleAnimMove_CrushClaw, + .validApprenticeMove = TRUE, }, [MOVE_BLAST_BURN] = @@ -7791,6 +8045,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_BlastBurn, + .validApprenticeMove = TRUE, }, [MOVE_HYDRO_CANNON] = @@ -7816,6 +8071,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_HydroCannon, + .validApprenticeMove = TRUE, }, [MOVE_METEOR_MASH] = @@ -7844,6 +8100,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_MeteorMash, + .validApprenticeMove = TRUE, }, [MOVE_ASTONISH] = @@ -7871,6 +8128,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Astonish, + .validApprenticeMove = TRUE, }, [MOVE_WEATHER_BALL] = @@ -7894,6 +8152,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SANDSTORM, COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_WeatherBall, + .validApprenticeMove = TRUE, }, [MOVE_AROMATHERAPY] = @@ -7919,6 +8178,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Aromatherapy, + .validApprenticeMove = TRUE, }, [MOVE_FAKE_TEARS] = @@ -7942,6 +8202,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_FakeTears, + .validApprenticeMove = TRUE, }, [MOVE_AIR_CUTTER] = @@ -7966,6 +8227,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_AirCutter, + .validApprenticeMove = TRUE, }, [MOVE_OVERHEAT] = @@ -7992,6 +8254,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, .battleAnimScript = gBattleAnimMove_Overheat, + .validApprenticeMove = TRUE, }, [MOVE_ODOR_SLEUTH] = @@ -8016,6 +8279,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_OdorSleuth, + .validApprenticeMove = TRUE, }, [MOVE_ROCK_TOMB] = @@ -8041,6 +8305,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ROCK_THROW}, .battleAnimScript = gBattleAnimMove_RockTomb, + .validApprenticeMove = TRUE, }, [MOVE_SILVER_WIND] = @@ -8068,6 +8333,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SilverWind, + .validApprenticeMove = TRUE, }, [MOVE_METAL_SOUND] = @@ -8093,6 +8359,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_METAL_SOUND, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_MetalSound, + .validApprenticeMove = TRUE, }, [MOVE_GRASS_WHISTLE] = @@ -8118,6 +8385,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_GrassWhistle, + .validApprenticeMove = TRUE, }, [MOVE_TICKLE] = @@ -8141,6 +8409,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Tickle, + .validApprenticeMove = TRUE, }, [MOVE_COSMIC_POWER] = @@ -8166,6 +8435,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_CosmicPower, + .validApprenticeMove = TRUE, }, [MOVE_WATER_SPOUT] = @@ -8187,6 +8457,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_WaterSpout, + .validApprenticeMove = TRUE, }, [MOVE_SIGNAL_BEAM] = @@ -8212,6 +8483,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_SignalBeam, + .validApprenticeMove = TRUE, }, [MOVE_SHADOW_PUNCH] = @@ -8235,6 +8507,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_ShadowPunch, + .validApprenticeMove = TRUE, }, [MOVE_EXTRASENSORY] = @@ -8261,6 +8534,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Extrasensory, + .validApprenticeMove = TRUE, }, [MOVE_SKY_UPPERCUT] = @@ -8285,6 +8559,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, .battleAnimScript = gBattleAnimMove_SkyUppercut, + .validApprenticeMove = TRUE, }, [MOVE_SAND_TOMB] = @@ -8309,6 +8584,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SANDSTORM}, .battleAnimScript = gBattleAnimMove_SandTomb, + .validApprenticeMove = TRUE, }, [MOVE_SHEER_COLD] = @@ -8330,6 +8606,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_MIND_READER}, .battleAnimScript = gBattleAnimMove_SheerCold, + .validApprenticeMove = TRUE, }, [MOVE_MUDDY_WATER] = @@ -8356,6 +8633,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_MuddyWater, + .validApprenticeMove = TRUE, }, [MOVE_BULLET_SEED] = @@ -8401,6 +8679,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_AerialAce, + .validApprenticeMove = TRUE, }, [MOVE_ICICLE_SPEAR] = @@ -8447,6 +8726,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_IronDefense, + .validApprenticeMove = TRUE, }, [MOVE_BLOCK] = @@ -8471,6 +8751,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Block, + .validApprenticeMove = TRUE, }, [MOVE_HOWL] = @@ -8497,6 +8778,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Howl, + .validApprenticeMove = TRUE, }, [MOVE_DRAGON_CLAW] = @@ -8519,6 +8801,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, .battleAnimScript = gBattleAnimMove_DragonClaw, + .validApprenticeMove = TRUE, }, [MOVE_FRENZY_PLANT] = @@ -8545,6 +8828,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, .battleAnimScript = gBattleAnimMove_FrenzyPlant, + .validApprenticeMove = TRUE, }, [MOVE_BULK_UP] = @@ -8570,6 +8854,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_BulkUp, + .validApprenticeMove = TRUE, }, [MOVE_BOUNCE] = @@ -8601,6 +8886,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Bounce, + .validApprenticeMove = TRUE, }, [MOVE_MUD_SHOT] = @@ -8653,6 +8939,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_PoisonTail, + .validApprenticeMove = TRUE, }, [MOVE_COVET] = @@ -8682,6 +8969,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_Covet, + .validApprenticeMove = TRUE, }, [MOVE_VOLT_TACKLE] = @@ -8711,6 +8999,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_VoltTackle, + .validApprenticeMove = TRUE, }, [MOVE_MAGICAL_LEAF] = @@ -8732,6 +9021,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, .battleAnimScript = gBattleAnimMove_MagicalLeaf, + .validApprenticeMove = TRUE, }, [MOVE_WATER_SPORT] = @@ -8757,6 +9047,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_WATER_SPORT, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_WaterSport, + .validApprenticeMove = TRUE, }, [MOVE_CALM_MIND] = @@ -8782,6 +9073,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_CALM_MIND, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_CalmMind, + .validApprenticeMove = TRUE, }, [MOVE_LEAF_BLADE] = @@ -8806,6 +9098,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_LeafBlade, + .validApprenticeMove = TRUE, }, [MOVE_DRAGON_DANCE] = @@ -8832,6 +9125,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = COMBO_STARTER_DRAGON_DANCE, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, .battleAnimScript = gBattleAnimMove_DragonDance, + .validApprenticeMove = TRUE, }, [MOVE_ROCK_BLAST] = @@ -8875,6 +9169,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, .battleAnimScript = gBattleAnimMove_ShockWave, + .validApprenticeMove = TRUE, }, [MOVE_WATER_PULSE] = @@ -8901,6 +9196,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, .battleAnimScript = gBattleAnimMove_WaterPulse, + .validApprenticeMove = TRUE, }, [MOVE_DOOM_DESIRE] = @@ -8924,6 +9220,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {0}, .battleAnimScript = gBattleAnimMove_DoomDesire, + .validApprenticeMove = TRUE, }, [MOVE_PSYCHO_BOOST] = @@ -8949,6 +9246,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, .battleAnimScript = gBattleAnimMove_PsychoBoost, + .validApprenticeMove = TRUE, }, [MOVE_ROOST] = @@ -10839,7 +11137,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .zMove = { .effect = Z_EFFECT_ACC_UP_1 }, - //.ignoresSubstitute = TRUE, + //.ignoresSubstitute = TRUE, In Gen5+, the evasion drop will no longer bypass Substitute. However, this is tricky to code .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, @@ -13335,7 +13633,6 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - //.windMove = TRUE, .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = MOVE_EFFECT_ACC_MINUS_1, .chance = 50, @@ -15153,7 +15450,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = COMPOUND_STRING("Nuzzle"), .description = COMPOUND_STRING( - "Rubs its cheecks against\n" + "Rubs its cheeks against\n" "the foe, paralyzing it."), .effect = EFFECT_HIT, .power = 20, @@ -16558,7 +16855,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Steals the target's stat\n" "boosts, then attacks."), - .effect = EFFECT_HIT, + .effect = EFFECT_SPECTRAL_THIEF, .power = 90, .type = TYPE_GHOST, .accuracy = 100, @@ -16569,9 +16866,6 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresSubstitute = TRUE, .makesContact = TRUE, .metronomeBanned = TRUE, - .additionalEffects = ADDITIONAL_EFFECTS({ - .moveEffect = MOVE_EFFECT_SPECTRAL_THIEF, - }), .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, @@ -17069,7 +17363,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Wrap foe with whirlwind of\n" "scent. Heals party's status."), - .effect = EFFECT_SPARKLY_SWIRL, // Temprorary + .effect = EFFECT_HIT, .power = B_UPDATED_MOVE_DATA >= GEN_8 ? 120 : 90, .type = TYPE_FAIRY, .accuracy = B_UPDATED_MOVE_DATA >= GEN_8 ? 85 : 100, @@ -17079,11 +17373,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - // .additionalEffects = ADDITIONAL_EFFECTS({ - // .moveEffect = 0, // MOVE_EFFECT_AROMATHERAPY, Added 0 for Sheer Force boost - // .chance = 100, - // .sheerForceBoost = SHEER_FORCE_NO_BOOST, - // }), + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_AROMATHERAPY, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), .battleAnimScript = gBattleAnimMove_SparklySwirl, }, @@ -20364,7 +20658,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .argument = { .absorbPercentage = 50 }, .thawsUser = TRUE, .metronomeBanned = TRUE, - .healingMove = B_EXTRAPOLATED_MOVE_FLAGS, + .healingMove = TRUE, .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = MOVE_EFFECT_BURN, .chance = 20, @@ -21250,8 +21544,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_SUN }, .battleAnimScript = gBattleAnimMove_MaxFlare, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_SUN, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_FLUTTERBY] = @@ -21266,8 +21564,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_LOWER_SP_ATK }, .battleAnimScript = gBattleAnimMove_MaxFlutterby, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_LOWER_SP_ATK_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_LIGHTNING] = @@ -21282,8 +21584,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_ELECTRIC_TERRAIN }, .battleAnimScript = gBattleAnimMove_MaxLightning, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_ELECTRIC_TERRAIN, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_STRIKE] = @@ -21298,8 +21604,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_LOWER_SPEED }, .battleAnimScript = gBattleAnimMove_MaxStrike, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_LOWER_SPEED_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_KNUCKLE] = @@ -21314,8 +21624,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_RAISE_TEAM_ATTACK }, .battleAnimScript = gBattleAnimMove_MaxKnuckle, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_RAISE_TEAM_ATTACK, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_PHANTASM] = @@ -21330,8 +21644,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_LOWER_DEFENSE }, .battleAnimScript = gBattleAnimMove_MaxPhantasm, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_LOWER_DEFENSE_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_HAILSTORM] = @@ -21346,8 +21664,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_HAIL }, .battleAnimScript = gBattleAnimMove_MaxHailstorm, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_HAIL, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_OOZE] = @@ -21362,8 +21684,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_RAISE_TEAM_SP_ATK }, .battleAnimScript = gBattleAnimMove_MaxOoze, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_RAISE_TEAM_SP_ATK, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_GEYSER] = @@ -21378,8 +21704,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_RAIN }, .battleAnimScript = gBattleAnimMove_MaxGeyser, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_RAIN, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_AIRSTREAM] = @@ -21394,8 +21724,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_RAISE_TEAM_SPEED }, .battleAnimScript = gBattleAnimMove_MaxAirstream, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_RAISE_TEAM_SPEED, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_STARFALL] = @@ -21410,8 +21744,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_MISTY_TERRAIN }, .battleAnimScript = gBattleAnimMove_MaxStarfall, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_MISTY_TERRAIN, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_WYRMWIND] = @@ -21426,8 +21764,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_LOWER_ATTACK }, .battleAnimScript = gBattleAnimMove_MaxWyrmwind, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_LOWER_ATTACK_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_MINDSTORM] = @@ -21442,8 +21784,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_PSYCHIC_TERRAIN }, .battleAnimScript = gBattleAnimMove_MaxMindstorm, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_PSYCHIC_TERRAIN, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_ROCKFALL] = @@ -21458,8 +21804,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_SANDSTORM }, .battleAnimScript = gBattleAnimMove_MaxRockfall, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_SANDSTORM, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_QUAKE] = @@ -21474,9 +21824,13 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_RAISE_TEAM_SP_DEF }, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, .battleAnimScript = gBattleAnimMove_MaxQuake, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_RAISE_TEAM_SP_DEF, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_DARKNESS] = @@ -21491,8 +21845,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_LOWER_SP_DEF }, .battleAnimScript = gBattleAnimMove_MaxDarkness, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_LOWER_SP_DEF_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_OVERGROWTH] = @@ -21507,8 +21865,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_GRASSY_TERRAIN }, .battleAnimScript = gBattleAnimMove_MaxOvergrowth, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_GRASSY_TERRAIN, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_MAX_STEELSPIKE] = @@ -21523,8 +21885,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_RAISE_TEAM_DEFENSE }, .battleAnimScript = gBattleAnimMove_MaxSteelspike, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_RAISE_TEAM_DEFENSE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_VINE_LASH] = @@ -21539,8 +21905,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_VINE_LASH }, .battleAnimScript = gBattleAnimMove_GMaxVineLash, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_VINE_LASH, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_WILDFIRE] = @@ -21555,8 +21925,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_WILDFIRE }, .battleAnimScript = gBattleAnimMove_GMaxWildfire, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_WILDFIRE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_CANNONADE] = @@ -21571,8 +21945,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_CANNONADE }, .battleAnimScript = gBattleAnimMove_GMaxCannonade, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_CANNONADE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_BEFUDDLE] = @@ -21587,8 +21965,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_EFFECT_SPORE_FOES }, .battleAnimScript = gBattleAnimMove_GMaxBefuddle, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_EFFECT_SPORE_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_VOLT_CRASH] = @@ -21603,8 +21985,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_PARALYZE_FOES }, .battleAnimScript = gBattleAnimMove_GMaxVoltCrash, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_PARALYZE_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_GOLD_RUSH] = @@ -21619,8 +22005,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_CONFUSE_FOES_PAY_DAY }, .battleAnimScript = gBattleAnimMove_GMaxGoldRush, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_CONFUSE_PAY_DAY_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_CHI_STRIKE] = @@ -21635,8 +22025,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_CRIT_PLUS }, .battleAnimScript = gBattleAnimMove_GMaxChiStrike, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_CRIT_PLUS_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_TERROR] = @@ -21651,8 +22045,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_MEAN_LOOK }, .battleAnimScript = gBattleAnimMove_GMaxTerror, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_PREVENT_ESCAPE_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_FOAM_BURST] = @@ -21667,8 +22065,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_LOWER_SPEED_2_FOES }, .battleAnimScript = gBattleAnimMove_GMaxFoamBurst, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_LOWER_SPEED_2_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_RESONANCE] = @@ -21683,8 +22085,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_AURORA_VEIL }, .battleAnimScript = gBattleAnimMove_GMaxResonance, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_AURORA_VEIL, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_CUDDLE] = @@ -21699,8 +22105,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_INFATUATE_FOES }, .battleAnimScript = gBattleAnimMove_GMaxCuddle, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_INFATUATE_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_REPLENISH] = @@ -21715,8 +22125,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_RECYCLE_BERRIES }, .battleAnimScript = gBattleAnimMove_GMaxReplenish, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_RECYCLE_BERRIES, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_MALODOR] = @@ -21731,8 +22145,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_POISON_FOES }, .battleAnimScript = gBattleAnimMove_GMaxMalodor, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_POISON_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_MELTDOWN] = @@ -21747,8 +22165,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_TORMENT_FOES }, .battleAnimScript = gBattleAnimMove_GMaxMeltdown, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_TORMENT_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_DRUM_SOLO] = @@ -21763,9 +22185,13 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_FIXED_POWER }, .ignoresTargetAbility = TRUE, .battleAnimScript = gBattleAnimMove_GMaxDrumSolo, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_FIXED_POWER, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_FIREBALL] = @@ -21780,9 +22206,13 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_FIXED_POWER }, .ignoresTargetAbility = TRUE, .battleAnimScript = gBattleAnimMove_GMaxFireball, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_FIXED_POWER, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_HYDROSNIPE] = @@ -21797,9 +22227,13 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_FIXED_POWER }, .ignoresTargetAbility = TRUE, .battleAnimScript = gBattleAnimMove_GMaxHydrosnipe, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_FIXED_POWER, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_WIND_RAGE] = @@ -21814,8 +22248,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_DEFOG }, .battleAnimScript = gBattleAnimMove_GMaxWindRage, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_DEFOG, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_GRAVITAS] = @@ -21830,8 +22268,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_GRAVITY }, .battleAnimScript = gBattleAnimMove_GMaxGravitas, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_GRAVITY, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_STONESURGE] = @@ -21846,8 +22288,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_STEALTH_ROCK }, .battleAnimScript = gBattleAnimMove_GMaxStonesurge, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_STEALTH_ROCK, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_VOLCALITH] = @@ -21862,8 +22308,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_VOLCALITH }, .battleAnimScript = gBattleAnimMove_GMaxVolcalith, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_VOLCALITH, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_TARTNESS] = @@ -21878,8 +22328,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_LOWER_EVASIVENESS_FOES }, .battleAnimScript = gBattleAnimMove_GMaxTartness, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_LOWER_EVASIVENESS_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_SWEETNESS] = @@ -21894,8 +22348,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_AROMATHERAPY }, .battleAnimScript = gBattleAnimMove_GMaxSweetness, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_AROMATHERAPY, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_SANDBLAST] = @@ -21910,8 +22368,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_SANDBLAST_FOES }, .battleAnimScript = gBattleAnimMove_GMaxSandblast, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_SANDBLAST_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_STUN_SHOCK] = @@ -21926,8 +22388,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_POISON_PARALYZE_FOES }, .battleAnimScript = gBattleAnimMove_GMaxStunShock, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_POISON_PARALYZE_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_CENTIFERNO] = @@ -21942,8 +22408,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_FIRE_SPIN_FOES }, .battleAnimScript = gBattleAnimMove_GMaxCentiferno, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_FIRE_SPIN_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_SMITE] = @@ -21958,8 +22428,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_CONFUSE_FOES }, .battleAnimScript = gBattleAnimMove_GMaxSmite, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_CONFUSE_SIDE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, @@ -21975,8 +22449,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_YAWN_FOE }, .battleAnimScript = gBattleAnimMove_GMaxSnooze, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_YAWN_FOE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_FINALE] = @@ -21991,8 +22469,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_HEAL_TEAM }, .battleAnimScript = gBattleAnimMove_GMaxFinale, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_HEAL_TEAM, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_STEELSURGE] = @@ -22007,8 +22489,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_STEELSURGE }, .battleAnimScript = gBattleAnimMove_GMaxSteelsurge, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_STEELSURGE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_DEPLETION] = @@ -22023,8 +22509,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_SPITE }, .battleAnimScript = gBattleAnimMove_GMaxDepletion, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_SPITE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), }, [MOVE_G_MAX_ONE_BLOW] = @@ -22039,14 +22529,14 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_BYPASS_PROTECT }, + .ignoresProtect = TRUE, .battleAnimScript = gBattleAnimMove_GMaxOneBlow, }, [MOVE_G_MAX_RAPID_FLOW] = { .name = COMPOUND_STRING("G-Max Rapid Flow"), - .description = sNullDescription, //ANIM TODO + .description = sNullDescription, .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_WATER, @@ -22055,8 +22545,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = { .maxEffect = MAX_EFFECT_BYPASS_PROTECT }, + .ignoresProtect = TRUE, .battleAnimScript = gBattleAnimMove_GMaxRapidFlow, }, - }; diff --git a/src/data/object_events/object_event_pic_tables_followers.h b/src/data/object_events/object_event_pic_tables_followers.h new file mode 100644 index 0000000000..d77010c0c0 --- /dev/null +++ b/src/data/object_events/object_event_pic_tables_followers.h @@ -0,0 +1,6632 @@ +static const struct SpriteFrameImage sPicTable_Substitute[] = { + overworld_ascending_frames(gObjectEventPic_Substitute, 4, 4), +}; + +#if OW_POKEMON_OBJECT_EVENTS +#if P_FAMILY_BULBASAUR +static const struct SpriteFrameImage sPicTable_Bulbasaur[] = { + overworld_ascending_frames(gObjectEventPic_Bulbasaur, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Ivysaur[] = { + overworld_ascending_frames(gObjectEventPic_Ivysaur, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Venusaur[] = { + overworld_ascending_frames(gObjectEventPic_Venusaur, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_VenusaurF[] = { + overworld_ascending_frames(gObjectEventPic_VenusaurF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_VenusaurMega[] = { + overworld_ascending_frames(gObjectEventPic_VenusaurMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_VenusaurGmax[] = { + overworld_ascending_frames(gObjectEventPic_VenusaurGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_BULBASAUR + +#if P_FAMILY_CHARMANDER +static const struct SpriteFrameImage sPicTable_Charmander[] = { + overworld_ascending_frames(gObjectEventPic_Charmander, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Charmeleon[] = { + overworld_ascending_frames(gObjectEventPic_Charmeleon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Charizard[] = { + overworld_ascending_frames(gObjectEventPic_Charizard, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_CharizardMegaX[] = { + overworld_ascending_frames(gObjectEventPic_CharizardMegaX, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_CharizardMegaY[] = { + overworld_ascending_frames(gObjectEventPic_CharizardMegaY, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_CharizardGmax[] = { + overworld_ascending_frames(gObjectEventPic_CharizardGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_CHARMANDER + +#if P_FAMILY_SQUIRTLE +static const struct SpriteFrameImage sPicTable_Squirtle[] = { + overworld_ascending_frames(gObjectEventPic_Squirtle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Wartortle[] = { + overworld_ascending_frames(gObjectEventPic_Wartortle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Blastoise[] = { + overworld_ascending_frames(gObjectEventPic_Blastoise, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_BlastoiseMega[] = { + overworld_ascending_frames(gObjectEventPic_BlastoiseMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_BlastoiseGmax[] = { + overworld_ascending_frames(gObjectEventPic_BlastoiseGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_SQUIRTLE + +#if P_FAMILY_CATERPIE +static const struct SpriteFrameImage sPicTable_Caterpie[] = { + overworld_ascending_frames(gObjectEventPic_Caterpie, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Metapod[] = { + overworld_ascending_frames(gObjectEventPic_Metapod, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Butterfree[] = { + overworld_ascending_frames(gObjectEventPic_Butterfree, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_ButterfreeF[] = { + overworld_ascending_frames(gObjectEventPic_ButterfreeF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_ButterfreeGmax[] = { + overworld_ascending_frames(gObjectEventPic_ButterfreeGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_CATERPIE + +#if P_FAMILY_WEEDLE +static const struct SpriteFrameImage sPicTable_Weedle[] = { + overworld_ascending_frames(gObjectEventPic_Weedle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Kakuna[] = { + overworld_ascending_frames(gObjectEventPic_Kakuna, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Beedrill[] = { + overworld_ascending_frames(gObjectEventPic_Beedrill, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_BeedrillMega[] = { + overworld_ascending_frames(gObjectEventPic_BeedrillMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_WEEDLE + +#if P_FAMILY_PIDGEY +static const struct SpriteFrameImage sPicTable_Pidgey[] = { + overworld_ascending_frames(gObjectEventPic_Pidgey, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Pidgeotto[] = { + overworld_ascending_frames(gObjectEventPic_Pidgeotto, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Pidgeot[] = { + overworld_ascending_frames(gObjectEventPic_Pidgeot, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_PidgeotMega[] = { + overworld_ascending_frames(gObjectEventPic_PidgeotMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_PIDGEY + +#if P_FAMILY_RATTATA +static const struct SpriteFrameImage sPicTable_Rattata[] = { + overworld_ascending_frames(gObjectEventPic_Rattata, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_RattataF[] = { + overworld_ascending_frames(gObjectEventPic_RattataF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Raticate[] = { + overworld_ascending_frames(gObjectEventPic_Raticate, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_RaticateF[] = { + overworld_ascending_frames(gObjectEventPic_RaticateF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_ALOLAN_FORMS +static const struct SpriteFrameImage sPicTable_RattataAlola[] = { + overworld_ascending_frames(gObjectEventPic_RattataAlola, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_RaticateAlola[] = { + overworld_ascending_frames(gObjectEventPic_RaticateAlola, 4, 4), +}; +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_RATTATA + +#if P_FAMILY_SPEAROW +static const struct SpriteFrameImage sPicTable_Spearow[] = { + overworld_ascending_frames(gObjectEventPic_Spearow, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Fearow[] = { + overworld_ascending_frames(gObjectEventPic_Fearow, 4, 4), +}; +#endif //P_FAMILY_SPEAROW + +#if P_FAMILY_EKANS +static const struct SpriteFrameImage sPicTable_Ekans[] = { + overworld_ascending_frames(gObjectEventPic_Ekans, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Arbok[] = { + overworld_ascending_frames(gObjectEventPic_Arbok, 4, 4), +}; +#endif //P_FAMILY_EKANS + +#if P_FAMILY_PIKACHU +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Pichu[] = { + overworld_ascending_frames(gObjectEventPic_Pichu, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PichuSpikyEared[] = { + overworld_ascending_frames(gObjectEventPic_PichuSpikyEared, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Pikachu[] = { + overworld_ascending_frames(gObjectEventPic_Pikachu, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_PikachuF[] = { + overworld_ascending_frames(gObjectEventPic_PikachuF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_COSPLAY_PIKACHU_FORMS +/*static const struct SpriteFrameImage sPicTable_PikachuCosplay[] = { + overworld_ascending_frames(gObjectEventPic_PikachuCosplay, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuRockStar[] = { + overworld_ascending_frames(gObjectEventPic_PikachuRockStar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuBelle[] = { + overworld_ascending_frames(gObjectEventPic_PikachuBelle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuPopStar[] = { + overworld_ascending_frames(gObjectEventPic_PikachuPopStar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuPhD[] = { + overworld_ascending_frames(gObjectEventPic_PikachuPhD, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuLibre[] = { + overworld_ascending_frames(gObjectEventPic_PikachuLibre, 4, 4), +};*/ +#endif //P_COSPLAY_PIKACHU_FORMS + +#if P_CAP_PIKACHU_FORMS +/*static const struct SpriteFrameImage sPicTable_PikachuOriginal[] = { + overworld_ascending_frames(gObjectEventPic_PikachuOriginal, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuHoenn[] = { + overworld_ascending_frames(gObjectEventPic_PikachuHoenn, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuSinnoh[] = { + overworld_ascending_frames(gObjectEventPic_PikachuSinnoh, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuUnova[] = { + overworld_ascending_frames(gObjectEventPic_PikachuUnova, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuKalos[] = { + overworld_ascending_frames(gObjectEventPic_PikachuKalos, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuAlola[] = { + overworld_ascending_frames(gObjectEventPic_PikachuAlola, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuPartner[] = { + overworld_ascending_frames(gObjectEventPic_PikachuPartner, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PikachuWorld[] = { + overworld_ascending_frames(gObjectEventPic_PikachuWorld, 4, 4), +};*/ +#endif //P_CAP_PIKACHU_FORMS + +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_PikachuGmax[] = { + overworld_ascending_frames(gObjectEventPic_PikachuGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS + +static const struct SpriteFrameImage sPicTable_Raichu[] = { + overworld_ascending_frames(gObjectEventPic_Raichu, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_RaichuF[] = { + overworld_ascending_frames(gObjectEventPic_RaichuF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_ALOLAN_FORMS +static const struct SpriteFrameImage sPicTable_RaichuAlola[] = { + overworld_ascending_frames(gObjectEventPic_RaichuAlola, 4, 4), +}; +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_PIKACHU + +#if P_FAMILY_SANDSHREW +static const struct SpriteFrameImage sPicTable_Sandshrew[] = { + overworld_ascending_frames(gObjectEventPic_Sandshrew, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Sandslash[] = { + overworld_ascending_frames(gObjectEventPic_Sandslash, 4, 4), +}; +#if P_ALOLAN_FORMS +static const struct SpriteFrameImage sPicTable_SandshrewAlola[] = { + overworld_ascending_frames(gObjectEventPic_SandshrewAlola, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_SandslashAlola[] = { + overworld_ascending_frames(gObjectEventPic_SandslashAlola, 4, 4), +}; +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_SANDSHREW + +#if P_FAMILY_NIDORAN +static const struct SpriteFrameImage sPicTable_NidoranF[] = { + overworld_ascending_frames(gObjectEventPic_NidoranF, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Nidorina[] = { + overworld_ascending_frames(gObjectEventPic_Nidorina, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Nidoqueen[] = { + overworld_ascending_frames(gObjectEventPic_Nidoqueen, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_NidoranM[] = { + overworld_ascending_frames(gObjectEventPic_NidoranM, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Nidorino[] = { + overworld_ascending_frames(gObjectEventPic_Nidorino, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Nidoking[] = { + overworld_ascending_frames(gObjectEventPic_Nidoking, 4, 4), +}; +#endif //P_FAMILY_NIDORAN + +#if P_FAMILY_CLEFAIRY +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Cleffa[] = { + overworld_ascending_frames(gObjectEventPic_Cleffa, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Clefairy[] = { + overworld_ascending_frames(gObjectEventPic_Clefairy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Clefable[] = { + overworld_ascending_frames(gObjectEventPic_Clefable, 4, 4), +}; +#endif //P_FAMILY_CLEFAIRY + +#if P_FAMILY_VULPIX +static const struct SpriteFrameImage sPicTable_Vulpix[] = { + overworld_ascending_frames(gObjectEventPic_Vulpix, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Ninetales[] = { + overworld_ascending_frames(gObjectEventPic_Ninetales, 4, 4), +}; +#if P_ALOLAN_FORMS +static const struct SpriteFrameImage sPicTable_VulpixAlola[] = { + overworld_ascending_frames(gObjectEventPic_VulpixAlola, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_NinetalesAlola[] = { + overworld_ascending_frames(gObjectEventPic_NinetalesAlola, 4, 4), +}; +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_VULPIX + +#if P_FAMILY_JIGGLYPUFF +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Igglybuff[] = { + overworld_ascending_frames(gObjectEventPic_Igglybuff, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Jigglypuff[] = { + overworld_ascending_frames(gObjectEventPic_Jigglypuff, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Wigglytuff[] = { + overworld_ascending_frames(gObjectEventPic_Wigglytuff, 4, 4), +}; +#endif //P_FAMILY_JIGGLYPUFF + +#if P_FAMILY_ZUBAT +static const struct SpriteFrameImage sPicTable_Zubat[] = { + overworld_ascending_frames(gObjectEventPic_Zubat, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_ZubatF[] = { + overworld_ascending_frames(gObjectEventPic_ZubatF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Golbat[] = { + overworld_ascending_frames(gObjectEventPic_Golbat, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_GolbatF[] = { + overworld_ascending_frames(gObjectEventPic_GolbatF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Crobat[] = { + overworld_ascending_frames(gObjectEventPic_Crobat, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +#endif //P_FAMILY_ZUBAT + +#if P_FAMILY_ODDISH +static const struct SpriteFrameImage sPicTable_Oddish[] = { + overworld_ascending_frames(gObjectEventPic_Oddish, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Gloom[] = { + overworld_ascending_frames(gObjectEventPic_Gloom, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_GloomF[] = { + overworld_ascending_frames(gObjectEventPic_GloomF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Vileplume[] = { + overworld_ascending_frames(gObjectEventPic_Vileplume, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_VileplumeF[] = { + overworld_ascending_frames(gObjectEventPic_VileplumeF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Bellossom[] = { + overworld_ascending_frames(gObjectEventPic_Bellossom, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +#endif //P_FAMILY_ODDISH + +#if P_FAMILY_PARAS +static const struct SpriteFrameImage sPicTable_Paras[] = { + overworld_ascending_frames(gObjectEventPic_Paras, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Parasect[] = { + overworld_ascending_frames(gObjectEventPic_Parasect, 4, 4), +}; +#endif //P_FAMILY_PARAS + +#if P_FAMILY_VENONAT +static const struct SpriteFrameImage sPicTable_Venonat[] = { + overworld_ascending_frames(gObjectEventPic_Venonat, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Venomoth[] = { + overworld_ascending_frames(gObjectEventPic_Venomoth, 4, 4), +}; +#endif //P_FAMILY_VENONAT + +#if P_FAMILY_DIGLETT +static const struct SpriteFrameImage sPicTable_Diglett[] = { + overworld_ascending_frames(gObjectEventPic_Diglett, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dugtrio[] = { + overworld_ascending_frames(gObjectEventPic_Dugtrio, 4, 4), +}; +#if P_ALOLAN_FORMS +static const struct SpriteFrameImage sPicTable_DiglettAlola[] = { + overworld_ascending_frames(gObjectEventPic_DiglettAlola, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_DugtrioAlola[] = { + overworld_ascending_frames(gObjectEventPic_DugtrioAlola, 4, 4), +}; +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_DIGLETT + +#if P_FAMILY_MEOWTH +static const struct SpriteFrameImage sPicTable_Meowth[] = { + overworld_ascending_frames(gObjectEventPic_Meowth, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Persian[] = { + overworld_ascending_frames(gObjectEventPic_Persian, 4, 4), +}; +#if P_ALOLAN_FORMS +static const struct SpriteFrameImage sPicTable_MeowthAlola[] = { + overworld_ascending_frames(gObjectEventPic_MeowthAlola, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PersianAlola[] = { + overworld_ascending_frames(gObjectEventPic_PersianAlola, 4, 4), +}; +#endif //P_ALOLAN_FORMS + +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_MeowthGalar[] = { + overworld_ascending_frames(gObjectEventPic_MeowthGalar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Perrserker[] = { + overworld_ascending_frames(gObjectEventPic_Perrserker, 4, 4), +}; +#endif //P_GALARIAN_FORMS + +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_MeowthGmax[] = { + overworld_ascending_frames(gObjectEventPic_MeowthGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_MEOWTH + +#if P_FAMILY_PSYDUCK +static const struct SpriteFrameImage sPicTable_Psyduck[] = { + overworld_ascending_frames(gObjectEventPic_Psyduck, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Golduck[] = { + overworld_ascending_frames(gObjectEventPic_Golduck, 4, 4), +}; +#endif //P_FAMILY_PSYDUCK + +#if P_FAMILY_MANKEY +static const struct SpriteFrameImage sPicTable_Mankey[] = { + overworld_ascending_frames(gObjectEventPic_Mankey, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Primeape[] = { + overworld_ascending_frames(gObjectEventPic_Primeape, 4, 4), +}; +#if P_GEN_9_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Annihilape[] = { + overworld_ascending_frames(gObjectEventPic_Annihilape, 4, 4), +}; +#endif //P_GEN_9_CROSS_EVOS +#endif //P_FAMILY_MANKEY + +#if P_FAMILY_GROWLITHE +static const struct SpriteFrameImage sPicTable_Growlithe[] = { + overworld_ascending_frames(gObjectEventPic_Growlithe, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Arcanine[] = { + overworld_ascending_frames(gObjectEventPic_Arcanine, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_GrowlitheHisui[] = { + overworld_ascending_frames(gObjectEventPic_GrowlitheHisui, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_ArcanineHisui[] = { + overworld_ascending_frames(gObjectEventPic_ArcanineHisui, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_GROWLITHE + +#if P_FAMILY_POLIWAG +static const struct SpriteFrameImage sPicTable_Poliwag[] = { + overworld_ascending_frames(gObjectEventPic_Poliwag, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Poliwhirl[] = { + overworld_ascending_frames(gObjectEventPic_Poliwhirl, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Poliwrath[] = { + overworld_ascending_frames(gObjectEventPic_Poliwrath, 4, 4), +}; +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Politoed[] = { + overworld_ascending_frames(gObjectEventPic_Politoed, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_PolitoedF[] = { + overworld_ascending_frames(gObjectEventPic_PolitoedF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_GEN_2_CROSS_EVOS +#endif //P_FAMILY_POLIWAG + +#if P_FAMILY_ABRA +static const struct SpriteFrameImage sPicTable_Abra[] = { + overworld_ascending_frames(gObjectEventPic_Abra, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Kadabra[] = { + overworld_ascending_frames(gObjectEventPic_Kadabra, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_KadabraF[] = { + overworld_ascending_frames(gObjectEventPic_KadabraF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Alakazam[] = { + overworld_ascending_frames(gObjectEventPic_Alakazam, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_AlakazamF[] = { + overworld_ascending_frames(gObjectEventPic_AlakazamF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_AlakazamMega[] = { + overworld_ascending_frames(gObjectEventPic_AlakazamMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_ABRA + +#if P_FAMILY_MACHOP +static const struct SpriteFrameImage sPicTable_Machop[] = { + overworld_ascending_frames(gObjectEventPic_Machop, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Machoke[] = { + overworld_ascending_frames(gObjectEventPic_Machoke, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Machamp[] = { + overworld_ascending_frames(gObjectEventPic_Machamp, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_MachampGmax[] = { + overworld_ascending_frames(gObjectEventPic_MachampGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_MACHOP + +#if P_FAMILY_BELLSPROUT +static const struct SpriteFrameImage sPicTable_Bellsprout[] = { + overworld_ascending_frames(gObjectEventPic_Bellsprout, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Weepinbell[] = { + overworld_ascending_frames(gObjectEventPic_Weepinbell, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Victreebel[] = { + overworld_ascending_frames(gObjectEventPic_Victreebel, 4, 4), +}; +#endif //P_FAMILY_BELLSPROUT + +#if P_FAMILY_TENTACOOL +static const struct SpriteFrameImage sPicTable_Tentacool[] = { + overworld_ascending_frames(gObjectEventPic_Tentacool, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Tentacruel[] = { + overworld_ascending_frames(gObjectEventPic_Tentacruel, 4, 4), +}; +#endif //P_FAMILY_TENTACOOL + +#if P_FAMILY_GEODUDE +static const struct SpriteFrameImage sPicTable_Geodude[] = { + overworld_ascending_frames(gObjectEventPic_Geodude, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Graveler[] = { + overworld_ascending_frames(gObjectEventPic_Graveler, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Golem[] = { + overworld_ascending_frames(gObjectEventPic_Golem, 4, 4), +}; +#if P_ALOLAN_FORMS +static const struct SpriteFrameImage sPicTable_GeodudeAlola[] = { + overworld_ascending_frames(gObjectEventPic_GeodudeAlola, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_GravelerAlola[] = { + overworld_ascending_frames(gObjectEventPic_GravelerAlola, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_GolemAlola[] = { + overworld_ascending_frames(gObjectEventPic_GolemAlola, 4, 4), +}; +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_GEODUDE + +#if P_FAMILY_PONYTA +static const struct SpriteFrameImage sPicTable_Ponyta[] = { + overworld_ascending_frames(gObjectEventPic_Ponyta, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Rapidash[] = { + overworld_ascending_frames(gObjectEventPic_Rapidash, 4, 4), +}; +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_PonytaGalar[] = { + overworld_ascending_frames(gObjectEventPic_PonytaGalar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_RapidashGalar[] = { + overworld_ascending_frames(gObjectEventPic_RapidashGalar, 4, 4), +}; +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_PONYTA + +#if P_FAMILY_SLOWPOKE +static const struct SpriteFrameImage sPicTable_Slowpoke[] = { + overworld_ascending_frames(gObjectEventPic_Slowpoke, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Slowbro[] = { + overworld_ascending_frames(gObjectEventPic_Slowbro, 4, 4), +}; +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Slowking[] = { + overworld_ascending_frames(gObjectEventPic_Slowking, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS + +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_SlowbroMega[] = { + overworld_ascending_frames(gObjectEventPic_SlowbroMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS + +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_SlowpokeGalar[] = { + overworld_ascending_frames(gObjectEventPic_SlowpokeGalar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_SlowbroGalar[] = { + overworld_ascending_frames(gObjectEventPic_SlowbroGalar, 4, 4), +}; +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_SlowkingGalar[] = { + overworld_ascending_frames(gObjectEventPic_SlowkingGalar, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_SLOWPOKE + +#if P_FAMILY_MAGNEMITE +static const struct SpriteFrameImage sPicTable_Magnemite[] = { + overworld_ascending_frames(gObjectEventPic_Magnemite, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Magneton[] = { + overworld_ascending_frames(gObjectEventPic_Magneton, 4, 4), +}; +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Magnezone[] = { + overworld_ascending_frames(gObjectEventPic_Magnezone, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_MAGNEMITE + +#if P_FAMILY_FARFETCHD +static const struct SpriteFrameImage sPicTable_Farfetchd[] = { + overworld_ascending_frames(gObjectEventPic_Farfetchd, 4, 4), +}; +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_FarfetchdGalar[] = { + overworld_ascending_frames(gObjectEventPic_FarfetchdGalar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Sirfetchd[] = { + overworld_ascending_frames(gObjectEventPic_Sirfetchd, 4, 4), +}; +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_FARFETCHD + +#if P_FAMILY_DODUO +static const struct SpriteFrameImage sPicTable_Doduo[] = { + overworld_ascending_frames(gObjectEventPic_Doduo, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_DoduoF[] = { + overworld_ascending_frames(gObjectEventPic_DoduoF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Dodrio[] = { + overworld_ascending_frames(gObjectEventPic_Dodrio, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_DodrioF[] = { + overworld_ascending_frames(gObjectEventPic_DodrioF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_DODUO + +#if P_FAMILY_SEEL +static const struct SpriteFrameImage sPicTable_Seel[] = { + overworld_ascending_frames(gObjectEventPic_Seel, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dewgong[] = { + overworld_ascending_frames(gObjectEventPic_Dewgong, 4, 4), +}; +#endif //P_FAMILY_SEEL + +#if P_FAMILY_GRIMER +static const struct SpriteFrameImage sPicTable_Grimer[] = { + overworld_ascending_frames(gObjectEventPic_Grimer, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Muk[] = { + overworld_ascending_frames(gObjectEventPic_Muk, 4, 4), +}; +#if P_ALOLAN_FORMS +static const struct SpriteFrameImage sPicTable_GrimerAlola[] = { + overworld_ascending_frames(gObjectEventPic_GrimerAlola, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MukAlola[] = { + overworld_ascending_frames(gObjectEventPic_MukAlola, 4, 4), +}; +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_GRIMER + +#if P_FAMILY_SHELLDER +static const struct SpriteFrameImage sPicTable_Shellder[] = { + overworld_ascending_frames(gObjectEventPic_Shellder, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Cloyster[] = { + overworld_ascending_frames(gObjectEventPic_Cloyster, 4, 4), +}; +#endif //P_FAMILY_SHELLDER + +#if P_FAMILY_GASTLY +static const struct SpriteFrameImage sPicTable_Gastly[] = { + overworld_ascending_frames(gObjectEventPic_Gastly, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Haunter[] = { + overworld_ascending_frames(gObjectEventPic_Haunter, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Gengar[] = { + overworld_ascending_frames(gObjectEventPic_Gengar, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_GengarMega[] = { + overworld_ascending_frames(gObjectEventPic_GengarMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_GengarGmax[] = { + overworld_ascending_frames(gObjectEventPic_GengarGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_GASTLY + +#if P_FAMILY_ONIX +static const struct SpriteFrameImage sPicTable_Onix[] = { + overworld_ascending_frames(gObjectEventPic_Onix, 4, 4), +}; +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Steelix[] = { + overworld_ascending_frames(gObjectEventPic_Steelix, 8, 8), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_SteelixF[] = { + overworld_ascending_frames(gObjectEventPic_SteelixF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_SteelixMega[] = { + overworld_ascending_frames(gObjectEventPic_SteelixMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_GEN_2_CROSS_EVOS +#endif //P_FAMILY_ONIX + +#if P_FAMILY_DROWZEE +static const struct SpriteFrameImage sPicTable_Drowzee[] = { + overworld_ascending_frames(gObjectEventPic_Drowzee, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Hypno[] = { + overworld_ascending_frames(gObjectEventPic_Hypno, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_HypnoF[] = { + overworld_ascending_frames(gObjectEventPic_HypnoF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_DROWZEE + +#if P_FAMILY_KRABBY +static const struct SpriteFrameImage sPicTable_Krabby[] = { + overworld_ascending_frames(gObjectEventPic_Krabby, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Kingler[] = { + overworld_ascending_frames(gObjectEventPic_Kingler, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_KinglerGmax[] = { + overworld_ascending_frames(gObjectEventPic_KinglerGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_KRABBY + +#if P_FAMILY_VOLTORB +static const struct SpriteFrameImage sPicTable_Voltorb[] = { + overworld_ascending_frames(gObjectEventPic_Voltorb, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Electrode[] = { + overworld_ascending_frames(gObjectEventPic_Electrode, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_VoltorbHisui[] = { + overworld_ascending_frames(gObjectEventPic_VoltorbHisui, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_ElectrodeHisui[] = { + overworld_ascending_frames(gObjectEventPic_ElectrodeHisui, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_VOLTORB + +#if P_FAMILY_EXEGGCUTE +static const struct SpriteFrameImage sPicTable_Exeggcute[] = { + overworld_ascending_frames(gObjectEventPic_Exeggcute, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Exeggutor[] = { + overworld_ascending_frames(gObjectEventPic_Exeggutor, 4, 4), +}; +#if P_ALOLAN_FORMS +static const struct SpriteFrameImage sPicTable_ExeggutorAlola[] = { + overworld_ascending_frames(gObjectEventPic_ExeggutorAlola, 8, 8), +}; +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_EXEGGCUTE + +#if P_FAMILY_CUBONE +static const struct SpriteFrameImage sPicTable_Cubone[] = { + overworld_ascending_frames(gObjectEventPic_Cubone, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Marowak[] = { + overworld_ascending_frames(gObjectEventPic_Marowak, 4, 4), +}; +#if P_ALOLAN_FORMS +static const struct SpriteFrameImage sPicTable_MarowakAlola[] = { + overworld_ascending_frames(gObjectEventPic_MarowakAlola, 4, 4), +}; +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_CUBONE + +#if P_FAMILY_HITMONS +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Tyrogue[] = { + overworld_ascending_frames(gObjectEventPic_Tyrogue, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Hitmonlee[] = { + overworld_ascending_frames(gObjectEventPic_Hitmonlee, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Hitmonchan[] = { + overworld_ascending_frames(gObjectEventPic_Hitmonchan, 4, 4), +}; +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Hitmontop[] = { + overworld_ascending_frames(gObjectEventPic_Hitmontop, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +#endif //P_FAMILY_HITMONS + +#if P_FAMILY_LICKITUNG +static const struct SpriteFrameImage sPicTable_Lickitung[] = { + overworld_ascending_frames(gObjectEventPic_Lickitung, 4, 4), +}; +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Lickilicky[] = { + overworld_ascending_frames(gObjectEventPic_Lickilicky, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_LICKITUNG + +#if P_FAMILY_KOFFING +static const struct SpriteFrameImage sPicTable_Koffing[] = { + overworld_ascending_frames(gObjectEventPic_Koffing, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Weezing[] = { + overworld_ascending_frames(gObjectEventPic_Weezing, 4, 4), +}; +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_WeezingGalar[] = { + overworld_ascending_frames(gObjectEventPic_WeezingGalar, 4, 4), +}; +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_KOFFING + +#if P_FAMILY_RHYHORN +static const struct SpriteFrameImage sPicTable_Rhyhorn[] = { + overworld_ascending_frames(gObjectEventPic_Rhyhorn, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_RhyhornF[] = { + overworld_ascending_frames(gObjectEventPic_RhyhornF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Rhydon[] = { + overworld_ascending_frames(gObjectEventPic_Rhydon, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_RhydonF[] = { + overworld_ascending_frames(gObjectEventPic_RhydonF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Rhyperior[] = { + overworld_ascending_frames(gObjectEventPic_Rhyperior, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_RhyperiorF[] = { + overworld_ascending_frames(gObjectEventPic_RhyperiorF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_RHYHORN + +#if P_FAMILY_CHANSEY +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Happiny[] = { + overworld_ascending_frames(gObjectEventPic_Happiny, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Chansey[] = { + overworld_ascending_frames(gObjectEventPic_Chansey, 4, 4), +}; +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Blissey[] = { + overworld_ascending_frames(gObjectEventPic_Blissey, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +#endif //P_FAMILY_CHANSEY + +#if P_FAMILY_TANGELA +static const struct SpriteFrameImage sPicTable_Tangela[] = { + overworld_ascending_frames(gObjectEventPic_Tangela, 4, 4), +}; +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Tangrowth[] = { + overworld_ascending_frames(gObjectEventPic_Tangrowth, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_TangrowthF[] = { + overworld_ascending_frames(gObjectEventPic_TangrowthF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_TANGELA + +#if P_FAMILY_KANGASKHAN +static const struct SpriteFrameImage sPicTable_Kangaskhan[] = { + overworld_ascending_frames(gObjectEventPic_Kangaskhan, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_KangaskhanMega[] = { + overworld_ascending_frames(gObjectEventPic_KangaskhanMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_KANGASKHAN + +#if P_FAMILY_HORSEA +static const struct SpriteFrameImage sPicTable_Horsea[] = { + overworld_ascending_frames(gObjectEventPic_Horsea, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Seadra[] = { + overworld_ascending_frames(gObjectEventPic_Seadra, 4, 4), +}; +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Kingdra[] = { + overworld_ascending_frames(gObjectEventPic_Kingdra, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +#endif //P_FAMILY_HORSEA + +#if P_FAMILY_GOLDEEN +static const struct SpriteFrameImage sPicTable_Goldeen[] = { + overworld_ascending_frames(gObjectEventPic_Goldeen, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_GoldeenF[] = { + overworld_ascending_frames(gObjectEventPic_GoldeenF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Seaking[] = { + overworld_ascending_frames(gObjectEventPic_Seaking, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_SeakingF[] = { + overworld_ascending_frames(gObjectEventPic_SeakingF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_GOLDEEN + +#if P_FAMILY_STARYU +static const struct SpriteFrameImage sPicTable_Staryu[] = { + overworld_ascending_frames(gObjectEventPic_Staryu, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Starmie[] = { + overworld_ascending_frames(gObjectEventPic_Starmie, 4, 4), +}; +#endif //P_FAMILY_STARYU + +#if P_FAMILY_MR_MIME +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_MimeJr[] = { + overworld_ascending_frames(gObjectEventPic_MimeJr, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_MrMime[] = { + overworld_ascending_frames(gObjectEventPic_MrMime, 4, 4), +}; +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_MrMimeGalar[] = { + overworld_ascending_frames(gObjectEventPic_MrMimeGalar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MrRime[] = { + overworld_ascending_frames(gObjectEventPic_MrRime, 4, 4), +}; +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_MR_MIME + +#if P_FAMILY_SCYTHER +static const struct SpriteFrameImage sPicTable_Scyther[] = { + overworld_ascending_frames(gObjectEventPic_Scyther, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_ScytherF[] = { + overworld_ascending_frames(gObjectEventPic_ScytherF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Scizor[] = { + overworld_ascending_frames(gObjectEventPic_Scizor, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_ScizorF[] = { + overworld_ascending_frames(gObjectEventPic_ScizorF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_ScizorMega[] = { + overworld_ascending_frames(gObjectEventPic_ScizorMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_GEN_2_CROSS_EVOS + +#if P_GEN_8_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Kleavor[] = { + overworld_ascending_frames(gObjectEventPic_Kleavor, 4, 4), +}; +#endif //P_GEN_8_CROSS_EVOS +#endif //P_FAMILY_SCYTHER + +#if P_FAMILY_JYNX +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Smoochum[] = { + overworld_ascending_frames(gObjectEventPic_Smoochum, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Jynx[] = { + overworld_ascending_frames(gObjectEventPic_Jynx, 4, 4), +}; +#endif //P_FAMILY_JYNX + +#if P_FAMILY_ELECTABUZZ +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Elekid[] = { + overworld_ascending_frames(gObjectEventPic_Elekid, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Electabuzz[] = { + overworld_ascending_frames(gObjectEventPic_Electabuzz, 4, 4), +}; +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Electivire[] = { + overworld_ascending_frames(gObjectEventPic_Electivire, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_ELECTABUZZ + +#if P_FAMILY_MAGMAR +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Magby[] = { + overworld_ascending_frames(gObjectEventPic_Magby, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Magmar[] = { + overworld_ascending_frames(gObjectEventPic_Magmar, 4, 4), +}; +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Magmortar[] = { + overworld_ascending_frames(gObjectEventPic_Magmortar, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_MAGMAR + +#if P_FAMILY_PINSIR +static const struct SpriteFrameImage sPicTable_Pinsir[] = { + overworld_ascending_frames(gObjectEventPic_Pinsir, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_PinsirMega[] = { + overworld_ascending_frames(gObjectEventPic_PinsirMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_PINSIR + +#if P_FAMILY_TAUROS +static const struct SpriteFrameImage sPicTable_Tauros[] = { + overworld_ascending_frames(gObjectEventPic_Tauros, 4, 4), +}; +#if P_PALDEAN_FORMS +static const struct SpriteFrameImage sPicTable_TaurosPaldeaCombat[] = { + overworld_ascending_frames(gObjectEventPic_TaurosPaldeaCombat, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_TaurosPaldeaBlaze[] = { + overworld_ascending_frames(gObjectEventPic_TaurosPaldeaBlaze, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_TaurosPaldeaAqua[] = { + overworld_ascending_frames(gObjectEventPic_TaurosPaldeaAqua, 4, 4), +}; +#endif //P_PALDEAN_FORMS +#endif //P_FAMILY_TAUROS + +#if P_FAMILY_MAGIKARP +static const struct SpriteFrameImage sPicTable_Magikarp[] = { + overworld_ascending_frames(gObjectEventPic_Magikarp, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_MagikarpF[] = { + overworld_ascending_frames(gObjectEventPic_MagikarpF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Gyarados[] = { + overworld_ascending_frames(gObjectEventPic_Gyarados, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_GyaradosF[] = { + overworld_ascending_frames(gObjectEventPic_GyaradosF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_GyaradosMega[] = { + overworld_ascending_frames(gObjectEventPic_GyaradosMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_MAGIKARP + +#if P_FAMILY_LAPRAS +static const struct SpriteFrameImage sPicTable_Lapras[] = { + overworld_ascending_frames(gObjectEventPic_Lapras, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_LaprasGmax[] = { + overworld_ascending_frames(gObjectEventPic_LaprasGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_LAPRAS + +#if P_FAMILY_DITTO +static const struct SpriteFrameImage sPicTable_Ditto[] = { + overworld_ascending_frames(gObjectEventPic_Ditto, 4, 4), +}; +#endif //P_FAMILY_DITTO + +#if P_FAMILY_EEVEE +static const struct SpriteFrameImage sPicTable_Eevee[] = { + overworld_ascending_frames(gObjectEventPic_Eevee, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_EeveeF[] = { + overworld_ascending_frames(gObjectEventPic_EeveeF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_EeveeGmax[] = { + overworld_ascending_frames(gObjectEventPic_EeveeGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS + +static const struct SpriteFrameImage sPicTable_Vaporeon[] = { + overworld_ascending_frames(gObjectEventPic_Vaporeon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Jolteon[] = { + overworld_ascending_frames(gObjectEventPic_Jolteon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Flareon[] = { + overworld_ascending_frames(gObjectEventPic_Flareon, 4, 4), +}; +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Espeon[] = { + overworld_ascending_frames(gObjectEventPic_Espeon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Umbreon[] = { + overworld_ascending_frames(gObjectEventPic_Umbreon, 4, 4), +}; +#endif //P_GEN_2_CROSS_EVOS + +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Leafeon[] = { + overworld_ascending_frames(gObjectEventPic_Leafeon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Glaceon[] = { + overworld_ascending_frames(gObjectEventPic_Glaceon, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS + +#if P_GEN_6_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Sylveon[] = { + overworld_ascending_frames(gObjectEventPic_Sylveon, 4, 4), +}; +#endif //P_GEN_6_CROSS_EVOS +#endif //P_FAMILY_EEVEE + +#if P_FAMILY_PORYGON +static const struct SpriteFrameImage sPicTable_Porygon[] = { + overworld_ascending_frames(gObjectEventPic_Porygon, 4, 4), +}; +#if P_GEN_2_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Porygon2[] = { + overworld_ascending_frames(gObjectEventPic_Porygon2, 4, 4), +}; +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_PorygonZ[] = { + overworld_ascending_frames(gObjectEventPic_PorygonZ, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_GEN_2_CROSS_EVOS +#endif //P_FAMILY_PORYGON + +#if P_FAMILY_OMANYTE +static const struct SpriteFrameImage sPicTable_Omanyte[] = { + overworld_ascending_frames(gObjectEventPic_Omanyte, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Omastar[] = { + overworld_ascending_frames(gObjectEventPic_Omastar, 4, 4), +}; +#endif //P_FAMILY_OMANYTE + +#if P_FAMILY_KABUTO +static const struct SpriteFrameImage sPicTable_Kabuto[] = { + overworld_ascending_frames(gObjectEventPic_Kabuto, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Kabutops[] = { + overworld_ascending_frames(gObjectEventPic_Kabutops, 4, 4), +}; +#endif //P_FAMILY_KABUTO + +#if P_FAMILY_AERODACTYL +static const struct SpriteFrameImage sPicTable_Aerodactyl[] = { + overworld_ascending_frames(gObjectEventPic_Aerodactyl, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_AerodactylMega[] = { + overworld_ascending_frames(gObjectEventPic_AerodactylMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_AERODACTYL + +#if P_FAMILY_SNORLAX +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Munchlax[] = { + overworld_ascending_frames(gObjectEventPic_Munchlax, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Snorlax[] = { + overworld_ascending_frames(gObjectEventPic_Snorlax, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_SnorlaxGmax[] = { + overworld_ascending_frames(gObjectEventPic_SnorlaxGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_SNORLAX + +#if P_FAMILY_ARTICUNO +static const struct SpriteFrameImage sPicTable_Articuno[] = { + overworld_ascending_frames(gObjectEventPic_Articuno, 4, 4), +}; +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_ArticunoGalar[] = { + overworld_ascending_frames(gObjectEventPic_ArticunoGalar, 4, 4), +}; +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_ARTICUNO + +#if P_FAMILY_ZAPDOS +static const struct SpriteFrameImage sPicTable_Zapdos[] = { + overworld_ascending_frames(gObjectEventPic_Zapdos, 4, 4), +}; +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_ZapdosGalar[] = { + overworld_ascending_frames(gObjectEventPic_ZapdosGalar, 4, 4), +}; +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_ZAPDOS + +#if P_FAMILY_MOLTRES +static const struct SpriteFrameImage sPicTable_Moltres[] = { + overworld_ascending_frames(gObjectEventPic_Moltres, 4, 4), +}; +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_MoltresGalar[] = { + overworld_ascending_frames(gObjectEventPic_MoltresGalar, 4, 4), +}; +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_MOLTRES + +#if P_FAMILY_DRATINI +static const struct SpriteFrameImage sPicTable_Dratini[] = { + overworld_ascending_frames(gObjectEventPic_Dratini, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dragonair[] = { + overworld_ascending_frames(gObjectEventPic_Dragonair, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dragonite[] = { + overworld_ascending_frames(gObjectEventPic_Dragonite, 4, 4), +}; +#endif //P_FAMILY_DRATINI + +#if P_FAMILY_MEWTWO +static const struct SpriteFrameImage sPicTable_Mewtwo[] = { + overworld_ascending_frames(gObjectEventPic_Mewtwo, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_MewtwoMegaX[] = { + overworld_ascending_frames(gObjectEventPic_MewtwoMegaX, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MewtwoMegaY[] = { + overworld_ascending_frames(gObjectEventPic_MewtwoMegaY, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_MEWTWO + +#if P_FAMILY_MEW +static const struct SpriteFrameImage sPicTable_Mew[] = { + overworld_ascending_frames(gObjectEventPic_Mew, 4, 4), +}; +#endif //P_FAMILY_MEW + +#if P_FAMILY_CHIKORITA +static const struct SpriteFrameImage sPicTable_Chikorita[] = { + overworld_ascending_frames(gObjectEventPic_Chikorita, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Bayleef[] = { + overworld_ascending_frames(gObjectEventPic_Bayleef, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Meganium[] = { + overworld_ascending_frames(gObjectEventPic_Meganium, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_MeganiumF[] = { + overworld_ascending_frames(gObjectEventPic_MeganiumF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_CHIKORITA + +#if P_FAMILY_CYNDAQUIL +static const struct SpriteFrameImage sPicTable_Cyndaquil[] = { + overworld_ascending_frames(gObjectEventPic_Cyndaquil, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Quilava[] = { + overworld_ascending_frames(gObjectEventPic_Quilava, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Typhlosion[] = { + overworld_ascending_frames(gObjectEventPic_Typhlosion, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_TyphlosionHisui[] = { + overworld_ascending_frames(gObjectEventPic_TyphlosionHisui, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_CYNDAQUIL + +#if P_FAMILY_TOTODILE +static const struct SpriteFrameImage sPicTable_Totodile[] = { + overworld_ascending_frames(gObjectEventPic_Totodile, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Croconaw[] = { + overworld_ascending_frames(gObjectEventPic_Croconaw, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Feraligatr[] = { + overworld_ascending_frames(gObjectEventPic_Feraligatr, 4, 4), +}; +#endif //P_FAMILY_TOTODILE + +#if P_FAMILY_SENTRET +static const struct SpriteFrameImage sPicTable_Sentret[] = { + overworld_ascending_frames(gObjectEventPic_Sentret, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Furret[] = { + overworld_ascending_frames(gObjectEventPic_Furret, 4, 4), +}; +#endif //P_FAMILY_SENTRET + +#if P_FAMILY_HOOTHOOT +static const struct SpriteFrameImage sPicTable_Hoothoot[] = { + overworld_ascending_frames(gObjectEventPic_Hoothoot, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Noctowl[] = { + overworld_ascending_frames(gObjectEventPic_Noctowl, 4, 4), +}; +#endif //P_FAMILY_HOOTHOOT + +#if P_FAMILY_LEDYBA +static const struct SpriteFrameImage sPicTable_Ledyba[] = { + overworld_ascending_frames(gObjectEventPic_Ledyba, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_LedybaF[] = { + overworld_ascending_frames(gObjectEventPic_LedybaF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Ledian[] = { + overworld_ascending_frames(gObjectEventPic_Ledian, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_LedianF[] = { + overworld_ascending_frames(gObjectEventPic_LedianF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_LEDYBA + +#if P_FAMILY_SPINARAK +static const struct SpriteFrameImage sPicTable_Spinarak[] = { + overworld_ascending_frames(gObjectEventPic_Spinarak, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Ariados[] = { + overworld_ascending_frames(gObjectEventPic_Ariados, 4, 4), +}; +#endif //P_FAMILY_SPINARAK + +#if P_FAMILY_CHINCHOU +static const struct SpriteFrameImage sPicTable_Chinchou[] = { + overworld_ascending_frames(gObjectEventPic_Chinchou, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Lanturn[] = { + overworld_ascending_frames(gObjectEventPic_Lanturn, 4, 4), +}; +#endif //P_FAMILY_CHINCHOU + +#if P_FAMILY_TOGEPI +static const struct SpriteFrameImage sPicTable_Togepi[] = { + overworld_ascending_frames(gObjectEventPic_Togepi, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Togetic[] = { + overworld_ascending_frames(gObjectEventPic_Togetic, 4, 4), +}; +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Togekiss[] = { + overworld_ascending_frames(gObjectEventPic_Togekiss, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_TOGEPI + +#if P_FAMILY_NATU +static const struct SpriteFrameImage sPicTable_Natu[] = { + overworld_ascending_frames(gObjectEventPic_Natu, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Xatu[] = { + overworld_ascending_frames(gObjectEventPic_Xatu, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_XatuF[] = { + overworld_ascending_frames(gObjectEventPic_XatuF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_NATU + +#if P_FAMILY_MAREEP +static const struct SpriteFrameImage sPicTable_Mareep[] = { + overworld_ascending_frames(gObjectEventPic_Mareep, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Flaaffy[] = { + overworld_ascending_frames(gObjectEventPic_Flaaffy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Ampharos[] = { + overworld_ascending_frames(gObjectEventPic_Ampharos, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_AmpharosMega[] = { + overworld_ascending_frames(gObjectEventPic_AmpharosMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_MAREEP + +#if P_FAMILY_MARILL +#if P_GEN_3_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Azurill[] = { + overworld_ascending_frames(gObjectEventPic_Azurill, 4, 4), +}; +#endif //P_GEN_3_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Marill[] = { + overworld_ascending_frames(gObjectEventPic_Marill, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Azumarill[] = { + overworld_ascending_frames(gObjectEventPic_Azumarill, 4, 4), +}; +#endif //P_FAMILY_MARILL + +#if P_FAMILY_SUDOWOODO +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Bonsly[] = { + overworld_ascending_frames(gObjectEventPic_Bonsly, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Sudowoodo[] = { + overworld_ascending_frames(gObjectEventPic_Sudowoodo, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_SudowoodoF[] = { + overworld_ascending_frames(gObjectEventPic_SudowoodoF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_SUDOWOODO + +#if P_FAMILY_HOPPIP +static const struct SpriteFrameImage sPicTable_Hoppip[] = { + overworld_ascending_frames(gObjectEventPic_Hoppip, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Skiploom[] = { + overworld_ascending_frames(gObjectEventPic_Skiploom, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Jumpluff[] = { + overworld_ascending_frames(gObjectEventPic_Jumpluff, 4, 4), +}; +#endif //P_FAMILY_HOPPIP + +#if P_FAMILY_AIPOM +static const struct SpriteFrameImage sPicTable_Aipom[] = { + overworld_ascending_frames(gObjectEventPic_Aipom, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_AipomF[] = { + overworld_ascending_frames(gObjectEventPic_AipomF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Ambipom[] = { + overworld_ascending_frames(gObjectEventPic_Ambipom, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_AmbipomF[] = { + overworld_ascending_frames(gObjectEventPic_AmbipomF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_AIPOM + +#if P_FAMILY_SUNKERN +static const struct SpriteFrameImage sPicTable_Sunkern[] = { + overworld_ascending_frames(gObjectEventPic_Sunkern, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Sunflora[] = { + overworld_ascending_frames(gObjectEventPic_Sunflora, 4, 4), +}; +#endif //P_FAMILY_SUNKERN + +#if P_FAMILY_YANMA +static const struct SpriteFrameImage sPicTable_Yanma[] = { + overworld_ascending_frames(gObjectEventPic_Yanma, 4, 4), +}; +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Yanmega[] = { + overworld_ascending_frames(gObjectEventPic_Yanmega, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_YANMA + +#if P_FAMILY_WOOPER +static const struct SpriteFrameImage sPicTable_Wooper[] = { + overworld_ascending_frames(gObjectEventPic_Wooper, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_WooperF[] = { + overworld_ascending_frames(gObjectEventPic_WooperF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Quagsire[] = { + overworld_ascending_frames(gObjectEventPic_Quagsire, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_QuagsireF[] = { + overworld_ascending_frames(gObjectEventPic_QuagsireF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_PALDEAN_FORMS +static const struct SpriteFrameImage sPicTable_WooperPaldea[] = { + overworld_ascending_frames(gObjectEventPic_WooperPaldea, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Clodsire[] = { + overworld_ascending_frames(gObjectEventPic_Clodsire, 4, 4), +}; +#endif //P_PALDEAN_FORMS +#endif //P_FAMILY_WOOPER + +#if P_FAMILY_MURKROW +static const struct SpriteFrameImage sPicTable_Murkrow[] = { + overworld_ascending_frames(gObjectEventPic_Murkrow, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_MurkrowF[] = { + overworld_ascending_frames(gObjectEventPic_MurkrowF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Honchkrow[] = { + overworld_ascending_frames(gObjectEventPic_Honchkrow, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_MURKROW + +#if P_FAMILY_MISDREAVUS +static const struct SpriteFrameImage sPicTable_Misdreavus[] = { + overworld_ascending_frames(gObjectEventPic_Misdreavus, 4, 4), +}; +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Mismagius[] = { + overworld_ascending_frames(gObjectEventPic_Mismagius, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_MISDREAVUS + +#if P_FAMILY_UNOWN +static const struct SpriteFrameImage sPicTable_UnownA[] = { + overworld_ascending_frames(gObjectEventPic_UnownA, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownB[] = { + overworld_ascending_frames(gObjectEventPic_UnownB, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownC[] = { + overworld_ascending_frames(gObjectEventPic_UnownC, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownD[] = { + overworld_ascending_frames(gObjectEventPic_UnownD, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownE[] = { + overworld_ascending_frames(gObjectEventPic_UnownE, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownF[] = { + overworld_ascending_frames(gObjectEventPic_UnownF, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownG[] = { + overworld_ascending_frames(gObjectEventPic_UnownG, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownH[] = { + overworld_ascending_frames(gObjectEventPic_UnownH, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownI[] = { + overworld_ascending_frames(gObjectEventPic_UnownI, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownJ[] = { + overworld_ascending_frames(gObjectEventPic_UnownJ, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownK[] = { + overworld_ascending_frames(gObjectEventPic_UnownK, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownL[] = { + overworld_ascending_frames(gObjectEventPic_UnownL, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownM[] = { + overworld_ascending_frames(gObjectEventPic_UnownM, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownN[] = { + overworld_ascending_frames(gObjectEventPic_UnownN, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownO[] = { + overworld_ascending_frames(gObjectEventPic_UnownO, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownP[] = { + overworld_ascending_frames(gObjectEventPic_UnownP, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownQ[] = { + overworld_ascending_frames(gObjectEventPic_UnownQ, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownR[] = { + overworld_ascending_frames(gObjectEventPic_UnownR, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownS[] = { + overworld_ascending_frames(gObjectEventPic_UnownS, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownT[] = { + overworld_ascending_frames(gObjectEventPic_UnownT, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownU[] = { + overworld_ascending_frames(gObjectEventPic_UnownU, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownV[] = { + overworld_ascending_frames(gObjectEventPic_UnownV, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownW[] = { + overworld_ascending_frames(gObjectEventPic_UnownW, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownX[] = { + overworld_ascending_frames(gObjectEventPic_UnownX, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownY[] = { + overworld_ascending_frames(gObjectEventPic_UnownY, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownZ[] = { + overworld_ascending_frames(gObjectEventPic_UnownZ, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownExclamation[] = { + overworld_ascending_frames(gObjectEventPic_UnownExclamation, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UnownQuestion[] = { + overworld_ascending_frames(gObjectEventPic_UnownQuestion, 4, 4), +}; +#endif //P_FAMILY_UNOWN + +#if P_FAMILY_WOBBUFFET +#if P_GEN_3_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Wynaut[] = { + overworld_ascending_frames(gObjectEventPic_Wynaut, 4, 4), +}; +#endif //P_GEN_3_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Wobbuffet[] = { + overworld_ascending_frames(gObjectEventPic_Wobbuffet, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_WobbuffetF[] = { + overworld_ascending_frames(gObjectEventPic_WobbuffetF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_WOBBUFFET + +#if P_FAMILY_GIRAFARIG +static const struct SpriteFrameImage sPicTable_Girafarig[] = { + overworld_ascending_frames(gObjectEventPic_Girafarig, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_GirafarigF[] = { + overworld_ascending_frames(gObjectEventPic_GirafarigF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_9_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Farigiraf[] = { + overworld_ascending_frames(gObjectEventPic_Farigiraf, 4, 4), +}; +#endif //P_GEN_9_CROSS_EVOS +#endif //P_FAMILY_GIRAFARIG + +#if P_FAMILY_PINECO +static const struct SpriteFrameImage sPicTable_Pineco[] = { + overworld_ascending_frames(gObjectEventPic_Pineco, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Forretress[] = { + overworld_ascending_frames(gObjectEventPic_Forretress, 4, 4), +}; +#endif //P_FAMILY_PINECO + +#if P_FAMILY_DUNSPARCE +static const struct SpriteFrameImage sPicTable_Dunsparce[] = { + overworld_ascending_frames(gObjectEventPic_Dunsparce, 4, 4), +}; +#if P_GEN_9_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_DudunsparceTwoSegment[] = { + overworld_ascending_frames(gObjectEventPic_DudunsparceTwoSegment, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_DudunsparceThreeSegment[] = { + overworld_ascending_frames(gObjectEventPic_DudunsparceThreeSegment, 8, 8), +}; + + +#endif //P_GEN_9_CROSS_EVOS +#endif //P_FAMILY_DUNSPARCE + +#if P_FAMILY_GLIGAR +static const struct SpriteFrameImage sPicTable_Gligar[] = { + overworld_ascending_frames(gObjectEventPic_Gligar, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_GligarF[] = { + overworld_ascending_frames(gObjectEventPic_GligarF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Gliscor[] = { + overworld_ascending_frames(gObjectEventPic_Gliscor, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_GLIGAR + +#if P_FAMILY_SNUBBULL +static const struct SpriteFrameImage sPicTable_Snubbull[] = { + overworld_ascending_frames(gObjectEventPic_Snubbull, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Granbull[] = { + overworld_ascending_frames(gObjectEventPic_Granbull, 4, 4), +}; +#endif //P_FAMILY_SNUBBULL + +#if P_FAMILY_QWILFISH +static const struct SpriteFrameImage sPicTable_Qwilfish[] = { + overworld_ascending_frames(gObjectEventPic_Qwilfish, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_QwilfishHisui[] = { + overworld_ascending_frames(gObjectEventPic_QwilfishHisui, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Overqwil[] = { + overworld_ascending_frames(gObjectEventPic_Overqwil, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_QWILFISH + +#if P_FAMILY_SHUCKLE +static const struct SpriteFrameImage sPicTable_Shuckle[] = { + overworld_ascending_frames(gObjectEventPic_Shuckle, 4, 4), +}; +#endif //P_FAMILY_SHUCKLE + +#if P_FAMILY_HERACROSS +static const struct SpriteFrameImage sPicTable_Heracross[] = { + overworld_ascending_frames(gObjectEventPic_Heracross, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_HeracrossF[] = { + overworld_ascending_frames(gObjectEventPic_HeracrossF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_HeracrossMega[] = { + overworld_ascending_frames(gObjectEventPic_HeracrossMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_HERACROSS + +#if P_FAMILY_SNEASEL +static const struct SpriteFrameImage sPicTable_Sneasel[] = { + overworld_ascending_frames(gObjectEventPic_Sneasel, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_SneaselF[] = { + overworld_ascending_frames(gObjectEventPic_SneaselF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Weavile[] = { + overworld_ascending_frames(gObjectEventPic_Weavile, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_WeavileF[] = { + overworld_ascending_frames(gObjectEventPic_WeavileF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_GEN_4_CROSS_EVOS + +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_SneaselHisui[] = { + overworld_ascending_frames(gObjectEventPic_SneaselHisui, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_SneaselHisuiF[] = { + overworld_ascending_frames(gObjectEventPic_SneaselHisuiF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Sneasler[] = { + overworld_ascending_frames(gObjectEventPic_Sneasler, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_SNEASEL + +#if P_FAMILY_TEDDIURSA +static const struct SpriteFrameImage sPicTable_Teddiursa[] = { + overworld_ascending_frames(gObjectEventPic_Teddiursa, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Ursaring[] = { + overworld_ascending_frames(gObjectEventPic_Ursaring, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_UrsaringF[] = { + overworld_ascending_frames(gObjectEventPic_UrsaringF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_8_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Ursaluna[] = { + overworld_ascending_frames(gObjectEventPic_Ursaluna, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UrsalunaBloodmoon[] = { + overworld_ascending_frames(gObjectEventPic_UrsalunaBloodmoon, 4, 4), +}; +#endif //P_GEN_8_CROSS_EVOS +#endif //P_FAMILY_TEDDIURSA + +#if P_FAMILY_SLUGMA +static const struct SpriteFrameImage sPicTable_Slugma[] = { + overworld_ascending_frames(gObjectEventPic_Slugma, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Magcargo[] = { + overworld_ascending_frames(gObjectEventPic_Magcargo, 4, 4), +}; +#endif //P_FAMILY_SLUGMA + +#if P_FAMILY_SWINUB +static const struct SpriteFrameImage sPicTable_Swinub[] = { + overworld_ascending_frames(gObjectEventPic_Swinub, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Piloswine[] = { + overworld_ascending_frames(gObjectEventPic_Piloswine, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_PiloswineF[] = { + overworld_ascending_frames(gObjectEventPic_PiloswineF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Mamoswine[] = { + overworld_ascending_frames(gObjectEventPic_Mamoswine, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_MamoswineF[] = { + overworld_ascending_frames(gObjectEventPic_MamoswineF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_SWINUB + +#if P_FAMILY_CORSOLA +static const struct SpriteFrameImage sPicTable_Corsola[] = { + overworld_ascending_frames(gObjectEventPic_Corsola, 4, 4), +}; +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_CorsolaGalar[] = { + overworld_ascending_frames(gObjectEventPic_CorsolaGalar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Cursola[] = { + overworld_ascending_frames(gObjectEventPic_Cursola, 4, 4), +}; +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_CORSOLA + +#if P_FAMILY_REMORAID +static const struct SpriteFrameImage sPicTable_Remoraid[] = { + overworld_ascending_frames(gObjectEventPic_Remoraid, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Octillery[] = { + overworld_ascending_frames(gObjectEventPic_Octillery, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_OctilleryF[] = { + overworld_ascending_frames(gObjectEventPic_OctilleryF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_REMORAID + +#if P_FAMILY_DELIBIRD +static const struct SpriteFrameImage sPicTable_Delibird[] = { + overworld_ascending_frames(gObjectEventPic_Delibird, 4, 4), +}; +#endif //P_FAMILY_DELIBIRD + +#if P_FAMILY_MANTINE +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Mantyke[] = { + overworld_ascending_frames(gObjectEventPic_Mantyke, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Mantine[] = { + overworld_ascending_frames(gObjectEventPic_Mantine, 4, 4), +}; +#endif //P_FAMILY_MANTINE + +#if P_FAMILY_SKARMORY +static const struct SpriteFrameImage sPicTable_Skarmory[] = { + overworld_ascending_frames(gObjectEventPic_Skarmory, 4, 4), +}; +#endif //P_FAMILY_SKARMORY + +#if P_FAMILY_HOUNDOUR +static const struct SpriteFrameImage sPicTable_Houndour[] = { + overworld_ascending_frames(gObjectEventPic_Houndour, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Houndoom[] = { + overworld_ascending_frames(gObjectEventPic_Houndoom, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_HoundoomF[] = { + overworld_ascending_frames(gObjectEventPic_HoundoomF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_HoundoomMega[] = { + overworld_ascending_frames(gObjectEventPic_HoundoomMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_HOUNDOUR + +#if P_FAMILY_PHANPY +static const struct SpriteFrameImage sPicTable_Phanpy[] = { + overworld_ascending_frames(gObjectEventPic_Phanpy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Donphan[] = { + overworld_ascending_frames(gObjectEventPic_Donphan, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_DonphanF[] = { + overworld_ascending_frames(gObjectEventPic_DonphanF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_PHANPY + +#if P_FAMILY_STANTLER +static const struct SpriteFrameImage sPicTable_Stantler[] = { + overworld_ascending_frames(gObjectEventPic_Stantler, 4, 4), +}; +#if P_GEN_8_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Wyrdeer[] = { + overworld_ascending_frames(gObjectEventPic_Wyrdeer, 4, 4), +}; +#endif //P_GEN_8_CROSS_EVOS +#endif //P_FAMILY_STANTLER + +#if P_FAMILY_SMEARGLE +static const struct SpriteFrameImage sPicTable_Smeargle[] = { + overworld_ascending_frames(gObjectEventPic_Smeargle, 4, 4), +}; +#endif //P_FAMILY_SMEARGLE + +#if P_FAMILY_MILTANK +static const struct SpriteFrameImage sPicTable_Miltank[] = { + overworld_ascending_frames(gObjectEventPic_Miltank, 4, 4), +}; +#endif //P_FAMILY_MILTANK + +#if P_FAMILY_RAIKOU +static const struct SpriteFrameImage sPicTable_Raikou[] = { + overworld_ascending_frames(gObjectEventPic_Raikou, 4, 4), +}; +#endif //P_FAMILY_RAIKOU + +#if P_FAMILY_ENTEI +static const struct SpriteFrameImage sPicTable_Entei[] = { + overworld_ascending_frames(gObjectEventPic_Entei, 4, 4), +}; +#endif //P_FAMILY_ENTEI + +#if P_FAMILY_SUICUNE +static const struct SpriteFrameImage sPicTable_Suicune[] = { + overworld_ascending_frames(gObjectEventPic_Suicune, 4, 4), +}; +#endif //P_FAMILY_SUICUNE + +#if P_FAMILY_LARVITAR +static const struct SpriteFrameImage sPicTable_Larvitar[] = { + overworld_ascending_frames(gObjectEventPic_Larvitar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Pupitar[] = { + overworld_ascending_frames(gObjectEventPic_Pupitar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Tyranitar[] = { + overworld_ascending_frames(gObjectEventPic_Tyranitar, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_TyranitarMega[] = { + overworld_ascending_frames(gObjectEventPic_TyranitarMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_LARVITAR + +#if P_FAMILY_LUGIA +static const struct SpriteFrameImage sPicTable_Lugia[] = { + overworld_ascending_frames(gObjectEventPic_Lugia, 8, 8), +}; +#endif //P_FAMILY_LUGIA + +#if P_FAMILY_HO_OH +static const struct SpriteFrameImage sPicTable_HoOh[] = { + overworld_ascending_frames(gObjectEventPic_HoOh, 8, 8), +}; +#endif //P_FAMILY_HO_OH + +#if P_FAMILY_CELEBI +static const struct SpriteFrameImage sPicTable_Celebi[] = { + overworld_ascending_frames(gObjectEventPic_Celebi, 4, 4), +}; +#endif //P_FAMILY_CELEBI + +#if P_FAMILY_TREECKO +static const struct SpriteFrameImage sPicTable_Treecko[] = { + overworld_ascending_frames(gObjectEventPic_Treecko, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Grovyle[] = { + overworld_ascending_frames(gObjectEventPic_Grovyle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Sceptile[] = { + overworld_ascending_frames(gObjectEventPic_Sceptile, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_SceptileMega[] = { + overworld_ascending_frames(gObjectEventPic_SceptileMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_TREECKO + +#if P_FAMILY_TORCHIC +static const struct SpriteFrameImage sPicTable_Torchic[] = { + overworld_ascending_frames(gObjectEventPic_Torchic, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_TorchicF[] = { + overworld_ascending_frames(gObjectEventPic_TorchicF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Combusken[] = { + overworld_ascending_frames(gObjectEventPic_Combusken, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_CombuskenF[] = { + overworld_ascending_frames(gObjectEventPic_CombuskenF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Blaziken[] = { + overworld_ascending_frames(gObjectEventPic_Blaziken, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_BlazikenF[] = { + overworld_ascending_frames(gObjectEventPic_BlazikenF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_BlazikenMega[] = { + overworld_ascending_frames(gObjectEventPic_BlazikenMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_TORCHIC + +#if P_FAMILY_MUDKIP +static const struct SpriteFrameImage sPicTable_Mudkip[] = { + overworld_ascending_frames(gObjectEventPic_Mudkip, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Marshtomp[] = { + overworld_ascending_frames(gObjectEventPic_Marshtomp, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Swampert[] = { + overworld_ascending_frames(gObjectEventPic_Swampert, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_SwampertMega[] = { + overworld_ascending_frames(gObjectEventPic_SwampertMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_MUDKIP + +#if P_FAMILY_POOCHYENA +static const struct SpriteFrameImage sPicTable_Poochyena[] = { + overworld_ascending_frames(gObjectEventPic_Poochyena, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Mightyena[] = { + overworld_ascending_frames(gObjectEventPic_Mightyena, 4, 4), +}; +#endif //P_FAMILY_POOCHYENA + +#if P_FAMILY_ZIGZAGOON +static const struct SpriteFrameImage sPicTable_Zigzagoon[] = { + overworld_ascending_frames(gObjectEventPic_Zigzagoon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Linoone[] = { + overworld_ascending_frames(gObjectEventPic_Linoone, 4, 4), +}; +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_ZigzagoonGalar[] = { + overworld_ascending_frames(gObjectEventPic_ZigzagoonGalar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_LinooneGalar[] = { + overworld_ascending_frames(gObjectEventPic_LinooneGalar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Obstagoon[] = { + overworld_ascending_frames(gObjectEventPic_Obstagoon, 4, 4), +}; +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_ZIGZAGOON + +#if P_FAMILY_WURMPLE +static const struct SpriteFrameImage sPicTable_Wurmple[] = { + overworld_ascending_frames(gObjectEventPic_Wurmple, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Silcoon[] = { + overworld_ascending_frames(gObjectEventPic_Silcoon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Beautifly[] = { + overworld_ascending_frames(gObjectEventPic_Beautifly, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_BeautiflyF[] = { + overworld_ascending_frames(gObjectEventPic_BeautiflyF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Cascoon[] = { + overworld_ascending_frames(gObjectEventPic_Cascoon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dustox[] = { + overworld_ascending_frames(gObjectEventPic_Dustox, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_DustoxF[] = { + overworld_ascending_frames(gObjectEventPic_DustoxF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_WURMPLE + +#if P_FAMILY_LOTAD +static const struct SpriteFrameImage sPicTable_Lotad[] = { + overworld_ascending_frames(gObjectEventPic_Lotad, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Lombre[] = { + overworld_ascending_frames(gObjectEventPic_Lombre, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Ludicolo[] = { + overworld_ascending_frames(gObjectEventPic_Ludicolo, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_LudicoloF[] = { + overworld_ascending_frames(gObjectEventPic_LudicoloF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_LOTAD + +#if P_FAMILY_SEEDOT +static const struct SpriteFrameImage sPicTable_Seedot[] = { + overworld_ascending_frames(gObjectEventPic_Seedot, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Nuzleaf[] = { + overworld_ascending_frames(gObjectEventPic_Nuzleaf, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_NuzleafF[] = { + overworld_ascending_frames(gObjectEventPic_NuzleafF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Shiftry[] = { + overworld_ascending_frames(gObjectEventPic_Shiftry, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_ShiftryF[] = { + overworld_ascending_frames(gObjectEventPic_ShiftryF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_SEEDOT + +#if P_FAMILY_TAILLOW +static const struct SpriteFrameImage sPicTable_Taillow[] = { + overworld_ascending_frames(gObjectEventPic_Taillow, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Swellow[] = { + overworld_ascending_frames(gObjectEventPic_Swellow, 4, 4), +}; +#endif //P_FAMILY_TAILLOW + +#if P_FAMILY_WINGULL +static const struct SpriteFrameImage sPicTable_Wingull[] = { + overworld_ascending_frames(gObjectEventPic_Wingull, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Pelipper[] = { + overworld_ascending_frames(gObjectEventPic_Pelipper, 4, 4), +}; +#endif //P_FAMILY_WINGULL + +#if P_FAMILY_RALTS +static const struct SpriteFrameImage sPicTable_Ralts[] = { + overworld_ascending_frames(gObjectEventPic_Ralts, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Kirlia[] = { + overworld_ascending_frames(gObjectEventPic_Kirlia, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Gardevoir[] = { + overworld_ascending_frames(gObjectEventPic_Gardevoir, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_GardevoirMega[] = { + overworld_ascending_frames(gObjectEventPic_GardevoirMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS + +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Gallade[] = { + overworld_ascending_frames(gObjectEventPic_Gallade, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_GalladeMega[] = { + overworld_ascending_frames(gObjectEventPic_GalladeMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_RALTS + +#if P_FAMILY_SURSKIT +static const struct SpriteFrameImage sPicTable_Surskit[] = { + overworld_ascending_frames(gObjectEventPic_Surskit, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Masquerain[] = { + overworld_ascending_frames(gObjectEventPic_Masquerain, 4, 4), +}; +#endif //P_FAMILY_SURSKIT + +#if P_FAMILY_SHROOMISH +static const struct SpriteFrameImage sPicTable_Shroomish[] = { + overworld_ascending_frames(gObjectEventPic_Shroomish, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Breloom[] = { + overworld_ascending_frames(gObjectEventPic_Breloom, 4, 4), +}; +#endif //P_FAMILY_SHROOMISH + +#if P_FAMILY_SLAKOTH +static const struct SpriteFrameImage sPicTable_Slakoth[] = { + overworld_ascending_frames(gObjectEventPic_Slakoth, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Vigoroth[] = { + overworld_ascending_frames(gObjectEventPic_Vigoroth, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Slaking[] = { + overworld_ascending_frames(gObjectEventPic_Slaking, 4, 4), +}; +#endif //P_FAMILY_SLAKOTH + +#if P_FAMILY_NINCADA +static const struct SpriteFrameImage sPicTable_Nincada[] = { + overworld_ascending_frames(gObjectEventPic_Nincada, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Ninjask[] = { + overworld_ascending_frames(gObjectEventPic_Ninjask, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Shedinja[] = { + overworld_ascending_frames(gObjectEventPic_Shedinja, 4, 4), +}; +#endif //P_FAMILY_NINCADA + +#if P_FAMILY_WHISMUR +static const struct SpriteFrameImage sPicTable_Whismur[] = { + overworld_ascending_frames(gObjectEventPic_Whismur, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Loudred[] = { + overworld_ascending_frames(gObjectEventPic_Loudred, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Exploud[] = { + overworld_ascending_frames(gObjectEventPic_Exploud, 4, 4), +}; +#endif //P_FAMILY_WHISMUR + +#if P_FAMILY_MAKUHITA +static const struct SpriteFrameImage sPicTable_Makuhita[] = { + overworld_ascending_frames(gObjectEventPic_Makuhita, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Hariyama[] = { + overworld_ascending_frames(gObjectEventPic_Hariyama, 4, 4), +}; +#endif //P_FAMILY_MAKUHITA + +#if P_FAMILY_NOSEPASS +static const struct SpriteFrameImage sPicTable_Nosepass[] = { + overworld_ascending_frames(gObjectEventPic_Nosepass, 4, 4), +}; +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Probopass[] = { + overworld_ascending_frames(gObjectEventPic_Probopass, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_NOSEPASS + +#if P_FAMILY_SKITTY +static const struct SpriteFrameImage sPicTable_Skitty[] = { + overworld_ascending_frames(gObjectEventPic_Skitty, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Delcatty[] = { + overworld_ascending_frames(gObjectEventPic_Delcatty, 4, 4), +}; +#endif //P_FAMILY_SKITTY + +#if P_FAMILY_SABLEYE +static const struct SpriteFrameImage sPicTable_Sableye[] = { + overworld_ascending_frames(gObjectEventPic_Sableye, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_SableyeMega[] = { + overworld_ascending_frames(gObjectEventPic_SableyeMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_SABLEYE + +#if P_FAMILY_MAWILE +static const struct SpriteFrameImage sPicTable_Mawile[] = { + overworld_ascending_frames(gObjectEventPic_Mawile, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_MawileMega[] = { + overworld_ascending_frames(gObjectEventPic_MawileMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_MAWILE + +#if P_FAMILY_ARON +static const struct SpriteFrameImage sPicTable_Aron[] = { + overworld_ascending_frames(gObjectEventPic_Aron, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Lairon[] = { + overworld_ascending_frames(gObjectEventPic_Lairon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Aggron[] = { + overworld_ascending_frames(gObjectEventPic_Aggron, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_AggronMega[] = { + overworld_ascending_frames(gObjectEventPic_AggronMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_ARON + +#if P_FAMILY_MEDITITE +static const struct SpriteFrameImage sPicTable_Meditite[] = { + overworld_ascending_frames(gObjectEventPic_Meditite, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_MedititeF[] = { + overworld_ascending_frames(gObjectEventPic_MedititeF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Medicham[] = { + overworld_ascending_frames(gObjectEventPic_Medicham, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_MedichamF[] = { + overworld_ascending_frames(gObjectEventPic_MedichamF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_MedichamMega[] = { + overworld_ascending_frames(gObjectEventPic_MedichamMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_MEDITITE + +#if P_FAMILY_ELECTRIKE +static const struct SpriteFrameImage sPicTable_Electrike[] = { + overworld_ascending_frames(gObjectEventPic_Electrike, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Manectric[] = { + overworld_ascending_frames(gObjectEventPic_Manectric, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_ManectricMega[] = { + overworld_ascending_frames(gObjectEventPic_ManectricMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_ELECTRIKE + +#if P_FAMILY_PLUSLE +static const struct SpriteFrameImage sPicTable_Plusle[] = { + overworld_ascending_frames(gObjectEventPic_Plusle, 4, 4), +}; +#endif //P_FAMILY_PLUSLE + +#if P_FAMILY_MINUN +static const struct SpriteFrameImage sPicTable_Minun[] = { + overworld_ascending_frames(gObjectEventPic_Minun, 4, 4), +}; +#endif //P_FAMILY_MINUN + +#if P_FAMILY_VOLBEAT_ILLUMISE +static const struct SpriteFrameImage sPicTable_Volbeat[] = { + overworld_ascending_frames(gObjectEventPic_Volbeat, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Illumise[] = { + overworld_ascending_frames(gObjectEventPic_Illumise, 4, 4), +}; +#endif //P_FAMILY_VOLBEAT_ILLUMISE + +#if P_FAMILY_ROSELIA +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Budew[] = { + overworld_ascending_frames(gObjectEventPic_Budew, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Roselia[] = { + overworld_ascending_frames(gObjectEventPic_Roselia, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_RoseliaF[] = { + overworld_ascending_frames(gObjectEventPic_RoseliaF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Roserade[] = { + overworld_ascending_frames(gObjectEventPic_Roserade, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_RoseradeF[] = { + overworld_ascending_frames(gObjectEventPic_RoseradeF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_ROSELIA + +#if P_FAMILY_GULPIN +static const struct SpriteFrameImage sPicTable_Gulpin[] = { + overworld_ascending_frames(gObjectEventPic_Gulpin, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_GulpinF[] = { + overworld_ascending_frames(gObjectEventPic_GulpinF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Swalot[] = { + overworld_ascending_frames(gObjectEventPic_Swalot, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_SwalotF[] = { + overworld_ascending_frames(gObjectEventPic_SwalotF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_GULPIN + +#if P_FAMILY_CARVANHA +static const struct SpriteFrameImage sPicTable_Carvanha[] = { + overworld_ascending_frames(gObjectEventPic_Carvanha, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Sharpedo[] = { + overworld_ascending_frames(gObjectEventPic_Sharpedo, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_SharpedoMega[] = { + overworld_ascending_frames(gObjectEventPic_SharpedoMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_CARVANHA + +#if P_FAMILY_WAILMER +static const struct SpriteFrameImage sPicTable_Wailmer[] = { + overworld_ascending_frames(gObjectEventPic_Wailmer, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Wailord[] = { + overworld_ascending_frames(gObjectEventPic_Wailord, 8, 8), +}; +#endif //P_FAMILY_WAILMER + +#if P_FAMILY_NUMEL +static const struct SpriteFrameImage sPicTable_Numel[] = { + overworld_ascending_frames(gObjectEventPic_Numel, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_NumelF[] = { + overworld_ascending_frames(gObjectEventPic_NumelF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Camerupt[] = { + overworld_ascending_frames(gObjectEventPic_Camerupt, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_CameruptF[] = { + overworld_ascending_frames(gObjectEventPic_CameruptF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_CameruptMega[] = { + overworld_ascending_frames(gObjectEventPic_CameruptMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_NUMEL + +#if P_FAMILY_TORKOAL +static const struct SpriteFrameImage sPicTable_Torkoal[] = { + overworld_ascending_frames(gObjectEventPic_Torkoal, 4, 4), +}; +#endif //P_FAMILY_TORKOAL + +#if P_FAMILY_SPOINK +static const struct SpriteFrameImage sPicTable_Spoink[] = { + overworld_ascending_frames(gObjectEventPic_Spoink, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Grumpig[] = { + overworld_ascending_frames(gObjectEventPic_Grumpig, 4, 4), +}; +#endif //P_FAMILY_SPOINK + +#if P_FAMILY_SPINDA +static const struct SpriteFrameImage sPicTable_Spinda[] = { + overworld_ascending_frames(gObjectEventPic_Spinda, 4, 4), +}; +#endif //P_FAMILY_SPINDA + +#if P_FAMILY_TRAPINCH +static const struct SpriteFrameImage sPicTable_Trapinch[] = { + overworld_ascending_frames(gObjectEventPic_Trapinch, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Vibrava[] = { + overworld_ascending_frames(gObjectEventPic_Vibrava, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Flygon[] = { + overworld_ascending_frames(gObjectEventPic_Flygon, 4, 4), +}; +#endif //P_FAMILY_TRAPINCH + +#if P_FAMILY_CACNEA +static const struct SpriteFrameImage sPicTable_Cacnea[] = { + overworld_ascending_frames(gObjectEventPic_Cacnea, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Cacturne[] = { + overworld_ascending_frames(gObjectEventPic_Cacturne, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_CacturneF[] = { + overworld_ascending_frames(gObjectEventPic_CacturneF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_CACNEA + +#if P_FAMILY_SWABLU +static const struct SpriteFrameImage sPicTable_Swablu[] = { + overworld_ascending_frames(gObjectEventPic_Swablu, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Altaria[] = { + overworld_ascending_frames(gObjectEventPic_Altaria, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_AltariaMega[] = { + overworld_ascending_frames(gObjectEventPic_AltariaMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_SWABLU + +#if P_FAMILY_ZANGOOSE +static const struct SpriteFrameImage sPicTable_Zangoose[] = { + overworld_ascending_frames(gObjectEventPic_Zangoose, 4, 4), +}; +#endif //P_FAMILY_ZANGOOSE + +#if P_FAMILY_SEVIPER +static const struct SpriteFrameImage sPicTable_Seviper[] = { + overworld_ascending_frames(gObjectEventPic_Seviper, 4, 4), +}; +#endif //P_FAMILY_SEVIPER + +#if P_FAMILY_LUNATONE +static const struct SpriteFrameImage sPicTable_Lunatone[] = { + overworld_ascending_frames(gObjectEventPic_Lunatone, 4, 4), +}; +#endif //P_FAMILY_LUNATONE + +#if P_FAMILY_SOLROCK +static const struct SpriteFrameImage sPicTable_Solrock[] = { + overworld_ascending_frames(gObjectEventPic_Solrock, 4, 4), +}; +#endif //P_FAMILY_SOLROCK + +#if P_FAMILY_BARBOACH +static const struct SpriteFrameImage sPicTable_Barboach[] = { + overworld_ascending_frames(gObjectEventPic_Barboach, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Whiscash[] = { + overworld_ascending_frames(gObjectEventPic_Whiscash, 4, 4), +}; +#endif //P_FAMILY_BARBOACH + +#if P_FAMILY_CORPHISH +static const struct SpriteFrameImage sPicTable_Corphish[] = { + overworld_ascending_frames(gObjectEventPic_Corphish, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Crawdaunt[] = { + overworld_ascending_frames(gObjectEventPic_Crawdaunt, 4, 4), +}; +#endif //P_FAMILY_CORPHISH + +#if P_FAMILY_BALTOY +static const struct SpriteFrameImage sPicTable_Baltoy[] = { + overworld_ascending_frames(gObjectEventPic_Baltoy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Claydol[] = { + overworld_ascending_frames(gObjectEventPic_Claydol, 4, 4), +}; +#endif //P_FAMILY_BALTOY + +#if P_FAMILY_LILEEP +static const struct SpriteFrameImage sPicTable_Lileep[] = { + overworld_ascending_frames(gObjectEventPic_Lileep, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Cradily[] = { + overworld_ascending_frames(gObjectEventPic_Cradily, 4, 4), +}; +#endif //P_FAMILY_LILEEP + +#if P_FAMILY_ANORITH +static const struct SpriteFrameImage sPicTable_Anorith[] = { + overworld_ascending_frames(gObjectEventPic_Anorith, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Armaldo[] = { + overworld_ascending_frames(gObjectEventPic_Armaldo, 4, 4), +}; +#endif //P_FAMILY_ANORITH + +#if P_FAMILY_FEEBAS +static const struct SpriteFrameImage sPicTable_Feebas[] = { + overworld_ascending_frames(gObjectEventPic_Feebas, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Milotic[] = { + overworld_ascending_frames(gObjectEventPic_Milotic, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_MiloticF[] = { + overworld_ascending_frames(gObjectEventPic_MiloticF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_FEEBAS + +#if P_FAMILY_CASTFORM +static const struct SpriteFrameImage sPicTable_CastformNormal[] = { + overworld_ascending_frames(gObjectEventPic_CastformNormal, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_CastformSunny[] = { + overworld_ascending_frames(gObjectEventPic_CastformSunny, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_CastformRainy[] = { + overworld_ascending_frames(gObjectEventPic_CastformRainy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_CastformSnowy[] = { + overworld_ascending_frames(gObjectEventPic_CastformSnowy, 4, 4), +}; +#endif //P_FAMILY_CASTFORM + +#if P_FAMILY_KECLEON +static const struct SpriteFrameImage sPicTable_Kecleon[] = { + overworld_ascending_frames(gObjectEventPic_Kecleon, 4, 4), +}; +#endif //P_FAMILY_KECLEON + +#if P_FAMILY_SHUPPET +static const struct SpriteFrameImage sPicTable_Shuppet[] = { + overworld_ascending_frames(gObjectEventPic_Shuppet, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Banette[] = { + overworld_ascending_frames(gObjectEventPic_Banette, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_BanetteMega[] = { + overworld_ascending_frames(gObjectEventPic_BanetteMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_SHUPPET + +#if P_FAMILY_DUSKULL +static const struct SpriteFrameImage sPicTable_Duskull[] = { + overworld_ascending_frames(gObjectEventPic_Duskull, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dusclops[] = { + overworld_ascending_frames(gObjectEventPic_Dusclops, 4, 4), +}; +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Dusknoir[] = { + overworld_ascending_frames(gObjectEventPic_Dusknoir, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_DUSKULL + +#if P_FAMILY_TROPIUS +static const struct SpriteFrameImage sPicTable_Tropius[] = { + overworld_ascending_frames(gObjectEventPic_Tropius, 4, 4), +}; +#endif //P_FAMILY_TROPIUS + +#if P_FAMILY_CHIMECHO +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Chingling[] = { + overworld_ascending_frames(gObjectEventPic_Chingling, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Chimecho[] = { + overworld_ascending_frames(gObjectEventPic_Chimecho, 4, 4), +}; +#endif //P_FAMILY_CHIMECHO + +#if P_FAMILY_ABSOL +static const struct SpriteFrameImage sPicTable_Absol[] = { + overworld_ascending_frames(gObjectEventPic_Absol, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_AbsolMega[] = { + overworld_ascending_frames(gObjectEventPic_AbsolMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_ABSOL + +#if P_FAMILY_SNORUNT +static const struct SpriteFrameImage sPicTable_Snorunt[] = { + overworld_ascending_frames(gObjectEventPic_Snorunt, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Glalie[] = { + overworld_ascending_frames(gObjectEventPic_Glalie, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_GlalieMega[] = { + overworld_ascending_frames(gObjectEventPic_GlalieMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS + +#if P_GEN_4_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Froslass[] = { + overworld_ascending_frames(gObjectEventPic_Froslass, 4, 4), +}; +#endif //P_GEN_4_CROSS_EVOS +#endif //P_FAMILY_SNORUNT + +#if P_FAMILY_SPHEAL +static const struct SpriteFrameImage sPicTable_Spheal[] = { + overworld_ascending_frames(gObjectEventPic_Spheal, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Sealeo[] = { + overworld_ascending_frames(gObjectEventPic_Sealeo, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Walrein[] = { + overworld_ascending_frames(gObjectEventPic_Walrein, 4, 4), +}; +#endif //P_FAMILY_SPHEAL + +#if P_FAMILY_CLAMPERL +static const struct SpriteFrameImage sPicTable_Clamperl[] = { + overworld_ascending_frames(gObjectEventPic_Clamperl, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Huntail[] = { + overworld_ascending_frames(gObjectEventPic_Huntail, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Gorebyss[] = { + overworld_ascending_frames(gObjectEventPic_Gorebyss, 4, 4), +}; +#endif //P_FAMILY_CLAMPERL + +#if P_FAMILY_RELICANTH +static const struct SpriteFrameImage sPicTable_Relicanth[] = { + overworld_ascending_frames(gObjectEventPic_Relicanth, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_RelicanthF[] = { + overworld_ascending_frames(gObjectEventPic_RelicanthF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_RELICANTH + +#if P_FAMILY_LUVDISC +static const struct SpriteFrameImage sPicTable_Luvdisc[] = { + overworld_ascending_frames(gObjectEventPic_Luvdisc, 4, 4), +}; +#endif //P_FAMILY_LUVDISC + +#if P_FAMILY_BAGON +static const struct SpriteFrameImage sPicTable_Bagon[] = { + overworld_ascending_frames(gObjectEventPic_Bagon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Shelgon[] = { + overworld_ascending_frames(gObjectEventPic_Shelgon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Salamence[] = { + overworld_ascending_frames(gObjectEventPic_Salamence, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_SalamenceMega[] = { + overworld_ascending_frames(gObjectEventPic_SalamenceMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_BAGON + +#if P_FAMILY_BELDUM +static const struct SpriteFrameImage sPicTable_Beldum[] = { + overworld_ascending_frames(gObjectEventPic_Beldum, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Metang[] = { + overworld_ascending_frames(gObjectEventPic_Metang, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Metagross[] = { + overworld_ascending_frames(gObjectEventPic_Metagross, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_MetagrossMega[] = { + overworld_ascending_frames(gObjectEventPic_MetagrossMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_BELDUM + +#if P_FAMILY_REGIROCK +static const struct SpriteFrameImage sPicTable_Regirock[] = { + overworld_ascending_frames(gObjectEventPic_Regirock, 4, 4), +}; +#endif //P_FAMILY_REGIROCK + +#if P_FAMILY_REGICE +static const struct SpriteFrameImage sPicTable_Regice[] = { + overworld_ascending_frames(gObjectEventPic_Regice, 4, 4), +}; +#endif //P_FAMILY_REGICE + +#if P_FAMILY_REGISTEEL +static const struct SpriteFrameImage sPicTable_Registeel[] = { + overworld_ascending_frames(gObjectEventPic_Registeel, 4, 4), +}; +#endif //P_FAMILY_REGISTEEL + +#if P_FAMILY_LATIAS +static const struct SpriteFrameImage sPicTable_Latias[] = { + overworld_ascending_frames(gObjectEventPic_Latias, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_LatiasMega[] = { + overworld_ascending_frames(gObjectEventPic_LatiasMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_LATIAS + +#if P_FAMILY_LATIOS +static const struct SpriteFrameImage sPicTable_Latios[] = { + overworld_ascending_frames(gObjectEventPic_Latios, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_LatiosMega[] = { + overworld_ascending_frames(gObjectEventPic_LatiosMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_LATIOS + +#if P_FAMILY_KYOGRE +static const struct SpriteFrameImage sPicTable_Kyogre[] = { + overworld_ascending_frames(gObjectEventPic_Kyogre, 8, 8), +}; +#if P_PRIMAL_REVERSIONS +static const struct SpriteFrameImage sPicTable_KyogrePrimal[] = { + overworld_ascending_frames(gObjectEventPic_KyogrePrimal, 4, 4), +}; +#endif //P_PRIMAL_REVERSIONS +#endif //P_FAMILY_KYOGRE + +#if P_FAMILY_GROUDON +static const struct SpriteFrameImage sPicTable_Groudon[] = { + overworld_ascending_frames(gObjectEventPic_Groudon, 8, 8), +}; +#if P_PRIMAL_REVERSIONS +static const struct SpriteFrameImage sPicTable_GroudonPrimal[] = { + overworld_ascending_frames(gObjectEventPic_GroudonPrimal, 4, 4), +}; +#endif //P_PRIMAL_REVERSIONS +#endif //P_FAMILY_GROUDON + +#if P_FAMILY_RAYQUAZA +static const struct SpriteFrameImage sPicTable_Rayquaza[] = { + overworld_ascending_frames(gObjectEventPic_Rayquaza, 8, 8), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_RayquazaMega[] = { + overworld_ascending_frames(gObjectEventPic_RayquazaMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_RAYQUAZA + +#if P_FAMILY_JIRACHI +static const struct SpriteFrameImage sPicTable_Jirachi[] = { + overworld_ascending_frames(gObjectEventPic_Jirachi, 4, 4), +}; +#endif //P_FAMILY_JIRACHI + +#if P_FAMILY_DEOXYS +static const struct SpriteFrameImage sPicTable_DeoxysNormal[] = { + overworld_ascending_frames(gObjectEventPic_DeoxysNormal, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_DeoxysAttack[] = { + overworld_ascending_frames(gObjectEventPic_DeoxysAttack, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_DeoxysDefense[] = { + overworld_ascending_frames(gObjectEventPic_DeoxysDefense, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_DeoxysSpeed[] = { + overworld_ascending_frames(gObjectEventPic_DeoxysSpeed, 4, 4), +}; +#endif //P_FAMILY_DEOXYS + +#if P_FAMILY_TURTWIG +static const struct SpriteFrameImage sPicTable_Turtwig[] = { + overworld_ascending_frames(gObjectEventPic_Turtwig, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Grotle[] = { + overworld_ascending_frames(gObjectEventPic_Grotle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Torterra[] = { + overworld_ascending_frames(gObjectEventPic_Torterra, 4, 4), +}; +#endif //P_FAMILY_TURTWIG + +#if P_FAMILY_CHIMCHAR +static const struct SpriteFrameImage sPicTable_Chimchar[] = { + overworld_ascending_frames(gObjectEventPic_Chimchar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Monferno[] = { + overworld_ascending_frames(gObjectEventPic_Monferno, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Infernape[] = { + overworld_ascending_frames(gObjectEventPic_Infernape, 4, 4), +}; +#endif //P_FAMILY_CHIMCHAR + +#if P_FAMILY_PIPLUP +static const struct SpriteFrameImage sPicTable_Piplup[] = { + overworld_ascending_frames(gObjectEventPic_Piplup, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Prinplup[] = { + overworld_ascending_frames(gObjectEventPic_Prinplup, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Empoleon[] = { + overworld_ascending_frames(gObjectEventPic_Empoleon, 4, 4), +}; +#endif //P_FAMILY_PIPLUP + +#if P_FAMILY_STARLY +static const struct SpriteFrameImage sPicTable_Starly[] = { + overworld_ascending_frames(gObjectEventPic_Starly, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_StarlyF[] = { + overworld_ascending_frames(gObjectEventPic_StarlyF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Staravia[] = { + overworld_ascending_frames(gObjectEventPic_Staravia, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_StaraviaF[] = { + overworld_ascending_frames(gObjectEventPic_StaraviaF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Staraptor[] = { + overworld_ascending_frames(gObjectEventPic_Staraptor, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_StaraptorF[] = { + overworld_ascending_frames(gObjectEventPic_StaraptorF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_STARLY + +#if P_FAMILY_BIDOOF +static const struct SpriteFrameImage sPicTable_Bidoof[] = { + overworld_ascending_frames(gObjectEventPic_Bidoof, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_BidoofF[] = { + overworld_ascending_frames(gObjectEventPic_BidoofF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Bibarel[] = { + overworld_ascending_frames(gObjectEventPic_Bibarel, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_BibarelF[] = { + overworld_ascending_frames(gObjectEventPic_BibarelF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_BIDOOF + +#if P_FAMILY_KRICKETOT +static const struct SpriteFrameImage sPicTable_Kricketot[] = { + overworld_ascending_frames(gObjectEventPic_Kricketot, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_KricketotF[] = { + overworld_ascending_frames(gObjectEventPic_KricketotF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Kricketune[] = { + overworld_ascending_frames(gObjectEventPic_Kricketune, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_KricketuneF[] = { + overworld_ascending_frames(gObjectEventPic_KricketuneF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_KRICKETOT + +#if P_FAMILY_SHINX +static const struct SpriteFrameImage sPicTable_Shinx[] = { + overworld_ascending_frames(gObjectEventPic_Shinx, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_ShinxF[] = { + overworld_ascending_frames(gObjectEventPic_ShinxF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Luxio[] = { + overworld_ascending_frames(gObjectEventPic_Luxio, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_LuxioF[] = { + overworld_ascending_frames(gObjectEventPic_LuxioF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Luxray[] = { + overworld_ascending_frames(gObjectEventPic_Luxray, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_LuxrayF[] = { + overworld_ascending_frames(gObjectEventPic_LuxrayF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_SHINX + +#if P_FAMILY_CRANIDOS +static const struct SpriteFrameImage sPicTable_Cranidos[] = { + overworld_ascending_frames(gObjectEventPic_Cranidos, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Rampardos[] = { + overworld_ascending_frames(gObjectEventPic_Rampardos, 4, 4), +}; +#endif //P_FAMILY_CRANIDOS + +#if P_FAMILY_SHIELDON +static const struct SpriteFrameImage sPicTable_Shieldon[] = { + overworld_ascending_frames(gObjectEventPic_Shieldon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Bastiodon[] = { + overworld_ascending_frames(gObjectEventPic_Bastiodon, 4, 4), +}; +#endif //P_FAMILY_SHIELDON + +#if P_FAMILY_BURMY +static const struct SpriteFrameImage sPicTable_BurmyPlant[] = { + overworld_ascending_frames(gObjectEventPic_BurmyPlant, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_BurmySandy[] = { + overworld_ascending_frames(gObjectEventPic_BurmySandy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_BurmyTrash[] = { + overworld_ascending_frames(gObjectEventPic_BurmyTrash, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_WormadamPlant[] = { + overworld_ascending_frames(gObjectEventPic_WormadamPlant, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_WormadamSandy[] = { + overworld_ascending_frames(gObjectEventPic_WormadamSandy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_WormadamTrash[] = { + overworld_ascending_frames(gObjectEventPic_WormadamTrash, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Mothim[] = { + overworld_ascending_frames(gObjectEventPic_Mothim, 4, 4), +}; +#endif //P_FAMILY_BURMY + +#if P_FAMILY_COMBEE +static const struct SpriteFrameImage sPicTable_Combee[] = { + overworld_ascending_frames(gObjectEventPic_Combee, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_CombeeF[] = { + overworld_ascending_frames(gObjectEventPic_CombeeF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Vespiquen[] = { + overworld_ascending_frames(gObjectEventPic_Vespiquen, 4, 4), +}; +#endif //P_FAMILY_COMBEE + +#if P_FAMILY_PACHIRISU +static const struct SpriteFrameImage sPicTable_Pachirisu[] = { + overworld_ascending_frames(gObjectEventPic_Pachirisu, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_PachirisuF[] = { + overworld_ascending_frames(gObjectEventPic_PachirisuF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_PACHIRISU + +#if P_FAMILY_BUIZEL +static const struct SpriteFrameImage sPicTable_Buizel[] = { + overworld_ascending_frames(gObjectEventPic_Buizel, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_BuizelF[] = { + overworld_ascending_frames(gObjectEventPic_BuizelF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Floatzel[] = { + overworld_ascending_frames(gObjectEventPic_Floatzel, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_FloatzelF[] = { + overworld_ascending_frames(gObjectEventPic_FloatzelF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_BUIZEL + +#if P_FAMILY_CHERUBI +static const struct SpriteFrameImage sPicTable_Cherubi[] = { + overworld_ascending_frames(gObjectEventPic_Cherubi, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_CherrimOvercast[] = { + overworld_ascending_frames(gObjectEventPic_CherrimOvercast, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_CherrimSunshine[] = { + overworld_ascending_frames(gObjectEventPic_CherrimSunshine, 4, 4), +};*/ +#endif //P_FAMILY_CHERUBI + +#if P_FAMILY_SHELLOS +static const struct SpriteFrameImage sPicTable_ShellosWestSea[] = { + overworld_ascending_frames(gObjectEventPic_ShellosWestSea, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_ShellosEast[] = { + overworld_ascending_frames(gObjectEventPic_ShellosEast, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_GastrodonWestSea[] = { + overworld_ascending_frames(gObjectEventPic_GastrodonWestSea, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_GastrodonEast[] = { + overworld_ascending_frames(gObjectEventPic_GastrodonEast, 4, 4), +}; +#endif //P_FAMILY_SHELLOS + +#if P_FAMILY_DRIFLOON +static const struct SpriteFrameImage sPicTable_Drifloon[] = { + overworld_ascending_frames(gObjectEventPic_Drifloon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Drifblim[] = { + overworld_ascending_frames(gObjectEventPic_Drifblim, 4, 4), +}; +#endif //P_FAMILY_DRIFLOON + +#if P_FAMILY_BUNEARY +static const struct SpriteFrameImage sPicTable_Buneary[] = { + overworld_ascending_frames(gObjectEventPic_Buneary, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Lopunny[] = { + overworld_ascending_frames(gObjectEventPic_Lopunny, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_LopunnyMega[] = { + overworld_ascending_frames(gObjectEventPic_LopunnyMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_BUNEARY + +#if P_FAMILY_GLAMEOW +static const struct SpriteFrameImage sPicTable_Glameow[] = { + overworld_ascending_frames(gObjectEventPic_Glameow, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Purugly[] = { + overworld_ascending_frames(gObjectEventPic_Purugly, 4, 4), +}; +#endif //P_FAMILY_GLAMEOW + +#if P_FAMILY_STUNKY +static const struct SpriteFrameImage sPicTable_Stunky[] = { + overworld_ascending_frames(gObjectEventPic_Stunky, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Skuntank[] = { + overworld_ascending_frames(gObjectEventPic_Skuntank, 4, 4), +}; +#endif //P_FAMILY_STUNKY + +#if P_FAMILY_BRONZOR +static const struct SpriteFrameImage sPicTable_Bronzor[] = { + overworld_ascending_frames(gObjectEventPic_Bronzor, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Bronzong[] = { + overworld_ascending_frames(gObjectEventPic_Bronzong, 4, 4), +}; +#endif //P_FAMILY_BRONZOR + +#if P_FAMILY_CHATOT +static const struct SpriteFrameImage sPicTable_Chatot[] = { + overworld_ascending_frames(gObjectEventPic_Chatot, 4, 4), +}; +#endif //P_FAMILY_CHATOT + +#if P_FAMILY_SPIRITOMB +static const struct SpriteFrameImage sPicTable_Spiritomb[] = { + overworld_ascending_frames(gObjectEventPic_Spiritomb, 4, 4), +}; +#endif //P_FAMILY_SPIRITOMB + +#if P_FAMILY_GIBLE +static const struct SpriteFrameImage sPicTable_Gible[] = { + overworld_ascending_frames(gObjectEventPic_Gible, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_GibleF[] = { + overworld_ascending_frames(gObjectEventPic_GibleF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Gabite[] = { + overworld_ascending_frames(gObjectEventPic_Gabite, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_GabiteF[] = { + overworld_ascending_frames(gObjectEventPic_GabiteF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Garchomp[] = { + overworld_ascending_frames(gObjectEventPic_Garchomp, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_GarchompF[] = { + overworld_ascending_frames(gObjectEventPic_GarchompF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_GarchompMega[] = { + overworld_ascending_frames(gObjectEventPic_GarchompMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_GIBLE + +#if P_FAMILY_RIOLU +static const struct SpriteFrameImage sPicTable_Riolu[] = { + overworld_ascending_frames(gObjectEventPic_Riolu, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Lucario[] = { + overworld_ascending_frames(gObjectEventPic_Lucario, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_LucarioMega[] = { + overworld_ascending_frames(gObjectEventPic_LucarioMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_RIOLU + +#if P_FAMILY_HIPPOPOTAS +static const struct SpriteFrameImage sPicTable_Hippopotas[] = { + overworld_ascending_frames(gObjectEventPic_Hippopotas, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_HippopotasF[] = { + overworld_ascending_frames(gObjectEventPic_HippopotasF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Hippowdon[] = { + overworld_ascending_frames(gObjectEventPic_Hippowdon, 4, 4), +}; +#endif //P_FAMILY_HIPPOPOTAS + +#if P_FAMILY_SKORUPI +static const struct SpriteFrameImage sPicTable_Skorupi[] = { + overworld_ascending_frames(gObjectEventPic_Skorupi, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Drapion[] = { + overworld_ascending_frames(gObjectEventPic_Drapion, 4, 4), +}; +#endif //P_FAMILY_SKORUPI + +#if P_FAMILY_CROAGUNK +static const struct SpriteFrameImage sPicTable_Croagunk[] = { + overworld_ascending_frames(gObjectEventPic_Croagunk, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_CroagunkF[] = { + overworld_ascending_frames(gObjectEventPic_CroagunkF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Toxicroak[] = { + overworld_ascending_frames(gObjectEventPic_Toxicroak, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_ToxicroakF[] = { + overworld_ascending_frames(gObjectEventPic_ToxicroakF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_CROAGUNK + +#if P_FAMILY_CARNIVINE +static const struct SpriteFrameImage sPicTable_Carnivine[] = { + overworld_ascending_frames(gObjectEventPic_Carnivine, 4, 4), +}; +#endif //P_FAMILY_CARNIVINE + +#if P_FAMILY_FINNEON +static const struct SpriteFrameImage sPicTable_Finneon[] = { + overworld_ascending_frames(gObjectEventPic_Finneon, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_FinneonF[] = { + overworld_ascending_frames(gObjectEventPic_FinneonF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Lumineon[] = { + overworld_ascending_frames(gObjectEventPic_Lumineon, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_LumineonF[] = { + overworld_ascending_frames(gObjectEventPic_LumineonF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_FINNEON + +#if P_FAMILY_SNOVER +static const struct SpriteFrameImage sPicTable_Snover[] = { + overworld_ascending_frames(gObjectEventPic_Snover, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_SnoverF[] = { + overworld_ascending_frames(gObjectEventPic_SnoverF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Abomasnow[] = { + overworld_ascending_frames(gObjectEventPic_Abomasnow, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_AbomasnowF[] = { + overworld_ascending_frames(gObjectEventPic_AbomasnowF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_AbomasnowMega[] = { + overworld_ascending_frames(gObjectEventPic_AbomasnowMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_SNOVER + +#if P_FAMILY_ROTOM +static const struct SpriteFrameImage sPicTable_Rotom[] = { + overworld_ascending_frames(gObjectEventPic_Rotom, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_RotomHeat[] = { + overworld_ascending_frames(gObjectEventPic_RotomHeat, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_RotomWash[] = { + overworld_ascending_frames(gObjectEventPic_RotomWash, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_RotomFrost[] = { + overworld_ascending_frames(gObjectEventPic_RotomFrost, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_RotomFan[] = { + overworld_ascending_frames(gObjectEventPic_RotomFan, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_RotomMow[] = { + overworld_ascending_frames(gObjectEventPic_RotomMow, 4, 4), +}; +#endif //P_FAMILY_ROTOM + +#if P_FAMILY_UXIE +static const struct SpriteFrameImage sPicTable_Uxie[] = { + overworld_ascending_frames(gObjectEventPic_Uxie, 4, 4), +}; +#endif //P_FAMILY_UXIE + +#if P_FAMILY_MESPRIT +static const struct SpriteFrameImage sPicTable_Mesprit[] = { + overworld_ascending_frames(gObjectEventPic_Mesprit, 4, 4), +}; +#endif //P_FAMILY_MESPRIT + +#if P_FAMILY_AZELF +static const struct SpriteFrameImage sPicTable_Azelf[] = { + overworld_ascending_frames(gObjectEventPic_Azelf, 4, 4), +}; +#endif //P_FAMILY_AZELF + +#if P_FAMILY_DIALGA +static const struct SpriteFrameImage sPicTable_Dialga[] = { + overworld_ascending_frames(gObjectEventPic_Dialga, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_DialgaOrigin[] = { + overworld_ascending_frames(gObjectEventPic_DialgaOrigin, 8, 8), +}; +#endif //P_FAMILY_DIALGA + +#if P_FAMILY_PALKIA +static const struct SpriteFrameImage sPicTable_Palkia[] = { + overworld_ascending_frames(gObjectEventPic_Palkia, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_PalkiaOrigin[] = { + overworld_ascending_frames(gObjectEventPic_PalkiaOrigin, 8, 8), +}; +#endif //P_FAMILY_PALKIA + +#if P_FAMILY_HEATRAN +static const struct SpriteFrameImage sPicTable_Heatran[] = { + overworld_ascending_frames(gObjectEventPic_Heatran, 4, 4), +}; +#endif //P_FAMILY_HEATRAN + +#if P_FAMILY_REGIGIGAS +static const struct SpriteFrameImage sPicTable_Regigigas[] = { + overworld_ascending_frames(gObjectEventPic_Regigigas, 8, 8), +}; +#endif //P_FAMILY_REGIGIGAS + +#if P_FAMILY_GIRATINA +static const struct SpriteFrameImage sPicTable_GiratinaAltered[] = { + overworld_ascending_frames(gObjectEventPic_GiratinaAltered, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_GiratinaOrigin[] = { + overworld_ascending_frames(gObjectEventPic_GiratinaOrigin, 8, 8), +}; +#endif //P_FAMILY_GIRATINA + +#if P_FAMILY_CRESSELIA +static const struct SpriteFrameImage sPicTable_Cresselia[] = { + overworld_ascending_frames(gObjectEventPic_Cresselia, 4, 4), +}; +#endif //P_FAMILY_CRESSELIA + +#if P_FAMILY_MANAPHY +static const struct SpriteFrameImage sPicTable_Phione[] = { + overworld_ascending_frames(gObjectEventPic_Phione, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Manaphy[] = { + overworld_ascending_frames(gObjectEventPic_Manaphy, 4, 4), +}; +#endif //P_FAMILY_MANAPHY + +#if P_FAMILY_DARKRAI +static const struct SpriteFrameImage sPicTable_Darkrai[] = { + overworld_ascending_frames(gObjectEventPic_Darkrai, 4, 4), +}; +#endif //P_FAMILY_DARKRAI + +#if P_FAMILY_SHAYMIN +static const struct SpriteFrameImage sPicTable_ShayminLand[] = { + overworld_ascending_frames(gObjectEventPic_ShayminLand, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_ShayminSky[] = { + overworld_ascending_frames(gObjectEventPic_ShayminSky, 4, 4), +}; +#endif //P_FAMILY_SHAYMIN + +#if P_FAMILY_ARCEUS + +static const struct SpriteFrameImage sPicTable_ArceusNormal[] = { + overworld_ascending_frames(gObjectEventPic_ArceusNormal, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusFighting[] = { + overworld_ascending_frames(gObjectEventPic_ArceusFighting, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusFlying[] = { + overworld_ascending_frames(gObjectEventPic_ArceusFlying, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusPoison[] = { + overworld_ascending_frames(gObjectEventPic_ArceusPoison, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusGround[] = { + overworld_ascending_frames(gObjectEventPic_ArceusGround, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusRock[] = { + overworld_ascending_frames(gObjectEventPic_ArceusRock, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusBug[] = { + overworld_ascending_frames(gObjectEventPic_ArceusBug, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusGhost[] = { + overworld_ascending_frames(gObjectEventPic_ArceusGhost, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusSteel[] = { + overworld_ascending_frames(gObjectEventPic_ArceusSteel, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusFire[] = { + overworld_ascending_frames(gObjectEventPic_ArceusFire, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusWater[] = { + overworld_ascending_frames(gObjectEventPic_ArceusWater, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusGrass[] = { + overworld_ascending_frames(gObjectEventPic_ArceusGrass, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusElectric[] = { + overworld_ascending_frames(gObjectEventPic_ArceusElectric, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusPsychic[] = { + overworld_ascending_frames(gObjectEventPic_ArceusPsychic, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusIce[] = { + overworld_ascending_frames(gObjectEventPic_ArceusIce, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusDragon[] = { + overworld_ascending_frames(gObjectEventPic_ArceusDragon, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusDark[] = { + overworld_ascending_frames(gObjectEventPic_ArceusDark, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_ArceusFairy[] = { + overworld_ascending_frames(gObjectEventPic_ArceusFairy, 8, 8), +}; +#endif //P_FAMILY_ARCEUS + +#if P_FAMILY_VICTINI +static const struct SpriteFrameImage sPicTable_Victini[] = { + overworld_ascending_frames(gObjectEventPic_Victini, 4, 4), +}; +#endif //P_FAMILY_VICTINI + +#if P_FAMILY_SNIVY +static const struct SpriteFrameImage sPicTable_Snivy[] = { + overworld_ascending_frames(gObjectEventPic_Snivy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Servine[] = { + overworld_ascending_frames(gObjectEventPic_Servine, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Serperior[] = { + overworld_ascending_frames(gObjectEventPic_Serperior, 4, 4), +}; +#endif //P_FAMILY_SNIVY + +#if P_FAMILY_TEPIG +static const struct SpriteFrameImage sPicTable_Tepig[] = { + overworld_ascending_frames(gObjectEventPic_Tepig, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Pignite[] = { + overworld_ascending_frames(gObjectEventPic_Pignite, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Emboar[] = { + overworld_ascending_frames(gObjectEventPic_Emboar, 4, 4), +}; +#endif //P_FAMILY_TEPIG + +#if P_FAMILY_OSHAWOTT +static const struct SpriteFrameImage sPicTable_Oshawott[] = { + overworld_ascending_frames(gObjectEventPic_Oshawott, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dewott[] = { + overworld_ascending_frames(gObjectEventPic_Dewott, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Samurott[] = { + overworld_ascending_frames(gObjectEventPic_Samurott, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_SamurottHisui[] = { + overworld_ascending_frames(gObjectEventPic_SamurottHisui, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_OSHAWOTT + +#if P_FAMILY_PATRAT +static const struct SpriteFrameImage sPicTable_Patrat[] = { + overworld_ascending_frames(gObjectEventPic_Patrat, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Watchog[] = { + overworld_ascending_frames(gObjectEventPic_Watchog, 4, 4), +}; +#endif //P_FAMILY_PATRAT + +#if P_FAMILY_LILLIPUP +static const struct SpriteFrameImage sPicTable_Lillipup[] = { + overworld_ascending_frames(gObjectEventPic_Lillipup, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Herdier[] = { + overworld_ascending_frames(gObjectEventPic_Herdier, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Stoutland[] = { + overworld_ascending_frames(gObjectEventPic_Stoutland, 4, 4), +}; +#endif //P_FAMILY_LILLIPUP + +#if P_FAMILY_PURRLOIN +static const struct SpriteFrameImage sPicTable_Purrloin[] = { + overworld_ascending_frames(gObjectEventPic_Purrloin, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Liepard[] = { + overworld_ascending_frames(gObjectEventPic_Liepard, 4, 4), +}; +#endif //P_FAMILY_PURRLOIN + +#if P_FAMILY_PANSAGE +static const struct SpriteFrameImage sPicTable_Pansage[] = { + overworld_ascending_frames(gObjectEventPic_Pansage, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Simisage[] = { + overworld_ascending_frames(gObjectEventPic_Simisage, 4, 4), +}; +#endif //P_FAMILY_PANSAGE + +#if P_FAMILY_PANSEAR +static const struct SpriteFrameImage sPicTable_Pansear[] = { + overworld_ascending_frames(gObjectEventPic_Pansear, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Simisear[] = { + overworld_ascending_frames(gObjectEventPic_Simisear, 4, 4), +}; +#endif //P_FAMILY_PANSEAR + +#if P_FAMILY_PANPOUR +static const struct SpriteFrameImage sPicTable_Panpour[] = { + overworld_ascending_frames(gObjectEventPic_Panpour, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Simipour[] = { + overworld_ascending_frames(gObjectEventPic_Simipour, 4, 4), +}; +#endif //P_FAMILY_PANPOUR + +#if P_FAMILY_MUNNA +static const struct SpriteFrameImage sPicTable_Munna[] = { + overworld_ascending_frames(gObjectEventPic_Munna, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Musharna[] = { + overworld_ascending_frames(gObjectEventPic_Musharna, 4, 4), +}; +#endif //P_FAMILY_MUNNA + +#if P_FAMILY_PIDOVE +static const struct SpriteFrameImage sPicTable_Pidove[] = { + overworld_ascending_frames(gObjectEventPic_Pidove, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Tranquill[] = { + overworld_ascending_frames(gObjectEventPic_Tranquill, 4, 4), +}; + +static const struct SpriteFrameImage sPicTable_Unfezant[] = { + overworld_ascending_frames(gObjectEventPic_Unfezant, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_UnfezantF[] = { + overworld_ascending_frames(gObjectEventPic_UnfezantF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_PIDOVE + +#if P_FAMILY_BLITZLE +static const struct SpriteFrameImage sPicTable_Blitzle[] = { + overworld_ascending_frames(gObjectEventPic_Blitzle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Zebstrika[] = { + overworld_ascending_frames(gObjectEventPic_Zebstrika, 4, 4), +}; +#endif //P_FAMILY_BLITZLE + +#if P_FAMILY_ROGGENROLA +static const struct SpriteFrameImage sPicTable_Roggenrola[] = { + overworld_ascending_frames(gObjectEventPic_Roggenrola, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Boldore[] = { + overworld_ascending_frames(gObjectEventPic_Boldore, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Gigalith[] = { + overworld_ascending_frames(gObjectEventPic_Gigalith, 4, 4), +}; +#endif //P_FAMILY_ROGGENROLA + +#if P_FAMILY_WOOBAT +static const struct SpriteFrameImage sPicTable_Woobat[] = { + overworld_ascending_frames(gObjectEventPic_Woobat, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Swoobat[] = { + overworld_ascending_frames(gObjectEventPic_Swoobat, 4, 4), +}; +#endif //P_FAMILY_WOOBAT + +#if P_FAMILY_DRILBUR +static const struct SpriteFrameImage sPicTable_Drilbur[] = { + overworld_ascending_frames(gObjectEventPic_Drilbur, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Excadrill[] = { + overworld_ascending_frames(gObjectEventPic_Excadrill, 4, 4), +}; +#endif //P_FAMILY_DRILBUR + +#if P_FAMILY_AUDINO +static const struct SpriteFrameImage sPicTable_Audino[] = { + overworld_ascending_frames(gObjectEventPic_Audino, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_AudinoMega[] = { + overworld_ascending_frames(gObjectEventPic_AudinoMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_AUDINO + +#if P_FAMILY_TIMBURR +static const struct SpriteFrameImage sPicTable_Timburr[] = { + overworld_ascending_frames(gObjectEventPic_Timburr, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Gurdurr[] = { + overworld_ascending_frames(gObjectEventPic_Gurdurr, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Conkeldurr[] = { + overworld_ascending_frames(gObjectEventPic_Conkeldurr, 4, 4), +}; +#endif //P_FAMILY_TIMBURR + +#if P_FAMILY_TYMPOLE +static const struct SpriteFrameImage sPicTable_Tympole[] = { + overworld_ascending_frames(gObjectEventPic_Tympole, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Palpitoad[] = { + overworld_ascending_frames(gObjectEventPic_Palpitoad, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Seismitoad[] = { + overworld_ascending_frames(gObjectEventPic_Seismitoad, 4, 4), +}; +#endif //P_FAMILY_TYMPOLE + +#if P_FAMILY_THROH +static const struct SpriteFrameImage sPicTable_Throh[] = { + overworld_ascending_frames(gObjectEventPic_Throh, 4, 4), +}; +#endif //P_FAMILY_THROH + +#if P_FAMILY_SAWK +static const struct SpriteFrameImage sPicTable_Sawk[] = { + overworld_ascending_frames(gObjectEventPic_Sawk, 4, 4), +}; +#endif //P_FAMILY_SAWK + +#if P_FAMILY_SEWADDLE +static const struct SpriteFrameImage sPicTable_Sewaddle[] = { + overworld_ascending_frames(gObjectEventPic_Sewaddle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Swadloon[] = { + overworld_ascending_frames(gObjectEventPic_Swadloon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Leavanny[] = { + overworld_ascending_frames(gObjectEventPic_Leavanny, 4, 4), +}; +#endif //P_FAMILY_SEWADDLE + +#if P_FAMILY_VENIPEDE +static const struct SpriteFrameImage sPicTable_Venipede[] = { + overworld_ascending_frames(gObjectEventPic_Venipede, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Whirlipede[] = { + overworld_ascending_frames(gObjectEventPic_Whirlipede, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Scolipede[] = { + overworld_ascending_frames(gObjectEventPic_Scolipede, 4, 4), +}; +#endif //P_FAMILY_VENIPEDE + +#if P_FAMILY_COTTONEE +static const struct SpriteFrameImage sPicTable_Cottonee[] = { + overworld_ascending_frames(gObjectEventPic_Cottonee, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Whimsicott[] = { + overworld_ascending_frames(gObjectEventPic_Whimsicott, 4, 4), +}; +#endif //P_FAMILY_COTTONEE + +#if P_FAMILY_PETILIL +static const struct SpriteFrameImage sPicTable_Petilil[] = { + overworld_ascending_frames(gObjectEventPic_Petilil, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Lilligant[] = { + overworld_ascending_frames(gObjectEventPic_Lilligant, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_LilligantHisui[] = { + overworld_ascending_frames(gObjectEventPic_LilligantHisui, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_PETILIL + +#if P_FAMILY_BASCULIN +static const struct SpriteFrameImage sPicTable_BasculinRedStriped[] = { + overworld_ascending_frames(gObjectEventPic_BasculinRedStriped, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_BasculinBlueStriped[] = { + overworld_ascending_frames(gObjectEventPic_BasculinBlueStriped, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_BasculinWhiteStriped[] = { + overworld_ascending_frames(gObjectEventPic_BasculinWhiteStriped, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_BasculegionM[] = { + overworld_ascending_frames(gObjectEventPic_BasculegionM, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_BasculegionF[] = { + overworld_ascending_frames(gObjectEventPic_BasculegionF, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_BASCULIN + +#if P_FAMILY_SANDILE +static const struct SpriteFrameImage sPicTable_Sandile[] = { + overworld_ascending_frames(gObjectEventPic_Sandile, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Krokorok[] = { + overworld_ascending_frames(gObjectEventPic_Krokorok, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Krookodile[] = { + overworld_ascending_frames(gObjectEventPic_Krookodile, 4, 4), +}; +#endif //P_FAMILY_SANDILE + +#if P_FAMILY_DARUMAKA +static const struct SpriteFrameImage sPicTable_Darumaka[] = { + overworld_ascending_frames(gObjectEventPic_Darumaka, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_DarmanitanStandard[] = { + overworld_ascending_frames(gObjectEventPic_DarmanitanStandard, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_DarmanitanZen[] = { + overworld_ascending_frames(gObjectEventPic_DarmanitanZen, 4, 4), +};*/ +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_DarumakaGalar[] = { + overworld_ascending_frames(gObjectEventPic_DarumakaGalar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_DarmanitanGalarStandard[] = { + overworld_ascending_frames(gObjectEventPic_DarmanitanGalarStandard, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_DarmanitanGalarZen[] = { + overworld_ascending_frames(gObjectEventPic_DarmanitanGalarZen, 4, 4), +};*/ +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_DARUMAKA + +#if P_FAMILY_MARACTUS +static const struct SpriteFrameImage sPicTable_Maractus[] = { + overworld_ascending_frames(gObjectEventPic_Maractus, 4, 4), +}; +#endif //P_FAMILY_MARACTUS + +#if P_FAMILY_DWEBBLE +static const struct SpriteFrameImage sPicTable_Dwebble[] = { + overworld_ascending_frames(gObjectEventPic_Dwebble, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Crustle[] = { + overworld_ascending_frames(gObjectEventPic_Crustle, 4, 4), +}; +#endif //P_FAMILY_DWEBBLE + +#if P_FAMILY_SCRAGGY +static const struct SpriteFrameImage sPicTable_Scraggy[] = { + overworld_ascending_frames(gObjectEventPic_Scraggy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Scrafty[] = { + overworld_ascending_frames(gObjectEventPic_Scrafty, 4, 4), +}; +#endif //P_FAMILY_SCRAGGY + +#if P_FAMILY_SIGILYPH +static const struct SpriteFrameImage sPicTable_Sigilyph[] = { + overworld_ascending_frames(gObjectEventPic_Sigilyph, 4, 4), +}; +#endif //P_FAMILY_SIGILYPH + +#if P_FAMILY_YAMASK +static const struct SpriteFrameImage sPicTable_Yamask[] = { + overworld_ascending_frames(gObjectEventPic_Yamask, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Cofagrigus[] = { + overworld_ascending_frames(gObjectEventPic_Cofagrigus, 4, 4), +}; +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_YamaskGalar[] = { + overworld_ascending_frames(gObjectEventPic_YamaskGalar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Runerigus[] = { + overworld_ascending_frames(gObjectEventPic_Runerigus, 4, 4), +}; +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_YAMASK + +#if P_FAMILY_TIRTOUGA +static const struct SpriteFrameImage sPicTable_Tirtouga[] = { + overworld_ascending_frames(gObjectEventPic_Tirtouga, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Carracosta[] = { + overworld_ascending_frames(gObjectEventPic_Carracosta, 4, 4), +}; +#endif //P_FAMILY_TIRTOUGA + +#if P_FAMILY_ARCHEN +static const struct SpriteFrameImage sPicTable_Archen[] = { + overworld_ascending_frames(gObjectEventPic_Archen, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Archeops[] = { + overworld_ascending_frames(gObjectEventPic_Archeops, 4, 4), +}; +#endif //P_FAMILY_ARCHEN + +#if P_FAMILY_TRUBBISH +static const struct SpriteFrameImage sPicTable_Trubbish[] = { + overworld_ascending_frames(gObjectEventPic_Trubbish, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Garbodor[] = { + overworld_ascending_frames(gObjectEventPic_Garbodor, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_GarbodorGmax[] = { + overworld_ascending_frames(gObjectEventPic_GarbodorGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_TRUBBISH + +#if P_FAMILY_ZORUA +static const struct SpriteFrameImage sPicTable_Zorua[] = { + overworld_ascending_frames(gObjectEventPic_Zorua, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Zoroark[] = { + overworld_ascending_frames(gObjectEventPic_Zoroark, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_ZoruaHisui[] = { + overworld_ascending_frames(gObjectEventPic_ZoruaHisui, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_ZoroarkHisui[] = { + overworld_ascending_frames(gObjectEventPic_ZoroarkHisui, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_ZORUA + +#if P_FAMILY_MINCCINO +static const struct SpriteFrameImage sPicTable_Minccino[] = { + overworld_ascending_frames(gObjectEventPic_Minccino, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Cinccino[] = { + overworld_ascending_frames(gObjectEventPic_Cinccino, 4, 4), +}; +#endif //P_FAMILY_MINCCINO + +#if P_FAMILY_GOTHITA +static const struct SpriteFrameImage sPicTable_Gothita[] = { + overworld_ascending_frames(gObjectEventPic_Gothita, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Gothorita[] = { + overworld_ascending_frames(gObjectEventPic_Gothorita, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Gothitelle[] = { + overworld_ascending_frames(gObjectEventPic_Gothitelle, 4, 4), +}; +#endif //P_FAMILY_GOTHITA + +#if P_FAMILY_SOLOSIS +static const struct SpriteFrameImage sPicTable_Solosis[] = { + overworld_ascending_frames(gObjectEventPic_Solosis, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Duosion[] = { + overworld_ascending_frames(gObjectEventPic_Duosion, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Reuniclus[] = { + overworld_ascending_frames(gObjectEventPic_Reuniclus, 4, 4), +}; +#endif //P_FAMILY_SOLOSIS + +#if P_FAMILY_DUCKLETT +static const struct SpriteFrameImage sPicTable_Ducklett[] = { + overworld_ascending_frames(gObjectEventPic_Ducklett, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Swanna[] = { + overworld_ascending_frames(gObjectEventPic_Swanna, 4, 4), +}; +#endif //P_FAMILY_DUCKLETT + +#if P_FAMILY_VANILLITE +static const struct SpriteFrameImage sPicTable_Vanillite[] = { + overworld_ascending_frames(gObjectEventPic_Vanillite, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Vanillish[] = { + overworld_ascending_frames(gObjectEventPic_Vanillish, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Vanilluxe[] = { + overworld_ascending_frames(gObjectEventPic_Vanilluxe, 4, 4), +}; +#endif //P_FAMILY_VANILLITE + +#if P_FAMILY_DEERLING + +static const struct SpriteFrameImage sPicTable_DeerlingSpring[] = { + overworld_ascending_frames(gObjectEventPic_DeerlingSpring, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_DeerlingSummer[] = { + overworld_ascending_frames(gObjectEventPic_DeerlingSummer, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_DeerlingAutumn[] = { + overworld_ascending_frames(gObjectEventPic_DeerlingAutumn, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_DeerlingWinter[] = { + overworld_ascending_frames(gObjectEventPic_DeerlingWinter, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_SawsbuckSpring[] = { + overworld_ascending_frames(gObjectEventPic_SawsbuckSpring, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_SawsbuckSummer[] = { + overworld_ascending_frames(gObjectEventPic_SawsbuckSummer, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_SawsbuckAutumn[] = { + overworld_ascending_frames(gObjectEventPic_SawsbuckAutumn, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_SawsbuckWinter[] = { + overworld_ascending_frames(gObjectEventPic_SawsbuckWinter, 4, 4), +}; +#endif //P_FAMILY_DEERLING + +#if P_FAMILY_EMOLGA +static const struct SpriteFrameImage sPicTable_Emolga[] = { + overworld_ascending_frames(gObjectEventPic_Emolga, 4, 4), +}; +#endif //P_FAMILY_EMOLGA + +#if P_FAMILY_KARRABLAST +static const struct SpriteFrameImage sPicTable_Karrablast[] = { + overworld_ascending_frames(gObjectEventPic_Karrablast, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Escavalier[] = { + overworld_ascending_frames(gObjectEventPic_Escavalier, 4, 4), +}; +#endif //P_FAMILY_KARRABLAST + +#if P_FAMILY_FOONGUS +static const struct SpriteFrameImage sPicTable_Foongus[] = { + overworld_ascending_frames(gObjectEventPic_Foongus, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Amoonguss[] = { + overworld_ascending_frames(gObjectEventPic_Amoonguss, 4, 4), +}; +#endif //P_FAMILY_FOONGUS + +#if P_FAMILY_FRILLISH +static const struct SpriteFrameImage sPicTable_Frillish[] = { + overworld_ascending_frames(gObjectEventPic_Frillish, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_FrillishF[] = { + overworld_ascending_frames(gObjectEventPic_FrillishF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_Jellicent[] = { + overworld_ascending_frames(gObjectEventPic_Jellicent, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_JellicentF[] = { + overworld_ascending_frames(gObjectEventPic_JellicentF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_FRILLISH + +#if P_FAMILY_ALOMOMOLA +static const struct SpriteFrameImage sPicTable_Alomomola[] = { + overworld_ascending_frames(gObjectEventPic_Alomomola, 4, 4), +}; +#endif //P_FAMILY_ALOMOMOLA + +#if P_FAMILY_JOLTIK +static const struct SpriteFrameImage sPicTable_Joltik[] = { + overworld_ascending_frames(gObjectEventPic_Joltik, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Galvantula[] = { + overworld_ascending_frames(gObjectEventPic_Galvantula, 4, 4), +}; +#endif //P_FAMILY_JOLTIK + +#if P_FAMILY_FERROSEED +static const struct SpriteFrameImage sPicTable_Ferroseed[] = { + overworld_ascending_frames(gObjectEventPic_Ferroseed, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Ferrothorn[] = { + overworld_ascending_frames(gObjectEventPic_Ferrothorn, 4, 4), +}; +#endif //P_FAMILY_FERROSEED + +#if P_FAMILY_KLINK +static const struct SpriteFrameImage sPicTable_Klink[] = { + overworld_ascending_frames(gObjectEventPic_Klink, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Klang[] = { + overworld_ascending_frames(gObjectEventPic_Klang, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Klinklang[] = { + overworld_ascending_frames(gObjectEventPic_Klinklang, 4, 4), +}; +#endif //P_FAMILY_KLINK + +#if P_FAMILY_TYNAMO +static const struct SpriteFrameImage sPicTable_Tynamo[] = { + overworld_ascending_frames(gObjectEventPic_Tynamo, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Eelektrik[] = { + overworld_ascending_frames(gObjectEventPic_Eelektrik, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Eelektross[] = { + overworld_ascending_frames(gObjectEventPic_Eelektross, 4, 4), +}; +#endif //P_FAMILY_TYNAMO + +#if P_FAMILY_ELGYEM +static const struct SpriteFrameImage sPicTable_Elgyem[] = { + overworld_ascending_frames(gObjectEventPic_Elgyem, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Beheeyem[] = { + overworld_ascending_frames(gObjectEventPic_Beheeyem, 4, 4), +}; +#endif //P_FAMILY_ELGYEM + +#if P_FAMILY_LITWICK +static const struct SpriteFrameImage sPicTable_Litwick[] = { + overworld_ascending_frames(gObjectEventPic_Litwick, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Lampent[] = { + overworld_ascending_frames(gObjectEventPic_Lampent, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Chandelure[] = { + overworld_ascending_frames(gObjectEventPic_Chandelure, 4, 4), +}; +#endif //P_FAMILY_LITWICK + +#if P_FAMILY_AXEW +static const struct SpriteFrameImage sPicTable_Axew[] = { + overworld_ascending_frames(gObjectEventPic_Axew, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Fraxure[] = { + overworld_ascending_frames(gObjectEventPic_Fraxure, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Haxorus[] = { + overworld_ascending_frames(gObjectEventPic_Haxorus, 4, 4), +}; +#endif //P_FAMILY_AXEW + +#if P_FAMILY_CUBCHOO +static const struct SpriteFrameImage sPicTable_Cubchoo[] = { + overworld_ascending_frames(gObjectEventPic_Cubchoo, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Beartic[] = { + overworld_ascending_frames(gObjectEventPic_Beartic, 4, 4), +}; +#endif //P_FAMILY_CUBCHOO + +#if P_FAMILY_CRYOGONAL +static const struct SpriteFrameImage sPicTable_Cryogonal[] = { + overworld_ascending_frames(gObjectEventPic_Cryogonal, 4, 4), +}; +#endif //P_FAMILY_CRYOGONAL + +#if P_FAMILY_SHELMET +static const struct SpriteFrameImage sPicTable_Shelmet[] = { + overworld_ascending_frames(gObjectEventPic_Shelmet, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Accelgor[] = { + overworld_ascending_frames(gObjectEventPic_Accelgor, 4, 4), +}; +#endif //P_FAMILY_SHELMET + +#if P_FAMILY_STUNFISK +static const struct SpriteFrameImage sPicTable_Stunfisk[] = { + overworld_ascending_frames(gObjectEventPic_Stunfisk, 4, 4), +}; +#if P_GALARIAN_FORMS +static const struct SpriteFrameImage sPicTable_StunfiskGalar[] = { + overworld_ascending_frames(gObjectEventPic_StunfiskGalar, 4, 4), +}; +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_STUNFISK + +#if P_FAMILY_MIENFOO +static const struct SpriteFrameImage sPicTable_Mienfoo[] = { + overworld_ascending_frames(gObjectEventPic_Mienfoo, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Mienshao[] = { + overworld_ascending_frames(gObjectEventPic_Mienshao, 4, 4), +}; +#endif //P_FAMILY_MIENFOO + +#if P_FAMILY_DRUDDIGON +static const struct SpriteFrameImage sPicTable_Druddigon[] = { + overworld_ascending_frames(gObjectEventPic_Druddigon, 4, 4), +}; +#endif //P_FAMILY_DRUDDIGON + +#if P_FAMILY_GOLETT +static const struct SpriteFrameImage sPicTable_Golett[] = { + overworld_ascending_frames(gObjectEventPic_Golett, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Golurk[] = { + overworld_ascending_frames(gObjectEventPic_Golurk, 4, 4), +}; +#endif //P_FAMILY_GOLETT + +#if P_FAMILY_PAWNIARD +static const struct SpriteFrameImage sPicTable_Pawniard[] = { + overworld_ascending_frames(gObjectEventPic_Pawniard, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Bisharp[] = { + overworld_ascending_frames(gObjectEventPic_Bisharp, 4, 4), +}; +#if P_GEN_9_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Kingambit[] = { + overworld_ascending_frames(gObjectEventPic_Kingambit, 8, 8), +}; +#endif //P_GEN_9_CROSS_EVOS +#endif //P_FAMILY_PAWNIARD + +#if P_FAMILY_BOUFFALANT +static const struct SpriteFrameImage sPicTable_Bouffalant[] = { + overworld_ascending_frames(gObjectEventPic_Bouffalant, 4, 4), +}; +#endif //P_FAMILY_BOUFFALANT + +#if P_FAMILY_RUFFLET +static const struct SpriteFrameImage sPicTable_Rufflet[] = { + overworld_ascending_frames(gObjectEventPic_Rufflet, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Braviary[] = { + overworld_ascending_frames(gObjectEventPic_Braviary, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_BraviaryHisui[] = { + overworld_ascending_frames(gObjectEventPic_BraviaryHisui, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_RUFFLET + +#if P_FAMILY_VULLABY +static const struct SpriteFrameImage sPicTable_Vullaby[] = { + overworld_ascending_frames(gObjectEventPic_Vullaby, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Mandibuzz[] = { + overworld_ascending_frames(gObjectEventPic_Mandibuzz, 4, 4), +}; +#endif //P_FAMILY_VULLABY + +#if P_FAMILY_HEATMOR +static const struct SpriteFrameImage sPicTable_Heatmor[] = { + overworld_ascending_frames(gObjectEventPic_Heatmor, 4, 4), +}; +#endif //P_FAMILY_HEATMOR + +#if P_FAMILY_DURANT +static const struct SpriteFrameImage sPicTable_Durant[] = { + overworld_ascending_frames(gObjectEventPic_Durant, 4, 4), +}; +#endif //P_FAMILY_DURANT + +#if P_FAMILY_DEINO +static const struct SpriteFrameImage sPicTable_Deino[] = { + overworld_ascending_frames(gObjectEventPic_Deino, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Zweilous[] = { + overworld_ascending_frames(gObjectEventPic_Zweilous, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Hydreigon[] = { + overworld_ascending_frames(gObjectEventPic_Hydreigon, 4, 4), +}; +#endif //P_FAMILY_DEINO + +#if P_FAMILY_LARVESTA +static const struct SpriteFrameImage sPicTable_Larvesta[] = { + overworld_ascending_frames(gObjectEventPic_Larvesta, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Volcarona[] = { + overworld_ascending_frames(gObjectEventPic_Volcarona, 4, 4), +}; +#endif //P_FAMILY_LARVESTA + +#if P_FAMILY_COBALION +static const struct SpriteFrameImage sPicTable_Cobalion[] = { + overworld_ascending_frames(gObjectEventPic_Cobalion, 4, 4), +}; +#endif //P_FAMILY_COBALION + +#if P_FAMILY_TERRAKION +static const struct SpriteFrameImage sPicTable_Terrakion[] = { + overworld_ascending_frames(gObjectEventPic_Terrakion, 4, 4), +}; +#endif //P_FAMILY_TERRAKION + +#if P_FAMILY_VIRIZION +static const struct SpriteFrameImage sPicTable_Virizion[] = { + overworld_ascending_frames(gObjectEventPic_Virizion, 4, 4), +}; +#endif //P_FAMILY_VIRIZION + +#if P_FAMILY_TORNADUS + +static const struct SpriteFrameImage sPicTable_TornadusIncarnate[] = { + overworld_ascending_frames(gObjectEventPic_TornadusIncarnate, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_TornadusTherian[] = { + overworld_ascending_frames(gObjectEventPic_TornadusTherian, 8, 8), +}; +#endif //P_FAMILY_TORNADUS + +#if P_FAMILY_THUNDURUS + +static const struct SpriteFrameImage sPicTable_ThundurusIncarnate[] = { + overworld_ascending_frames(gObjectEventPic_ThundurusIncarnate, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_ThundurusTherian[] = { + overworld_ascending_frames(gObjectEventPic_ThundurusTherian, 8, 8), +}; +#endif //P_FAMILY_THUNDURUS + +#if P_FAMILY_RESHIRAM +static const struct SpriteFrameImage sPicTable_Reshiram[] = { + overworld_ascending_frames(gObjectEventPic_Reshiram, 8, 8), +}; +#endif //P_FAMILY_RESHIRAM + +#if P_FAMILY_ZEKROM +static const struct SpriteFrameImage sPicTable_Zekrom[] = { + overworld_ascending_frames(gObjectEventPic_Zekrom, 8, 8), +}; +#endif //P_FAMILY_ZEKROM + +#if P_FAMILY_LANDORUS + +static const struct SpriteFrameImage sPicTable_LandorusIncarnate[] = { + overworld_ascending_frames(gObjectEventPic_LandorusIncarnate, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_LandorusTherian[] = { + overworld_ascending_frames(gObjectEventPic_LandorusTherian, 4, 4), +}; +#endif //P_FAMILY_LANDORUS + +#if P_FAMILY_ENAMORUS +static const struct SpriteFrameImage sPicTable_EnamorusIncarnate[] = { + overworld_ascending_frames(gObjectEventPic_EnamorusIncarnate, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_EnamorusTherian[] = { + overworld_ascending_frames(gObjectEventPic_EnamorusTherian, 8, 8), +}; +#endif //P_FAMILY_ENAMORUS + +#if P_FAMILY_KYUREM +static const struct SpriteFrameImage sPicTable_Kyurem[] = { + overworld_ascending_frames(gObjectEventPic_Kyurem, 8, 8), +}; +#if P_FUSION_FORMS +static const struct SpriteFrameImage sPicTable_KyuremWhite[] = { + overworld_ascending_frames(gObjectEventPic_KyuremWhite, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_KyuremBlack[] = { + overworld_ascending_frames(gObjectEventPic_KyuremBlack, 4, 4), +}; +#endif //P_FUSION_FORMS +#endif //P_FAMILY_KYUREM + +#if P_FAMILY_KELDEO +static const struct SpriteFrameImage sPicTable_KeldeoOrdinary[] = { + overworld_ascending_frames(gObjectEventPic_KeldeoOrdinary, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_KeldeoResolute[] = { + overworld_ascending_frames(gObjectEventPic_KeldeoResolute, 4, 4), +};*/ +#endif //P_FAMILY_KELDEO + +#if P_FAMILY_MELOETTA +static const struct SpriteFrameImage sPicTable_MeloettaAria[] = { + overworld_ascending_frames(gObjectEventPic_MeloettaAria, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MeloettaPirouette[] = { + overworld_ascending_frames(gObjectEventPic_MeloettaPirouette, 4, 4), +}; +#endif //P_FAMILY_MELOETTA + +#if P_FAMILY_GENESECT +static const struct SpriteFrameImage sPicTable_Genesect[] = { + overworld_ascending_frames(gObjectEventPic_Genesect, 4, 4), +}; + + + + +#endif //P_FAMILY_GENESECT + +#if P_FAMILY_CHESPIN +static const struct SpriteFrameImage sPicTable_Chespin[] = { + overworld_ascending_frames(gObjectEventPic_Chespin, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Quilladin[] = { + overworld_ascending_frames(gObjectEventPic_Quilladin, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Chesnaught[] = { + overworld_ascending_frames(gObjectEventPic_Chesnaught, 4, 4), +}; +#endif //P_FAMILY_CHESPIN + +#if P_FAMILY_FENNEKIN +static const struct SpriteFrameImage sPicTable_Fennekin[] = { + overworld_ascending_frames(gObjectEventPic_Fennekin, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Braixen[] = { + overworld_ascending_frames(gObjectEventPic_Braixen, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Delphox[] = { + overworld_ascending_frames(gObjectEventPic_Delphox, 4, 4), +}; +#endif //P_FAMILY_FENNEKIN + +#if P_FAMILY_FROAKIE +static const struct SpriteFrameImage sPicTable_Froakie[] = { + overworld_ascending_frames(gObjectEventPic_Froakie, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Frogadier[] = { + overworld_ascending_frames(gObjectEventPic_Frogadier, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Greninja[] = { + overworld_ascending_frames(gObjectEventPic_Greninja, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_GreninjaAsh[] = { + overworld_ascending_frames(gObjectEventPic_GreninjaAsh, 4, 4), +};*/ +#endif //P_FAMILY_FROAKIE + +#if P_FAMILY_BUNNELBY +static const struct SpriteFrameImage sPicTable_Bunnelby[] = { + overworld_ascending_frames(gObjectEventPic_Bunnelby, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Diggersby[] = { + overworld_ascending_frames(gObjectEventPic_Diggersby, 4, 4), +}; +#endif //P_FAMILY_BUNNELBY + +#if P_FAMILY_FLETCHLING +static const struct SpriteFrameImage sPicTable_Fletchling[] = { + overworld_ascending_frames(gObjectEventPic_Fletchling, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Fletchinder[] = { + overworld_ascending_frames(gObjectEventPic_Fletchinder, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Talonflame[] = { + overworld_ascending_frames(gObjectEventPic_Talonflame, 4, 4), +}; +#endif //P_FAMILY_FLETCHLING + +#if P_FAMILY_SCATTERBUG +static const struct SpriteFrameImage sPicTable_Scatterbug[] = { + overworld_ascending_frames(gObjectEventPic_Scatterbug, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Spewpa[] = { + overworld_ascending_frames(gObjectEventPic_Spewpa, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonIcySnow[] = { + overworld_ascending_frames(gObjectEventPic_VivillonIcySnow, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonPolar[] = { + overworld_ascending_frames(gObjectEventPic_VivillonPolar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonTundra[] = { + overworld_ascending_frames(gObjectEventPic_VivillonTundra, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonContinental[] = { + overworld_ascending_frames(gObjectEventPic_VivillonContinental, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonGarden[] = { + overworld_ascending_frames(gObjectEventPic_VivillonGarden, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonElegant[] = { + overworld_ascending_frames(gObjectEventPic_VivillonElegant, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonMeadow[] = { + overworld_ascending_frames(gObjectEventPic_VivillonMeadow, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonModern[] = { + overworld_ascending_frames(gObjectEventPic_VivillonModern, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonMarine[] = { + overworld_ascending_frames(gObjectEventPic_VivillonMarine, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonArchipelago[] = { + overworld_ascending_frames(gObjectEventPic_VivillonArchipelago, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonHighPlains[] = { + overworld_ascending_frames(gObjectEventPic_VivillonHighPlains, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonSandstorm[] = { + overworld_ascending_frames(gObjectEventPic_VivillonSandstorm, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonRiver[] = { + overworld_ascending_frames(gObjectEventPic_VivillonRiver, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonMonsoon[] = { + overworld_ascending_frames(gObjectEventPic_VivillonMonsoon, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonSavanna[] = { + overworld_ascending_frames(gObjectEventPic_VivillonSavanna, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonSun[] = { + overworld_ascending_frames(gObjectEventPic_VivillonSun, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonOcean[] = { + overworld_ascending_frames(gObjectEventPic_VivillonOcean, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonJungle[] = { + overworld_ascending_frames(gObjectEventPic_VivillonJungle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonFancy[] = { + overworld_ascending_frames(gObjectEventPic_VivillonFancy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_VivillonPokeBall[] = { + overworld_ascending_frames(gObjectEventPic_VivillonPokeBall, 4, 4), +}; +#endif //P_FAMILY_SCATTERBUG + +#if P_FAMILY_LITLEO +static const struct SpriteFrameImage sPicTable_Litleo[] = { + overworld_ascending_frames(gObjectEventPic_Litleo, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Pyroar[] = { + overworld_ascending_frames(gObjectEventPic_Pyroar, 4, 4), +}; +#if P_GENDER_DIFFERENCES +static const struct SpriteFrameImage sPicTable_PyroarF[] = { + overworld_ascending_frames(gObjectEventPic_PyroarF, 4, 4), +}; +#endif //P_GENDER_DIFFERENCES +#endif //P_FAMILY_LITLEO + +#if P_FAMILY_FLABEBE + +static const struct SpriteFrameImage sPicTable_FlabebeRed[] = { + overworld_ascending_frames(gObjectEventPic_FlabebeRed, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FlabebeYellow[] = { + overworld_ascending_frames(gObjectEventPic_FlabebeYellow, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FlabebeOrange[] = { + overworld_ascending_frames(gObjectEventPic_FlabebeOrange, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FlabebeBlue[] = { + overworld_ascending_frames(gObjectEventPic_FlabebeBlue, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FlabebeWhite[] = { + overworld_ascending_frames(gObjectEventPic_FlabebeWhite, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FloetteRed[] = { + overworld_ascending_frames(gObjectEventPic_FloetteRed, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FloetteYellow[] = { + overworld_ascending_frames(gObjectEventPic_FloetteYellow, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FloetteOrange[] = { + overworld_ascending_frames(gObjectEventPic_FloetteOrange, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FloetteBlue[] = { + overworld_ascending_frames(gObjectEventPic_FloetteBlue, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FloetteWhite[] = { + overworld_ascending_frames(gObjectEventPic_FloetteWhite, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FloetteEternal[] = { + overworld_ascending_frames(gObjectEventPic_FloetteEternal, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FlorgesRed[] = { + overworld_ascending_frames(gObjectEventPic_FlorgesRed, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FlorgesYellow[] = { + overworld_ascending_frames(gObjectEventPic_FlorgesYellow, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FlorgesOrange[] = { + overworld_ascending_frames(gObjectEventPic_FlorgesOrange, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FlorgesBlue[] = { + overworld_ascending_frames(gObjectEventPic_FlorgesBlue, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FlorgesWhite[] = { + overworld_ascending_frames(gObjectEventPic_FlorgesWhite, 4, 4), +}; +#endif //P_FAMILY_FLABEBE + +#if P_FAMILY_SKIDDO +static const struct SpriteFrameImage sPicTable_Skiddo[] = { + overworld_ascending_frames(gObjectEventPic_Skiddo, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Gogoat[] = { + overworld_ascending_frames(gObjectEventPic_Gogoat, 4, 4), +}; +#endif //P_FAMILY_SKIDDO + +#if P_FAMILY_PANCHAM +static const struct SpriteFrameImage sPicTable_Pancham[] = { + overworld_ascending_frames(gObjectEventPic_Pancham, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Pangoro[] = { + overworld_ascending_frames(gObjectEventPic_Pangoro, 4, 4), +}; +#endif //P_FAMILY_PANCHAM + +#if P_FAMILY_FURFROU +static const struct SpriteFrameImage sPicTable_FurfrouNatural[] = { + overworld_ascending_frames(gObjectEventPic_FurfrouNatural, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FurfrouHeart[] = { + overworld_ascending_frames(gObjectEventPic_FurfrouHeart, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FurfrouStar[] = { + overworld_ascending_frames(gObjectEventPic_FurfrouStar, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FurfrouDiamond[] = { + overworld_ascending_frames(gObjectEventPic_FurfrouDiamond, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FurfrouDebutante[] = { + overworld_ascending_frames(gObjectEventPic_FurfrouDebutante, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FurfrouMatron[] = { + overworld_ascending_frames(gObjectEventPic_FurfrouMatron, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FurfrouDandy[] = { + overworld_ascending_frames(gObjectEventPic_FurfrouDandy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FurfrouLaReine[] = { + overworld_ascending_frames(gObjectEventPic_FurfrouLaReine, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FurfrouKabuki[] = { + overworld_ascending_frames(gObjectEventPic_FurfrouKabuki, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_FurfrouPharaoh[] = { + overworld_ascending_frames(gObjectEventPic_FurfrouPharaoh, 4, 4), +}; +#endif //P_FAMILY_FURFROU + +#if P_FAMILY_ESPURR +static const struct SpriteFrameImage sPicTable_Espurr[] = { + overworld_ascending_frames(gObjectEventPic_Espurr, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MeowsticM[] = { + overworld_ascending_frames(gObjectEventPic_MeowsticM, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MeowsticF[] = { + overworld_ascending_frames(gObjectEventPic_MeowsticF, 4, 4), +}; +#endif //P_FAMILY_ESPURR + +#if P_FAMILY_HONEDGE +static const struct SpriteFrameImage sPicTable_Honedge[] = { + overworld_ascending_frames(gObjectEventPic_Honedge, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Doublade[] = { + overworld_ascending_frames(gObjectEventPic_Doublade, 4, 4), +}; + +static const struct SpriteFrameImage sPicTable_AegislashShield[] = { + overworld_ascending_frames(gObjectEventPic_AegislashShield, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_AegislashBlade[] = { + overworld_ascending_frames(gObjectEventPic_AegislashBlade, 4, 4), +};*/ +#endif //P_FAMILY_HONEDGE + +#if P_FAMILY_SPRITZEE +static const struct SpriteFrameImage sPicTable_Spritzee[] = { + overworld_ascending_frames(gObjectEventPic_Spritzee, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Aromatisse[] = { + overworld_ascending_frames(gObjectEventPic_Aromatisse, 4, 4), +}; +#endif //P_FAMILY_SPRITZEE + +#if P_FAMILY_SWIRLIX +static const struct SpriteFrameImage sPicTable_Swirlix[] = { + overworld_ascending_frames(gObjectEventPic_Swirlix, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Slurpuff[] = { + overworld_ascending_frames(gObjectEventPic_Slurpuff, 4, 4), +}; +#endif //P_FAMILY_SWIRLIX + +#if P_FAMILY_INKAY +static const struct SpriteFrameImage sPicTable_Inkay[] = { + overworld_ascending_frames(gObjectEventPic_Inkay, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Malamar[] = { + overworld_ascending_frames(gObjectEventPic_Malamar, 4, 4), +}; +#endif //P_FAMILY_INKAY + +#if P_FAMILY_BINACLE +static const struct SpriteFrameImage sPicTable_Binacle[] = { + overworld_ascending_frames(gObjectEventPic_Binacle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Barbaracle[] = { + overworld_ascending_frames(gObjectEventPic_Barbaracle, 4, 4), +}; +#endif //P_FAMILY_BINACLE + +#if P_FAMILY_SKRELP +static const struct SpriteFrameImage sPicTable_Skrelp[] = { + overworld_ascending_frames(gObjectEventPic_Skrelp, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dragalge[] = { + overworld_ascending_frames(gObjectEventPic_Dragalge, 4, 4), +}; +#endif //P_FAMILY_SKRELP + +#if P_FAMILY_CLAUNCHER +static const struct SpriteFrameImage sPicTable_Clauncher[] = { + overworld_ascending_frames(gObjectEventPic_Clauncher, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Clawitzer[] = { + overworld_ascending_frames(gObjectEventPic_Clawitzer, 4, 4), +}; +#endif //P_FAMILY_CLAUNCHER + +#if P_FAMILY_HELIOPTILE +static const struct SpriteFrameImage sPicTable_Helioptile[] = { + overworld_ascending_frames(gObjectEventPic_Helioptile, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Heliolisk[] = { + overworld_ascending_frames(gObjectEventPic_Heliolisk, 4, 4), +}; +#endif //P_FAMILY_HELIOPTILE + +#if P_FAMILY_TYRUNT +static const struct SpriteFrameImage sPicTable_Tyrunt[] = { + overworld_ascending_frames(gObjectEventPic_Tyrunt, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Tyrantrum[] = { + overworld_ascending_frames(gObjectEventPic_Tyrantrum, 4, 4), +}; +#endif //P_FAMILY_TYRUNT + +#if P_FAMILY_AMAURA +static const struct SpriteFrameImage sPicTable_Amaura[] = { + overworld_ascending_frames(gObjectEventPic_Amaura, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Aurorus[] = { + overworld_ascending_frames(gObjectEventPic_Aurorus, 4, 4), +}; +#endif //P_FAMILY_AMAURA + +#if P_FAMILY_HAWLUCHA +static const struct SpriteFrameImage sPicTable_Hawlucha[] = { + overworld_ascending_frames(gObjectEventPic_Hawlucha, 4, 4), +}; +#endif //P_FAMILY_HAWLUCHA + +#if P_FAMILY_DEDENNE +static const struct SpriteFrameImage sPicTable_Dedenne[] = { + overworld_ascending_frames(gObjectEventPic_Dedenne, 4, 4), +}; +#endif //P_FAMILY_DEDENNE + +#if P_FAMILY_CARBINK +static const struct SpriteFrameImage sPicTable_Carbink[] = { + overworld_ascending_frames(gObjectEventPic_Carbink, 4, 4), +}; +#endif //P_FAMILY_CARBINK + +#if P_FAMILY_GOOMY +static const struct SpriteFrameImage sPicTable_Goomy[] = { + overworld_ascending_frames(gObjectEventPic_Goomy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Sliggoo[] = { + overworld_ascending_frames(gObjectEventPic_Sliggoo, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_SliggooHisui[] = { + overworld_ascending_frames(gObjectEventPic_SliggooHisui, 4, 4), +}; +#endif //P_HISUIAN_FORMS + +static const struct SpriteFrameImage sPicTable_Goodra[] = { + overworld_ascending_frames(gObjectEventPic_Goodra, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_GoodraHisui[] = { + overworld_ascending_frames(gObjectEventPic_GoodraHisui, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_GOOMY + +#if P_FAMILY_KLEFKI +static const struct SpriteFrameImage sPicTable_Klefki[] = { + overworld_ascending_frames(gObjectEventPic_Klefki, 4, 4), +}; +#endif //P_FAMILY_KLEFKI + +#if P_FAMILY_PHANTUMP +static const struct SpriteFrameImage sPicTable_Phantump[] = { + overworld_ascending_frames(gObjectEventPic_Phantump, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Trevenant[] = { + overworld_ascending_frames(gObjectEventPic_Trevenant, 4, 4), +}; +#endif //P_FAMILY_PHANTUMP + +#if P_FAMILY_PUMPKABOO + +static const struct SpriteFrameImage sPicTable_PumpkabooAverage[] = { + overworld_ascending_frames(gObjectEventPic_PumpkabooAverage, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PumpkabooSmall[] = { + overworld_ascending_frames(gObjectEventPic_PumpkabooSmall, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PumpkabooLarge[] = { + overworld_ascending_frames(gObjectEventPic_PumpkabooLarge, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PumpkabooSuper[] = { + overworld_ascending_frames(gObjectEventPic_PumpkabooSuper, 4, 4), +}; + +static const struct SpriteFrameImage sPicTable_GourgeistAverage[] = { + overworld_ascending_frames(gObjectEventPic_GourgeistAverage, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_GourgeistSmall[] = { + overworld_ascending_frames(gObjectEventPic_GourgeistSmall, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_GourgeistLarge[] = { + overworld_ascending_frames(gObjectEventPic_GourgeistLarge, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_GourgeistSuper[] = { + overworld_ascending_frames(gObjectEventPic_GourgeistSuper, 4, 4), +}; +#endif //P_FAMILY_PUMPKABOO + +#if P_FAMILY_BERGMITE +static const struct SpriteFrameImage sPicTable_Bergmite[] = { + overworld_ascending_frames(gObjectEventPic_Bergmite, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Avalugg[] = { + overworld_ascending_frames(gObjectEventPic_Avalugg, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_AvaluggHisui[] = { + overworld_ascending_frames(gObjectEventPic_AvaluggHisui, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_BERGMITE + +#if P_FAMILY_NOIBAT +static const struct SpriteFrameImage sPicTable_Noibat[] = { + overworld_ascending_frames(gObjectEventPic_Noibat, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Noivern[] = { + overworld_ascending_frames(gObjectEventPic_Noivern, 4, 4), +}; +#endif //P_FAMILY_NOIBAT + +#if P_FAMILY_XERNEAS + +static const struct SpriteFrameImage sPicTable_XerneasNeutral[] = { + overworld_ascending_frames(gObjectEventPic_XerneasNeutral, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_XerneasActive[] = { + overworld_ascending_frames(gObjectEventPic_XerneasActive, 8, 8), +}; +#endif //P_FAMILY_XERNEAS + +#if P_FAMILY_YVELTAL +static const struct SpriteFrameImage sPicTable_Yveltal[] = { + overworld_ascending_frames(gObjectEventPic_Yveltal, 8, 8), +}; +#endif //P_FAMILY_YVELTAL + +#if P_FAMILY_ZYGARDE + +static const struct SpriteFrameImage sPicTable_Zygarde50[] = { + overworld_ascending_frames(gObjectEventPic_Zygarde50, 8, 8), +}; +static const struct SpriteFrameImage sPicTable_Zygarde10[] = { + overworld_ascending_frames(gObjectEventPic_Zygarde10, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_ZygardeComplete[] = { + overworld_ascending_frames(gObjectEventPic_ZygardeComplete, 4, 4), +}; + +#endif //P_FAMILY_ZYGARDE + +#if P_FAMILY_DIANCIE +static const struct SpriteFrameImage sPicTable_Diancie[] = { + overworld_ascending_frames(gObjectEventPic_Diancie, 4, 4), +}; +#if P_MEGA_EVOLUTIONS +static const struct SpriteFrameImage sPicTable_DiancieMega[] = { + overworld_ascending_frames(gObjectEventPic_DiancieMega, 4, 4), +}; +#endif //P_MEGA_EVOLUTIONS +#endif //P_FAMILY_DIANCIE + +#if P_FAMILY_HOOPA +static const struct SpriteFrameImage sPicTable_HoopaConfined[] = { + overworld_ascending_frames(gObjectEventPic_HoopaConfined, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_HoopaUnbound[] = { + overworld_ascending_frames(gObjectEventPic_HoopaUnbound, 8, 8), +}; +#endif //P_FAMILY_HOOPA + +#if P_FAMILY_VOLCANION +static const struct SpriteFrameImage sPicTable_Volcanion[] = { + overworld_ascending_frames(gObjectEventPic_Volcanion, 4, 4), +}; +#endif //P_FAMILY_VOLCANION + +#if P_FAMILY_ROWLET +static const struct SpriteFrameImage sPicTable_Rowlet[] = { + overworld_ascending_frames(gObjectEventPic_Rowlet, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dartrix[] = { + overworld_ascending_frames(gObjectEventPic_Dartrix, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Decidueye[] = { + overworld_ascending_frames(gObjectEventPic_Decidueye, 4, 4), +}; +#if P_HISUIAN_FORMS +static const struct SpriteFrameImage sPicTable_DecidueyeHisui[] = { + overworld_ascending_frames(gObjectEventPic_DecidueyeHisui, 4, 4), +}; +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_ROWLET + +#if P_FAMILY_LITTEN +static const struct SpriteFrameImage sPicTable_Litten[] = { + overworld_ascending_frames(gObjectEventPic_Litten, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Torracat[] = { + overworld_ascending_frames(gObjectEventPic_Torracat, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Incineroar[] = { + overworld_ascending_frames(gObjectEventPic_Incineroar, 4, 4), +}; +#endif //P_FAMILY_LITTEN + +#if P_FAMILY_POPPLIO +static const struct SpriteFrameImage sPicTable_Popplio[] = { + overworld_ascending_frames(gObjectEventPic_Popplio, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Brionne[] = { + overworld_ascending_frames(gObjectEventPic_Brionne, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Primarina[] = { + overworld_ascending_frames(gObjectEventPic_Primarina, 4, 4), +}; +#endif //P_FAMILY_POPPLIO + +#if P_FAMILY_PIKIPEK +static const struct SpriteFrameImage sPicTable_Pikipek[] = { + overworld_ascending_frames(gObjectEventPic_Pikipek, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Trumbeak[] = { + overworld_ascending_frames(gObjectEventPic_Trumbeak, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Toucannon[] = { + overworld_ascending_frames(gObjectEventPic_Toucannon, 4, 4), +}; +#endif //P_FAMILY_PIKIPEK + +#if P_FAMILY_YUNGOOS +static const struct SpriteFrameImage sPicTable_Yungoos[] = { + overworld_ascending_frames(gObjectEventPic_Yungoos, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Gumshoos[] = { + overworld_ascending_frames(gObjectEventPic_Gumshoos, 4, 4), +}; +#endif //P_FAMILY_YUNGOOS + +#if P_FAMILY_GRUBBIN +static const struct SpriteFrameImage sPicTable_Grubbin[] = { + overworld_ascending_frames(gObjectEventPic_Grubbin, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Charjabug[] = { + overworld_ascending_frames(gObjectEventPic_Charjabug, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Vikavolt[] = { + overworld_ascending_frames(gObjectEventPic_Vikavolt, 4, 4), +}; +#endif //P_FAMILY_GRUBBIN + +#if P_FAMILY_CRABRAWLER +static const struct SpriteFrameImage sPicTable_Crabrawler[] = { + overworld_ascending_frames(gObjectEventPic_Crabrawler, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Crabominable[] = { + overworld_ascending_frames(gObjectEventPic_Crabominable, 4, 4), +}; +#endif //P_FAMILY_CRABRAWLER + +#if P_FAMILY_ORICORIO + +static const struct SpriteFrameImage sPicTable_OricorioBaile[] = { + overworld_ascending_frames(gObjectEventPic_OricorioBaile, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OricorioPomPom[] = { + overworld_ascending_frames(gObjectEventPic_OricorioPomPom, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OricorioPau[] = { + overworld_ascending_frames(gObjectEventPic_OricorioPau, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OricorioSensu[] = { + overworld_ascending_frames(gObjectEventPic_OricorioSensu, 4, 4), +}; +#endif //P_FAMILY_ORICORIO + +#if P_FAMILY_CUTIEFLY +static const struct SpriteFrameImage sPicTable_Cutiefly[] = { + overworld_ascending_frames(gObjectEventPic_Cutiefly, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Ribombee[] = { + overworld_ascending_frames(gObjectEventPic_Ribombee, 4, 4), +}; +#endif //P_FAMILY_CUTIEFLY + +#if P_FAMILY_ROCKRUFF +static const struct SpriteFrameImage sPicTable_Rockruff[] = { + overworld_ascending_frames(gObjectEventPic_Rockruff, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_LycanrocMidday[] = { + overworld_ascending_frames(gObjectEventPic_LycanrocMidday, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_LycanrocMidnight[] = { + overworld_ascending_frames(gObjectEventPic_LycanrocMidnight, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_LycanrocDusk[] = { + overworld_ascending_frames(gObjectEventPic_LycanrocDusk, 4, 4), +}; +#endif //P_FAMILY_ROCKRUFF + +#if P_FAMILY_WISHIWASHI + +static const struct SpriteFrameImage sPicTable_WishiwashiSolo[] = { + overworld_ascending_frames(gObjectEventPic_WishiwashiSolo, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_WishiwashiSchool[] = { + overworld_ascending_frames(gObjectEventPic_WishiwashiSchool, 4, 4), +};*/ +#endif //P_FAMILY_WISHIWASHI + +#if P_FAMILY_MAREANIE +static const struct SpriteFrameImage sPicTable_Mareanie[] = { + overworld_ascending_frames(gObjectEventPic_Mareanie, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Toxapex[] = { + overworld_ascending_frames(gObjectEventPic_Toxapex, 4, 4), +}; +#endif //P_FAMILY_MAREANIE + +#if P_FAMILY_MUDBRAY +static const struct SpriteFrameImage sPicTable_Mudbray[] = { + overworld_ascending_frames(gObjectEventPic_Mudbray, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Mudsdale[] = { + overworld_ascending_frames(gObjectEventPic_Mudsdale, 4, 4), +}; +#endif //P_FAMILY_MUDBRAY + +#if P_FAMILY_DEWPIDER +static const struct SpriteFrameImage sPicTable_Dewpider[] = { + overworld_ascending_frames(gObjectEventPic_Dewpider, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Araquanid[] = { + overworld_ascending_frames(gObjectEventPic_Araquanid, 4, 4), +}; +#endif //P_FAMILY_DEWPIDER + +#if P_FAMILY_FOMANTIS +static const struct SpriteFrameImage sPicTable_Fomantis[] = { + overworld_ascending_frames(gObjectEventPic_Fomantis, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Lurantis[] = { + overworld_ascending_frames(gObjectEventPic_Lurantis, 4, 4), +}; +#endif //P_FAMILY_FOMANTIS + +#if P_FAMILY_MORELULL +static const struct SpriteFrameImage sPicTable_Morelull[] = { + overworld_ascending_frames(gObjectEventPic_Morelull, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Shiinotic[] = { + overworld_ascending_frames(gObjectEventPic_Shiinotic, 4, 4), +}; +#endif //P_FAMILY_MORELULL + +#if P_FAMILY_SALANDIT +static const struct SpriteFrameImage sPicTable_Salandit[] = { + overworld_ascending_frames(gObjectEventPic_Salandit, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Salazzle[] = { + overworld_ascending_frames(gObjectEventPic_Salazzle, 4, 4), +}; +#endif //P_FAMILY_SALANDIT + +#if P_FAMILY_STUFFUL +static const struct SpriteFrameImage sPicTable_Stufful[] = { + overworld_ascending_frames(gObjectEventPic_Stufful, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Bewear[] = { + overworld_ascending_frames(gObjectEventPic_Bewear, 4, 4), +}; +#endif //P_FAMILY_STUFFUL + +#if P_FAMILY_BOUNSWEET +static const struct SpriteFrameImage sPicTable_Bounsweet[] = { + overworld_ascending_frames(gObjectEventPic_Bounsweet, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Steenee[] = { + overworld_ascending_frames(gObjectEventPic_Steenee, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Tsareena[] = { + overworld_ascending_frames(gObjectEventPic_Tsareena, 4, 4), +}; +#endif //P_FAMILY_BOUNSWEET + +#if P_FAMILY_COMFEY +static const struct SpriteFrameImage sPicTable_Comfey[] = { + overworld_ascending_frames(gObjectEventPic_Comfey, 4, 4), +}; +#endif //P_FAMILY_COMFEY + +#if P_FAMILY_ORANGURU +static const struct SpriteFrameImage sPicTable_Oranguru[] = { + overworld_ascending_frames(gObjectEventPic_Oranguru, 4, 4), +}; +#endif //P_FAMILY_ORANGURU + +#if P_FAMILY_PASSIMIAN +static const struct SpriteFrameImage sPicTable_Passimian[] = { + overworld_ascending_frames(gObjectEventPic_Passimian, 4, 4), +}; +#endif //P_FAMILY_PASSIMIAN + +#if P_FAMILY_WIMPOD +static const struct SpriteFrameImage sPicTable_Wimpod[] = { + overworld_ascending_frames(gObjectEventPic_Wimpod, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Golisopod[] = { + overworld_ascending_frames(gObjectEventPic_Golisopod, 4, 4), +}; +#endif //P_FAMILY_WIMPOD + +#if P_FAMILY_SANDYGAST +static const struct SpriteFrameImage sPicTable_Sandygast[] = { + overworld_ascending_frames(gObjectEventPic_Sandygast, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Palossand[] = { + overworld_ascending_frames(gObjectEventPic_Palossand, 4, 4), +}; +#endif //P_FAMILY_SANDYGAST + +#if P_FAMILY_PYUKUMUKU +static const struct SpriteFrameImage sPicTable_Pyukumuku[] = { + overworld_ascending_frames(gObjectEventPic_Pyukumuku, 4, 4), +}; +#endif //P_FAMILY_PYUKUMUKU + +#if P_FAMILY_TYPE_NULL +static const struct SpriteFrameImage sPicTable_TypeNull[] = { + overworld_ascending_frames(gObjectEventPic_TypeNull, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Silvally[] = { + overworld_ascending_frames(gObjectEventPic_Silvally, 4, 4), +}; +#endif //P_FAMILY_TYPE_NULL + +#if P_FAMILY_MINIOR +static const struct SpriteFrameImage sPicTable_MiniorMeteor[] = { + overworld_ascending_frames(gObjectEventPic_MiniorMeteor, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_MiniorCoreRed[] = { + overworld_ascending_frames(gObjectEventPic_MiniorCoreRed, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MiniorCoreOrange[] = { + overworld_ascending_frames(gObjectEventPic_MiniorCoreOrange, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MiniorCoreYellow[] = { + overworld_ascending_frames(gObjectEventPic_MiniorCoreYellow, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MiniorCoreGreen[] = { + overworld_ascending_frames(gObjectEventPic_MiniorCoreGreen, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MiniorCoreBlue[] = { + overworld_ascending_frames(gObjectEventPic_MiniorCoreBlue, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MiniorCoreIndigo[] = { + overworld_ascending_frames(gObjectEventPic_MiniorCoreIndigo, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MiniorCoreViolet[] = { + overworld_ascending_frames(gObjectEventPic_MiniorCoreViolet, 4, 4), +};*/ +#endif //P_FAMILY_MINIOR + +#if P_FAMILY_KOMALA +static const struct SpriteFrameImage sPicTable_Komala[] = { + overworld_ascending_frames(gObjectEventPic_Komala, 4, 4), +}; +#endif //P_FAMILY_KOMALA + +#if P_FAMILY_TURTONATOR +static const struct SpriteFrameImage sPicTable_Turtonator[] = { + overworld_ascending_frames(gObjectEventPic_Turtonator, 4, 4), +}; +#endif //P_FAMILY_TURTONATOR + +#if P_FAMILY_TOGEDEMARU +static const struct SpriteFrameImage sPicTable_Togedemaru[] = { + overworld_ascending_frames(gObjectEventPic_Togedemaru, 4, 4), +}; +#endif //P_FAMILY_TOGEDEMARU + +#if P_FAMILY_MIMIKYU +static const struct SpriteFrameImage sPicTable_MimikyuDisguised[] = { + overworld_ascending_frames(gObjectEventPic_MimikyuDisguised, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_MimikyuBusted[] = { + overworld_ascending_frames(gObjectEventPic_MimikyuBusted, 4, 4), +};*/ +#endif //P_FAMILY_MIMIKYU + +#if P_FAMILY_BRUXISH +static const struct SpriteFrameImage sPicTable_Bruxish[] = { + overworld_ascending_frames(gObjectEventPic_Bruxish, 4, 4), +}; +#endif //P_FAMILY_BRUXISH + +#if P_FAMILY_DRAMPA +static const struct SpriteFrameImage sPicTable_Drampa[] = { + overworld_ascending_frames(gObjectEventPic_Drampa, 4, 4), +}; +#endif //P_FAMILY_DRAMPA + +#if P_FAMILY_DHELMISE +static const struct SpriteFrameImage sPicTable_Dhelmise[] = { + overworld_ascending_frames(gObjectEventPic_Dhelmise, 4, 4), +}; +#endif //P_FAMILY_DHELMISE + +#if P_FAMILY_JANGMO_O +static const struct SpriteFrameImage sPicTable_JangmoO[] = { + overworld_ascending_frames(gObjectEventPic_JangmoO, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_HakamoO[] = { + overworld_ascending_frames(gObjectEventPic_HakamoO, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_KommoO[] = { + overworld_ascending_frames(gObjectEventPic_KommoO, 4, 4), +}; +#endif //P_FAMILY_JANGMO_O + +#if P_FAMILY_TAPU_KOKO +static const struct SpriteFrameImage sPicTable_TapuKoko[] = { + overworld_ascending_frames(gObjectEventPic_TapuKoko, 4, 4), +}; +#endif //P_FAMILY_TAPU_KOKO + +#if P_FAMILY_TAPU_LELE +static const struct SpriteFrameImage sPicTable_TapuLele[] = { + overworld_ascending_frames(gObjectEventPic_TapuLele, 4, 4), +}; +#endif //P_FAMILY_TAPU_LELE + +#if P_FAMILY_TAPU_BULU +static const struct SpriteFrameImage sPicTable_TapuBulu[] = { + overworld_ascending_frames(gObjectEventPic_TapuBulu, 4, 4), +}; +#endif //P_FAMILY_TAPU_BULU + +#if P_FAMILY_TAPU_FINI +static const struct SpriteFrameImage sPicTable_TapuFini[] = { + overworld_ascending_frames(gObjectEventPic_TapuFini, 4, 4), +}; +#endif //P_FAMILY_TAPU_FINI + +#if P_FAMILY_COSMOG +static const struct SpriteFrameImage sPicTable_Cosmog[] = { + overworld_ascending_frames(gObjectEventPic_Cosmog, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Cosmoem[] = { + overworld_ascending_frames(gObjectEventPic_Cosmoem, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Solgaleo[] = { + overworld_ascending_frames(gObjectEventPic_Solgaleo, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Lunala[] = { + overworld_ascending_frames(gObjectEventPic_Lunala, 4, 4), +}; +#endif //P_FAMILY_COSMOG + +#if P_FAMILY_NIHILEGO +static const struct SpriteFrameImage sPicTable_Nihilego[] = { + overworld_ascending_frames(gObjectEventPic_Nihilego, 4, 4), +}; +#endif //P_FAMILY_NIHILEGO + +#if P_FAMILY_BUZZWOLE +static const struct SpriteFrameImage sPicTable_Buzzwole[] = { + overworld_ascending_frames(gObjectEventPic_Buzzwole, 4, 4), +}; +#endif //P_FAMILY_BUZZWOLE + +#if P_FAMILY_PHEROMOSA +static const struct SpriteFrameImage sPicTable_Pheromosa[] = { + overworld_ascending_frames(gObjectEventPic_Pheromosa, 4, 4), +}; +#endif //P_FAMILY_PHEROMOSA + +#if P_FAMILY_XURKITREE +static const struct SpriteFrameImage sPicTable_Xurkitree[] = { + overworld_ascending_frames(gObjectEventPic_Xurkitree, 4, 4), +}; +#endif //P_FAMILY_XURKITREE + +#if P_FAMILY_CELESTEELA +static const struct SpriteFrameImage sPicTable_Celesteela[] = { + overworld_ascending_frames(gObjectEventPic_Celesteela, 4, 4), +}; +#endif //P_FAMILY_CELESTEELA + +#if P_FAMILY_KARTANA +static const struct SpriteFrameImage sPicTable_Kartana[] = { + overworld_ascending_frames(gObjectEventPic_Kartana, 4, 4), +}; +#endif //P_FAMILY_KARTANA + +#if P_FAMILY_GUZZLORD +static const struct SpriteFrameImage sPicTable_Guzzlord[] = { + overworld_ascending_frames(gObjectEventPic_Guzzlord, 4, 4), +}; +#endif //P_FAMILY_GUZZLORD + +#if P_FAMILY_NECROZMA +static const struct SpriteFrameImage sPicTable_Necrozma[] = { + overworld_ascending_frames(gObjectEventPic_Necrozma, 4, 4), +}; +#if P_FUSION_FORMS + +static const struct SpriteFrameImage sPicTable_NecrozmaDuskMane[] = { + overworld_ascending_frames(gObjectEventPic_NecrozmaDuskMane, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_NecrozmaDawnWings[] = { + overworld_ascending_frames(gObjectEventPic_NecrozmaDawnWings, 4, 4), +}; +#if P_ULTRA_BURST_FORMS +static const struct SpriteFrameImage sPicTable_NecrozmaUltra[] = { + overworld_ascending_frames(gObjectEventPic_NecrozmaUltra, 4, 4), +}; +#endif //P_ULTRA_BURST_FORMS +#endif //P_FUSION_FORMS +#endif //P_FAMILY_NECROZMA + +#if P_FAMILY_MAGEARNA +static const struct SpriteFrameImage sPicTable_Magearna[] = { + overworld_ascending_frames(gObjectEventPic_Magearna, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MagearnaOriginal[] = { + overworld_ascending_frames(gObjectEventPic_MagearnaOriginal, 4, 4), +}; +#endif //P_FAMILY_MAGEARNA + +#if P_FAMILY_MARSHADOW +static const struct SpriteFrameImage sPicTable_Marshadow[] = { + overworld_ascending_frames(gObjectEventPic_Marshadow, 4, 4), +}; +#endif //P_FAMILY_MARSHADOW + +#if P_FAMILY_POIPOLE +static const struct SpriteFrameImage sPicTable_Poipole[] = { + overworld_ascending_frames(gObjectEventPic_Poipole, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Naganadel[] = { + overworld_ascending_frames(gObjectEventPic_Naganadel, 4, 4), +}; +#endif //P_FAMILY_POIPOLE + +#if P_FAMILY_STAKATAKA +static const struct SpriteFrameImage sPicTable_Stakataka[] = { + overworld_ascending_frames(gObjectEventPic_Stakataka, 4, 4), +}; +#endif //P_FAMILY_STAKATAKA + +#if P_FAMILY_BLACEPHALON +static const struct SpriteFrameImage sPicTable_Blacephalon[] = { + overworld_ascending_frames(gObjectEventPic_Blacephalon, 4, 4), +}; +#endif //P_FAMILY_BLACEPHALON + +#if P_FAMILY_ZERAORA +static const struct SpriteFrameImage sPicTable_Zeraora[] = { + overworld_ascending_frames(gObjectEventPic_Zeraora, 4, 4), +}; +#endif //P_FAMILY_ZERAORA + +#if P_FAMILY_MELTAN +static const struct SpriteFrameImage sPicTable_Meltan[] = { + overworld_ascending_frames(gObjectEventPic_Meltan, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Melmetal[] = { + overworld_ascending_frames(gObjectEventPic_Melmetal, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_MelmetalGmax[] = { + overworld_ascending_frames(gObjectEventPic_MelmetalGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_MELTAN + +#if P_FAMILY_GROOKEY +static const struct SpriteFrameImage sPicTable_Grookey[] = { + overworld_ascending_frames(gObjectEventPic_Grookey, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Thwackey[] = { + overworld_ascending_frames(gObjectEventPic_Thwackey, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Rillaboom[] = { + overworld_ascending_frames(gObjectEventPic_Rillaboom, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_RillaboomGmax[] = { + overworld_ascending_frames(gObjectEventPic_RillaboomGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_GROOKEY + +#if P_FAMILY_SCORBUNNY +static const struct SpriteFrameImage sPicTable_Scorbunny[] = { + overworld_ascending_frames(gObjectEventPic_Scorbunny, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Raboot[] = { + overworld_ascending_frames(gObjectEventPic_Raboot, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Cinderace[] = { + overworld_ascending_frames(gObjectEventPic_Cinderace, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_CinderaceGmax[] = { + overworld_ascending_frames(gObjectEventPic_CinderaceGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_SCORBUNNY + +#if P_FAMILY_SOBBLE +static const struct SpriteFrameImage sPicTable_Sobble[] = { + overworld_ascending_frames(gObjectEventPic_Sobble, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Drizzile[] = { + overworld_ascending_frames(gObjectEventPic_Drizzile, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Inteleon[] = { + overworld_ascending_frames(gObjectEventPic_Inteleon, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_InteleonGmax[] = { + overworld_ascending_frames(gObjectEventPic_InteleonGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_SOBBLE + +#if P_FAMILY_SKWOVET +static const struct SpriteFrameImage sPicTable_Skwovet[] = { + overworld_ascending_frames(gObjectEventPic_Skwovet, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Greedent[] = { + overworld_ascending_frames(gObjectEventPic_Greedent, 4, 4), +}; +#endif //P_FAMILY_SKWOVET + +#if P_FAMILY_ROOKIDEE +static const struct SpriteFrameImage sPicTable_Rookidee[] = { + overworld_ascending_frames(gObjectEventPic_Rookidee, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Corvisquire[] = { + overworld_ascending_frames(gObjectEventPic_Corvisquire, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Corviknight[] = { + overworld_ascending_frames(gObjectEventPic_Corviknight, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_CorviknightGmax[] = { + overworld_ascending_frames(gObjectEventPic_CorviknightGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_ROOKIDEE + +#if P_FAMILY_BLIPBUG +static const struct SpriteFrameImage sPicTable_Blipbug[] = { + overworld_ascending_frames(gObjectEventPic_Blipbug, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dottler[] = { + overworld_ascending_frames(gObjectEventPic_Dottler, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Orbeetle[] = { + overworld_ascending_frames(gObjectEventPic_Orbeetle, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_OrbeetleGmax[] = { + overworld_ascending_frames(gObjectEventPic_OrbeetleGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_BLIPBUG + +#if P_FAMILY_NICKIT +static const struct SpriteFrameImage sPicTable_Nickit[] = { + overworld_ascending_frames(gObjectEventPic_Nickit, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Thievul[] = { + overworld_ascending_frames(gObjectEventPic_Thievul, 4, 4), +}; +#endif //P_FAMILY_NICKIT + +#if P_FAMILY_GOSSIFLEUR +static const struct SpriteFrameImage sPicTable_Gossifleur[] = { + overworld_ascending_frames(gObjectEventPic_Gossifleur, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Eldegoss[] = { + overworld_ascending_frames(gObjectEventPic_Eldegoss, 4, 4), +}; +#endif //P_FAMILY_GOSSIFLEUR + +#if P_FAMILY_WOOLOO +static const struct SpriteFrameImage sPicTable_Wooloo[] = { + overworld_ascending_frames(gObjectEventPic_Wooloo, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dubwool[] = { + overworld_ascending_frames(gObjectEventPic_Dubwool, 4, 4), +}; +#endif //P_FAMILY_WOOLOO + +#if P_FAMILY_CHEWTLE +static const struct SpriteFrameImage sPicTable_Chewtle[] = { + overworld_ascending_frames(gObjectEventPic_Chewtle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Drednaw[] = { + overworld_ascending_frames(gObjectEventPic_Drednaw, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_DrednawGmax[] = { + overworld_ascending_frames(gObjectEventPic_DrednawGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_CHEWTLE + +#if P_FAMILY_YAMPER +static const struct SpriteFrameImage sPicTable_Yamper[] = { + overworld_ascending_frames(gObjectEventPic_Yamper, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Boltund[] = { + overworld_ascending_frames(gObjectEventPic_Boltund, 4, 4), +}; +#endif //P_FAMILY_YAMPER + +#if P_FAMILY_ROLYCOLY +static const struct SpriteFrameImage sPicTable_Rolycoly[] = { + overworld_ascending_frames(gObjectEventPic_Rolycoly, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Carkol[] = { + overworld_ascending_frames(gObjectEventPic_Carkol, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Coalossal[] = { + overworld_ascending_frames(gObjectEventPic_Coalossal, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_CoalossalGmax[] = { + overworld_ascending_frames(gObjectEventPic_CoalossalGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_ROLYCOLY + +#if P_FAMILY_APPLIN +static const struct SpriteFrameImage sPicTable_Applin[] = { + overworld_ascending_frames(gObjectEventPic_Applin, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Flapple[] = { + overworld_ascending_frames(gObjectEventPic_Flapple, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_FlappleGmax[] = { + overworld_ascending_frames(gObjectEventPic_FlappleGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS + +static const struct SpriteFrameImage sPicTable_Appletun[] = { + overworld_ascending_frames(gObjectEventPic_Appletun, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_AppletunGmax[] = { + overworld_ascending_frames(gObjectEventPic_AppletunGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS + +#if P_GEN_9_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Dipplin[] = { + overworld_ascending_frames(gObjectEventPic_Dipplin, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Hydrapple[] = { + overworld_ascending_frames(gObjectEventPic_Hydrapple, 8, 8), +}; +#endif //P_GEN_9_CROSS_EVOS +#endif //P_FAMILY_APPLIN + +#if P_FAMILY_SILICOBRA +static const struct SpriteFrameImage sPicTable_Silicobra[] = { + overworld_ascending_frames(gObjectEventPic_Silicobra, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Sandaconda[] = { + overworld_ascending_frames(gObjectEventPic_Sandaconda, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_SandacondaGmax[] = { + overworld_ascending_frames(gObjectEventPic_SandacondaGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_SILICOBRA + +#if P_FAMILY_CRAMORANT +static const struct SpriteFrameImage sPicTable_Cramorant[] = { + overworld_ascending_frames(gObjectEventPic_Cramorant, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_CramorantGulping[] = { + overworld_ascending_frames(gObjectEventPic_CramorantGulping, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_CramorantGorging[] = { + overworld_ascending_frames(gObjectEventPic_CramorantGorging, 4, 4), +};*/ +#endif //P_FAMILY_CRAMORANT + +#if P_FAMILY_ARROKUDA +static const struct SpriteFrameImage sPicTable_Arrokuda[] = { + overworld_ascending_frames(gObjectEventPic_Arrokuda, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Barraskewda[] = { + overworld_ascending_frames(gObjectEventPic_Barraskewda, 4, 4), +}; +#endif //P_FAMILY_ARROKUDA + +#if P_FAMILY_TOXEL +static const struct SpriteFrameImage sPicTable_Toxel[] = { + overworld_ascending_frames(gObjectEventPic_Toxel, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_ToxtricityAmped[] = { + overworld_ascending_frames(gObjectEventPic_ToxtricityAmped, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_ToxtricityLowKey[] = { + overworld_ascending_frames(gObjectEventPic_ToxtricityLowKey, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_ToxtricityGmax[] = { + overworld_ascending_frames(gObjectEventPic_ToxtricityGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_TOXEL + +#if P_FAMILY_SIZZLIPEDE +static const struct SpriteFrameImage sPicTable_Sizzlipede[] = { + overworld_ascending_frames(gObjectEventPic_Sizzlipede, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Centiskorch[] = { + overworld_ascending_frames(gObjectEventPic_Centiskorch, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_CentiskorchGmax[] = { + overworld_ascending_frames(gObjectEventPic_CentiskorchGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_SIZZLIPEDE + +#if P_FAMILY_CLOBBOPUS +static const struct SpriteFrameImage sPicTable_Clobbopus[] = { + overworld_ascending_frames(gObjectEventPic_Clobbopus, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Grapploct[] = { + overworld_ascending_frames(gObjectEventPic_Grapploct, 4, 4), +}; +#endif //P_FAMILY_CLOBBOPUS + +#if P_FAMILY_SINISTEA +static const struct SpriteFrameImage sPicTable_Sinistea[] = { + overworld_ascending_frames(gObjectEventPic_Sinistea, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Polteageist[] = { + overworld_ascending_frames(gObjectEventPic_Polteageist, 4, 4), +}; +#endif //P_FAMILY_SINISTEA + +#if P_FAMILY_HATENNA +static const struct SpriteFrameImage sPicTable_Hatenna[] = { + overworld_ascending_frames(gObjectEventPic_Hatenna, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Hattrem[] = { + overworld_ascending_frames(gObjectEventPic_Hattrem, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Hatterene[] = { + overworld_ascending_frames(gObjectEventPic_Hatterene, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_HattereneGmax[] = { + overworld_ascending_frames(gObjectEventPic_HattereneGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_HATENNA + +#if P_FAMILY_IMPIDIMP +static const struct SpriteFrameImage sPicTable_Impidimp[] = { + overworld_ascending_frames(gObjectEventPic_Impidimp, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Morgrem[] = { + overworld_ascending_frames(gObjectEventPic_Morgrem, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Grimmsnarl[] = { + overworld_ascending_frames(gObjectEventPic_Grimmsnarl, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_GrimmsnarlGmax[] = { + overworld_ascending_frames(gObjectEventPic_GrimmsnarlGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_IMPIDIMP + +#if P_FAMILY_MILCERY +static const struct SpriteFrameImage sPicTable_Milcery[] = { + overworld_ascending_frames(gObjectEventPic_Milcery, 4, 4), +}; + +static const struct SpriteFrameImage sPicTable_AlcremieStrawberry[] = { + overworld_ascending_frames(gObjectEventPic_AlcremieStrawberry, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_AlcremieGmax[] = { + overworld_ascending_frames(gObjectEventPic_AlcremieGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_MILCERY + +#if P_FAMILY_FALINKS +static const struct SpriteFrameImage sPicTable_Falinks[] = { + overworld_ascending_frames(gObjectEventPic_Falinks, 4, 4), +}; +#endif //P_FAMILY_FALINKS + +#if P_FAMILY_PINCURCHIN +static const struct SpriteFrameImage sPicTable_Pincurchin[] = { + overworld_ascending_frames(gObjectEventPic_Pincurchin, 4, 4), +}; +#endif //P_FAMILY_PINCURCHIN + +#if P_FAMILY_SNOM +static const struct SpriteFrameImage sPicTable_Snom[] = { + overworld_ascending_frames(gObjectEventPic_Snom, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Frosmoth[] = { + overworld_ascending_frames(gObjectEventPic_Frosmoth, 4, 4), +}; +#endif //P_FAMILY_SNOM + +#if P_FAMILY_STONJOURNER +static const struct SpriteFrameImage sPicTable_Stonjourner[] = { + overworld_ascending_frames(gObjectEventPic_Stonjourner, 4, 4), +}; +#endif //P_FAMILY_STONJOURNER + +#if P_FAMILY_EISCUE +static const struct SpriteFrameImage sPicTable_EiscueIce[] = { + overworld_ascending_frames(gObjectEventPic_EiscueIce, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_EiscueNoice[] = { + overworld_ascending_frames(gObjectEventPic_EiscueNoice, 4, 4), +};*/ +#endif //P_FAMILY_EISCUE + +#if P_FAMILY_INDEEDEE +static const struct SpriteFrameImage sPicTable_IndeedeeM[] = { + overworld_ascending_frames(gObjectEventPic_IndeedeeM, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_IndeedeeF[] = { + overworld_ascending_frames(gObjectEventPic_IndeedeeF, 4, 4), +}; +#endif //P_FAMILY_INDEEDEE + +#if P_FAMILY_MORPEKO +static const struct SpriteFrameImage sPicTable_MorpekoFullBelly[] = { + overworld_ascending_frames(gObjectEventPic_MorpekoFullBelly, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_MorpekoHangry[] = { + overworld_ascending_frames(gObjectEventPic_MorpekoHangry, 4, 4), +};*/ +#endif //P_FAMILY_MORPEKO + +#if P_FAMILY_CUFANT +static const struct SpriteFrameImage sPicTable_Cufant[] = { + overworld_ascending_frames(gObjectEventPic_Cufant, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Copperajah[] = { + overworld_ascending_frames(gObjectEventPic_Copperajah, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_CopperajahGmax[] = { + overworld_ascending_frames(gObjectEventPic_CopperajahGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_CUFANT + +#if P_FAMILY_DRACOZOLT +static const struct SpriteFrameImage sPicTable_Dracozolt[] = { + overworld_ascending_frames(gObjectEventPic_Dracozolt, 4, 4), +}; +#endif //P_FAMILY_DRACOZOLT + +#if P_FAMILY_ARCTOZOLT +static const struct SpriteFrameImage sPicTable_Arctozolt[] = { + overworld_ascending_frames(gObjectEventPic_Arctozolt, 4, 4), +}; +#endif //P_FAMILY_ARCTOZOLT + +#if P_FAMILY_DRACOVISH +static const struct SpriteFrameImage sPicTable_Dracovish[] = { + overworld_ascending_frames(gObjectEventPic_Dracovish, 4, 4), +}; +#endif //P_FAMILY_DRACOVISH + +#if P_FAMILY_ARCTOVISH +static const struct SpriteFrameImage sPicTable_Arctovish[] = { + overworld_ascending_frames(gObjectEventPic_Arctovish, 4, 4), +}; +#endif //P_FAMILY_ARCTOVISH + +#if P_FAMILY_DURALUDON +static const struct SpriteFrameImage sPicTable_Duraludon[] = { + overworld_ascending_frames(gObjectEventPic_Duraludon, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_DuraludonGmax[] = { + overworld_ascending_frames(gObjectEventPic_DuraludonGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS + +#if P_GEN_9_CROSS_EVOS +static const struct SpriteFrameImage sPicTable_Archaludon[] = { + overworld_ascending_frames(gObjectEventPic_Archaludon, 4, 4), +}; +#endif //P_GEN_9_CROSS_EVOS +#endif //P_FAMILY_DURALUDON + +#if P_FAMILY_DREEPY +static const struct SpriteFrameImage sPicTable_Dreepy[] = { + overworld_ascending_frames(gObjectEventPic_Dreepy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Drakloak[] = { + overworld_ascending_frames(gObjectEventPic_Drakloak, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dragapult[] = { + overworld_ascending_frames(gObjectEventPic_Dragapult, 4, 4), +}; +#endif //P_FAMILY_DREEPY + +#if P_FAMILY_ZACIAN +static const struct SpriteFrameImage sPicTable_ZacianHero[] = { + overworld_ascending_frames(gObjectEventPic_ZacianHero, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_ZacianCrowned[] = { + overworld_ascending_frames(gObjectEventPic_ZacianCrowned, 4, 4), +}; +#endif //P_FAMILY_ZACIAN + +#if P_FAMILY_ZAMAZENTA +static const struct SpriteFrameImage sPicTable_ZamazentaHero[] = { + overworld_ascending_frames(gObjectEventPic_ZamazentaHero, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_ZamazentaCrowned[] = { + overworld_ascending_frames(gObjectEventPic_ZamazentaCrowned, 4, 4), +}; +#endif //P_FAMILY_ZAMAZENTA + +#if P_FAMILY_ETERNATUS +static const struct SpriteFrameImage sPicTable_Eternatus[] = { + overworld_ascending_frames(gObjectEventPic_Eternatus, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_EternatusEternamax[] = { + overworld_ascending_frames(gObjectEventPic_EternatusEternamax, 4, 4), +};*/ +#endif //P_FAMILY_ETERNATUS + +#if P_FAMILY_KUBFU +static const struct SpriteFrameImage sPicTable_Kubfu[] = { + overworld_ascending_frames(gObjectEventPic_Kubfu, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Urshifu[] = { + overworld_ascending_frames(gObjectEventPic_Urshifu, 4, 4), +}; +#if P_GIGANTAMAX_FORMS +/*static const struct SpriteFrameImage sPicTable_UrshifuSingleStrikeGmax[] = { + overworld_ascending_frames(gObjectEventPic_UrshifuSingleStrikeGmax, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_UrshifuRapidStrikeGmax[] = { + overworld_ascending_frames(gObjectEventPic_UrshifuRapidStrikeGmax, 4, 4), +};*/ +#endif //P_GIGANTAMAX_FORMS +#endif //P_FAMILY_KUBFU + +#if P_FAMILY_ZARUDE + +static const struct SpriteFrameImage sPicTable_Zarude[] = { + overworld_ascending_frames(gObjectEventPic_Zarude, 4, 4), +}; +/*static const struct SpriteFrameImage sPicTable_ZarudeDada[] = { + overworld_ascending_frames(gObjectEventPic_ZarudeDada, 4, 4), +};*/ +#endif //P_FAMILY_ZARUDE + +#if P_FAMILY_REGIELEKI +static const struct SpriteFrameImage sPicTable_Regieleki[] = { + overworld_ascending_frames(gObjectEventPic_Regieleki, 4, 4), +}; +#endif //P_FAMILY_REGIELEKI + +#if P_FAMILY_REGIDRAGO +static const struct SpriteFrameImage sPicTable_Regidrago[] = { + overworld_ascending_frames(gObjectEventPic_Regidrago, 4, 4), +}; +#endif //P_FAMILY_REGIDRAGO + +#if P_FAMILY_GLASTRIER +static const struct SpriteFrameImage sPicTable_Glastrier[] = { + overworld_ascending_frames(gObjectEventPic_Glastrier, 4, 4), +}; +#endif //P_FAMILY_GLASTRIER + +#if P_FAMILY_SPECTRIER +static const struct SpriteFrameImage sPicTable_Spectrier[] = { + overworld_ascending_frames(gObjectEventPic_Spectrier, 4, 4), +}; +#endif //P_FAMILY_SPECTRIER + +#if P_FAMILY_CALYREX +static const struct SpriteFrameImage sPicTable_Calyrex[] = { + overworld_ascending_frames(gObjectEventPic_Calyrex, 4, 4), +}; +#if P_FUSION_FORMS +static const struct SpriteFrameImage sPicTable_CalyrexIce[] = { + overworld_ascending_frames(gObjectEventPic_CalyrexIce, 4, 4), +}; +#endif //P_FUSION_FORMS + +#if P_FUSION_FORMS +static const struct SpriteFrameImage sPicTable_CalyrexShadow[] = { + overworld_ascending_frames(gObjectEventPic_CalyrexShadow, 4, 4), +}; +#endif //P_FUSION_FORMS +#endif //P_FAMILY_CALYREX + +#if P_FAMILY_SPRIGATITO +static const struct SpriteFrameImage sPicTable_Sprigatito[] = { + overworld_ascending_frames(gObjectEventPic_Sprigatito, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Floragato[] = { + overworld_ascending_frames(gObjectEventPic_Floragato, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Meowscarada[] = { + overworld_ascending_frames(gObjectEventPic_Meowscarada, 4, 4), +}; +#endif //P_FAMILY_SPRIGATITO + +#if P_FAMILY_FUECOCO +static const struct SpriteFrameImage sPicTable_Fuecoco[] = { + overworld_ascending_frames(gObjectEventPic_Fuecoco, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Crocalor[] = { + overworld_ascending_frames(gObjectEventPic_Crocalor, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Skeledirge[] = { + overworld_ascending_frames(gObjectEventPic_Skeledirge, 4, 4), +}; +#endif //P_FAMILY_FUECOCO + +#if P_FAMILY_QUAXLY +static const struct SpriteFrameImage sPicTable_Quaxly[] = { + overworld_ascending_frames(gObjectEventPic_Quaxly, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Quaxwell[] = { + overworld_ascending_frames(gObjectEventPic_Quaxwell, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Quaquaval[] = { + overworld_ascending_frames(gObjectEventPic_Quaquaval, 4, 4), +}; +#endif //P_FAMILY_QUAXLY + +#if P_FAMILY_LECHONK +static const struct SpriteFrameImage sPicTable_Lechonk[] = { + overworld_ascending_frames(gObjectEventPic_Lechonk, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OinkologneM[] = { + overworld_ascending_frames(gObjectEventPic_OinkologneM, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OinkologneF[] = { + overworld_ascending_frames(gObjectEventPic_OinkologneF, 4, 4), +}; +#endif //P_FAMILY_LECHONK + +#if P_FAMILY_TAROUNTULA +static const struct SpriteFrameImage sPicTable_Tarountula[] = { + overworld_ascending_frames(gObjectEventPic_Tarountula, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Spidops[] = { + overworld_ascending_frames(gObjectEventPic_Spidops, 4, 4), +}; +#endif //P_FAMILY_TAROUNTULA + +#if P_FAMILY_NYMBLE +static const struct SpriteFrameImage sPicTable_Nymble[] = { + overworld_ascending_frames(gObjectEventPic_Nymble, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Lokix[] = { + overworld_ascending_frames(gObjectEventPic_Lokix, 4, 4), +}; +#endif //P_FAMILY_NYMBLE + +#if P_FAMILY_PAWMI +static const struct SpriteFrameImage sPicTable_Pawmi[] = { + overworld_ascending_frames(gObjectEventPic_Pawmi, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Pawmo[] = { + overworld_ascending_frames(gObjectEventPic_Pawmo, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Pawmot[] = { + overworld_ascending_frames(gObjectEventPic_Pawmot, 4, 4), +}; +#endif //P_FAMILY_PAWMI + +#if P_FAMILY_TANDEMAUS +static const struct SpriteFrameImage sPicTable_Tandemaus[] = { + overworld_ascending_frames(gObjectEventPic_Tandemaus, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MausholdThree[] = { + overworld_ascending_frames(gObjectEventPic_MausholdThree, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_MausholdFour[] = { + overworld_ascending_frames(gObjectEventPic_MausholdFour, 4, 4), +}; +#endif //P_FAMILY_TANDEMAUS + +#if P_FAMILY_FIDOUGH +static const struct SpriteFrameImage sPicTable_Fidough[] = { + overworld_ascending_frames(gObjectEventPic_Fidough, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dachsbun[] = { + overworld_ascending_frames(gObjectEventPic_Dachsbun, 4, 4), +}; +#endif //P_FAMILY_FIDOUGH + +#if P_FAMILY_SMOLIV +static const struct SpriteFrameImage sPicTable_Smoliv[] = { + overworld_ascending_frames(gObjectEventPic_Smoliv, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Dolliv[] = { + overworld_ascending_frames(gObjectEventPic_Dolliv, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Arboliva[] = { + overworld_ascending_frames(gObjectEventPic_Arboliva, 4, 4), +}; +#endif //P_FAMILY_SMOLIV + +#if P_FAMILY_SQUAWKABILLY +static const struct SpriteFrameImage sPicTable_SquawkabillyGreen[] = { + overworld_ascending_frames(gObjectEventPic_SquawkabillyGreen, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_SquawkabillyBlue[] = { + overworld_ascending_frames(gObjectEventPic_SquawkabillyBlue, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_SquawkabillyYellow[] = { + overworld_ascending_frames(gObjectEventPic_SquawkabillyYellow, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_SquawkabillyWhite[] = { + overworld_ascending_frames(gObjectEventPic_SquawkabillyWhite, 4, 4), +}; +#endif //P_FAMILY_SQUAWKABILLY + +#if P_FAMILY_NACLI +static const struct SpriteFrameImage sPicTable_Nacli[] = { + overworld_ascending_frames(gObjectEventPic_Nacli, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Naclstack[] = { + overworld_ascending_frames(gObjectEventPic_Naclstack, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Garganacl[] = { + overworld_ascending_frames(gObjectEventPic_Garganacl, 4, 4), +}; +#endif //P_FAMILY_NACLI + +#if P_FAMILY_CHARCADET +static const struct SpriteFrameImage sPicTable_Charcadet[] = { + overworld_ascending_frames(gObjectEventPic_Charcadet, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Armarouge[] = { + overworld_ascending_frames(gObjectEventPic_Armarouge, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Ceruledge[] = { + overworld_ascending_frames(gObjectEventPic_Ceruledge, 4, 4), +}; +#endif //P_FAMILY_CHARCADET + +#if P_FAMILY_TADBULB +static const struct SpriteFrameImage sPicTable_Tadbulb[] = { + overworld_ascending_frames(gObjectEventPic_Tadbulb, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Bellibolt[] = { + overworld_ascending_frames(gObjectEventPic_Bellibolt, 4, 4), +}; +#endif //P_FAMILY_TADBULB + +#if P_FAMILY_WATTREL +static const struct SpriteFrameImage sPicTable_Wattrel[] = { + overworld_ascending_frames(gObjectEventPic_Wattrel, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Kilowattrel[] = { + overworld_ascending_frames(gObjectEventPic_Kilowattrel, 4, 4), +}; +#endif //P_FAMILY_WATTREL + +#if P_FAMILY_MASCHIFF +static const struct SpriteFrameImage sPicTable_Maschiff[] = { + overworld_ascending_frames(gObjectEventPic_Maschiff, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Mabosstiff[] = { + overworld_ascending_frames(gObjectEventPic_Mabosstiff, 4, 4), +}; +#endif //P_FAMILY_MASCHIFF + +#if P_FAMILY_SHROODLE +static const struct SpriteFrameImage sPicTable_Shroodle[] = { + overworld_ascending_frames(gObjectEventPic_Shroodle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Grafaiai[] = { + overworld_ascending_frames(gObjectEventPic_Grafaiai, 4, 4), +}; +#endif //P_FAMILY_SHROODLE + +#if P_FAMILY_BRAMBLIN +static const struct SpriteFrameImage sPicTable_Bramblin[] = { + overworld_ascending_frames(gObjectEventPic_Bramblin, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Brambleghast[] = { + overworld_ascending_frames(gObjectEventPic_Brambleghast, 4, 4), +}; +#endif //P_FAMILY_BRAMBLIN + +#if P_FAMILY_TOEDSCOOL +static const struct SpriteFrameImage sPicTable_Toedscool[] = { + overworld_ascending_frames(gObjectEventPic_Toedscool, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Toedscruel[] = { + overworld_ascending_frames(gObjectEventPic_Toedscruel, 4, 4), +}; +#endif //P_FAMILY_TOEDSCOOL + +#if P_FAMILY_KLAWF +static const struct SpriteFrameImage sPicTable_Klawf[] = { + overworld_ascending_frames(gObjectEventPic_Klawf, 4, 4), +}; +#endif //P_FAMILY_KLAWF + +#if P_FAMILY_CAPSAKID +static const struct SpriteFrameImage sPicTable_Capsakid[] = { + overworld_ascending_frames(gObjectEventPic_Capsakid, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Scovillain[] = { + overworld_ascending_frames(gObjectEventPic_Scovillain, 4, 4), +}; +#endif //P_FAMILY_CAPSAKID + +#if P_FAMILY_RELLOR +static const struct SpriteFrameImage sPicTable_Rellor[] = { + overworld_ascending_frames(gObjectEventPic_Rellor, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Rabsca[] = { + overworld_ascending_frames(gObjectEventPic_Rabsca, 4, 4), +}; +#endif //P_FAMILY_RELLOR + +#if P_FAMILY_FLITTLE +static const struct SpriteFrameImage sPicTable_Flittle[] = { + overworld_ascending_frames(gObjectEventPic_Flittle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Espathra[] = { + overworld_ascending_frames(gObjectEventPic_Espathra, 4, 4), +}; +#endif //P_FAMILY_FLITTLE + +#if P_FAMILY_TINKATINK +static const struct SpriteFrameImage sPicTable_Tinkatink[] = { + overworld_ascending_frames(gObjectEventPic_Tinkatink, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Tinkatuff[] = { + overworld_ascending_frames(gObjectEventPic_Tinkatuff, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Tinkaton[] = { + overworld_ascending_frames(gObjectEventPic_Tinkaton, 4, 4), +}; +#endif //P_FAMILY_TINKATINK + +#if P_FAMILY_WIGLETT +static const struct SpriteFrameImage sPicTable_Wiglett[] = { + overworld_ascending_frames(gObjectEventPic_Wiglett, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Wugtrio[] = { + overworld_ascending_frames(gObjectEventPic_Wugtrio, 4, 4), +}; +#endif //P_FAMILY_WIGLETT + +#if P_FAMILY_BOMBIRDIER +static const struct SpriteFrameImage sPicTable_Bombirdier[] = { + overworld_ascending_frames(gObjectEventPic_Bombirdier, 4, 4), +}; +#endif //P_FAMILY_BOMBIRDIER + +#if P_FAMILY_FINIZEN +static const struct SpriteFrameImage sPicTable_Finizen[] = { + overworld_ascending_frames(gObjectEventPic_Finizen, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PalafinZero[] = { + overworld_ascending_frames(gObjectEventPic_PalafinZero, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_PalafinHero[] = { + overworld_ascending_frames(gObjectEventPic_PalafinHero, 4, 4), +}; +#endif //P_FAMILY_FINIZEN + +#if P_FAMILY_VAROOM +static const struct SpriteFrameImage sPicTable_Varoom[] = { + overworld_ascending_frames(gObjectEventPic_Varoom, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Revavroom[] = { + overworld_ascending_frames(gObjectEventPic_Revavroom, 4, 4), +}; +#endif //P_FAMILY_VAROOM + +#if P_FAMILY_CYCLIZAR +static const struct SpriteFrameImage sPicTable_Cyclizar[] = { + overworld_ascending_frames(gObjectEventPic_Cyclizar, 4, 4), +}; +#endif //P_FAMILY_CYCLIZAR + +#if P_FAMILY_ORTHWORM +static const struct SpriteFrameImage sPicTable_Orthworm[] = { + overworld_ascending_frames(gObjectEventPic_Orthworm, 4, 4), +}; +#endif //P_FAMILY_ORTHWORM + +#if P_FAMILY_GLIMMET +static const struct SpriteFrameImage sPicTable_Glimmet[] = { + overworld_ascending_frames(gObjectEventPic_Glimmet, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Glimmora[] = { + overworld_ascending_frames(gObjectEventPic_Glimmora, 4, 4), +}; +#endif //P_FAMILY_GLIMMET + +#if P_FAMILY_GREAVARD +static const struct SpriteFrameImage sPicTable_Greavard[] = { + overworld_ascending_frames(gObjectEventPic_Greavard, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Houndstone[] = { + overworld_ascending_frames(gObjectEventPic_Houndstone, 4, 4), +}; +#endif //P_FAMILY_GREAVARD + +#if P_FAMILY_FLAMIGO +static const struct SpriteFrameImage sPicTable_Flamigo[] = { + overworld_ascending_frames(gObjectEventPic_Flamigo, 4, 4), +}; +#endif //P_FAMILY_FLAMIGO + +#if P_FAMILY_CETODDLE +static const struct SpriteFrameImage sPicTable_Cetoddle[] = { + overworld_ascending_frames(gObjectEventPic_Cetoddle, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Cetitan[] = { + overworld_ascending_frames(gObjectEventPic_Cetitan, 4, 4), +}; +#endif //P_FAMILY_CETODDLE + +#if P_FAMILY_VELUZA +static const struct SpriteFrameImage sPicTable_Veluza[] = { + overworld_ascending_frames(gObjectEventPic_Veluza, 4, 4), +}; +#endif //P_FAMILY_VELUZA + +#if P_FAMILY_DONDOZO +static const struct SpriteFrameImage sPicTable_Dondozo[] = { + overworld_ascending_frames(gObjectEventPic_Dondozo, 8, 8), +}; +#endif //P_FAMILY_DONDOZO + +#if P_FAMILY_TATSUGIRI +static const struct SpriteFrameImage sPicTable_TatsugiriCurly[] = { + overworld_ascending_frames(gObjectEventPic_TatsugiriCurly, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_TatsugiriDroopy[] = { + overworld_ascending_frames(gObjectEventPic_TatsugiriDroopy, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_TatsugiriStretchy[] = { + overworld_ascending_frames(gObjectEventPic_TatsugiriStretchy, 4, 4), +}; +#endif //P_FAMILY_DONDOZO + +#if P_FAMILY_GREAT_TUSK +static const struct SpriteFrameImage sPicTable_GreatTusk[] = { + overworld_ascending_frames(gObjectEventPic_GreatTusk, 4, 4), +}; +#endif //P_FAMILY_GREAT_TUSK + +#if P_FAMILY_SCREAM_TAIL +static const struct SpriteFrameImage sPicTable_ScreamTail[] = { + overworld_ascending_frames(gObjectEventPic_ScreamTail, 4, 4), +}; +#endif //P_FAMILY_SCREAM_TAIL + +#if P_FAMILY_BRUTE_BONNET +static const struct SpriteFrameImage sPicTable_BruteBonnet[] = { + overworld_ascending_frames(gObjectEventPic_BruteBonnet, 4, 4), +}; +#endif //P_FAMILY_BRUTE_BONNET + +#if P_FAMILY_FLUTTER_MANE +static const struct SpriteFrameImage sPicTable_FlutterMane[] = { + overworld_ascending_frames(gObjectEventPic_FlutterMane, 4, 4), +}; +#endif //P_FAMILY_FLUTTER_MANE + +#if P_FAMILY_SLITHER_WING +static const struct SpriteFrameImage sPicTable_SlitherWing[] = { + overworld_ascending_frames(gObjectEventPic_SlitherWing, 4, 4), +}; +#endif //P_FAMILY_SLITHER_WING + +#if P_FAMILY_SANDY_SHOCKS +static const struct SpriteFrameImage sPicTable_SandyShocks[] = { + overworld_ascending_frames(gObjectEventPic_SandyShocks, 4, 4), +}; +#endif //P_FAMILY_SANDY_SHOCKS + +#if P_FAMILY_IRON_TREADS +static const struct SpriteFrameImage sPicTable_IronTreads[] = { + overworld_ascending_frames(gObjectEventPic_IronTreads, 4, 4), +}; +#endif //P_FAMILY_IRON_TREADS + +#if P_FAMILY_IRON_BUNDLE +static const struct SpriteFrameImage sPicTable_IronBundle[] = { + overworld_ascending_frames(gObjectEventPic_IronBundle, 4, 4), +}; +#endif //P_FAMILY_IRON_BUNDLE + +#if P_FAMILY_IRON_HANDS +static const struct SpriteFrameImage sPicTable_IronHands[] = { + overworld_ascending_frames(gObjectEventPic_IronHands, 4, 4), +}; +#endif //P_FAMILY_IRON_HANDS + +#if P_FAMILY_IRON_JUGULIS +static const struct SpriteFrameImage sPicTable_IronJugulis[] = { + overworld_ascending_frames(gObjectEventPic_IronJugulis, 4, 4), +}; +#endif //P_FAMILY_IRON_JUGULIS + +#if P_FAMILY_IRON_MOTH +static const struct SpriteFrameImage sPicTable_IronMoth[] = { + overworld_ascending_frames(gObjectEventPic_IronMoth, 4, 4), +}; +#endif //P_FAMILY_IRON_MOTH + +#if P_FAMILY_IRON_THORNS +static const struct SpriteFrameImage sPicTable_IronThorns[] = { + overworld_ascending_frames(gObjectEventPic_IronThorns, 4, 4), +}; +#endif //P_FAMILY_IRON_THORNS + +#if P_FAMILY_FRIGIBAX +static const struct SpriteFrameImage sPicTable_Frigibax[] = { + overworld_ascending_frames(gObjectEventPic_Frigibax, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Arctibax[] = { + overworld_ascending_frames(gObjectEventPic_Arctibax, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Baxcalibur[] = { + overworld_ascending_frames(gObjectEventPic_Baxcalibur, 4, 4), +}; +#endif //P_FAMILY_FRIGIBAX + +#if P_FAMILY_GIMMIGHOUL +static const struct SpriteFrameImage sPicTable_GimmighoulChest[] = { + overworld_ascending_frames(gObjectEventPic_GimmighoulChest, 4, 4), +}; +//static const struct SpriteFrameImage sPicTable_GimmighoulRoaming[] = { +// overworld_ascending_frames(gObjectEventPic_GimmighoulRoaming, 4, 4), +//}; +static const struct SpriteFrameImage sPicTable_Gholdengo[] = { + overworld_ascending_frames(gObjectEventPic_Gholdengo, 4, 4), +}; +#endif //P_FAMILY_GIMMIGHOUL + +#if P_FAMILY_WO_CHIEN +static const struct SpriteFrameImage sPicTable_WoChien[] = { + overworld_ascending_frames(gObjectEventPic_WoChien, 4, 4), +}; +#endif //P_FAMILY_WO_CHIEN + +#if P_FAMILY_CHIEN_PAO +static const struct SpriteFrameImage sPicTable_ChienPao[] = { + overworld_ascending_frames(gObjectEventPic_ChienPao, 4, 4), +}; +#endif //P_FAMILY_CHIEN_PAO + +#if P_FAMILY_TING_LU +static const struct SpriteFrameImage sPicTable_TingLu[] = { + overworld_ascending_frames(gObjectEventPic_TingLu, 4, 4), +}; +#endif //P_FAMILY_TING_LU + +#if P_FAMILY_CHI_YU +static const struct SpriteFrameImage sPicTable_ChiYu[] = { + overworld_ascending_frames(gObjectEventPic_ChiYu, 4, 4), +}; +#endif //P_FAMILY_CHI_YU + +#if P_FAMILY_ROARING_MOON +static const struct SpriteFrameImage sPicTable_RoaringMoon[] = { + overworld_ascending_frames(gObjectEventPic_RoaringMoon, 4, 4), +}; +#endif //P_FAMILY_ROARING_MOON + +#if P_FAMILY_IRON_VALIANT +static const struct SpriteFrameImage sPicTable_IronValiant[] = { + overworld_ascending_frames(gObjectEventPic_IronValiant, 4, 4), +}; +#endif //P_FAMILY_IRON_VALIANT + +#if P_FAMILY_KORAIDON +static const struct SpriteFrameImage sPicTable_Koraidon[] = { + overworld_ascending_frames(gObjectEventPic_Koraidon, 8, 8), +}; +#endif //P_FAMILY_KORAIDON + +#if P_FAMILY_MIRAIDON +static const struct SpriteFrameImage sPicTable_Miraidon[] = { + overworld_ascending_frames(gObjectEventPic_Miraidon, 8, 8), +}; +#endif //P_FAMILY_MIRAIDON + +#if P_FAMILY_WALKING_WAKE +static const struct SpriteFrameImage sPicTable_WalkingWake[] = { + overworld_ascending_frames(gObjectEventPic_WalkingWake, 4, 4), +}; +#endif //P_FAMILY_WALKING_WAKE + +#if P_FAMILY_IRON_LEAVES +static const struct SpriteFrameImage sPicTable_IronLeaves[] = { + overworld_ascending_frames(gObjectEventPic_IronLeaves, 4, 4), +}; +#endif //P_FAMILY_IRON_LEAVES + +#if P_FAMILY_POLTCHAGEIST +static const struct SpriteFrameImage sPicTable_Poltchageist[] = { + overworld_ascending_frames(gObjectEventPic_Poltchageist, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_Sinistcha[] = { + overworld_ascending_frames(gObjectEventPic_Sinistcha, 4, 4), +}; +#endif //P_FAMILY_POLTCHAGEIST + +#if P_FAMILY_OKIDOGI +static const struct SpriteFrameImage sPicTable_Okidogi[] = { + overworld_ascending_frames(gObjectEventPic_Okidogi, 4, 4), +}; +#endif //P_FAMILY_OKIDOGI + +#if P_FAMILY_MUNKIDORI +static const struct SpriteFrameImage sPicTable_Munkidori[] = { + overworld_ascending_frames(gObjectEventPic_Munkidori, 4, 4), +}; +#endif //P_FAMILY_MUNKIDORI + +#if P_FAMILY_FEZANDIPITI +static const struct SpriteFrameImage sPicTable_Fezandipiti[] = { + overworld_ascending_frames(gObjectEventPic_Fezandipiti, 4, 4), +}; +#endif //P_FAMILY_FEZANDIPITI + +#if P_FAMILY_OGERPON +static const struct SpriteFrameImage sPicTable_OgerponTeal[] = { + overworld_ascending_frames(gObjectEventPic_OgerponTeal, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OgerponWellspring[] = { + overworld_ascending_frames(gObjectEventPic_OgerponWellspring, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OgerponHearthflame[] = { + overworld_ascending_frames(gObjectEventPic_OgerponHearthflame, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OgerponCornerstone[] = { + overworld_ascending_frames(gObjectEventPic_OgerponCornerstone, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OgerponTealTera[] = { + overworld_ascending_frames(gObjectEventPic_OgerponTeal, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OgerponWellspringTera[] = { + overworld_ascending_frames(gObjectEventPic_OgerponWellspring, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OgerponHearthflameTera[] = { + overworld_ascending_frames(gObjectEventPic_OgerponHearthflame, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OgerponCornerstoneTera[] = { + overworld_ascending_frames(gObjectEventPic_OgerponCornerstone, 4, 4), +}; +#endif //P_FAMILY_OGERPON + +#if P_FAMILY_GOUGING_FIRE +static const struct SpriteFrameImage sPicTable_GougingFire[] = { + overworld_ascending_frames(gObjectEventPic_GougingFire, 4, 4), +}; +#endif //P_FAMILY_GOUGING_FIRE + +#if P_FAMILY_RAGING_BOLT +static const struct SpriteFrameImage sPicTable_RagingBolt[] = { + overworld_ascending_frames(gObjectEventPic_RagingBolt, 8, 8), +}; +#endif //P_FAMILY_RAGING_BOLT + +#if P_FAMILY_IRON_BOULDER +static const struct SpriteFrameImage sPicTable_IronBoulder[] = { + overworld_ascending_frames(gObjectEventPic_IronBoulder, 4, 4), +}; +#endif //P_FAMILY_IRON_BOULDER + +#if P_FAMILY_IRON_CROWN +static const struct SpriteFrameImage sPicTable_IronCrown[] = { + overworld_ascending_frames(gObjectEventPic_IronCrown, 4, 4), +}; +#endif //P_FAMILY_IRON_CROWN + +#if P_FAMILY_TERAPAGOS +static const struct SpriteFrameImage sPicTable_TerapagosNormal[] = { + overworld_ascending_frames(gObjectEventPic_TerapagosNormal, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_TerapagosTerastal[] = { + overworld_ascending_frames(gObjectEventPic_TerapagosTerastal, 4, 4), +}; +//static const struct SpriteFrameImage sPicTable_TerapagosStellar[] = { +// overworld_ascending_frames(gObjectEventPic_TerapagosStellar, 4, 4), +//}; +#endif //P_FAMILY_TERAPAGOS + +#if P_FAMILY_PECHARUNT +static const struct SpriteFrameImage sPicTable_Pecharunt[] = { + overworld_ascending_frames(gObjectEventPic_Pecharunt, 4, 4), +}; +#endif //P_FAMILY_PECHARUNT + +#endif //OW_POKEMON_OBJECT_EVENTS diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 168387dbf4..ec7026fcb5 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -660,6 +660,7 @@ static const u8 *const sActionStringTable[] = [PARTY_MSG_WHICH_APPLIANCE] = gText_WhichAppliance, [PARTY_MSG_CHOOSE_SECOND_FUSION] = gText_NextFusionMon, [PARTY_MSG_NO_POKEMON] = COMPOUND_STRING("You have no POKéMON."), + [PARTY_MSG_CHOOSE_MON_FOR_BOX] = gText_SendWhichMonToPC, }; static const u8 *const sDescriptionStringTable[] = diff --git a/src/data/pokemon/form_species_tables.h b/src/data/pokemon/form_species_tables.h index f30c1cca77..53ee47f933 100644 --- a/src/data/pokemon/form_species_tables.h +++ b/src/data/pokemon/form_species_tables.h @@ -2155,6 +2155,20 @@ static const u16 sGimmighoulFormSpeciesIdTable[] = { }; #endif //P_FAMILY_GIMMIGHOUL +#if P_FAMILY_POLTCHAGEIST +static const u16 sPoltchageistFormSpeciesIdTable[] = { + SPECIES_POLTCHAGEIST_COUNTERFEIT, + SPECIES_POLTCHAGEIST_ARTISAN, + FORM_SPECIES_END, +}; + +static const u16 sSinistchaFormSpeciesIdTable[] = { + SPECIES_SINISTCHA_UNREMARKABLE, + SPECIES_SINISTCHA_MASTERPIECE, + FORM_SPECIES_END, +}; +#endif //P_FAMILY_POLTCHAGEIST + #if P_FAMILY_OGERPON static const u16 sOgerponFormSpeciesIdTable[] = { SPECIES_OGERPON_TEAL, diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 9c2fc2450a..5b3d31786e 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -45,7 +45,7 @@ #define OVERWORLD_PAL_FEMALE(...) #endif //OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE -#define OVERWORLD_DATA(objEventPic, _size, shadow, _tracks, _anims) \ +#define OVERWORLD_DATA(picTable, _size, shadow, _tracks, _anims) \ { \ .tileTag = TAG_NONE, \ .paletteTag = OBJ_EVENT_PAL_TAG_DYNAMIC, \ @@ -61,7 +61,7 @@ .oam = (_size == SIZE_32x32 ? &gObjectEventBaseOam_32x32 : &gObjectEventBaseOam_64x64), \ .subspriteTables = (_size == SIZE_32x32 ? sOamTables_32x32 : sOamTables_64x64), \ .anims = _anims, \ - .images = (const struct SpriteFrameImage[]) { overworld_ascending_frames(objEventPic, SIZE_32x32 ? 4 : 8, SIZE_32x32 ? 4 : 8), }, \ + .images = picTable, \ .affineAnims = gDummySpriteAffineAnimTable, \ } @@ -139,7 +139,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .oam = &gObjectEventBaseOam_32x32, .subspriteTables = sOamTables_32x32, .anims = sAnimTable_Following, - .images = (const struct SpriteFrameImage[]) { overworld_ascending_frames(gObjectEventPic_Substitute, 4, 4), }, + .images = sPicTable_Substitute, .affineAnims = gDummySpriteAffineAnimTable, }, #endif diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index f419eaff6c..05bad13974 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -58,7 +58,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Bulbasaur) OVERWORLD( - gObjectEventPic_Bulbasaur, + sPicTable_Bulbasaur, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -127,7 +127,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 3, SHADOW_SIZE_L) FOOTPRINT(Ivysaur) OVERWORLD( - gObjectEventPic_Ivysaur, + sPicTable_Ivysaur, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -207,7 +207,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) OVERWORLD( - gObjectEventPic_Venusaur, + sPicTable_Venusaur, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -216,7 +216,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Venusaur ) OVERWORLD_FEMALE( - gObjectEventPic_VenusaurF, + sPicTable_VenusaurF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -278,6 +278,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 4, SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_VenusaurMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_VenusaurMega, + gShinyOverworldPalette_VenusaurMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sVenusaurLevelUpLearnset, .teachableLearnset = sVenusaurTeachableLearnset, @@ -401,7 +412,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Charmander) OVERWORLD( - gObjectEventPic_Charmander, + sPicTable_Charmander, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -470,7 +481,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Charmeleon) OVERWORLD( - gObjectEventPic_Charmeleon, + sPicTable_Charmeleon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -542,7 +553,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Charizard) OVERWORLD( - gObjectEventPic_Charizard, + sPicTable_Charizard, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -605,6 +616,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 0, SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Charizard) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_CharizardMegaX, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_CharizardMegaX, + gShinyOverworldPalette_CharizardMegaX + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sCharizardLevelUpLearnset, .teachableLearnset = sCharizardTeachableLearnset, @@ -661,6 +683,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 0, SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Charizard) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_CharizardMegaY, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_CharizardMegaY, + gShinyOverworldPalette_CharizardMegaY + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sCharizardLevelUpLearnset, .teachableLearnset = sCharizardTeachableLearnset, @@ -784,7 +817,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Squirtle) OVERWORLD( - gObjectEventPic_Squirtle, + sPicTable_Squirtle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -853,7 +886,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Wartortle) OVERWORLD( - gObjectEventPic_Wartortle, + sPicTable_Wartortle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -928,7 +961,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Blastoise) OVERWORLD( - gObjectEventPic_Blastoise, + sPicTable_Blastoise, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -992,6 +1025,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 2, SHADOW(4, 11, SHADOW_SIZE_L) FOOTPRINT(Blastoise) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_BlastoiseMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_BlastoiseMega, + gShinyOverworldPalette_BlastoiseMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sBlastoiseLevelUpLearnset, .teachableLearnset = sBlastoiseTeachableLearnset, @@ -1119,7 +1163,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(4, 1, SHADOW_SIZE_S) FOOTPRINT(Caterpie) OVERWORLD( - gObjectEventPic_Caterpie, + sPicTable_Caterpie, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -1186,7 +1230,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 0, SHADOW_SIZE_S) FOOTPRINT(Metapod) OVERWORLD( - gObjectEventPic_Metapod, + sPicTable_Metapod, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -1283,7 +1327,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Butterfree) OVERWORLD( - gObjectEventPic_Butterfree, + sPicTable_Butterfree, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1292,7 +1336,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Butterfree ) OVERWORLD_FEMALE( - gObjectEventPic_ButterfreeF, + sPicTable_ButterfreeF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1426,7 +1470,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Weedle) OVERWORLD( - gObjectEventPic_Weedle, + sPicTable_Weedle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -1503,7 +1547,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Kakuna) OVERWORLD( - gObjectEventPic_Kakuna, + sPicTable_Kakuna, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -1588,7 +1632,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(4, 15, SHADOW_SIZE_M) FOOTPRINT(Beedrill) OVERWORLD( - gObjectEventPic_Beedrill, + sPicTable_Beedrill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1655,6 +1699,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 2, SHADOW(1, 14, SHADOW_SIZE_S) FOOTPRINT(Beedrill) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_BeedrillMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_BeedrillMega, + gShinyOverworldPalette_BeedrillMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sBeedrillLevelUpLearnset, .teachableLearnset = sBeedrillTeachableLearnset, @@ -1724,7 +1779,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Pidgey) OVERWORLD( - gObjectEventPic_Pidgey, + sPicTable_Pidgey, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1799,7 +1854,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-4, 6, SHADOW_SIZE_M) FOOTPRINT(Pidgeotto) OVERWORLD( - gObjectEventPic_Pidgeotto, + sPicTable_Pidgeotto, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1880,7 +1935,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-7, 14, SHADOW_SIZE_M) FOOTPRINT(Pidgeot) OVERWORLD( - gObjectEventPic_Pidgeot, + sPicTable_Pidgeot, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1944,6 +1999,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 0, SHADOW(-7, 19, SHADOW_SIZE_M) FOOTPRINT(Pidgeot) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_PidgeotMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_PidgeotMega, + gShinyOverworldPalette_PidgeotMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sPidgeotLevelUpLearnset, .teachableLearnset = sPidgeotTeachableLearnset, @@ -2015,7 +2081,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, -3, SHADOW_SIZE_S) FOOTPRINT(Rattata) OVERWORLD( - gObjectEventPic_Rattata, + sPicTable_Rattata, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2024,7 +2090,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Rattata ) OVERWORLD_FEMALE( - gObjectEventPic_RattataF, + sPicTable_RattataF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2106,7 +2172,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Raticate) OVERWORLD( - gObjectEventPic_Raticate, + sPicTable_Raticate, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2115,7 +2181,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Raticate ) OVERWORLD_FEMALE( - gObjectEventPic_RaticateF, + sPicTable_RaticateF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2178,7 +2244,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Rattata) OVERWORLD( - gObjectEventPic_RattataAlola, + sPicTable_RattataAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2242,7 +2308,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-4, 3, SHADOW_SIZE_L) FOOTPRINT(Raticate) OVERWORLD( - gObjectEventPic_RaticateAlola, + sPicTable_RaticateAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2303,7 +2369,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-4, 3, SHADOW_SIZE_L) FOOTPRINT(Raticate) OVERWORLD( - gObjectEventPic_RaticateAlola, + sPicTable_RaticateAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2378,7 +2444,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Spearow) OVERWORLD( - gObjectEventPic_Spearow, + sPicTable_Spearow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2454,7 +2520,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 17, SHADOW_SIZE_M) FOOTPRINT(Fearow) OVERWORLD( - gObjectEventPic_Fearow, + sPicTable_Fearow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2526,7 +2592,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Ekans) OVERWORLD( - gObjectEventPic_Ekans, + sPicTable_Ekans, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -2600,7 +2666,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Arbok) OVERWORLD( - gObjectEventPic_Arbok, + sPicTable_Arbok, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -2668,7 +2734,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Pichu) OVERWORLD( - gObjectEventPic_Pichu, + sPicTable_Pichu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2738,7 +2804,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Pichu) OVERWORLD( - gObjectEventPic_PichuSpikyEared, + sPicTable_PichuSpikyEared, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2823,7 +2889,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif //P_GENDER_DIFFERENCES SHADOW(-3, 5, SHADOW_SIZE_M) OVERWORLD( - gObjectEventPic_Pikachu, + sPicTable_Pikachu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2832,7 +2898,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Pikachu ) OVERWORLD_FEMALE( - gObjectEventPic_PikachuF, + sPicTable_PikachuF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3725,7 +3791,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) OVERWORLD( - gObjectEventPic_Pikachu, + sPicTable_Pikachu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3812,7 +3878,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 10, SHADOW_SIZE_M) FOOTPRINT(Raichu) OVERWORLD( - gObjectEventPic_Raichu, + sPicTable_Raichu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3821,7 +3887,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Raichu ) OVERWORLD_FEMALE( - gObjectEventPic_RaichuF, + sPicTable_RaichuF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3884,7 +3950,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 15, SHADOW_SIZE_M) FOOTPRINT(Raichu) OVERWORLD( - gObjectEventPic_RaichuAlola, + sPicTable_RaichuAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3958,7 +4024,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Sandshrew) OVERWORLD( - gObjectEventPic_Sandshrew, + sPicTable_Sandshrew, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4030,7 +4096,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(4, 4, SHADOW_SIZE_L) FOOTPRINT(Sandslash) OVERWORLD( - gObjectEventPic_Sandslash, + sPicTable_Sandslash, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4095,7 +4161,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, -1, SHADOW_SIZE_M) FOOTPRINT(Sandshrew) OVERWORLD( - gObjectEventPic_SandshrewAlola, + sPicTable_SandshrewAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4162,7 +4228,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 9, SHADOW_SIZE_L) FOOTPRINT(Sandslash) OVERWORLD( - gObjectEventPic_SandslashAlola, + sPicTable_SandslashAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4244,7 +4310,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(NidoranF) OVERWORLD( - gObjectEventPic_NidoranF, + sPicTable_NidoranF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4315,7 +4381,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 5, SHADOW_SIZE_M) FOOTPRINT(Nidorina) OVERWORLD( - gObjectEventPic_Nidorina, + sPicTable_Nidorina, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4393,7 +4459,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Nidoqueen) OVERWORLD( - gObjectEventPic_Nidoqueen, + sPicTable_Nidoqueen, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4463,7 +4529,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(NidoranM) OVERWORLD( - gObjectEventPic_NidoranM, + sPicTable_NidoranM, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4535,7 +4601,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 1, SHADOW_SIZE_L) FOOTPRINT(Nidorino) OVERWORLD( - gObjectEventPic_Nidorino, + sPicTable_Nidorino, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4616,7 +4682,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Nidoking) OVERWORLD( - gObjectEventPic_Nidoking, + sPicTable_Nidoking, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4698,7 +4764,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, -4, SHADOW_SIZE_S) FOOTPRINT(Cleffa) OVERWORLD( - gObjectEventPic_Cleffa, + sPicTable_Cleffa, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4773,7 +4839,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Clefairy) OVERWORLD( - gObjectEventPic_Clefairy, + sPicTable_Clefairy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4854,7 +4920,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Clefable) OVERWORLD( - gObjectEventPic_Clefable, + sPicTable_Clefable, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4925,7 +4991,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Vulpix) OVERWORLD( - gObjectEventPic_Vulpix, + sPicTable_Vulpix, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4998,7 +5064,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ninetales) OVERWORLD( - gObjectEventPic_Ninetales, + sPicTable_Ninetales, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5063,7 +5129,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 3, SHADOW_SIZE_M) FOOTPRINT(Vulpix) OVERWORLD( - gObjectEventPic_VulpixAlola, + sPicTable_VulpixAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5131,7 +5197,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ninetales) OVERWORLD( - gObjectEventPic_NinetalesAlola, + sPicTable_NinetalesAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5216,7 +5282,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, -3, SHADOW_SIZE_S) FOOTPRINT(Igglybuff) OVERWORLD( - gObjectEventPic_Igglybuff, + sPicTable_Igglybuff, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5293,7 +5359,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Jigglypuff) OVERWORLD( - gObjectEventPic_Jigglypuff, + sPicTable_Jigglypuff, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5376,7 +5442,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Wigglytuff) OVERWORLD( - gObjectEventPic_Wigglytuff, + sPicTable_Wigglytuff, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5461,7 +5527,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-4, 11, SHADOW_SIZE_S) FOOTPRINT(Zubat) OVERWORLD( - gObjectEventPic_Zubat, + sPicTable_Zubat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5470,7 +5536,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Zubat ) OVERWORLD_FEMALE( - gObjectEventPic_ZubatF, + sPicTable_ZubatF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5559,7 +5625,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Golbat) OVERWORLD( - gObjectEventPic_Golbat, + sPicTable_Golbat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5568,7 +5634,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Golbat ) OVERWORLD_FEMALE( - gObjectEventPic_GolbatF, + sPicTable_GolbatF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5655,7 +5721,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Crobat) OVERWORLD( - gObjectEventPic_Crobat, + sPicTable_Crobat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -5729,7 +5795,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Oddish) OVERWORLD( - gObjectEventPic_Oddish, + sPicTable_Oddish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5805,7 +5871,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Gloom) OVERWORLD( - gObjectEventPic_Gloom, + sPicTable_Gloom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5814,7 +5880,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Gloom ) OVERWORLD_FEMALE( - gObjectEventPic_GloomF, + sPicTable_GloomF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5894,7 +5960,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Vileplume) OVERWORLD( - gObjectEventPic_Vileplume, + sPicTable_Vileplume, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5903,7 +5969,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Vileplume ) OVERWORLD_FEMALE( - gObjectEventPic_VileplumeF, + sPicTable_VileplumeF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5990,7 +6056,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Bellossom) OVERWORLD( - gObjectEventPic_Bellossom, + sPicTable_Bellossom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6079,7 +6145,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(7, -11, SHADOW_SIZE_M) FOOTPRINT(Paras) OVERWORLD( - gObjectEventPic_Paras, + sPicTable_Paras, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -6158,7 +6224,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(5, 2, SHADOW_SIZE_L) FOOTPRINT(Parasect) OVERWORLD( - gObjectEventPic_Parasect, + sPicTable_Parasect, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -6234,7 +6300,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 5, SHADOW_SIZE_M) FOOTPRINT(Venonat) OVERWORLD( - gObjectEventPic_Venonat, + sPicTable_Venonat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6328,7 +6394,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-5, 18, SHADOW_SIZE_M) FOOTPRINT(Venomoth) OVERWORLD( - gObjectEventPic_Venomoth, + sPicTable_Venomoth, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6409,7 +6475,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = NO_SHADOW FOOTPRINT(Diglett) OVERWORLD( - gObjectEventPic_Diglett, + sPicTable_Diglett, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -6487,7 +6553,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = NO_SHADOW FOOTPRINT(Dugtrio) OVERWORLD( - gObjectEventPic_Dugtrio, + sPicTable_Dugtrio, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -6552,7 +6618,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = NO_SHADOW FOOTPRINT(Diglett) OVERWORLD( - gObjectEventPic_DiglettAlola, + sPicTable_DiglettAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6620,7 +6686,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = NO_SHADOW FOOTPRINT(Dugtrio) OVERWORLD( - gObjectEventPic_DugtrioAlola, + sPicTable_DugtrioAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6700,7 +6766,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Meowth) OVERWORLD( - gObjectEventPic_Meowth, + sPicTable_Meowth, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6775,7 +6841,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Persian) OVERWORLD( - gObjectEventPic_Persian, + sPicTable_Persian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6840,7 +6906,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 5, SHADOW_SIZE_M) FOOTPRINT(Meowth) OVERWORLD( - gObjectEventPic_MeowthAlola, + sPicTable_MeowthAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6907,7 +6973,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Persian) OVERWORLD( - gObjectEventPic_PersianAlola, + sPicTable_PersianAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6973,7 +7039,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Meowth) OVERWORLD( - gObjectEventPic_MeowthGalar, + sPicTable_MeowthGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7038,7 +7104,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Perrserker) OVERWORLD( - gObjectEventPic_Perrserker, + sPicTable_Perrserker, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7169,7 +7235,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Psyduck) OVERWORLD( - gObjectEventPic_Psyduck, + sPicTable_Psyduck, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7239,7 +7305,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Golduck) OVERWORLD( - gObjectEventPic_Golduck, + sPicTable_Golduck, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7315,7 +7381,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Mankey) OVERWORLD( - gObjectEventPic_Mankey, + sPicTable_Mankey, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7391,7 +7457,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Primeape) OVERWORLD( - gObjectEventPic_Primeape, + sPicTable_Primeape, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7455,7 +7521,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Annihilape) OVERWORLD( - gObjectEventPic_Annihilape, + sPicTable_Annihilape, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7528,7 +7594,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Growlithe) OVERWORLD( - gObjectEventPic_Growlithe, + sPicTable_Growlithe, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7597,7 +7663,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Arcanine) OVERWORLD( - gObjectEventPic_Arcanine, + sPicTable_Arcanine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7661,7 +7727,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, -2, SHADOW_SIZE_M) FOOTPRINT(Growlithe) OVERWORLD( - gObjectEventPic_GrowlitheHisui, + sPicTable_GrowlitheHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7726,7 +7792,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Arcanine) OVERWORLD( - gObjectEventPic_ArcanineHisui, + sPicTable_ArcanineHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7798,7 +7864,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Poliwag) OVERWORLD( - gObjectEventPic_Poliwag, + sPicTable_Poliwag, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7871,7 +7937,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 4, SHADOW_SIZE_M) FOOTPRINT(Poliwhirl) OVERWORLD( - gObjectEventPic_Poliwhirl, + sPicTable_Poliwhirl, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7949,7 +8015,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Poliwrath) OVERWORLD( - gObjectEventPic_Poliwrath, + sPicTable_Poliwrath, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8034,7 +8100,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Politoed) OVERWORLD( - gObjectEventPic_Politoed, + sPicTable_Politoed, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8043,7 +8109,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Politoed ) OVERWORLD_FEMALE( - gObjectEventPic_PolitoedF, + sPicTable_PolitoedF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8119,7 +8185,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 0, SHADOW_SIZE_L) FOOTPRINT(Abra) OVERWORLD( - gObjectEventPic_Abra, + sPicTable_Abra, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -8195,7 +8261,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Kadabra) OVERWORLD( - gObjectEventPic_Kadabra, + sPicTable_Kadabra, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -8204,7 +8270,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Kadabra ) OVERWORLD_FEMALE( - gObjectEventPic_KadabraF, + sPicTable_KadabraF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -8287,7 +8353,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Alakazam) OVERWORLD( - gObjectEventPic_Alakazam, + sPicTable_Alakazam, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -8296,7 +8362,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Alakazam ) OVERWORLD_FEMALE( - gObjectEventPic_AlakazamF, + sPicTable_AlakazamF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -8359,6 +8425,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 2, SHADOW(0, 18, SHADOW_SIZE_L) FOOTPRINT(Alakazam) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_AlakazamMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + sAnimTable_Following, + gOverworldPalette_AlakazamMega, + gShinyOverworldPalette_AlakazamMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sAlakazamLevelUpLearnset, .teachableLearnset = sAlakazamTeachableLearnset, @@ -8436,7 +8513,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Machop) OVERWORLD( - gObjectEventPic_Machop, + sPicTable_Machop, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8510,7 +8587,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Machoke) OVERWORLD( - gObjectEventPic_Machoke, + sPicTable_Machoke, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8595,7 +8672,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(7, 13, SHADOW_SIZE_L) FOOTPRINT(Machamp) OVERWORLD( - gObjectEventPic_Machamp, + sPicTable_Machamp, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8728,7 +8805,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Bellsprout) OVERWORLD( - gObjectEventPic_Bellsprout, + sPicTable_Bellsprout, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8801,7 +8878,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-3, 3, SHADOW_SIZE_M) FOOTPRINT(Weepinbell) OVERWORLD( - gObjectEventPic_Weepinbell, + sPicTable_Weepinbell, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -8880,7 +8957,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 8, SHADOW_SIZE_M) FOOTPRINT(Victreebel) OVERWORLD( - gObjectEventPic_Victreebel, + sPicTable_Victreebel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -8951,7 +9028,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Tentacool) OVERWORLD( - gObjectEventPic_Tentacool, + sPicTable_Tentacool, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -9022,7 +9099,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tentacruel) OVERWORLD( - gObjectEventPic_Tentacruel, + sPicTable_Tentacruel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -9113,7 +9190,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Geodude) OVERWORLD( - gObjectEventPic_Geodude, + sPicTable_Geodude, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -9185,7 +9262,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Graveler) OVERWORLD( - gObjectEventPic_Graveler, + sPicTable_Graveler, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9257,7 +9334,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Golem) OVERWORLD( - gObjectEventPic_Golem, + sPicTable_Golem, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9323,7 +9400,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Geodude) OVERWORLD( - gObjectEventPic_GeodudeAlola, + sPicTable_GeodudeAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9390,7 +9467,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Graveler) OVERWORLD( - gObjectEventPic_GravelerAlola, + sPicTable_GravelerAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9457,7 +9534,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Golem) OVERWORLD( - gObjectEventPic_GolemAlola, + sPicTable_GolemAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9528,7 +9605,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Ponyta) OVERWORLD( - gObjectEventPic_Ponyta, + sPicTable_Ponyta, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9597,7 +9674,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rapidash) OVERWORLD( - gObjectEventPic_Rapidash, + sPicTable_Rapidash, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9661,7 +9738,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Ponyta) OVERWORLD( - gObjectEventPic_PonytaGalar, + sPicTable_PonytaGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9727,7 +9804,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rapidash) OVERWORLD( - gObjectEventPic_RapidashGalar, + sPicTable_RapidashGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9799,7 +9876,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, -5, SHADOW_SIZE_L) FOOTPRINT(Slowpoke) OVERWORLD( - gObjectEventPic_Slowpoke, + sPicTable_Slowpoke, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9870,7 +9947,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 8, SHADOW_SIZE_L) FOOTPRINT(Slowbro) OVERWORLD( - gObjectEventPic_Slowbro, + sPicTable_Slowbro, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9940,7 +10017,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Slowking) OVERWORLD( - gObjectEventPic_Slowking, + sPicTable_Slowking, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10005,6 +10082,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 0, SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Slowbro) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_SlowbroMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_SlowbroMega, + gShinyOverworldPalette_SlowbroMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sSlowbroLevelUpLearnset, .teachableLearnset = sSlowbroTeachableLearnset, @@ -10064,7 +10152,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-3, -8, SHADOW_SIZE_L) FOOTPRINT(Slowpoke) OVERWORLD( - gObjectEventPic_SlowpokeGalar, + sPicTable_SlowpokeGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10132,7 +10220,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-5, 9, SHADOW_SIZE_L) FOOTPRINT(Slowbro) OVERWORLD( - gObjectEventPic_SlowbroGalar, + sPicTable_SlowbroGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10197,7 +10285,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Slowking) OVERWORLD( - gObjectEventPic_SlowkingGalar, + sPicTable_SlowkingGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10273,7 +10361,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Magnemite) OVERWORLD( - gObjectEventPic_Magnemite, + sPicTable_Magnemite, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -10346,7 +10434,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Magneton) OVERWORLD( - gObjectEventPic_Magneton, + sPicTable_Magneton, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -10425,7 +10513,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Magnezone) OVERWORLD( - gObjectEventPic_Magnezone, + sPicTable_Magnezone, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10514,7 +10602,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Farfetchd) OVERWORLD( - gObjectEventPic_Farfetchd, + sPicTable_Farfetchd, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -10580,7 +10668,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-7, 2, SHADOW_SIZE_L) FOOTPRINT(Farfetchd) OVERWORLD( - gObjectEventPic_FarfetchdGalar, + sPicTable_FarfetchdGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10647,7 +10735,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Sirfetchd) OVERWORLD( - gObjectEventPic_Sirfetchd, + sPicTable_Sirfetchd, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10725,7 +10813,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(6, 5, SHADOW_SIZE_M) FOOTPRINT(Doduo) OVERWORLD( - gObjectEventPic_Doduo, + sPicTable_Doduo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10734,7 +10822,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Doduo ) OVERWORLD_FEMALE( - gObjectEventPic_DoduoF, + sPicTable_DoduoF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10817,7 +10905,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Dodrio) OVERWORLD( - gObjectEventPic_Dodrio, + sPicTable_Dodrio, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10826,7 +10914,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Dodrio ) OVERWORLD_FEMALE( - gObjectEventPic_DodrioF, + sPicTable_DodrioF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10897,7 +10985,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Seel) OVERWORLD( - gObjectEventPic_Seel, + sPicTable_Seel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -10969,7 +11057,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dewgong) OVERWORLD( - gObjectEventPic_Dewgong, + sPicTable_Dewgong, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11040,7 +11128,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 3, SHADOW_SIZE_M) FOOTPRINT(Grimer) OVERWORLD( - gObjectEventPic_Grimer, + sPicTable_Grimer, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -11114,7 +11202,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Muk) OVERWORLD( - gObjectEventPic_Muk, + sPicTable_Muk, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -11179,7 +11267,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 1, SHADOW_SIZE_M) FOOTPRINT(Grimer) OVERWORLD( - gObjectEventPic_GrimerAlola, + sPicTable_GrimerAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11248,7 +11336,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Muk) OVERWORLD( - gObjectEventPic_MukAlola, + sPicTable_MukAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11327,7 +11415,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, -4, SHADOW_SIZE_S) FOOTPRINT(Shellder) OVERWORLD( - gObjectEventPic_Shellder, + sPicTable_Shellder, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -11402,7 +11490,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Cloyster) OVERWORLD( - gObjectEventPic_Cloyster, + sPicTable_Cloyster, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -11475,7 +11563,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Gastly) OVERWORLD( - gObjectEventPic_Gastly, + sPicTable_Gastly, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -11547,7 +11635,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Haunter) OVERWORLD( - gObjectEventPic_Haunter, + sPicTable_Haunter, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -11627,7 +11715,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 5, SHADOW_SIZE_L) FOOTPRINT(Gengar) OVERWORLD( - gObjectEventPic_Gengar, + sPicTable_Gengar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11691,6 +11779,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 2, SHADOW(6, 1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gengar) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_GengarMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_GengarMega, + gShinyOverworldPalette_GengarMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sGengarLevelUpLearnset, .teachableLearnset = sGengarTeachableLearnset, @@ -11812,7 +11911,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Onix) OVERWORLD( - gObjectEventPic_Onix, + sPicTable_Onix, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -11892,7 +11991,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Steelix) OVERWORLD( - gObjectEventPic_Steelix, + sPicTable_Steelix, SIZE_64x64, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -11901,7 +12000,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Steelix ) OVERWORLD_FEMALE( - gObjectEventPic_SteelixF, + sPicTable_SteelixF, SIZE_64x64, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -11964,6 +12063,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 0, SHADOW(1, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Steelix) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_SteelixMega, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_SLITHER, + sAnimTable_Following, + gOverworldPalette_SteelixMega, + gShinyOverworldPalette_SteelixMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sSteelixLevelUpLearnset, .teachableLearnset = sSteelixTeachableLearnset, @@ -12037,7 +12147,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Drowzee) OVERWORLD( - gObjectEventPic_Drowzee, + sPicTable_Drowzee, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12120,7 +12230,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-3, 9, SHADOW_SIZE_L) FOOTPRINT(Hypno) OVERWORLD( - gObjectEventPic_Hypno, + sPicTable_Hypno, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12129,7 +12239,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Hypno ) OVERWORLD_FEMALE( - gObjectEventPic_HypnoF, + sPicTable_HypnoF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12198,7 +12308,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Krabby) OVERWORLD( - gObjectEventPic_Krabby, + sPicTable_Krabby, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12267,7 +12377,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kingler) OVERWORLD( - gObjectEventPic_Kingler, + sPicTable_Kingler, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12407,7 +12517,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Voltorb) OVERWORLD( - gObjectEventPic_Voltorb, + sPicTable_Voltorb, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -12477,7 +12587,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Electrode) OVERWORLD( - gObjectEventPic_Electrode, + sPicTable_Electrode, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -12541,7 +12651,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, -4, SHADOW_SIZE_S) FOOTPRINT(Voltorb) OVERWORLD( - gObjectEventPic_VoltorbHisui, + sPicTable_VoltorbHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12606,7 +12716,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 4, SHADOW_SIZE_M) FOOTPRINT(Electrode) OVERWORLD( - gObjectEventPic_ElectrodeHisui, + sPicTable_ElectrodeHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12684,7 +12794,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, -5, SHADOW_SIZE_L) FOOTPRINT(Exeggcute) OVERWORLD( - gObjectEventPic_Exeggcute, + sPicTable_Exeggcute, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -12762,7 +12872,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Exeggutor) OVERWORLD( - gObjectEventPic_Exeggutor, + sPicTable_Exeggutor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12826,7 +12936,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(6, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Exeggutor) OVERWORLD( - gObjectEventPic_ExeggutorAlola, + sPicTable_ExeggutorAlola, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12902,7 +13012,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Cubone) OVERWORLD( - gObjectEventPic_Cubone, + sPicTable_Cubone, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12976,7 +13086,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(6, 6, SHADOW_SIZE_M) FOOTPRINT(Marowak) OVERWORLD( - gObjectEventPic_Marowak, + sPicTable_Marowak, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13037,7 +13147,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Marowak) OVERWORLD( - gObjectEventPic_MarowakAlola, + sPicTable_MarowakAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13098,7 +13208,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Marowak) OVERWORLD( - gObjectEventPic_MarowakAlola, + sPicTable_MarowakAlola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13175,7 +13285,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Tyrogue) OVERWORLD( - gObjectEventPic_Tyrogue, + sPicTable_Tyrogue, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13250,7 +13360,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Hitmonlee) OVERWORLD( - gObjectEventPic_Hitmonlee, + sPicTable_Hitmonlee, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13328,7 +13438,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Hitmonchan) OVERWORLD( - gObjectEventPic_Hitmonchan, + sPicTable_Hitmonchan, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13401,7 +13511,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Hitmontop) OVERWORLD( - gObjectEventPic_Hitmontop, + sPicTable_Hitmontop, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13470,7 +13580,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Lickitung) OVERWORLD( - gObjectEventPic_Lickitung, + sPicTable_Lickitung, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13546,7 +13656,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Lickilicky) OVERWORLD( - gObjectEventPic_Lickilicky, + sPicTable_Lickilicky, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13623,7 +13733,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Koffing) OVERWORLD( - gObjectEventPic_Koffing, + sPicTable_Koffing, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -13701,7 +13811,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Weezing) OVERWORLD( - gObjectEventPic_Weezing, + sPicTable_Weezing, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -13768,7 +13878,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(7, 17, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Weezing) OVERWORLD( - gObjectEventPic_WeezingGalar, + sPicTable_WeezingGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13847,7 +13957,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 0, SHADOW_SIZE_L) FOOTPRINT(Rhyhorn) OVERWORLD( - gObjectEventPic_Rhyhorn, + sPicTable_Rhyhorn, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13856,7 +13966,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Rhyhorn ) OVERWORLD_FEMALE( - gObjectEventPic_RhyhornF, + sPicTable_RhyhornF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13927,7 +14037,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rhydon) OVERWORLD( - gObjectEventPic_Rhydon, + sPicTable_Rhydon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13936,7 +14046,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Rhydon ) OVERWORLD_FEMALE( - gObjectEventPic_RhydonF, + sPicTable_RhydonF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -14017,7 +14127,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rhyperior) OVERWORLD( - gObjectEventPic_Rhyperior, + sPicTable_Rhyperior, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -14026,7 +14136,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Rhyperior ) OVERWORLD_FEMALE( - gObjectEventPic_RhyperiorF, + sPicTable_RhyperiorF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -14095,7 +14205,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Happiny) OVERWORLD( - gObjectEventPic_Happiny, + sPicTable_Happiny, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -14166,7 +14276,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 4, SHADOW_SIZE_L) FOOTPRINT(Chansey) OVERWORLD( - gObjectEventPic_Chansey, + sPicTable_Chansey, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -14236,7 +14346,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Blissey) OVERWORLD( - gObjectEventPic_Blissey, + sPicTable_Blissey, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -14309,7 +14419,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Tangela) OVERWORLD( - gObjectEventPic_Tangela, + sPicTable_Tangela, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -14386,7 +14496,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tangrowth) OVERWORLD( - gObjectEventPic_Tangrowth, + sPicTable_Tangrowth, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -14395,7 +14505,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Tangrowth ) OVERWORLD_FEMALE( - gObjectEventPic_TangrowthF, + sPicTable_TangrowthF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -14463,7 +14573,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kangaskhan) OVERWORLD( - gObjectEventPic_Kangaskhan, + sPicTable_Kangaskhan, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -14528,6 +14638,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 2, SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kangaskhan) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_KangaskhanMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_KangaskhanMega, + gShinyOverworldPalette_KangaskhanMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sKangaskhanLevelUpLearnset, .teachableLearnset = sKangaskhanTeachableLearnset, @@ -14600,7 +14721,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Horsea) OVERWORLD( - gObjectEventPic_Horsea, + sPicTable_Horsea, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -14676,7 +14797,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 7, SHADOW_SIZE_M) FOOTPRINT(Seadra) OVERWORLD( - gObjectEventPic_Seadra, + sPicTable_Seadra, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -14760,7 +14881,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 12, SHADOW_SIZE_M) FOOTPRINT(Kingdra) OVERWORLD( - gObjectEventPic_Kingdra, + sPicTable_Kingdra, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -14842,7 +14963,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-6, 0, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Goldeen) OVERWORLD( - gObjectEventPic_Goldeen, + sPicTable_Goldeen, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -14851,7 +14972,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Goldeen ) OVERWORLD_FEMALE( - gObjectEventPic_GoldeenF, + sPicTable_GoldeenF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -14926,7 +15047,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Seaking) OVERWORLD( - gObjectEventPic_Seaking, + sPicTable_Seaking, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -14935,7 +15056,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Seaking ) OVERWORLD_FEMALE( - gObjectEventPic_SeakingF, + sPicTable_SeakingF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -15006,7 +15127,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Staryu) OVERWORLD( - gObjectEventPic_Staryu, + sPicTable_Staryu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15077,7 +15198,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Starmie) OVERWORLD( - gObjectEventPic_Starmie, + sPicTable_Starmie, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15157,7 +15278,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-5, 4, SHADOW_SIZE_S) FOOTPRINT(MimeJr) OVERWORLD( - gObjectEventPic_MimeJr, + sPicTable_MimeJr, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15234,7 +15355,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(MrMime) OVERWORLD( - gObjectEventPic_MrMime, + sPicTable_MrMime, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15299,7 +15420,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(MrMime) OVERWORLD( - gObjectEventPic_MrMimeGalar, + sPicTable_MrMimeGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15364,7 +15485,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 9, SHADOW_SIZE_L) FOOTPRINT(MrRime) OVERWORLD( - gObjectEventPic_MrRime, + sPicTable_MrRime, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15447,7 +15568,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Scyther) OVERWORLD( - gObjectEventPic_Scyther, + sPicTable_Scyther, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15456,7 +15577,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Scyther ) OVERWORLD_FEMALE( - gObjectEventPic_ScytherF, + sPicTable_ScytherF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15533,7 +15654,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Scizor) OVERWORLD( - gObjectEventPic_Scizor, + sPicTable_Scizor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15542,7 +15663,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Scizor ) OVERWORLD_FEMALE( - gObjectEventPic_ScizorF, + sPicTable_ScizorF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15604,6 +15725,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 0, SHADOW(5, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Scizor) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_ScizorMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_ScizorMega, + gShinyOverworldPalette_ScizorMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sScizorLevelUpLearnset, .teachableLearnset = sScizorTeachableLearnset, @@ -15664,7 +15796,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kleavor) OVERWORLD( - gObjectEventPic_Kleavor, + sPicTable_Kleavor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15738,7 +15870,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Smoochum) OVERWORLD( - gObjectEventPic_Smoochum, + sPicTable_Smoochum, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15813,7 +15945,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Jynx) OVERWORLD( - gObjectEventPic_Jynx, + sPicTable_Jynx, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15884,7 +16016,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Elekid) OVERWORLD( - gObjectEventPic_Elekid, + sPicTable_Elekid, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -15957,7 +16089,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 9, SHADOW_SIZE_L) FOOTPRINT(Electabuzz) OVERWORLD( - gObjectEventPic_Electabuzz, + sPicTable_Electabuzz, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -16033,7 +16165,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Electivire) OVERWORLD( - gObjectEventPic_Electivire, + sPicTable_Electivire, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -16106,7 +16238,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Magby) OVERWORLD( - gObjectEventPic_Magby, + sPicTable_Magby, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -16175,7 +16307,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Magmar) OVERWORLD( - gObjectEventPic_Magmar, + sPicTable_Magmar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -16251,7 +16383,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Magmortar) OVERWORLD( - gObjectEventPic_Magmortar, + sPicTable_Magmortar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -16326,7 +16458,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Pinsir) OVERWORLD( - gObjectEventPic_Pinsir, + sPicTable_Pinsir, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -16392,6 +16524,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 2, SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Pinsir) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_PinsirMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_PinsirMega, + gShinyOverworldPalette_PinsirMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sPinsirLevelUpLearnset, .teachableLearnset = sPinsirTeachableLearnset, @@ -16464,7 +16607,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( - gObjectEventPic_Tauros, + sPicTable_Tauros, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -16528,7 +16671,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( - gObjectEventPic_TaurosPaldeaCombat, + sPicTable_TaurosPaldeaCombat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -16593,7 +16736,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( - gObjectEventPic_TaurosPaldeaBlaze, + sPicTable_TaurosPaldeaBlaze, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -16658,7 +16801,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( - gObjectEventPic_TaurosPaldeaAqua, + sPicTable_TaurosPaldeaAqua, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -16742,7 +16885,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 7, SHADOW_SIZE_M) FOOTPRINT(Magikarp) OVERWORLD( - gObjectEventPic_Magikarp, + sPicTable_Magikarp, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -16751,7 +16894,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Magikarp ) OVERWORLD_FEMALE( - gObjectEventPic_MagikarpF, + sPicTable_MagikarpF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -16823,7 +16966,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(5, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gyarados) OVERWORLD( - gObjectEventPic_Gyarados, + sPicTable_Gyarados, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -16832,7 +16975,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Gyarados ) OVERWORLD_FEMALE( - gObjectEventPic_GyaradosF, + sPicTable_GyaradosF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -16895,6 +17038,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 0, SHADOW(3, 17, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gyarados) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_GyaradosMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SLITHER, + sAnimTable_Following, + gOverworldPalette_GyaradosMega, + gShinyOverworldPalette_GyaradosMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sGyaradosLevelUpLearnset, .teachableLearnset = sGyaradosTeachableLearnset, @@ -16960,7 +17114,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Lapras) OVERWORLD( - gObjectEventPic_Lapras, + sPicTable_Lapras, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -17095,7 +17249,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Ditto) OVERWORLD( - gObjectEventPic_Ditto, + sPicTable_Ditto, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -17169,7 +17323,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Eevee) OVERWORLD( - gObjectEventPic_Eevee, + sPicTable_Eevee, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -17178,7 +17332,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Eevee ) OVERWORLD_FEMALE( - gObjectEventPic_EeveeF, + sPicTable_EeveeF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -17319,7 +17473,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Eevee) OVERWORLD( - gObjectEventPic_Eevee, + sPicTable_Eevee, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -17388,7 +17542,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-4, 3, SHADOW_SIZE_M) FOOTPRINT(Vaporeon) OVERWORLD( - gObjectEventPic_Vaporeon, + sPicTable_Vaporeon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -17453,7 +17607,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Jolteon) OVERWORLD( - gObjectEventPic_Jolteon, + sPicTable_Jolteon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -17518,7 +17672,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 1, SHADOW_SIZE_L) FOOTPRINT(Flareon) OVERWORLD( - gObjectEventPic_Flareon, + sPicTable_Flareon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -17585,7 +17739,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Espeon) OVERWORLD( - gObjectEventPic_Espeon, + sPicTable_Espeon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -17650,7 +17804,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Umbreon) OVERWORLD( - gObjectEventPic_Umbreon, + sPicTable_Umbreon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -17718,7 +17872,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Leafeon) OVERWORLD( - gObjectEventPic_Leafeon, + sPicTable_Leafeon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -17784,7 +17938,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Glaceon) OVERWORLD( - gObjectEventPic_Glaceon, + sPicTable_Glaceon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -17853,7 +18007,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, 9, SHADOW_SIZE_M) FOOTPRINT(Sylveon) OVERWORLD( - gObjectEventPic_Sylveon, + sPicTable_Sylveon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -17927,7 +18081,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Porygon) OVERWORLD( - gObjectEventPic_Porygon, + sPicTable_Porygon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -18003,7 +18157,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Porygon2) OVERWORLD( - gObjectEventPic_Porygon2, + sPicTable_Porygon2, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -18080,7 +18234,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 17, SHADOW_SIZE_S) FOOTPRINT(PorygonZ) OVERWORLD( - gObjectEventPic_PorygonZ, + sPicTable_PorygonZ, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -18161,7 +18315,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, -2, SHADOW_SIZE_S) FOOTPRINT(Omanyte) OVERWORLD( - gObjectEventPic_Omanyte, + sPicTable_Omanyte, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -18230,7 +18384,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Omastar) OVERWORLD( - gObjectEventPic_Omastar, + sPicTable_Omastar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -18309,7 +18463,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Kabuto) OVERWORLD( - gObjectEventPic_Kabuto, + sPicTable_Kabuto, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -18384,7 +18538,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kabutops) OVERWORLD( - gObjectEventPic_Kabutops, + sPicTable_Kabutops, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -18454,7 +18608,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 16, SHADOW_SIZE_M) FOOTPRINT(Aerodactyl) OVERWORLD( - gObjectEventPic_Aerodactyl, + sPicTable_Aerodactyl, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -18519,6 +18673,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 2, SHADOW(-2, 16, SHADOW_SIZE_M) FOOTPRINT(Aerodactyl) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_AerodactylMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + sAnimTable_Following, + gOverworldPalette_AerodactylMega, + gShinyOverworldPalette_AerodactylMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sAerodactylLevelUpLearnset, .teachableLearnset = sAerodactylTeachableLearnset, @@ -18587,7 +18752,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Munchlax) OVERWORLD( - gObjectEventPic_Munchlax, + sPicTable_Munchlax, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -18658,7 +18823,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Snorlax) OVERWORLD( - gObjectEventPic_Snorlax, + sPicTable_Snorlax, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -18798,7 +18963,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 10, SHADOW_SIZE_M) FOOTPRINT(Articuno) OVERWORLD( - gObjectEventPic_Articuno, + sPicTable_Articuno, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -18865,7 +19030,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Articuno) OVERWORLD( - gObjectEventPic_ArticunoGalar, + sPicTable_ArticunoGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -18950,7 +19115,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(Zapdos) OVERWORLD( - gObjectEventPic_Zapdos, + sPicTable_Zapdos, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -19016,7 +19181,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Zapdos) OVERWORLD( - gObjectEventPic_ZapdosGalar, + sPicTable_ZapdosGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -19125,7 +19290,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Moltres) OVERWORLD( - gObjectEventPic_Moltres, + sPicTable_Moltres, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -19191,7 +19356,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Moltres) OVERWORLD( - gObjectEventPic_MoltresGalar, + sPicTable_MoltresGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -19265,7 +19430,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(3, 3, SHADOW_SIZE_L) FOOTPRINT(Dratini) OVERWORLD( - gObjectEventPic_Dratini, + sPicTable_Dratini, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -19335,7 +19500,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dragonair) OVERWORLD( - gObjectEventPic_Dragonair, + sPicTable_Dragonair, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -19410,7 +19575,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dragonite) OVERWORLD( - gObjectEventPic_Dragonite, + sPicTable_Dragonite, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -19483,7 +19648,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(6, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mewtwo) OVERWORLD( - gObjectEventPic_Mewtwo, + sPicTable_Mewtwo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -19550,6 +19715,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 2, SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Mewtwo) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_MewtwoMegaX, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_MewtwoMegaX, + gShinyOverworldPalette_MewtwoMegaX + ) + #endif //OW_BATTLE_ONLY_FORMS .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, @@ -19610,6 +19786,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndex = 2, SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Mewtwo) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_MewtwoMegaY, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_MewtwoMegaY, + gShinyOverworldPalette_MewtwoMegaY + ) + #endif //OW_BATTLE_ONLY_FORMS .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, @@ -19686,7 +19873,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Mew) OVERWORLD( - gObjectEventPic_Mew, + sPicTable_Mew, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index 4e8804dacf..fc12c19d46 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -58,7 +58,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Chikorita) OVERWORLD( - gObjectEventPic_Chikorita, + sPicTable_Chikorita, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -126,7 +126,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Bayleef) OVERWORLD( - gObjectEventPic_Bayleef, + sPicTable_Bayleef, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -205,7 +205,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Meganium) OVERWORLD( - gObjectEventPic_Meganium, + sPicTable_Meganium, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -214,7 +214,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Meganium ) OVERWORLD_FEMALE( - gObjectEventPic_MeganiumF, + sPicTable_MeganiumF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -281,7 +281,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Cyndaquil) OVERWORLD( - gObjectEventPic_Cyndaquil, + sPicTable_Cyndaquil, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -349,7 +349,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Quilava) OVERWORLD( - gObjectEventPic_Quilava, + sPicTable_Quilava, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -425,7 +425,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Typhlosion) OVERWORLD( - gObjectEventPic_Typhlosion, + sPicTable_Typhlosion, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -489,7 +489,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(Typhlosion) OVERWORLD( - gObjectEventPic_TyphlosionHisui, + sPicTable_TyphlosionHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -563,7 +563,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Totodile) OVERWORLD( - gObjectEventPic_Totodile, + sPicTable_Totodile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -632,7 +632,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Croconaw) OVERWORLD( - gObjectEventPic_Croconaw, + sPicTable_Croconaw, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -708,7 +708,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Feraligatr) OVERWORLD( - gObjectEventPic_Feraligatr, + sPicTable_Feraligatr, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -777,7 +777,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Sentret) OVERWORLD( - gObjectEventPic_Sentret, + sPicTable_Sentret, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -844,7 +844,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Furret) OVERWORLD( - gObjectEventPic_Furret, + sPicTable_Furret, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -921,7 +921,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Hoothoot) OVERWORLD( - gObjectEventPic_Hoothoot, + sPicTable_Hoothoot, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -994,7 +994,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Noctowl) OVERWORLD( - gObjectEventPic_Noctowl, + sPicTable_Noctowl, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -1069,7 +1069,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Ledyba) OVERWORLD( - gObjectEventPic_Ledyba, + sPicTable_Ledyba, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -1078,7 +1078,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Ledyba ) OVERWORLD_FEMALE( - gObjectEventPic_LedybaF, + sPicTable_LedybaF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -1152,7 +1152,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Ledian) OVERWORLD( - gObjectEventPic_Ledian, + sPicTable_Ledian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1161,7 +1161,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Ledian ) OVERWORLD_FEMALE( - gObjectEventPic_LedianF, + sPicTable_LedianF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1232,7 +1232,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, -8, SHADOW_SIZE_M) FOOTPRINT(Spinarak) OVERWORLD( - gObjectEventPic_Spinarak, + sPicTable_Spinarak, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -1307,7 +1307,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(1, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ariados) OVERWORLD( - gObjectEventPic_Ariados, + sPicTable_Ariados, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -1378,7 +1378,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Chinchou) OVERWORLD( - gObjectEventPic_Chinchou, + sPicTable_Chinchou, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -1449,7 +1449,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(5, 4, SHADOW_SIZE_M) FOOTPRINT(Lanturn) OVERWORLD( - gObjectEventPic_Lanturn, + sPicTable_Lanturn, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -1519,7 +1519,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Togepi) OVERWORLD( - gObjectEventPic_Togepi, + sPicTable_Togepi, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1587,7 +1587,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Togetic) OVERWORLD( - gObjectEventPic_Togetic, + sPicTable_Togetic, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -1668,7 +1668,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(4, 15, SHADOW_SIZE_M) FOOTPRINT(Togekiss) OVERWORLD( - gObjectEventPic_Togekiss, + sPicTable_Togekiss, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1740,7 +1740,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-2, -4, SHADOW_SIZE_S) FOOTPRINT(Natu) OVERWORLD( - gObjectEventPic_Natu, + sPicTable_Natu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1817,7 +1817,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Xatu) OVERWORLD( - gObjectEventPic_Xatu, + sPicTable_Xatu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1826,7 +1826,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Xatu ) OVERWORLD_FEMALE( - gObjectEventPic_XatuF, + sPicTable_XatuF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1896,7 +1896,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(1, 1, SHADOW_SIZE_M) FOOTPRINT(Mareep) OVERWORLD( - gObjectEventPic_Mareep, + sPicTable_Mareep, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1966,7 +1966,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Flaaffy) OVERWORLD( - gObjectEventPic_Flaaffy, + sPicTable_Flaaffy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2044,7 +2044,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(3, 11, SHADOW_SIZE_M) FOOTPRINT(Ampharos) OVERWORLD( - gObjectEventPic_Ampharos, + sPicTable_Ampharos, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2108,6 +2108,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .iconPalIndex = 0, SHADOW(-7, 13, SHADOW_SIZE_M) FOOTPRINT(Ampharos) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_AmpharosMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_AmpharosMega, + gShinyOverworldPalette_AmpharosMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sAmpharosLevelUpLearnset, .teachableLearnset = sAmpharosTeachableLearnset, @@ -2181,7 +2192,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-4, 3, SHADOW_SIZE_S) FOOTPRINT(Azurill) OVERWORLD( - gObjectEventPic_Azurill, + sPicTable_Azurill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2254,7 +2265,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Marill) OVERWORLD( - gObjectEventPic_Marill, + sPicTable_Marill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2336,7 +2347,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-4, 8, SHADOW_SIZE_S) FOOTPRINT(Azumarill) OVERWORLD( - gObjectEventPic_Azumarill, + sPicTable_Azumarill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2407,7 +2418,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Bonsly) OVERWORLD( - gObjectEventPic_Bonsly, + sPicTable_Bonsly, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2485,7 +2496,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Sudowoodo) OVERWORLD( - gObjectEventPic_Sudowoodo, + sPicTable_Sudowoodo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2494,7 +2505,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Sudowoodo ) OVERWORLD_FEMALE( - gObjectEventPic_SudowoodoF, + sPicTable_SudowoodoF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2567,7 +2578,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Hoppip) OVERWORLD( - gObjectEventPic_Hoppip, + sPicTable_Hoppip, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -2645,7 +2656,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Skiploom) OVERWORLD( - gObjectEventPic_Skiploom, + sPicTable_Skiploom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -2728,7 +2739,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Jumpluff) OVERWORLD( - gObjectEventPic_Jumpluff, + sPicTable_Jumpluff, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -2801,7 +2812,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Aipom) OVERWORLD( - gObjectEventPic_Aipom, + sPicTable_Aipom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2810,7 +2821,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Aipom ) OVERWORLD_FEMALE( - gObjectEventPic_AipomF, + sPicTable_AipomF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2883,7 +2894,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Ambipom) OVERWORLD( - gObjectEventPic_Ambipom, + sPicTable_Ambipom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2892,7 +2903,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Ambipom ) OVERWORLD_FEMALE( - gObjectEventPic_AmbipomF, + sPicTable_AmbipomF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2966,7 +2977,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, -4, SHADOW_SIZE_S) FOOTPRINT(Sunkern) OVERWORLD( - gObjectEventPic_Sunkern, + sPicTable_Sunkern, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -3038,7 +3049,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Sunflora) OVERWORLD( - gObjectEventPic_Sunflora, + sPicTable_Sunflora, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3127,7 +3138,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Yanma) OVERWORLD( - gObjectEventPic_Yanma, + sPicTable_Yanma, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -3221,7 +3232,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Yanmega) OVERWORLD( - gObjectEventPic_Yanmega, + sPicTable_Yanmega, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3296,7 +3307,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Wooper) OVERWORLD( - gObjectEventPic_Wooper, + sPicTable_Wooper, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3305,7 +3316,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Wooper ) OVERWORLD_FEMALE( - gObjectEventPic_WooperF, + sPicTable_WooperF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3377,7 +3388,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 8, SHADOW_SIZE_M) FOOTPRINT(Quagsire) OVERWORLD( - gObjectEventPic_Quagsire, + sPicTable_Quagsire, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3386,7 +3397,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Quagsire ) OVERWORLD_FEMALE( - gObjectEventPic_QuagsireF, + sPicTable_QuagsireF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3447,7 +3458,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Wooper) OVERWORLD( - gObjectEventPic_WooperPaldea, + sPicTable_WooperPaldea, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3513,7 +3524,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-2, 3, SHADOW_SIZE_L) FOOTPRINT(Clodsire) OVERWORLD( - gObjectEventPic_Clodsire, + sPicTable_Clodsire, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3592,7 +3603,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-2, 8, SHADOW_SIZE_S) FOOTPRINT(Murkrow) OVERWORLD( - gObjectEventPic_Murkrow, + sPicTable_Murkrow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3601,7 +3612,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Murkrow ) OVERWORLD_FEMALE( - gObjectEventPic_MurkrowF, + sPicTable_MurkrowF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3669,7 +3680,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(5, 7, SHADOW_SIZE_M) FOOTPRINT(Honchkrow) OVERWORLD( - gObjectEventPic_Honchkrow, + sPicTable_Honchkrow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3747,7 +3758,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Misdreavus) OVERWORLD( - gObjectEventPic_Misdreavus, + sPicTable_Misdreavus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -3825,7 +3836,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Mismagius) OVERWORLD( - gObjectEventPic_Mismagius, + sPicTable_Mismagius, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3889,7 +3900,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 3, SHADOW_SIZE_S) \ FOOTPRINT(Unown) \ OVERWORLD( \ - gObjectEventPic_Unown ##letter, \ + sPicTable_Unown ##letter, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_NONE, \ @@ -3992,7 +4003,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Wynaut) OVERWORLD( - gObjectEventPic_Wynaut, + sPicTable_Wynaut, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4073,7 +4084,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-3, 8, SHADOW_SIZE_M) FOOTPRINT(Wobbuffet) OVERWORLD( - gObjectEventPic_Wobbuffet, + sPicTable_Wobbuffet, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4082,7 +4093,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Wobbuffet ) OVERWORLD_FEMALE( - gObjectEventPic_WobbuffetF, + sPicTable_WobbuffetF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4155,7 +4166,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Girafarig) OVERWORLD( - gObjectEventPic_Girafarig, + sPicTable_Girafarig, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4164,7 +4175,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Girafarig ) OVERWORLD_FEMALE( - gObjectEventPic_GirafarigF, + sPicTable_GirafarigF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4227,7 +4238,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(11, 13, SHADOW_SIZE_L) FOOTPRINT(Farigiraf) OVERWORLD( - gObjectEventPic_Farigiraf, + sPicTable_Farigiraf, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4301,7 +4312,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Pineco) OVERWORLD( - gObjectEventPic_Pineco, + sPicTable_Pineco, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -4370,7 +4381,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 6, SHADOW_SIZE_L) FOOTPRINT(Forretress) OVERWORLD( - gObjectEventPic_Forretress, + sPicTable_Forretress, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -4446,7 +4457,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Dunsparce) OVERWORLD( - gObjectEventPic_Dunsparce, + sPicTable_Dunsparce, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -4512,7 +4523,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 5, SHADOW_SIZE_L) FOOTPRINT(Dudunsparce) OVERWORLD( - gObjectEventPic_DudunsparceTwoSegment, + sPicTable_DudunsparceTwoSegment, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -4575,7 +4586,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(4, 4, SHADOW_SIZE_L) FOOTPRINT(Dudunsparce) OVERWORLD( - gObjectEventPic_DudunsparceThreeSegment, + sPicTable_DudunsparceThreeSegment, SIZE_64x64, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -4651,7 +4662,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Gligar) OVERWORLD( - gObjectEventPic_Gligar, + sPicTable_Gligar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -4660,7 +4671,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Gligar ) OVERWORLD_FEMALE( - gObjectEventPic_GligarF, + sPicTable_GligarF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -4730,7 +4741,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Gliscor) OVERWORLD( - gObjectEventPic_Gliscor, + sPicTable_Gliscor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4802,7 +4813,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Snubbull) OVERWORLD( - gObjectEventPic_Snubbull, + sPicTable_Snubbull, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4877,7 +4888,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(3, 10, SHADOW_SIZE_L) FOOTPRINT(Granbull) OVERWORLD( - gObjectEventPic_Granbull, + sPicTable_Granbull, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4960,7 +4971,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Qwilfish) OVERWORLD( - gObjectEventPic_Qwilfish, + sPicTable_Qwilfish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -5027,7 +5038,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-5, 4, SHADOW_SIZE_S) FOOTPRINT(Qwilfish) OVERWORLD( - gObjectEventPic_QwilfishHisui, + sPicTable_QwilfishHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5092,7 +5103,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Overqwil) OVERWORLD( - gObjectEventPic_Overqwil, + sPicTable_Overqwil, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5168,7 +5179,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Shuckle) OVERWORLD( - gObjectEventPic_Shuckle, + sPicTable_Shuckle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5245,7 +5256,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Heracross) OVERWORLD( - gObjectEventPic_Heracross, + sPicTable_Heracross, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5254,7 +5265,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Heracross ) OVERWORLD_FEMALE( - gObjectEventPic_HeracrossF, + sPicTable_HeracrossF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5317,6 +5328,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .iconPalIndex = 0, SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Heracross) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_HeracrossMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_HeracrossMega, + gShinyOverworldPalette_HeracrossMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sHeracrossLevelUpLearnset, .teachableLearnset = sHeracrossTeachableLearnset, @@ -5393,7 +5415,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Sneasel) OVERWORLD( - gObjectEventPic_Sneasel, + sPicTable_Sneasel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5402,7 +5424,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Sneasel ) OVERWORLD_FEMALE( - gObjectEventPic_SneaselF, + sPicTable_SneaselF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5478,7 +5500,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-4, 10, SHADOW_SIZE_M) FOOTPRINT(Weavile) OVERWORLD( - gObjectEventPic_Weavile, + sPicTable_Weavile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5487,7 +5509,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Weavile ) OVERWORLD_FEMALE( - gObjectEventPic_WeavileF, + sPicTable_WeavileF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5557,7 +5579,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Sneasel) OVERWORLD( - gObjectEventPic_SneaselHisui, + sPicTable_SneaselHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5566,7 +5588,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_SneaselHisui ) OVERWORLD_FEMALE( - gObjectEventPic_SneaselHisuiF, + sPicTable_SneaselHisuiF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5630,7 +5652,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Sneasler) OVERWORLD( - gObjectEventPic_Sneasler, + sPicTable_Sneasler, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5704,7 +5726,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Teddiursa) OVERWORLD( - gObjectEventPic_Teddiursa, + sPicTable_Teddiursa, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5781,7 +5803,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Ursaring) OVERWORLD( - gObjectEventPic_Ursaring, + sPicTable_Ursaring, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5790,7 +5812,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Ursaring ) OVERWORLD_FEMALE( - gObjectEventPic_UrsaringF, + sPicTable_UrsaringF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5852,7 +5874,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(1, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ursaluna) OVERWORLD( - gObjectEventPic_Ursaluna, + sPicTable_Ursaluna, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5978,7 +6000,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Slugma) OVERWORLD( - gObjectEventPic_Slugma, + sPicTable_Slugma, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -6055,7 +6077,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Magcargo) OVERWORLD( - gObjectEventPic_Magcargo, + sPicTable_Magcargo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -6128,7 +6150,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-3, -6, SHADOW_SIZE_S) FOOTPRINT(Swinub) OVERWORLD( - gObjectEventPic_Swinub, + sPicTable_Swinub, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6208,7 +6230,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Piloswine) OVERWORLD( - gObjectEventPic_Piloswine, + sPicTable_Piloswine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6217,7 +6239,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Piloswine ) OVERWORLD_FEMALE( - gObjectEventPic_PiloswineF, + sPicTable_PiloswineF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6293,7 +6315,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(7, 7, SHADOW_SIZE_L) FOOTPRINT(Mamoswine) OVERWORLD( - gObjectEventPic_Mamoswine, + sPicTable_Mamoswine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6302,7 +6324,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Mamoswine ) OVERWORLD_FEMALE( - gObjectEventPic_MamoswineF, + sPicTable_MamoswineF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6383,7 +6405,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Corsola) OVERWORLD( - gObjectEventPic_Corsola, + sPicTable_Corsola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6448,7 +6470,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Corsola) OVERWORLD( - gObjectEventPic_CorsolaGalar, + sPicTable_CorsolaGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6514,7 +6536,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Cursola) OVERWORLD( - gObjectEventPic_Cursola, + sPicTable_Cursola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6587,7 +6609,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Remoraid) OVERWORLD( - gObjectEventPic_Remoraid, + sPicTable_Remoraid, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -6668,7 +6690,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Octillery) OVERWORLD( - gObjectEventPic_Octillery, + sPicTable_Octillery, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -6677,7 +6699,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Octillery ) OVERWORLD_FEMALE( - gObjectEventPic_OctilleryF, + sPicTable_OctilleryF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -6742,7 +6764,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Delibird) OVERWORLD( - gObjectEventPic_Delibird, + sPicTable_Delibird, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6813,7 +6835,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Mantyke) OVERWORLD( - gObjectEventPic_Mantyke, + sPicTable_Mantyke, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6890,7 +6912,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Mantine) OVERWORLD( - gObjectEventPic_Mantine, + sPicTable_Mantine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -6959,7 +6981,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(2, 9, SHADOW_SIZE_M) FOOTPRINT(Skarmory) OVERWORLD( - gObjectEventPic_Skarmory, + sPicTable_Skarmory, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7027,7 +7049,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Houndour) OVERWORLD( - gObjectEventPic_Houndour, + sPicTable_Houndour, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7100,7 +7122,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-5, 13, SHADOW_SIZE_L) FOOTPRINT(Houndoom) OVERWORLD( - gObjectEventPic_Houndoom, + sPicTable_Houndoom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7109,7 +7131,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Houndoom ) OVERWORLD_FEMALE( - gObjectEventPic_HoundoomF, + sPicTable_HoundoomF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7170,6 +7192,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .iconPalIndex = 0, SHADOW(-5, 13, SHADOW_SIZE_L) FOOTPRINT(Houndoom) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_HoundoomMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_HoundoomMega, + gShinyOverworldPalette_HoundoomMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sHoundoomLevelUpLearnset, .teachableLearnset = sHoundoomTeachableLearnset, @@ -7238,7 +7271,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(3, -2, SHADOW_SIZE_M) FOOTPRINT(Phanpy) OVERWORLD( - gObjectEventPic_Phanpy, + sPicTable_Phanpy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7313,7 +7346,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(7, 2, SHADOW_SIZE_L) FOOTPRINT(Donphan) OVERWORLD( - gObjectEventPic_Donphan, + sPicTable_Donphan, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7322,7 +7355,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Donphan ) OVERWORLD_FEMALE( - gObjectEventPic_DonphanF, + sPicTable_DonphanF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7391,7 +7424,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Stantler) OVERWORLD( - gObjectEventPic_Stantler, + sPicTable_Stantler, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7457,7 +7490,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Wyrdeer) OVERWORLD( - gObjectEventPic_Wyrdeer, + sPicTable_Wyrdeer, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7531,7 +7564,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(6, 7, SHADOW_SIZE_S) FOOTPRINT(Smeargle) OVERWORLD( - gObjectEventPic_Smeargle, + sPicTable_Smeargle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7605,7 +7638,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-3, 4, SHADOW_SIZE_M) FOOTPRINT(Miltank) OVERWORLD( - gObjectEventPic_Miltank, + sPicTable_Miltank, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7685,7 +7718,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-4, 7, SHADOW_SIZE_L) FOOTPRINT(Raikou) OVERWORLD( - gObjectEventPic_Raikou, + sPicTable_Raikou, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7765,7 +7798,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 8, SHADOW_SIZE_L) FOOTPRINT(Entei) OVERWORLD( - gObjectEventPic_Entei, + sPicTable_Entei, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7845,7 +7878,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Suicune) OVERWORLD( - gObjectEventPic_Suicune, + sPicTable_Suicune, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7916,7 +7949,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Larvitar) OVERWORLD( - gObjectEventPic_Larvitar, + sPicTable_Larvitar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7983,7 +8016,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Pupitar) OVERWORLD( - gObjectEventPic_Pupitar, + sPicTable_Pupitar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -8057,7 +8090,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Tyranitar) OVERWORLD( - gObjectEventPic_Tyranitar, + sPicTable_Tyranitar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8121,6 +8154,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .iconPalIndex = 1, SHADOW(-1, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tyranitar) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_TyranitarMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_TyranitarMega, + gShinyOverworldPalette_TyranitarMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sTyranitarLevelUpLearnset, .teachableLearnset = sTyranitarTeachableLearnset, @@ -8202,7 +8246,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(2, 17, SHADOW_SIZE_L) FOOTPRINT(Lugia) OVERWORLD( - gObjectEventPic_Lugia, + sPicTable_Lugia, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, @@ -8281,7 +8325,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(1, 17, SHADOW_SIZE_L) FOOTPRINT(HoOh) OVERWORLD( - gObjectEventPic_HoOh, + sPicTable_HoOh, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, @@ -8362,7 +8406,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Celebi) OVERWORLD( - gObjectEventPic_Celebi, + sPicTable_Celebi, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 76125eb10a..7b87415c76 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -60,7 +60,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Treecko) OVERWORLD( - gObjectEventPic_Treecko, + sPicTable_Treecko, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -130,7 +130,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 7, SHADOW_SIZE_M) FOOTPRINT(Grovyle) OVERWORLD( - gObjectEventPic_Grovyle, + sPicTable_Grovyle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -203,7 +203,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Sceptile) OVERWORLD( - gObjectEventPic_Sceptile, + sPicTable_Sceptile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -267,6 +267,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 1, SHADOW(3, 11, SHADOW_SIZE_L) FOOTPRINT(Sceptile) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_SceptileMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_SceptileMega, + gShinyOverworldPalette_SceptileMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sSceptileLevelUpLearnset, .teachableLearnset = sSceptileTeachableLearnset, @@ -339,7 +350,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Torchic) OVERWORLD( - gObjectEventPic_Torchic, + sPicTable_Torchic, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -348,7 +359,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Torchic ) OVERWORLD_FEMALE( - gObjectEventPic_TorchicF, + sPicTable_TorchicF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -421,7 +432,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Combusken) OVERWORLD( - gObjectEventPic_Combusken, + sPicTable_Combusken, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -430,7 +441,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Combusken ) OVERWORLD_FEMALE( - gObjectEventPic_CombuskenF, + sPicTable_CombuskenF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -509,7 +520,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Blaziken) OVERWORLD( - gObjectEventPic_Blaziken, + sPicTable_Blaziken, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -518,7 +529,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Blaziken ) OVERWORLD_FEMALE( - gObjectEventPic_BlazikenF, + sPicTable_BlazikenF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -580,6 +591,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Blaziken) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_BlazikenMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_BlazikenMega, + gShinyOverworldPalette_BlazikenMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sBlazikenLevelUpLearnset, .teachableLearnset = sBlazikenTeachableLearnset, @@ -646,7 +668,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Mudkip) OVERWORLD( - gObjectEventPic_Mudkip, + sPicTable_Mudkip, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -720,7 +742,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Marshtomp) OVERWORLD( - gObjectEventPic_Marshtomp, + sPicTable_Marshtomp, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -795,7 +817,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Swampert) OVERWORLD( - gObjectEventPic_Swampert, + sPicTable_Swampert, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -859,6 +881,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(6, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Swampert) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_SwampertMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_SwampertMega, + gShinyOverworldPalette_SwampertMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sSwampertLevelUpLearnset, .teachableLearnset = sSwampertTeachableLearnset, @@ -933,7 +966,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Poochyena) OVERWORLD( - gObjectEventPic_Poochyena, + sPicTable_Poochyena, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1007,7 +1040,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 6, SHADOW_SIZE_L) FOOTPRINT(Mightyena) OVERWORLD( - gObjectEventPic_Mightyena, + sPicTable_Mightyena, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1091,7 +1124,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-4, 0, SHADOW_SIZE_M) FOOTPRINT(Zigzagoon) OVERWORLD( - gObjectEventPic_Zigzagoon, + sPicTable_Zigzagoon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1168,7 +1201,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-6, 0, SHADOW_SIZE_L) FOOTPRINT(Linoone) OVERWORLD( - gObjectEventPic_Linoone, + sPicTable_Linoone, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1232,7 +1265,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-5, 0, SHADOW_SIZE_M) FOOTPRINT(Zigzagoon) OVERWORLD( - gObjectEventPic_ZigzagoonGalar, + sPicTable_ZigzagoonGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1298,7 +1331,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-4, 0, SHADOW_SIZE_L) FOOTPRINT(Linoone) OVERWORLD( - gObjectEventPic_LinooneGalar, + sPicTable_LinooneGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1363,7 +1396,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Obstagoon) OVERWORLD( - gObjectEventPic_Obstagoon, + sPicTable_Obstagoon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1440,7 +1473,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Wurmple) OVERWORLD( - gObjectEventPic_Wurmple, + sPicTable_Wurmple, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -1509,7 +1542,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Silcoon) OVERWORLD( - gObjectEventPic_Silcoon, + sPicTable_Silcoon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -1599,7 +1632,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Beautifly) OVERWORLD( - gObjectEventPic_Beautifly, + sPicTable_Beautifly, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -1608,7 +1641,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Beautifly ) OVERWORLD_FEMALE( - gObjectEventPic_BeautiflyF, + sPicTable_BeautiflyF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -1680,7 +1713,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Cascoon) OVERWORLD( - gObjectEventPic_Cascoon, + sPicTable_Cascoon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -1778,7 +1811,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Dustox) OVERWORLD( - gObjectEventPic_Dustox, + sPicTable_Dustox, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -1787,7 +1820,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Dustox ) OVERWORLD_FEMALE( - gObjectEventPic_DustoxF, + sPicTable_DustoxF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -1854,7 +1887,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Lotad) OVERWORLD( - gObjectEventPic_Lotad, + sPicTable_Lotad, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1925,7 +1958,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(4, 2, SHADOW_SIZE_S) FOOTPRINT(Lombre) OVERWORLD( - gObjectEventPic_Lombre, + sPicTable_Lombre, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2009,7 +2042,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Ludicolo) OVERWORLD( - gObjectEventPic_Ludicolo, + sPicTable_Ludicolo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2018,7 +2051,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Ludicolo ) OVERWORLD_FEMALE( - gObjectEventPic_LudicoloF, + sPicTable_LudicoloF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2091,7 +2124,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Seedot) OVERWORLD( - gObjectEventPic_Seedot, + sPicTable_Seedot, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2172,7 +2205,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Nuzleaf) OVERWORLD( - gObjectEventPic_Nuzleaf, + sPicTable_Nuzleaf, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2181,7 +2214,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Nuzleaf ) OVERWORLD_FEMALE( - gObjectEventPic_NuzleafF, + sPicTable_NuzleafF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2263,7 +2296,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Shiftry) OVERWORLD( - gObjectEventPic_Shiftry, + sPicTable_Shiftry, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2272,7 +2305,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Shiftry ) OVERWORLD_FEMALE( - gObjectEventPic_ShiftryF, + sPicTable_ShiftryF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2344,7 +2377,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Taillow) OVERWORLD( - gObjectEventPic_Taillow, + sPicTable_Taillow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2418,7 +2451,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-7, 7, SHADOW_SIZE_M) FOOTPRINT(Swellow) OVERWORLD( - gObjectEventPic_Swellow, + sPicTable_Swellow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -2492,7 +2525,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 15, SHADOW_SIZE_S) FOOTPRINT(Wingull) OVERWORLD( - gObjectEventPic_Wingull, + sPicTable_Wingull, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -2578,7 +2611,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 17, SHADOW_SIZE_M) FOOTPRINT(Pelipper) OVERWORLD( - gObjectEventPic_Pelipper, + sPicTable_Pelipper, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -2654,7 +2687,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Ralts) OVERWORLD( - gObjectEventPic_Ralts, + sPicTable_Ralts, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2722,7 +2755,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Kirlia) OVERWORLD( - gObjectEventPic_Kirlia, + sPicTable_Kirlia, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2796,7 +2829,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Gardevoir) OVERWORLD( - gObjectEventPic_Gardevoir, + sPicTable_Gardevoir, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2860,6 +2893,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 1, SHADOW(1, 14, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gardevoir) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_GardevoirMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_GardevoirMega, + gShinyOverworldPalette_GardevoirMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sGardevoirLevelUpLearnset, .teachableLearnset = sGardevoirTeachableLearnset, @@ -2932,7 +2976,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(4, 13, SHADOW_SIZE_L) FOOTPRINT(Gallade) OVERWORLD( - gObjectEventPic_Gallade, + sPicTable_Gallade, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2996,6 +3040,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 1, SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Gallade) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_GalladeMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_GalladeMega, + gShinyOverworldPalette_GalladeMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sGalladeLevelUpLearnset, .teachableLearnset = sGalladeTeachableLearnset, @@ -3064,7 +3119,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Surskit) OVERWORLD( - gObjectEventPic_Surskit, + sPicTable_Surskit, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -3147,7 +3202,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-4, 17, SHADOW_SIZE_M) FOOTPRINT(Masquerain) OVERWORLD( - gObjectEventPic_Masquerain, + sPicTable_Masquerain, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -3229,7 +3284,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Shroomish) OVERWORLD( - gObjectEventPic_Shroomish, + sPicTable_Shroomish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3305,7 +3360,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-4, 9, SHADOW_SIZE_M) FOOTPRINT(Breloom) OVERWORLD( - gObjectEventPic_Breloom, + sPicTable_Breloom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3376,7 +3431,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, -4, SHADOW_SIZE_M) FOOTPRINT(Slakoth) OVERWORLD( - gObjectEventPic_Slakoth, + sPicTable_Slakoth, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3448,7 +3503,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(4, 6, SHADOW_SIZE_M) FOOTPRINT(Vigoroth) OVERWORLD( - gObjectEventPic_Vigoroth, + sPicTable_Vigoroth, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3525,7 +3580,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Slaking) OVERWORLD( - gObjectEventPic_Slaking, + sPicTable_Slaking, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3596,7 +3651,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, -3, SHADOW_SIZE_M) FOOTPRINT(Nincada) OVERWORLD( - gObjectEventPic_Nincada, + sPicTable_Nincada, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -3681,7 +3736,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Ninjask) OVERWORLD( - gObjectEventPic_Ninjask, + sPicTable_Ninjask, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -3750,7 +3805,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 9, SHADOW_SIZE_S) FOOTPRINT(Shedinja) OVERWORLD( - gObjectEventPic_Shedinja, + sPicTable_Shedinja, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -3825,7 +3880,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Whismur) OVERWORLD( - gObjectEventPic_Whismur, + sPicTable_Whismur, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3895,7 +3950,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Loudred) OVERWORLD( - gObjectEventPic_Loudred, + sPicTable_Loudred, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3970,7 +4025,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 12, SHADOW_SIZE_L) FOOTPRINT(Exploud) OVERWORLD( - gObjectEventPic_Exploud, + sPicTable_Exploud, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4045,7 +4100,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Makuhita) OVERWORLD( - gObjectEventPic_Makuhita, + sPicTable_Makuhita, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4115,7 +4170,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-3, 9, SHADOW_SIZE_L) FOOTPRINT(Hariyama) OVERWORLD( - gObjectEventPic_Hariyama, + sPicTable_Hariyama, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4188,7 +4243,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Nosepass) OVERWORLD( - gObjectEventPic_Nosepass, + sPicTable_Nosepass, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4263,7 +4318,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 13, SHADOW_SIZE_L) FOOTPRINT(Probopass) OVERWORLD( - gObjectEventPic_Probopass, + sPicTable_Probopass, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4336,7 +4391,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Skitty) OVERWORLD( - gObjectEventPic_Skitty, + sPicTable_Skitty, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4415,7 +4470,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Delcatty) OVERWORLD( - gObjectEventPic_Delcatty, + sPicTable_Delcatty, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4491,7 +4546,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Sableye) OVERWORLD( - gObjectEventPic_Sableye, + sPicTable_Sableye, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4556,6 +4611,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 2, SHADOW(3, 7, SHADOW_SIZE_S) FOOTPRINT(Sableye) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_SableyeMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_SableyeMega, + gShinyOverworldPalette_SableyeMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sSableyeLevelUpLearnset, .teachableLearnset = sSableyeTeachableLearnset, @@ -4633,7 +4699,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 4, SHADOW_SIZE_L) FOOTPRINT(Mawile) OVERWORLD( - gObjectEventPic_Mawile, + sPicTable_Mawile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4699,6 +4765,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mawile) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_MawileMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_MawileMega, + gShinyOverworldPalette_MawileMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sMawileLevelUpLearnset, .teachableLearnset = sMawileTeachableLearnset, @@ -4767,7 +4844,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Aron) OVERWORLD( - gObjectEventPic_Aron, + sPicTable_Aron, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4838,7 +4915,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(4, 2, SHADOW_SIZE_L) FOOTPRINT(Lairon) OVERWORLD( - gObjectEventPic_Lairon, + sPicTable_Lairon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4912,7 +4989,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(5, 12, SHADOW_SIZE_L) FOOTPRINT(Aggron) OVERWORLD( - gObjectEventPic_Aggron, + sPicTable_Aggron, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4977,6 +5054,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 2, SHADOW(1, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Aggron) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_AggronMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_AggronMega, + gShinyOverworldPalette_AggronMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sAggronLevelUpLearnset, .teachableLearnset = sAggronTeachableLearnset, @@ -5047,7 +5135,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Meditite) OVERWORLD( - gObjectEventPic_Meditite, + sPicTable_Meditite, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5056,7 +5144,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Meditite ) OVERWORLD_FEMALE( - gObjectEventPic_MedititeF, + sPicTable_MedititeF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5132,7 +5220,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 13, SHADOW_SIZE_S) FOOTPRINT(Medicham) OVERWORLD( - gObjectEventPic_Medicham, + sPicTable_Medicham, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5141,7 +5229,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Medicham ) OVERWORLD_FEMALE( - gObjectEventPic_MedichamF, + sPicTable_MedichamF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5203,6 +5291,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(-2, 13, SHADOW_SIZE_S) FOOTPRINT(Medicham) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_MedichamMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_MedichamMega, + gShinyOverworldPalette_MedichamMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sMedichamLevelUpLearnset, .teachableLearnset = sMedichamTeachableLearnset, @@ -5269,7 +5368,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(3, -1, SHADOW_SIZE_M) FOOTPRINT(Electrike) OVERWORLD( - gObjectEventPic_Electrike, + sPicTable_Electrike, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5339,7 +5438,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 10, SHADOW_SIZE_M) FOOTPRINT(Manectric) OVERWORLD( - gObjectEventPic_Manectric, + sPicTable_Manectric, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5402,6 +5501,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Manectric) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_ManectricMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_ManectricMega, + gShinyOverworldPalette_ManectricMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sManectricLevelUpLearnset, .teachableLearnset = sManectricTeachableLearnset, @@ -5473,7 +5583,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Plusle) OVERWORLD( - gObjectEventPic_Plusle, + sPicTable_Plusle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5549,7 +5659,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-4, 3, SHADOW_SIZE_S) FOOTPRINT(Minun) OVERWORLD( - gObjectEventPic_Minun, + sPicTable_Minun, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5629,7 +5739,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Volbeat) OVERWORLD( - gObjectEventPic_Volbeat, + sPicTable_Volbeat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -5709,7 +5819,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Illumise) OVERWORLD( - gObjectEventPic_Illumise, + sPicTable_Illumise, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -5781,7 +5891,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Budew) OVERWORLD( - gObjectEventPic_Budew, + sPicTable_Budew, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5858,7 +5968,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Roselia) OVERWORLD( - gObjectEventPic_Roselia, + sPicTable_Roselia, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5867,7 +5977,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Roselia ) OVERWORLD_FEMALE( - gObjectEventPic_RoseliaF, + sPicTable_RoseliaF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5949,7 +6059,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Roserade) OVERWORLD( - gObjectEventPic_Roserade, + sPicTable_Roserade, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5958,7 +6068,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Roserade ) OVERWORLD_FEMALE( - gObjectEventPic_RoseradeF, + sPicTable_RoseradeF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6035,7 +6145,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Gulpin) OVERWORLD( - gObjectEventPic_Gulpin, + sPicTable_Gulpin, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -6044,7 +6154,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Gulpin ) OVERWORLD_FEMALE( - gObjectEventPic_GulpinF, + sPicTable_GulpinF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -6119,7 +6229,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(4, 3, SHADOW_SIZE_L) FOOTPRINT(Swalot) OVERWORLD( - gObjectEventPic_Swalot, + sPicTable_Swalot, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -6128,7 +6238,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Swalot ) OVERWORLD_FEMALE( - gObjectEventPic_SwalotF, + sPicTable_SwalotF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -6201,7 +6311,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Carvanha) OVERWORLD( - gObjectEventPic_Carvanha, + sPicTable_Carvanha, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -6276,7 +6386,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Sharpedo) OVERWORLD( - gObjectEventPic_Sharpedo, + sPicTable_Sharpedo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -6342,6 +6452,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Sharpedo) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_SharpedoMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + sAnimTable_Following, + gOverworldPalette_SharpedoMega, + gShinyOverworldPalette_SharpedoMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sSharpedoLevelUpLearnset, .teachableLearnset = sSharpedoTeachableLearnset, @@ -6410,7 +6531,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Wailmer) OVERWORLD( - gObjectEventPic_Wailmer, + sPicTable_Wailmer, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -6479,7 +6600,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Wailord) OVERWORLD( - gObjectEventPic_Wailord, + sPicTable_Wailord, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, @@ -6559,7 +6680,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(4, 2, SHADOW_SIZE_S) FOOTPRINT(Numel) OVERWORLD( - gObjectEventPic_Numel, + sPicTable_Numel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6568,7 +6689,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Numel ) OVERWORLD_FEMALE( - gObjectEventPic_NumelF, + sPicTable_NumelF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6649,7 +6770,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 4, SHADOW_SIZE_L) FOOTPRINT(Camerupt) OVERWORLD( - gObjectEventPic_Camerupt, + sPicTable_Camerupt, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6658,7 +6779,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Camerupt ) OVERWORLD_FEMALE( - gObjectEventPic_CameruptF, + sPicTable_CameruptF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6721,6 +6842,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Camerupt) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_CameruptMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_CameruptMega, + gShinyOverworldPalette_CameruptMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sCameruptLevelUpLearnset, .teachableLearnset = sCameruptTeachableLearnset, @@ -6792,7 +6924,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(Torkoal) OVERWORLD( - gObjectEventPic_Torkoal, + sPicTable_Torkoal, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6869,7 +7001,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Spoink) OVERWORLD( - gObjectEventPic_Spoink, + sPicTable_Spoink, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -6940,7 +7072,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Grumpig) OVERWORLD( - gObjectEventPic_Grumpig, + sPicTable_Grumpig, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7015,7 +7147,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 6, SHADOW_SIZE_S) FOOTPRINT(Spinda) OVERWORLD( - gObjectEventPic_Spinda, + sPicTable_Spinda, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7091,7 +7223,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(4, -1, SHADOW_SIZE_S) FOOTPRINT(Trapinch) OVERWORLD( - gObjectEventPic_Trapinch, + sPicTable_Trapinch, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7168,7 +7300,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 0, SHADOW_SIZE_L) FOOTPRINT(Vibrava) OVERWORLD( - gObjectEventPic_Vibrava, + sPicTable_Vibrava, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7251,7 +7383,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 17, SHADOW_SIZE_M) FOOTPRINT(Flygon) OVERWORLD( - gObjectEventPic_Flygon, + sPicTable_Flygon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -7328,7 +7460,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Cacnea) OVERWORLD( - gObjectEventPic_Cacnea, + sPicTable_Cacnea, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7404,7 +7536,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 14, SHADOW_SIZE_M) FOOTPRINT(Cacturne) OVERWORLD( - gObjectEventPic_Cacturne, + sPicTable_Cacturne, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7413,7 +7545,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Cacturne ) OVERWORLD_FEMALE( - gObjectEventPic_CacturneF, + sPicTable_CacturneF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7484,7 +7616,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Swablu) OVERWORLD( - gObjectEventPic_Swablu, + sPicTable_Swablu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -7555,7 +7687,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Altaria) OVERWORLD( - gObjectEventPic_Altaria, + sPicTable_Altaria, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -7620,6 +7752,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(-2, 17, SHADOW_SIZE_L) FOOTPRINT(Altaria) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_AltariaMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + sAnimTable_Following, + gOverworldPalette_AltariaMega, + gShinyOverworldPalette_AltariaMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sAltariaLevelUpLearnset, .teachableLearnset = sAltariaTeachableLearnset, @@ -7690,7 +7833,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Zangoose) OVERWORLD( - gObjectEventPic_Zangoose, + sPicTable_Zangoose, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7766,7 +7909,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-3, 7, SHADOW_SIZE_L) FOOTPRINT(Seviper) OVERWORLD( - gObjectEventPic_Seviper, + sPicTable_Seviper, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BIKE_TIRE, @@ -7846,7 +7989,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Lunatone) OVERWORLD( - gObjectEventPic_Lunatone, + sPicTable_Lunatone, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -7925,7 +8068,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(Solrock) OVERWORLD( - gObjectEventPic_Solrock, + sPicTable_Solrock, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -8008,7 +8151,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Barboach) OVERWORLD( - gObjectEventPic_Barboach, + sPicTable_Barboach, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -8090,7 +8233,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Whiscash) OVERWORLD( - gObjectEventPic_Whiscash, + sPicTable_Whiscash, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8162,7 +8305,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Corphish) OVERWORLD( - gObjectEventPic_Corphish, + sPicTable_Corphish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8232,7 +8375,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(6, 9, SHADOW_SIZE_M) FOOTPRINT(Crawdaunt) OVERWORLD( - gObjectEventPic_Crawdaunt, + sPicTable_Crawdaunt, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8306,7 +8449,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Baltoy) OVERWORLD( - gObjectEventPic_Baltoy, + sPicTable_Baltoy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -8379,7 +8522,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 18, SHADOW_SIZE_M) FOOTPRINT(Claydol) OVERWORLD( - gObjectEventPic_Claydol, + sPicTable_Claydol, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -8456,7 +8599,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Lileep) OVERWORLD( - gObjectEventPic_Lileep, + sPicTable_Lileep, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -8535,7 +8678,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Cradily) OVERWORLD( - gObjectEventPic_Cradily, + sPicTable_Cradily, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -8613,7 +8756,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Anorith) OVERWORLD( - gObjectEventPic_Anorith, + sPicTable_Anorith, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, @@ -8689,7 +8832,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 11, SHADOW_SIZE_L) FOOTPRINT(Armaldo) OVERWORLD( - gObjectEventPic_Armaldo, + sPicTable_Armaldo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8765,7 +8908,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Feebas) OVERWORLD( - gObjectEventPic_Feebas, + sPicTable_Feebas, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -8850,7 +8993,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Milotic) OVERWORLD( - gObjectEventPic_Milotic, + sPicTable_Milotic, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -8859,7 +9002,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Milotic ) OVERWORLD_FEMALE( - gObjectEventPic_MiloticF, + sPicTable_MiloticF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -8930,7 +9073,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 10, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( - gObjectEventPic_CastformNormal, + sPicTable_CastformNormal, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -9006,7 +9149,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( - gObjectEventPic_CastformSunny, + sPicTable_CastformSunny, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -9080,7 +9223,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( - gObjectEventPic_CastformRainy, + sPicTable_CastformRainy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -9154,7 +9297,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( - gObjectEventPic_CastformSnowy, + sPicTable_CastformSnowy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -9232,7 +9375,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 8, SHADOW_SIZE_S) FOOTPRINT(Kecleon) OVERWORLD( - gObjectEventPic_Kecleon, + sPicTable_Kecleon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9311,7 +9454,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 12, SHADOW_SIZE_S) FOOTPRINT(Shuppet) OVERWORLD( - gObjectEventPic_Shuppet, + sPicTable_Shuppet, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -9389,7 +9532,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Banette) OVERWORLD( - gObjectEventPic_Banette, + sPicTable_Banette, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9454,6 +9597,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Banette) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_BanetteMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_BanetteMega, + gShinyOverworldPalette_BanetteMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sBanetteLevelUpLearnset, .teachableLearnset = sBanetteTeachableLearnset, @@ -9527,7 +9681,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Duskull) OVERWORLD( - gObjectEventPic_Duskull, + sPicTable_Duskull, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -9604,7 +9758,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Dusclops) OVERWORLD( - gObjectEventPic_Dusclops, + sPicTable_Dusclops, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9693,7 +9847,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(6, 13, SHADOW_SIZE_M) FOOTPRINT(Dusknoir) OVERWORLD( - gObjectEventPic_Dusknoir, + sPicTable_Dusknoir, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9768,7 +9922,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-6, 13, SHADOW_SIZE_L) FOOTPRINT(Tropius) OVERWORLD( - gObjectEventPic_Tropius, + sPicTable_Tropius, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9844,7 +9998,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Chingling) OVERWORLD( - gObjectEventPic_Chingling, + sPicTable_Chingling, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9928,7 +10082,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-3, 16, SHADOW_SIZE_S) FOOTPRINT(Chimecho) OVERWORLD( - gObjectEventPic_Chimecho, + sPicTable_Chimecho, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -10005,7 +10159,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Absol) OVERWORLD( - gObjectEventPic_Absol, + sPicTable_Absol, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10071,6 +10225,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Absol) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_AbsolMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_AbsolMega, + gShinyOverworldPalette_AbsolMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sAbsolLevelUpLearnset, .teachableLearnset = sAbsolTeachableLearnset, @@ -10144,7 +10309,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Snorunt) OVERWORLD( - gObjectEventPic_Snorunt, + sPicTable_Snorunt, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10220,7 +10385,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(Glalie) OVERWORLD( - gObjectEventPic_Glalie, + sPicTable_Glalie, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10284,6 +10449,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(3, 18, SHADOW_SIZE_L) FOOTPRINT(Glalie) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_GlalieMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_GlalieMega, + gShinyOverworldPalette_GlalieMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sGlalieLevelUpLearnset, .teachableLearnset = sGlalieTeachableLearnset, @@ -10348,7 +10524,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Froslass) OVERWORLD( - gObjectEventPic_Froslass, + sPicTable_Froslass, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10427,7 +10603,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Spheal) OVERWORLD( - gObjectEventPic_Spheal, + sPicTable_Spheal, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10501,7 +10677,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 2, SHADOW_SIZE_L) FOOTPRINT(Sealeo) OVERWORLD( - gObjectEventPic_Sealeo, + sPicTable_Sealeo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10580,7 +10756,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Walrein) OVERWORLD( - gObjectEventPic_Walrein, + sPicTable_Walrein, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10652,7 +10828,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Clamperl) OVERWORLD( - gObjectEventPic_Clamperl, + sPicTable_Clamperl, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -10727,7 +10903,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(Huntail) OVERWORLD( - gObjectEventPic_Huntail, + sPicTable_Huntail, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -10796,7 +10972,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 5, SHADOW_SIZE_M) FOOTPRINT(Gorebyss) OVERWORLD( - gObjectEventPic_Gorebyss, + sPicTable_Gorebyss, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -10874,7 +11050,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Relicanth) OVERWORLD( - gObjectEventPic_Relicanth, + sPicTable_Relicanth, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -10883,7 +11059,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Relicanth ) OVERWORLD_FEMALE( - gObjectEventPic_RelicanthF, + sPicTable_RelicanthF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -10953,7 +11129,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Luvdisc) OVERWORLD( - gObjectEventPic_Luvdisc, + sPicTable_Luvdisc, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, @@ -11025,7 +11201,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(4, 3, SHADOW_SIZE_S) FOOTPRINT(Bagon) OVERWORLD( - gObjectEventPic_Bagon, + sPicTable_Bagon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11096,7 +11272,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Shelgon) OVERWORLD( - gObjectEventPic_Shelgon, + sPicTable_Shelgon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11173,7 +11349,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Salamence) OVERWORLD( - gObjectEventPic_Salamence, + sPicTable_Salamence, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11238,6 +11414,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Salamence) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_SalamenceMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_SalamenceMega, + gShinyOverworldPalette_SalamenceMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sSalamenceLevelUpLearnset, .teachableLearnset = sSalamenceTeachableLearnset, @@ -11306,7 +11493,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Beldum) OVERWORLD( - gObjectEventPic_Beldum, + sPicTable_Beldum, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -11377,7 +11564,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Metang) OVERWORLD( - gObjectEventPic_Metang, + sPicTable_Metang, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -11453,7 +11640,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, -2, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Metagross) OVERWORLD( - gObjectEventPic_Metagross, + sPicTable_Metagross, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11518,6 +11705,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(1, 15, SHADOW_SIZE_L) FOOTPRINT(Metagross) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_MetagrossMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_MetagrossMega, + gShinyOverworldPalette_MetagrossMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sMetagrossLevelUpLearnset, .teachableLearnset = sMetagrossTeachableLearnset, @@ -11591,7 +11789,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Regirock) OVERWORLD( - gObjectEventPic_Regirock, + sPicTable_Regirock, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11669,7 +11867,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Regice) OVERWORLD( - gObjectEventPic_Regice, + sPicTable_Regice, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11748,7 +11946,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Registeel) OVERWORLD( - gObjectEventPic_Registeel, + sPicTable_Registeel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11827,7 +12025,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(3, 15, SHADOW_SIZE_M) FOOTPRINT(Latias) OVERWORLD( - gObjectEventPic_Latias, + sPicTable_Latias, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -11894,6 +12092,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 2, SHADOW(-1, 19, SHADOW_SIZE_L) FOOTPRINT(Latias) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_LatiasMega, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_NONE, + sAnimTable_Following, + gOverworldPalette_LatiasMega, + gShinyOverworldPalette_LatiasMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isLegendary = TRUE, .isMegaEvolution = TRUE, .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, @@ -11969,7 +12178,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(1, 17, SHADOW_SIZE_M) FOOTPRINT(Latios) OVERWORLD( - gObjectEventPic_Latios, + sPicTable_Latios, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -12036,6 +12245,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 2, SHADOW(-1, 19, SHADOW_SIZE_L) FOOTPRINT(Latios) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_LatiosMega, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_NONE, + sAnimTable_Following, + gOverworldPalette_LatiosMega, + gShinyOverworldPalette_LatiosMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isLegendary = TRUE, .isMegaEvolution = TRUE, .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, @@ -12111,7 +12331,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kyogre) OVERWORLD( - gObjectEventPic_Kyogre, + sPicTable_Kyogre, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, @@ -12177,6 +12397,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kyogre) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_KyogrePrimal, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_NONE, + sAnimTable_Following, + gOverworldPalette_KyogrePrimal, + gShinyOverworldPalette_KyogrePrimal + ) + #endif //OW_BATTLE_ONLY_FORMS .isLegendary = TRUE, .isPrimalReversion = TRUE, .isFrontierBanned = TRUE, @@ -12252,7 +12483,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Groudon) OVERWORLD( - gObjectEventPic_Groudon, + sPicTable_Groudon, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12319,6 +12550,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Groudon) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_GroudonPrimal, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_GroudonPrimal, + gShinyOverworldPalette_GroudonPrimal + ) + #endif //OW_BATTLE_ONLY_FORMS .isLegendary = TRUE, .isPrimalReversion = TRUE, .isFrontierBanned = TRUE, @@ -12397,7 +12639,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 17, SHADOW_SIZE_L) FOOTPRINT(Rayquaza) OVERWORLD( - gObjectEventPic_Rayquaza, + sPicTable_Rayquaza, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, @@ -12466,6 +12708,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 1, SHADOW(0, 15, SHADOW_SIZE_L) FOOTPRINT(Rayquaza) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_RayquazaMega, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_NONE, + sAnimTable_Following, + gOverworldPalette_RayquazaMega, + gShinyOverworldPalette_RayquazaMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, @@ -12549,7 +12802,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Jirachi) OVERWORLD( - gObjectEventPic_Jirachi, + sPicTable_Jirachi, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -12628,7 +12881,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( - gObjectEventPic_DeoxysNormal, + sPicTable_DeoxysNormal, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12697,7 +12950,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .iconPalIndex = 0, SHADOW(0, 14, SHADOW_SIZE_M) OVERWORLD( - gObjectEventPic_DeoxysAttack, + sPicTable_DeoxysAttack, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12767,7 +13020,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( - gObjectEventPic_DeoxysDefense, + sPicTable_DeoxysDefense, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12837,7 +13090,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( - gObjectEventPic_DeoxysSpeed, + sPicTable_DeoxysSpeed, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index 44b221040c..a6d6302012 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -58,7 +58,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Turtwig) OVERWORLD( - gObjectEventPic_Turtwig, + sPicTable_Turtwig, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -127,7 +127,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 2, SHADOW_SIZE_L) FOOTPRINT(Grotle) OVERWORLD( - gObjectEventPic_Grotle, + sPicTable_Grotle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -201,7 +201,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Torterra) OVERWORLD( - gObjectEventPic_Torterra, + sPicTable_Torterra, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -273,7 +273,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(4, 3, SHADOW_SIZE_S) FOOTPRINT(Chimchar) OVERWORLD( - gObjectEventPic_Chimchar, + sPicTable_Chimchar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -345,7 +345,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-7, 6, SHADOW_SIZE_S) FOOTPRINT(Monferno) OVERWORLD( - gObjectEventPic_Monferno, + sPicTable_Monferno, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -420,7 +420,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 9, SHADOW_SIZE_L) FOOTPRINT(Infernape) OVERWORLD( - gObjectEventPic_Infernape, + sPicTable_Infernape, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -492,7 +492,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Piplup) OVERWORLD( - gObjectEventPic_Piplup, + sPicTable_Piplup, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -570,7 +570,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Prinplup) OVERWORLD( - gObjectEventPic_Prinplup, + sPicTable_Prinplup, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -647,7 +647,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(2, 12, SHADOW_SIZE_M) FOOTPRINT(Empoleon) OVERWORLD( - gObjectEventPic_Empoleon, + sPicTable_Empoleon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -727,7 +727,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Starly) OVERWORLD( - gObjectEventPic_Starly, + sPicTable_Starly, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -736,7 +736,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Starly ) OVERWORLD_FEMALE( - gObjectEventPic_StarlyF, + sPicTable_StarlyF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -807,7 +807,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Staravia) OVERWORLD( - gObjectEventPic_Staravia, + sPicTable_Staravia, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -816,7 +816,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Staravia ) OVERWORLD_FEMALE( - gObjectEventPic_StaraviaF, + sPicTable_StaraviaF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -892,7 +892,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 10, SHADOW_SIZE_M) FOOTPRINT(Staraptor) OVERWORLD( - gObjectEventPic_Staraptor, + sPicTable_Staraptor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -901,7 +901,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Staraptor ) OVERWORLD_FEMALE( - gObjectEventPic_StaraptorF, + sPicTable_StaraptorF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -977,7 +977,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 1, SHADOW_SIZE_M) FOOTPRINT(Bidoof) OVERWORLD( - gObjectEventPic_Bidoof, + sPicTable_Bidoof, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -986,7 +986,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Bidoof ) OVERWORLD_FEMALE( - gObjectEventPic_BidoofF, + sPicTable_BidoofF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1058,7 +1058,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Bibarel) OVERWORLD( - gObjectEventPic_Bibarel, + sPicTable_Bibarel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1067,7 +1067,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Bibarel ) OVERWORLD_FEMALE( - gObjectEventPic_BibarelF, + sPicTable_BibarelF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1153,7 +1153,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-5, 2, SHADOW_SIZE_S) FOOTPRINT(Kricketot) OVERWORLD( - gObjectEventPic_Kricketot, + sPicTable_Kricketot, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1162,7 +1162,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Kricketot ) OVERWORLD_FEMALE( - gObjectEventPic_KricketotF, + sPicTable_KricketotF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1239,7 +1239,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-3, 6, SHADOW_SIZE_S) FOOTPRINT(Kricketune) OVERWORLD( - gObjectEventPic_Kricketune, + sPicTable_Kricketune, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1248,7 +1248,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Kricketune ) OVERWORLD_FEMALE( - gObjectEventPic_KricketuneF, + sPicTable_KricketuneF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1320,7 +1320,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Shinx) OVERWORLD( - gObjectEventPic_Shinx, + sPicTable_Shinx, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1329,7 +1329,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Shinx ) OVERWORLD_FEMALE( - gObjectEventPic_ShinxF, + sPicTable_ShinxF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1400,7 +1400,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-4, 2, SHADOW_SIZE_M) FOOTPRINT(Luxio) OVERWORLD( - gObjectEventPic_Luxio, + sPicTable_Luxio, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1409,7 +1409,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Luxio ) OVERWORLD_FEMALE( - gObjectEventPic_LuxioF, + sPicTable_LuxioF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1488,7 +1488,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 10, SHADOW_SIZE_L) FOOTPRINT(Luxray) OVERWORLD( - gObjectEventPic_Luxray, + sPicTable_Luxray, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1497,7 +1497,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Luxray ) OVERWORLD_FEMALE( - gObjectEventPic_LuxrayF, + sPicTable_LuxrayF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1562,7 +1562,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(4, 4, SHADOW_SIZE_S) FOOTPRINT(Cranidos) OVERWORLD( - gObjectEventPic_Cranidos, + sPicTable_Cranidos, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1632,7 +1632,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(7, 11, SHADOW_SIZE_L) FOOTPRINT(Rampardos) OVERWORLD( - gObjectEventPic_Rampardos, + sPicTable_Rampardos, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1700,7 +1700,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(3, -1, SHADOW_SIZE_S) FOOTPRINT(Shieldon) OVERWORLD( - gObjectEventPic_Shieldon, + sPicTable_Shieldon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1768,7 +1768,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Bastiodon) OVERWORLD( - gObjectEventPic_Bastiodon, + sPicTable_Bastiodon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1833,7 +1833,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( - gObjectEventPic_BurmyPlant, + sPicTable_BurmyPlant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1901,7 +1901,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( - gObjectEventPic_BurmySandy, + sPicTable_BurmySandy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1969,7 +1969,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( - gObjectEventPic_BurmyTrash, + sPicTable_BurmyTrash, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2038,7 +2038,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( - gObjectEventPic_WormadamPlant, + sPicTable_WormadamPlant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2103,7 +2103,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( - gObjectEventPic_WormadamSandy, + sPicTable_WormadamSandy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2169,7 +2169,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( - gObjectEventPic_WormadamTrash, + sPicTable_WormadamTrash, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2230,8 +2230,8 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconPalIndex = 0, \ SHADOW(-1, 9, SHADOW_SIZE_S) \ FOOTPRINT(Mothim) \ - OVERWORLD( \ - gObjectEventPic_Mothim, \ + OVERWORLD( \ + sPicTable_Mothim, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ @@ -2314,7 +2314,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-4, 10, SHADOW_SIZE_S) FOOTPRINT(Combee) OVERWORLD( - gObjectEventPic_Combee, + sPicTable_Combee, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2323,7 +2323,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Combee ) OVERWORLD_FEMALE( - gObjectEventPic_CombeeF, + sPicTable_CombeeF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2398,7 +2398,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Vespiquen) OVERWORLD( - gObjectEventPic_Vespiquen, + sPicTable_Vespiquen, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2476,7 +2476,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Pachirisu) OVERWORLD( - gObjectEventPic_Pachirisu, + sPicTable_Pachirisu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2485,7 +2485,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Pachirisu ) OVERWORLD_FEMALE( - gObjectEventPic_PachirisuF, + sPicTable_PachirisuF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2556,7 +2556,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Buizel) OVERWORLD( - gObjectEventPic_Buizel, + sPicTable_Buizel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2565,7 +2565,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Buizel ) OVERWORLD_FEMALE( - gObjectEventPic_BuizelF, + sPicTable_BuizelF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2638,7 +2638,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-4, 10, SHADOW_SIZE_M) FOOTPRINT(Floatzel) OVERWORLD( - gObjectEventPic_Floatzel, + sPicTable_Floatzel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2647,7 +2647,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Floatzel ) OVERWORLD_FEMALE( - gObjectEventPic_FloatzelF, + sPicTable_FloatzelF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2720,7 +2720,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-4, -2, SHADOW_SIZE_S) FOOTPRINT(Cherubi) OVERWORLD( - gObjectEventPic_Cherubi, + sPicTable_Cherubi, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2791,7 +2791,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Cherrim) OVERWORLD( - gObjectEventPic_CherrimOvercast, + sPicTable_CherrimOvercast, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2920,7 +2920,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Shellos) OVERWORLD( - gObjectEventPic_ShellosWestSea, + sPicTable_ShellosWestSea, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2985,7 +2985,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(2, -1, SHADOW_SIZE_S) FOOTPRINT(Shellos) OVERWORLD( - gObjectEventPic_ShellosEast, + sPicTable_ShellosEast, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3050,7 +3050,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Gastrodon) OVERWORLD( - gObjectEventPic_GastrodonWestSea, + sPicTable_GastrodonWestSea, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3113,7 +3113,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Gastrodon) OVERWORLD( - gObjectEventPic_GastrodonEast, + sPicTable_GastrodonEast, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3184,7 +3184,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 9, SHADOW_SIZE_S) FOOTPRINT(Drifloon) OVERWORLD( - gObjectEventPic_Drifloon, + sPicTable_Drifloon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3256,7 +3256,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Drifblim) OVERWORLD( - gObjectEventPic_Drifblim, + sPicTable_Drifblim, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3323,7 +3323,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(3, 5, SHADOW_SIZE_S) FOOTPRINT(Buneary) OVERWORLD( - gObjectEventPic_Buneary, + sPicTable_Buneary, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3391,7 +3391,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Lopunny) OVERWORLD( - gObjectEventPic_Lopunny, + sPicTable_Lopunny, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3455,6 +3455,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconPalIndex = 2, SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Lopunny) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_LopunnyMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_LopunnyMega, + gShinyOverworldPalette_LopunnyMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sLopunnyLevelUpLearnset, .teachableLearnset = sLopunnyTeachableLearnset, @@ -3519,7 +3530,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-3, 6, SHADOW_SIZE_S) FOOTPRINT(Glameow) OVERWORLD( - gObjectEventPic_Glameow, + sPicTable_Glameow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3591,7 +3602,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Purugly) OVERWORLD( - gObjectEventPic_Purugly, + sPicTable_Purugly, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3661,7 +3672,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 0, SHADOW_SIZE_M) FOOTPRINT(Stunky) OVERWORLD( - gObjectEventPic_Stunky, + sPicTable_Stunky, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3729,7 +3740,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-3, 6, SHADOW_SIZE_L) FOOTPRINT(Skuntank) OVERWORLD( - gObjectEventPic_Skuntank, + sPicTable_Skuntank, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3806,7 +3817,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Bronzor) OVERWORLD( - gObjectEventPic_Bronzor, + sPicTable_Bronzor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3878,7 +3889,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(5, 12, SHADOW_SIZE_M) FOOTPRINT(Bronzong) OVERWORLD( - gObjectEventPic_Bronzong, + sPicTable_Bronzong, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3960,7 +3971,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Chatot) OVERWORLD( - gObjectEventPic_Chatot, + sPicTable_Chatot, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4029,7 +4040,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Spiritomb) OVERWORLD( - gObjectEventPic_Spiritomb, + sPicTable_Spiritomb, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4104,7 +4115,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Gible) OVERWORLD( - gObjectEventPic_Gible, + sPicTable_Gible, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4113,7 +4124,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Gible ) OVERWORLD_FEMALE( - gObjectEventPic_GibleF, + sPicTable_GibleF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4184,7 +4195,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(3, 8, SHADOW_SIZE_M) FOOTPRINT(Gabite) OVERWORLD( - gObjectEventPic_Gabite, + sPicTable_Gabite, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4193,7 +4204,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Gabite ) OVERWORLD_FEMALE( - gObjectEventPic_GabiteF, + sPicTable_GabiteF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4271,7 +4282,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Garchomp) OVERWORLD( - gObjectEventPic_Garchomp, + sPicTable_Garchomp, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4280,7 +4291,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Garchomp ) OVERWORLD_FEMALE( - gObjectEventPic_GarchompF, + sPicTable_GarchompF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4342,6 +4353,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconPalIndex = 0, SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Garchomp) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_GarchompMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_GarchompMega, + gShinyOverworldPalette_GarchompMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sGarchompLevelUpLearnset, .teachableLearnset = sGarchompTeachableLearnset, @@ -4407,7 +4429,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Riolu) OVERWORLD( - gObjectEventPic_Riolu, + sPicTable_Riolu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4475,7 +4497,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Lucario) OVERWORLD( - gObjectEventPic_Lucario, + sPicTable_Lucario, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4540,6 +4562,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconPalIndex = 2, SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Lucario) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_LucarioMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_LucarioMega, + gShinyOverworldPalette_LucarioMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sLucarioLevelUpLearnset, .teachableLearnset = sLucarioTeachableLearnset, @@ -4612,7 +4645,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(2, -1, SHADOW_SIZE_L) FOOTPRINT(Hippopotas) OVERWORLD( - gObjectEventPic_Hippopotas, + sPicTable_Hippopotas, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4621,7 +4654,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Hippopotas ) OVERWORLD_FEMALE( - gObjectEventPic_HippopotasF, + sPicTable_HippopotasF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4694,7 +4727,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = NO_SHADOW FOOTPRINT(Hippowdon) OVERWORLD( - gObjectEventPic_Hippowdon, + sPicTable_Hippowdon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4780,7 +4813,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Skorupi) OVERWORLD( - gObjectEventPic_Skorupi, + sPicTable_Skorupi, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4855,7 +4888,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-3, 6, SHADOW_SIZE_L) FOOTPRINT(Drapion) OVERWORLD( - gObjectEventPic_Drapion, + sPicTable_Drapion, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4931,7 +4964,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Croagunk) OVERWORLD( - gObjectEventPic_Croagunk, + sPicTable_Croagunk, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4940,7 +4973,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Croagunk ) OVERWORLD_FEMALE( - gObjectEventPic_CroagunkF, + sPicTable_CroagunkF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5015,7 +5048,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Toxicroak) OVERWORLD( - gObjectEventPic_Toxicroak, + sPicTable_Toxicroak, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5024,7 +5057,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Toxicroak ) OVERWORLD_FEMALE( - gObjectEventPic_ToxicroakF, + sPicTable_ToxicroakF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5100,7 +5133,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Carnivine) OVERWORLD( - gObjectEventPic_Carnivine, + sPicTable_Carnivine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5180,7 +5213,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Finneon) OVERWORLD( - gObjectEventPic_Finneon, + sPicTable_Finneon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5189,7 +5222,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Finneon ) OVERWORLD_FEMALE( - gObjectEventPic_FinneonF, + sPicTable_FinneonF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5264,7 +5297,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Lumineon) OVERWORLD( - gObjectEventPic_Lumineon, + sPicTable_Lumineon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5273,7 +5306,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Lumineon ) OVERWORLD_FEMALE( - gObjectEventPic_LumineonF, + sPicTable_LumineonF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5346,7 +5379,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Snover) OVERWORLD( - gObjectEventPic_Snover, + sPicTable_Snover, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5355,7 +5388,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Snover ) OVERWORLD_FEMALE( - gObjectEventPic_SnoverF, + sPicTable_SnoverF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5427,7 +5460,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Abomasnow) OVERWORLD( - gObjectEventPic_Abomasnow, + sPicTable_Abomasnow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5436,7 +5469,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Abomasnow ) OVERWORLD_FEMALE( - gObjectEventPic_AbomasnowF, + sPicTable_AbomasnowF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5500,6 +5533,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconPalIndex = 1, SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Abomasnow) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_AbomasnowMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_AbomasnowMega, + gShinyOverworldPalette_AbomasnowMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sAbomasnowLevelUpLearnset, .teachableLearnset = sAbomasnowTeachableLearnset, @@ -5568,7 +5612,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Rotom) OVERWORLD( - gObjectEventPic_Rotom, + sPicTable_Rotom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5646,7 +5690,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( - gObjectEventPic_RotomHeat, + sPicTable_RotomHeat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5717,7 +5761,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( - gObjectEventPic_RotomWash, + sPicTable_RotomWash, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5786,7 +5830,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( - gObjectEventPic_RotomFrost, + sPicTable_RotomFrost, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5880,7 +5924,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(4, 9, SHADOW_SIZE_S) FOOTPRINT(Rotom) OVERWORLD( - gObjectEventPic_RotomFan, + sPicTable_RotomFan, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5952,7 +5996,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( - gObjectEventPic_RotomMow, + sPicTable_RotomMow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6030,7 +6074,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(2, 11, SHADOW_SIZE_S) FOOTPRINT(Uxie) OVERWORLD( - gObjectEventPic_Uxie, + sPicTable_Uxie, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6114,7 +6158,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Mesprit) OVERWORLD( - gObjectEventPic_Mesprit, + sPicTable_Mesprit, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6192,7 +6236,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 17, SHADOW_SIZE_S) FOOTPRINT(Azelf) OVERWORLD( - gObjectEventPic_Azelf, + sPicTable_Azelf, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6269,7 +6313,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(4, 12, SHADOW_SIZE_L) FOOTPRINT(Dialga) OVERWORLD( - gObjectEventPic_Dialga, + sPicTable_Dialga, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6336,7 +6380,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Dialga) OVERWORLD( - gObjectEventPic_DialgaOrigin, + sPicTable_DialgaOrigin, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, @@ -6416,7 +6460,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 10, SHADOW_SIZE_L) FOOTPRINT(Palkia) OVERWORLD( - gObjectEventPic_Palkia, + sPicTable_Palkia, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6483,7 +6527,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-3, 14, SHADOW_SIZE_L) FOOTPRINT(Palkia) OVERWORLD( - gObjectEventPic_PalkiaOrigin, + sPicTable_PalkiaOrigin, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, @@ -6562,7 +6606,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(2, 2, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Heatran) OVERWORLD( - gObjectEventPic_Heatran, + sPicTable_Heatran, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6637,7 +6681,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Regigigas) OVERWORLD( - gObjectEventPic_Regigigas, + sPicTable_Regigigas, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6715,7 +6759,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(3, 11, SHADOW_SIZE_L) FOOTPRINT(GiratinaAltered) OVERWORLD( - gObjectEventPic_GiratinaAltered, + sPicTable_GiratinaAltered, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6789,7 +6833,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 18, SHADOW_SIZE_L) FOOTPRINT(GiratinaOrigin) OVERWORLD( - gObjectEventPic_GiratinaOrigin, + sPicTable_GiratinaOrigin, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6872,7 +6916,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Cresselia) OVERWORLD( - gObjectEventPic_Cresselia, + sPicTable_Cresselia, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6949,7 +6993,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Phione) OVERWORLD( - gObjectEventPic_Phione, + sPicTable_Phione, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7025,7 +7069,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-5, 8, SHADOW_SIZE_S) FOOTPRINT(Manaphy) OVERWORLD( - gObjectEventPic_Manaphy, + sPicTable_Manaphy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7104,7 +7148,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(4, 12, SHADOW_SIZE_M) FOOTPRINT(Darkrai) OVERWORLD( - gObjectEventPic_Darkrai, + sPicTable_Darkrai, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7185,7 +7229,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(1, -3, SHADOW_SIZE_S) FOOTPRINT(Shaymin) OVERWORLD( - gObjectEventPic_ShayminLand, + sPicTable_ShayminLand, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7263,7 +7307,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Shaymin) OVERWORLD( - gObjectEventPic_ShayminSky, + sPicTable_ShayminSky, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7344,7 +7388,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SHADOW(-1, 15, SHADOW_SIZE_XL_BATTLE_ONLY) \ FOOTPRINT(Arceus) \ OVERWORLD( \ - gObjectEventPic_Arceus ##typeName, \ + sPicTable_Arceus ##typeName, \ SIZE_64x64, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index e66657c3ef..d55a7bf1d0 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -58,7 +58,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Victini) OVERWORLD( - gObjectEventPic_Victini, + sPicTable_Victini, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -129,7 +129,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Snivy) OVERWORLD( - gObjectEventPic_Snivy, + sPicTable_Snivy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -201,7 +201,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Servine) OVERWORLD( - gObjectEventPic_Servine, + sPicTable_Servine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -270,7 +270,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Serperior) OVERWORLD( - gObjectEventPic_Serperior, + sPicTable_Serperior, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -340,7 +340,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Tepig) OVERWORLD( - gObjectEventPic_Tepig, + sPicTable_Tepig, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -408,7 +408,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Pignite) OVERWORLD( - gObjectEventPic_Pignite, + sPicTable_Pignite, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -495,7 +495,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 12, SHADOW_SIZE_L) FOOTPRINT(Emboar) OVERWORLD( - gObjectEventPic_Emboar, + sPicTable_Emboar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -567,7 +567,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Oshawott) OVERWORLD( - gObjectEventPic_Oshawott, + sPicTable_Oshawott, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -637,7 +637,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Dewott) OVERWORLD( - gObjectEventPic_Dewott, + sPicTable_Dewott, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -704,7 +704,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Samurott) OVERWORLD( - gObjectEventPic_Samurott, + sPicTable_Samurott, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -768,7 +768,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Samurott) OVERWORLD( - gObjectEventPic_SamurottHisui, + sPicTable_SamurottHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -838,7 +838,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Patrat) OVERWORLD( - gObjectEventPic_Patrat, + sPicTable_Patrat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -910,7 +910,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-4, 11, SHADOW_SIZE_S) FOOTPRINT(Watchog) OVERWORLD( - gObjectEventPic_Watchog, + sPicTable_Watchog, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -982,7 +982,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Lillipup) OVERWORLD( - gObjectEventPic_Lillipup, + sPicTable_Lillipup, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1053,7 +1053,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(3, 5, SHADOW_SIZE_M) FOOTPRINT(Herdier) OVERWORLD( - gObjectEventPic_Herdier, + sPicTable_Herdier, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1128,7 +1128,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-4, 9, SHADOW_SIZE_L) FOOTPRINT(Stoutland) OVERWORLD( - gObjectEventPic_Stoutland, + sPicTable_Stoutland, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1196,7 +1196,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Purrloin) OVERWORLD( - gObjectEventPic_Purrloin, + sPicTable_Purrloin, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1264,7 +1264,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Liepard) OVERWORLD( - gObjectEventPic_Liepard, + sPicTable_Liepard, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1334,7 +1334,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Pansage) OVERWORLD( - gObjectEventPic_Pansage, + sPicTable_Pansage, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1402,7 +1402,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Simisage) OVERWORLD( - gObjectEventPic_Simisage, + sPicTable_Simisage, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1470,7 +1470,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 3, SHADOW_SIZE_S) FOOTPRINT(Pansear) OVERWORLD( - gObjectEventPic_Pansear, + sPicTable_Pansear, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1541,7 +1541,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Simisear) OVERWORLD( - gObjectEventPic_Simisear, + sPicTable_Simisear, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1609,7 +1609,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Panpour) OVERWORLD( - gObjectEventPic_Panpour, + sPicTable_Panpour, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1676,7 +1676,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Simipour) OVERWORLD( - gObjectEventPic_Simipour, + sPicTable_Simipour, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1750,7 +1750,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Munna) OVERWORLD( - gObjectEventPic_Munna, + sPicTable_Munna, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1821,7 +1821,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(6, 10, SHADOW_SIZE_M) FOOTPRINT(Musharna) OVERWORLD( - gObjectEventPic_Musharna, + sPicTable_Musharna, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1889,7 +1889,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Pidove) OVERWORLD( - gObjectEventPic_Pidove, + sPicTable_Pidove, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1957,7 +1957,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Tranquill) OVERWORLD( - gObjectEventPic_Tranquill, + sPicTable_Tranquill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2040,7 +2040,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Unfezant) OVERWORLD( - gObjectEventPic_Unfezant, + sPicTable_Unfezant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2049,7 +2049,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Unfezant ) OVERWORLD_FEMALE( - gObjectEventPic_UnfezantF, + sPicTable_UnfezantF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2120,7 +2120,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(3, 9, SHADOW_SIZE_M) FOOTPRINT(Blitzle) OVERWORLD( - gObjectEventPic_Blitzle, + sPicTable_Blitzle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2188,7 +2188,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 13, SHADOW_SIZE_M) FOOTPRINT(Zebstrika) OVERWORLD( - gObjectEventPic_Zebstrika, + sPicTable_Zebstrika, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2262,7 +2262,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Roggenrola) OVERWORLD( - gObjectEventPic_Roggenrola, + sPicTable_Roggenrola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2340,7 +2340,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 3, SHADOW_SIZE_L) FOOTPRINT(Boldore) OVERWORLD( - gObjectEventPic_Boldore, + sPicTable_Boldore, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2420,7 +2420,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gigalith) OVERWORLD( - gObjectEventPic_Gigalith, + sPicTable_Gigalith, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2505,7 +2505,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 14, SHADOW_SIZE_S) FOOTPRINT(Woobat) OVERWORLD( - gObjectEventPic_Woobat, + sPicTable_Woobat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2577,7 +2577,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 17, SHADOW_SIZE_M) FOOTPRINT(Swoobat) OVERWORLD( - gObjectEventPic_Swoobat, + sPicTable_Swoobat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2648,7 +2648,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Drilbur) OVERWORLD( - gObjectEventPic_Drilbur, + sPicTable_Drilbur, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2718,7 +2718,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Excadrill) OVERWORLD( - gObjectEventPic_Excadrill, + sPicTable_Excadrill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2788,7 +2788,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Audino) OVERWORLD( - gObjectEventPic_Audino, + sPicTable_Audino, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2855,6 +2855,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconPalIndex = 1, SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Audino) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_AudinoMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_AudinoMega, + gShinyOverworldPalette_AudinoMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMegaEvolution = TRUE, .levelUpLearnset = sAudinoLevelUpLearnset, .teachableLearnset = sAudinoTeachableLearnset, @@ -2920,7 +2931,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-4, 2, SHADOW_SIZE_S) FOOTPRINT(Timburr) OVERWORLD( - gObjectEventPic_Timburr, + sPicTable_Timburr, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2992,7 +3003,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Gurdurr) OVERWORLD( - gObjectEventPic_Gurdurr, + sPicTable_Gurdurr, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3059,7 +3070,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Conkeldurr) OVERWORLD( - gObjectEventPic_Conkeldurr, + sPicTable_Conkeldurr, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3126,7 +3137,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Tympole) OVERWORLD( - gObjectEventPic_Tympole, + sPicTable_Tympole, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3196,7 +3207,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Palpitoad) OVERWORLD( - gObjectEventPic_Palpitoad, + sPicTable_Palpitoad, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3273,7 +3284,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(4, 10, SHADOW_SIZE_L) FOOTPRINT(Seismitoad) OVERWORLD( - gObjectEventPic_Seismitoad, + sPicTable_Seismitoad, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3343,7 +3354,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(3, 4, SHADOW_SIZE_M) FOOTPRINT(Throh) OVERWORLD( - gObjectEventPic_Throh, + sPicTable_Throh, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3412,7 +3423,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(Sawk) OVERWORLD( - gObjectEventPic_Sawk, + sPicTable_Sawk, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3483,7 +3494,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Sewaddle) OVERWORLD( - gObjectEventPic_Sewaddle, + sPicTable_Sewaddle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3553,7 +3564,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 1, SHADOW_SIZE_L) FOOTPRINT(Swadloon) OVERWORLD( - gObjectEventPic_Swadloon, + sPicTable_Swadloon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3627,7 +3638,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Leavanny) OVERWORLD( - gObjectEventPic_Leavanny, + sPicTable_Leavanny, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3704,7 +3715,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, -3, SHADOW_SIZE_M) FOOTPRINT(Venipede) OVERWORLD( - gObjectEventPic_Venipede, + sPicTable_Venipede, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3780,7 +3791,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Whirlipede) OVERWORLD( - gObjectEventPic_Whirlipede, + sPicTable_Whirlipede, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3857,7 +3868,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Scolipede) OVERWORLD( - gObjectEventPic_Scolipede, + sPicTable_Scolipede, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3938,7 +3949,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, -5, SHADOW_SIZE_M) FOOTPRINT(Cottonee) OVERWORLD( - gObjectEventPic_Cottonee, + sPicTable_Cottonee, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4007,7 +4018,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Whimsicott) OVERWORLD( - gObjectEventPic_Whimsicott, + sPicTable_Whimsicott, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4079,7 +4090,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Petilil) OVERWORLD( - gObjectEventPic_Petilil, + sPicTable_Petilil, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4150,7 +4161,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 13, SHADOW_SIZE_M) FOOTPRINT(Lilligant) OVERWORLD( - gObjectEventPic_Lilligant, + sPicTable_Lilligant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4217,7 +4228,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Lilligant) OVERWORLD( - gObjectEventPic_LilligantHisui, + sPicTable_LilligantHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4286,7 +4297,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( - gObjectEventPic_BasculinRedStriped, + sPicTable_BasculinRedStriped, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4352,7 +4363,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( - gObjectEventPic_BasculinBlueStriped, + sPicTable_BasculinBlueStriped, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4419,7 +4430,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( - gObjectEventPic_BasculinWhiteStriped, + sPicTable_BasculinWhiteStriped, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4485,7 +4496,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Basculegion) OVERWORLD( - gObjectEventPic_BasculegionM, + sPicTable_BasculegionM, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4548,7 +4559,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Basculegion) OVERWORLD( - gObjectEventPic_BasculegionF, + sPicTable_BasculegionF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4619,7 +4630,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(4, -5, SHADOW_SIZE_M) FOOTPRINT(Sandile) OVERWORLD( - gObjectEventPic_Sandile, + sPicTable_Sandile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4687,7 +4698,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Krokorok) OVERWORLD( - gObjectEventPic_Krokorok, + sPicTable_Krokorok, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4763,7 +4774,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Krookodile) OVERWORLD( - gObjectEventPic_Krookodile, + sPicTable_Krookodile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4831,7 +4842,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Darumaka) OVERWORLD( - gObjectEventPic_Darumaka, + sPicTable_Darumaka, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4901,7 +4912,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(3, 5, SHADOW_SIZE_L) FOOTPRINT(Darmanitan) OVERWORLD( - gObjectEventPic_DarmanitanStandard, + sPicTable_DarmanitanStandard, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5023,7 +5034,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-3, -1, SHADOW_SIZE_S) FOOTPRINT(Darumaka) OVERWORLD( - gObjectEventPic_DarumakaGalar, + sPicTable_DarumakaGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5089,7 +5100,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Darmanitan) OVERWORLD( - gObjectEventPic_DarmanitanGalarStandard, + sPicTable_DarmanitanGalarStandard, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5222,7 +5233,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Maractus) OVERWORLD( - gObjectEventPic_Maractus, + sPicTable_Maractus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5298,7 +5309,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Dwebble) OVERWORLD( - gObjectEventPic_Dwebble, + sPicTable_Dwebble, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5370,7 +5381,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Crustle) OVERWORLD( - gObjectEventPic_Crustle, + sPicTable_Crustle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5439,7 +5450,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-4, 2, SHADOW_SIZE_S) FOOTPRINT(Scraggy) OVERWORLD( - gObjectEventPic_Scraggy, + sPicTable_Scraggy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5509,7 +5520,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 9, SHADOW_SIZE_M) FOOTPRINT(Scrafty) OVERWORLD( - gObjectEventPic_Scrafty, + sPicTable_Scrafty, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5583,7 +5594,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(3, 18, SHADOW_SIZE_S) FOOTPRINT(Sigilyph) OVERWORLD( - gObjectEventPic_Sigilyph, + sPicTable_Sigilyph, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5656,7 +5667,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Yamask) OVERWORLD( - gObjectEventPic_Yamask, + sPicTable_Yamask, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5726,7 +5737,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(6, 12, SHADOW_SIZE_M) FOOTPRINT(Cofagrigus) OVERWORLD( - gObjectEventPic_Cofagrigus, + sPicTable_Cofagrigus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5790,7 +5801,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Yamask) OVERWORLD( - gObjectEventPic_YamaskGalar, + sPicTable_YamaskGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5856,7 +5867,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(14, 14, SHADOW_SIZE_M) FOOTPRINT(Runerigus) OVERWORLD( - gObjectEventPic_Runerigus, + sPicTable_Runerigus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5926,7 +5937,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, -3, SHADOW_SIZE_M) FOOTPRINT(Tirtouga) OVERWORLD( - gObjectEventPic_Tirtouga, + sPicTable_Tirtouga, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6001,7 +6012,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Carracosta) OVERWORLD( - gObjectEventPic_Carracosta, + sPicTable_Carracosta, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6069,7 +6080,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-3, -2, SHADOW_SIZE_S) FOOTPRINT(Archen) OVERWORLD( - gObjectEventPic_Archen, + sPicTable_Archen, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6143,7 +6154,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 18, SHADOW_SIZE_M) FOOTPRINT(Archeops) OVERWORLD( - gObjectEventPic_Archeops, + sPicTable_Archeops, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6212,7 +6223,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Trubbish) OVERWORLD( - gObjectEventPic_Trubbish, + sPicTable_Trubbish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6283,7 +6294,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Garbodor) OVERWORLD( - gObjectEventPic_Garbodor, + sPicTable_Garbodor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6416,7 +6427,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Zorua) OVERWORLD( - gObjectEventPic_Zorua, + sPicTable_Zorua, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6487,7 +6498,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Zoroark) OVERWORLD( - gObjectEventPic_Zoroark, + sPicTable_Zoroark, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6551,7 +6562,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(2, 12, SHADOW_SIZE_S) FOOTPRINT(Zorua) OVERWORLD( - gObjectEventPic_ZoruaHisui, + sPicTable_ZoruaHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6616,7 +6627,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(11, 13, SHADOW_SIZE_L) FOOTPRINT(Zoroark) OVERWORLD( - gObjectEventPic_ZoroarkHisui, + sPicTable_ZoroarkHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6687,7 +6698,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-3, 3, SHADOW_SIZE_S) FOOTPRINT(Minccino) OVERWORLD( - gObjectEventPic_Minccino, + sPicTable_Minccino, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6758,7 +6769,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Cinccino) OVERWORLD( - gObjectEventPic_Cinccino, + sPicTable_Cinccino, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6831,7 +6842,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Gothita) OVERWORLD( - gObjectEventPic_Gothita, + sPicTable_Gothita, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6905,7 +6916,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Gothorita) OVERWORLD( - gObjectEventPic_Gothorita, + sPicTable_Gothorita, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6977,7 +6988,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Gothitelle) OVERWORLD( - gObjectEventPic_Gothitelle, + sPicTable_Gothitelle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7048,7 +7059,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Solosis) OVERWORLD( - gObjectEventPic_Solosis, + sPicTable_Solosis, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7118,7 +7129,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(Duosion) OVERWORLD( - gObjectEventPic_Duosion, + sPicTable_Duosion, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7188,7 +7199,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 8, SHADOW_SIZE_M) FOOTPRINT(Reuniclus) OVERWORLD( - gObjectEventPic_Reuniclus, + sPicTable_Reuniclus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7260,7 +7271,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Ducklett) OVERWORLD( - gObjectEventPic_Ducklett, + sPicTable_Ducklett, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7327,7 +7338,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Swanna) OVERWORLD( - gObjectEventPic_Swanna, + sPicTable_Swanna, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7402,7 +7413,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Vanillite) OVERWORLD( - gObjectEventPic_Vanillite, + sPicTable_Vanillite, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7475,7 +7486,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-3, 9, SHADOW_SIZE_S) FOOTPRINT(Vanillish) OVERWORLD( - gObjectEventPic_Vanillish, + sPicTable_Vanillish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7547,7 +7558,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Vanilluxe) OVERWORLD( - gObjectEventPic_Vanilluxe, + sPicTable_Vanilluxe, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7611,7 +7622,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( - gObjectEventPic_DeerlingSpring, + sPicTable_DeerlingSpring, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7676,7 +7687,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( - gObjectEventPic_DeerlingSummer, + sPicTable_DeerlingSummer, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7741,7 +7752,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( - gObjectEventPic_DeerlingAutumn, + sPicTable_DeerlingAutumn, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7806,7 +7817,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( - gObjectEventPic_DeerlingWinter, + sPicTable_DeerlingWinter, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7871,7 +7882,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( - gObjectEventPic_SawsbuckSpring, + sPicTable_SawsbuckSpring, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7934,7 +7945,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( - gObjectEventPic_SawsbuckSummer, + sPicTable_SawsbuckSummer, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7997,7 +8008,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( - gObjectEventPic_SawsbuckAutumn, + sPicTable_SawsbuckAutumn, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8060,7 +8071,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( - gObjectEventPic_SawsbuckWinter, + sPicTable_SawsbuckWinter, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8132,7 +8143,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Emolga) OVERWORLD( - gObjectEventPic_Emolga, + sPicTable_Emolga, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8200,7 +8211,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Karrablast) OVERWORLD( - gObjectEventPic_Karrablast, + sPicTable_Karrablast, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8268,7 +8279,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Escavalier) OVERWORLD( - gObjectEventPic_Escavalier, + sPicTable_Escavalier, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8340,7 +8351,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Foongus) OVERWORLD( - gObjectEventPic_Foongus, + sPicTable_Foongus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8414,7 +8425,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Amoonguss) OVERWORLD( - gObjectEventPic_Amoonguss, + sPicTable_Amoonguss, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8493,7 +8504,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Frillish) OVERWORLD( - gObjectEventPic_Frillish, + sPicTable_Frillish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8502,7 +8513,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Frillish ) OVERWORLD_FEMALE( - gObjectEventPic_FrillishF, + sPicTable_FrillishF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8582,7 +8593,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Jellicent) OVERWORLD( - gObjectEventPic_Jellicent, + sPicTable_Jellicent, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8591,7 +8602,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Jellicent ) OVERWORLD_FEMALE( - gObjectEventPic_JellicentF, + sPicTable_JellicentF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8659,7 +8670,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Alomomola) OVERWORLD( - gObjectEventPic_Alomomola, + sPicTable_Alomomola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8730,7 +8741,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, -5, SHADOW_SIZE_S) FOOTPRINT(Joltik) OVERWORLD( - gObjectEventPic_Joltik, + sPicTable_Joltik, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8803,7 +8814,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, -2, SHADOW_SIZE_L) FOOTPRINT(Galvantula) OVERWORLD( - gObjectEventPic_Galvantula, + sPicTable_Galvantula, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8874,7 +8885,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Ferroseed) OVERWORLD( - gObjectEventPic_Ferroseed, + sPicTable_Ferroseed, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8950,7 +8961,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 17, SHADOW_SIZE_M) FOOTPRINT(Ferrothorn) OVERWORLD( - gObjectEventPic_Ferrothorn, + sPicTable_Ferrothorn, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9021,7 +9032,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Klink) OVERWORLD( - gObjectEventPic_Klink, + sPicTable_Klink, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9091,7 +9102,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Klang) OVERWORLD( - gObjectEventPic_Klang, + sPicTable_Klang, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9161,7 +9172,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Klinklang) OVERWORLD( - gObjectEventPic_Klinklang, + sPicTable_Klinklang, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9243,7 +9254,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Tynamo) OVERWORLD( - gObjectEventPic_Tynamo, + sPicTable_Tynamo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9314,7 +9325,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Eelektrik) OVERWORLD( - gObjectEventPic_Eelektrik, + sPicTable_Eelektrik, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9385,7 +9396,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Eelektross) OVERWORLD( - gObjectEventPic_Eelektross, + sPicTable_Eelektross, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9458,7 +9469,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Elgyem) OVERWORLD( - gObjectEventPic_Elgyem, + sPicTable_Elgyem, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9525,7 +9536,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Beheeyem) OVERWORLD( - gObjectEventPic_Beheeyem, + sPicTable_Beheeyem, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9599,7 +9610,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Litwick) OVERWORLD( - gObjectEventPic_Litwick, + sPicTable_Litwick, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9673,7 +9684,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Lampent) OVERWORLD( - gObjectEventPic_Lampent, + sPicTable_Lampent, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9745,7 +9756,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 13, SHADOW_SIZE_S) FOOTPRINT(Chandelure) OVERWORLD( - gObjectEventPic_Chandelure, + sPicTable_Chandelure, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9812,7 +9823,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Axew) OVERWORLD( - gObjectEventPic_Axew, + sPicTable_Axew, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9879,7 +9890,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 8, SHADOW_SIZE_L) FOOTPRINT(Fraxure) OVERWORLD( - gObjectEventPic_Fraxure, + sPicTable_Fraxure, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -9947,7 +9958,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(2, 9, SHADOW_SIZE_L) FOOTPRINT(Haxorus) OVERWORLD( - gObjectEventPic_Haxorus, + sPicTable_Haxorus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10019,7 +10030,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Cubchoo) OVERWORLD( - gObjectEventPic_Cubchoo, + sPicTable_Cubchoo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10092,7 +10103,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Beartic) OVERWORLD( - gObjectEventPic_Beartic, + sPicTable_Beartic, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10164,7 +10175,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Cryogonal) OVERWORLD( - gObjectEventPic_Cryogonal, + sPicTable_Cryogonal, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10234,7 +10245,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Shelmet) OVERWORLD( - gObjectEventPic_Shelmet, + sPicTable_Shelmet, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10301,7 +10312,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-14, 8, SHADOW_SIZE_S) FOOTPRINT(Accelgor) OVERWORLD( - gObjectEventPic_Accelgor, + sPicTable_Accelgor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10369,7 +10380,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Stunfisk) OVERWORLD( - gObjectEventPic_Stunfisk, + sPicTable_Stunfisk, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10434,7 +10445,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Stunfisk) OVERWORLD( - gObjectEventPic_StunfiskGalar, + sPicTable_StunfiskGalar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10505,7 +10516,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Mienfoo) OVERWORLD( - gObjectEventPic_Mienfoo, + sPicTable_Mienfoo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10577,7 +10588,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Mienshao) OVERWORLD( - gObjectEventPic_Mienshao, + sPicTable_Mienshao, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10650,7 +10661,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(3, 9, SHADOW_SIZE_M) FOOTPRINT(Druddigon) OVERWORLD( - gObjectEventPic_Druddigon, + sPicTable_Druddigon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10721,7 +10732,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Golett) OVERWORLD( - gObjectEventPic_Golett, + sPicTable_Golett, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10789,7 +10800,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Golurk) OVERWORLD( - gObjectEventPic_Golurk, + sPicTable_Golurk, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10862,7 +10873,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(4, 4, SHADOW_SIZE_S) FOOTPRINT(Pawniard) OVERWORLD( - gObjectEventPic_Pawniard, + sPicTable_Pawniard, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10930,7 +10941,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Bisharp) OVERWORLD( - gObjectEventPic_Bisharp, + sPicTable_Bisharp, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -10994,7 +11005,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Kingambit) OVERWORLD( - gObjectEventPic_Kingambit, + sPicTable_Kingambit, SIZE_64x64, SHADOW_SIZE_L, TRACKS_NONE, @@ -11063,7 +11074,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(8, 7, SHADOW_SIZE_M) FOOTPRINT(Bouffalant) OVERWORLD( - gObjectEventPic_Bouffalant, + sPicTable_Bouffalant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11134,7 +11145,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rufflet) OVERWORLD( - gObjectEventPic_Rufflet, + sPicTable_Rufflet, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11203,7 +11214,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 16, SHADOW_SIZE_M) FOOTPRINT(Braviary) OVERWORLD( - gObjectEventPic_Braviary, + sPicTable_Braviary, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11267,7 +11278,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Braviary) OVERWORLD( - gObjectEventPic_BraviaryHisui, + sPicTable_BraviaryHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11338,7 +11349,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Vullaby) OVERWORLD( - gObjectEventPic_Vullaby, + sPicTable_Vullaby, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11406,7 +11417,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Mandibuzz) OVERWORLD( - gObjectEventPic_Mandibuzz, + sPicTable_Mandibuzz, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11473,7 +11484,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Heatmor) OVERWORLD( - gObjectEventPic_Heatmor, + sPicTable_Heatmor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11556,7 +11567,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, -3, SHADOW_SIZE_L) FOOTPRINT(Durant) OVERWORLD( - gObjectEventPic_Durant, + sPicTable_Durant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11625,7 +11636,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 3, SHADOW_SIZE_S) FOOTPRINT(Deino) OVERWORLD( - gObjectEventPic_Deino, + sPicTable_Deino, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11692,7 +11703,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Zweilous) OVERWORLD( - gObjectEventPic_Zweilous, + sPicTable_Zweilous, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11765,7 +11776,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 16, SHADOW_SIZE_M) FOOTPRINT(Hydreigon) OVERWORLD( - gObjectEventPic_Hydreigon, + sPicTable_Hydreigon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11841,7 +11852,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Larvesta) OVERWORLD( - gObjectEventPic_Larvesta, + sPicTable_Larvesta, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11913,7 +11924,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-4, 14, SHADOW_SIZE_M) FOOTPRINT(Volcarona) OVERWORLD( - gObjectEventPic_Volcarona, + sPicTable_Volcarona, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -11981,7 +11992,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Cobalion) OVERWORLD( - gObjectEventPic_Cobalion, + sPicTable_Cobalion, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12055,7 +12066,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(3, 6, SHADOW_SIZE_L) FOOTPRINT(Terrakion) OVERWORLD( - gObjectEventPic_Terrakion, + sPicTable_Terrakion, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12124,7 +12135,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Virizion) OVERWORLD( - gObjectEventPic_Virizion, + sPicTable_Virizion, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12214,7 +12225,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Tornadus) OVERWORLD( - gObjectEventPic_TornadusIncarnate, + sPicTable_TornadusIncarnate, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12286,7 +12297,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-5, 12, SHADOW_SIZE_L) FOOTPRINT(Tornadus) OVERWORLD( - gObjectEventPic_TornadusTherian, + sPicTable_TornadusTherian, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12378,7 +12389,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Thundurus) OVERWORLD( - gObjectEventPic_ThundurusIncarnate, + sPicTable_ThundurusIncarnate, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12462,7 +12473,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(5, 16, SHADOW_SIZE_M) FOOTPRINT(Thundurus) OVERWORLD( - gObjectEventPic_ThundurusTherian, + sPicTable_ThundurusTherian, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12533,7 +12544,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 12, SHADOW_SIZE_L) FOOTPRINT(Reshiram) OVERWORLD( - gObjectEventPic_Reshiram, + sPicTable_Reshiram, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12603,7 +12614,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(Zekrom) OVERWORLD( - gObjectEventPic_Zekrom, + sPicTable_Zekrom, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12694,7 +12705,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Landorus) OVERWORLD( - gObjectEventPic_LandorusIncarnate, + sPicTable_LandorusIncarnate, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12766,7 +12777,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Landorus) OVERWORLD( - gObjectEventPic_LandorusTherian, + sPicTable_LandorusTherian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12842,7 +12853,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Kyurem) OVERWORLD( - gObjectEventPic_Kyurem, + sPicTable_Kyurem, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12919,7 +12930,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-8, 14, SHADOW_SIZE_L) FOOTPRINT(Kyurem) OVERWORLD( - gObjectEventPic_KyuremWhite, + sPicTable_KyuremWhite, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -12996,7 +13007,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Kyurem) OVERWORLD( - gObjectEventPic_KyuremBlack, + sPicTable_KyuremBlack, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13069,7 +13080,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Keldeo) OVERWORLD( - gObjectEventPic_KeldeoOrdinary, + sPicTable_KeldeoOrdinary, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13215,7 +13226,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Meloetta) OVERWORLD( - gObjectEventPic_MeloettaAria, + sPicTable_MeloettaAria, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13294,7 +13305,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(0, 16, SHADOW_SIZE_S) FOOTPRINT(Meloetta) OVERWORLD( - gObjectEventPic_MeloettaPirouette, + sPicTable_MeloettaPirouette, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -13361,7 +13372,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = SHADOW(5, 13, SHADOW_SIZE_L) \ FOOTPRINT(Genesect) \ OVERWORLD( \ - gObjectEventPic_Genesect, \ + sPicTable_Genesect, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index 8b332629c4..b42696983e 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -60,7 +60,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Chespin) OVERWORLD( - gObjectEventPic_Chespin, + sPicTable_Chespin, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -130,7 +130,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Quilladin) OVERWORLD( - gObjectEventPic_Quilladin, + sPicTable_Quilladin, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -197,7 +197,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(4, 10, SHADOW_SIZE_L) FOOTPRINT(Chesnaught) OVERWORLD( - gObjectEventPic_Chesnaught, + sPicTable_Chesnaught, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -269,7 +269,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Fennekin) OVERWORLD( - gObjectEventPic_Fennekin, + sPicTable_Fennekin, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -337,7 +337,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Braixen) OVERWORLD( - gObjectEventPic_Braixen, + sPicTable_Braixen, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -408,7 +408,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(7, 14, SHADOW_SIZE_M) FOOTPRINT(Delphox) OVERWORLD( - gObjectEventPic_Delphox, + sPicTable_Delphox, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -480,7 +480,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Froakie) OVERWORLD( - gObjectEventPic_Froakie, + sPicTable_Froakie, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -547,7 +547,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Frogadier) OVERWORLD( - gObjectEventPic_Frogadier, + sPicTable_Frogadier, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -607,7 +607,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Greninja) OVERWORLD( - gObjectEventPic_Greninja, + sPicTable_Greninja, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -667,7 +667,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Greninja) OVERWORLD( - gObjectEventPic_Greninja, + sPicTable_Greninja, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -794,7 +794,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(3, 9, SHADOW_SIZE_S) FOOTPRINT(Bunnelby) OVERWORLD( - gObjectEventPic_Bunnelby, + sPicTable_Bunnelby, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -861,7 +861,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(8, 10, SHADOW_SIZE_M) FOOTPRINT(Diggersby) OVERWORLD( - gObjectEventPic_Diggersby, + sPicTable_Diggersby, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -932,7 +932,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Fletchling) OVERWORLD( - gObjectEventPic_Fletchling, + sPicTable_Fletchling, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1006,7 +1006,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Fletchinder) OVERWORLD( - gObjectEventPic_Fletchinder, + sPicTable_Fletchinder, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1073,7 +1073,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 17, SHADOW_SIZE_M) FOOTPRINT(Talonflame) OVERWORLD( - gObjectEventPic_Talonflame, + sPicTable_Talonflame, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1133,7 +1133,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(1, 1, SHADOW_SIZE_S) \ FOOTPRINT(Scatterbug) \ OVERWORLD( \ - gObjectEventPic_Scatterbug, \ + sPicTable_Scatterbug, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ @@ -1216,7 +1216,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 2, SHADOW_SIZE_M) \ FOOTPRINT(Spewpa) \ OVERWORLD( \ - gObjectEventPic_Spewpa, \ + sPicTable_Spewpa, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ @@ -1299,7 +1299,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 20, SHADOW_SIZE_M) \ FOOTPRINT(Vivillon) \ OVERWORLD( \ - gObjectEventPic_Vivillon ##form, \ + sPicTable_Vivillon ##form, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ @@ -1548,7 +1548,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Litleo) OVERWORLD( - gObjectEventPic_Litleo, + sPicTable_Litleo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1623,7 +1623,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pyroar) OVERWORLD( - gObjectEventPic_Pyroar, + sPicTable_Pyroar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1632,7 +1632,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = gShinyOverworldPalette_Pyroar ) OVERWORLD_FEMALE( - gObjectEventPic_PyroarF, + sPicTable_PyroarF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1689,11 +1689,11 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 11, SHADOW_SIZE_S) \ FOOTPRINT(Flabebe) \ OVERWORLD( \ - gObjectEventPic_Flabebe##Form, \ + sPicTable_Flabebe##Form, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ - sAnimTable_Following, \ + sAnimTable_Following, \ gOverworldPalette_Flabebe##Form, \ gShinyOverworldPalette_Flabebe##Form \ ) \ @@ -1778,7 +1778,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-3, 12, SHADOW_SIZE_S) \ FOOTPRINT(Floette) \ OVERWORLD( \ - gObjectEventPic_Floette ##form, \ + sPicTable_Floette ##form, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ @@ -1927,7 +1927,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-5, 15, SHADOW_SIZE_M) \ FOOTPRINT(Florges) \ OVERWORLD( \ - gObjectEventPic_Florges ##Form, \ + sPicTable_Florges ##Form, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ @@ -2039,7 +2039,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(2, 7, SHADOW_SIZE_M) FOOTPRINT(Skiddo) OVERWORLD( - gObjectEventPic_Skiddo, + sPicTable_Skiddo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2107,7 +2107,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gogoat) OVERWORLD( - gObjectEventPic_Gogoat, + sPicTable_Gogoat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2179,7 +2179,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Pancham) OVERWORLD( - gObjectEventPic_Pancham, + sPicTable_Pancham, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2251,7 +2251,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pangoro) OVERWORLD( - gObjectEventPic_Pangoro, + sPicTable_Pangoro, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2312,7 +2312,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) \ FOOTPRINT(Furfrou) \ OVERWORLD( \ - gObjectEventPic_Furfrou##_form, \ + sPicTable_Furfrou##_form, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ @@ -2398,7 +2398,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Espurr) OVERWORLD( - gObjectEventPic_Espurr, + sPicTable_Espurr, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2463,7 +2463,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Meowstic) OVERWORLD( - gObjectEventPic_MeowsticM, + sPicTable_MeowsticM, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2526,7 +2526,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 12, SHADOW_SIZE_S) FOOTPRINT(Meowstic) OVERWORLD( - gObjectEventPic_MeowsticF, + sPicTable_MeowsticF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2596,7 +2596,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-10, 11, SHADOW_SIZE_S) FOOTPRINT(Honedge) OVERWORLD( - gObjectEventPic_Honedge, + sPicTable_Honedge, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2667,7 +2667,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(8, 11, SHADOW_SIZE_M) FOOTPRINT(Doublade) OVERWORLD( - gObjectEventPic_Doublade, + sPicTable_Doublade, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2740,7 +2740,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Aegislash) OVERWORLD( - gObjectEventPic_AegislashShield, + sPicTable_AegislashShield, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2882,7 +2882,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Spritzee) OVERWORLD( - gObjectEventPic_Spritzee, + sPicTable_Spritzee, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2950,7 +2950,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Aromatisse) OVERWORLD( - gObjectEventPic_Aromatisse, + sPicTable_Aromatisse, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3022,7 +3022,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Swirlix) OVERWORLD( - gObjectEventPic_Swirlix, + sPicTable_Swirlix, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3093,7 +3093,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Slurpuff) OVERWORLD( - gObjectEventPic_Slurpuff, + sPicTable_Slurpuff, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3163,7 +3163,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-1, 11, SHADOW_SIZE_S) FOOTPRINT(Inkay) OVERWORLD( - gObjectEventPic_Inkay, + sPicTable_Inkay, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3232,7 +3232,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Malamar) OVERWORLD( - gObjectEventPic_Malamar, + sPicTable_Malamar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3303,7 +3303,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Binacle) OVERWORLD( - gObjectEventPic_Binacle, + sPicTable_Binacle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3371,7 +3371,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Barbaracle) OVERWORLD( - gObjectEventPic_Barbaracle, + sPicTable_Barbaracle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3444,7 +3444,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(3, 5, SHADOW_SIZE_S) FOOTPRINT(Skrelp) OVERWORLD( - gObjectEventPic_Skrelp, + sPicTable_Skrelp, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3513,7 +3513,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Dragalge) OVERWORLD( - gObjectEventPic_Dragalge, + sPicTable_Dragalge, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3584,7 +3584,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(4, -6, SHADOW_SIZE_M) FOOTPRINT(Clauncher) OVERWORLD( - gObjectEventPic_Clauncher, + sPicTable_Clauncher, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3658,7 +3658,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(6, 1, SHADOW_SIZE_L) FOOTPRINT(Clawitzer) OVERWORLD( - gObjectEventPic_Clawitzer, + sPicTable_Clawitzer, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3726,7 +3726,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Helioptile) OVERWORLD( - gObjectEventPic_Helioptile, + sPicTable_Helioptile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3795,7 +3795,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Heliolisk) OVERWORLD( - gObjectEventPic_Heliolisk, + sPicTable_Heliolisk, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3864,7 +3864,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(3, 2, SHADOW_SIZE_M) FOOTPRINT(Tyrunt) OVERWORLD( - gObjectEventPic_Tyrunt, + sPicTable_Tyrunt, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3931,7 +3931,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 14, SHADOW_SIZE_L) FOOTPRINT(Tyrantrum) OVERWORLD( - gObjectEventPic_Tyrantrum, + sPicTable_Tyrantrum, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4006,7 +4006,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Amaura) OVERWORLD( - gObjectEventPic_Amaura, + sPicTable_Amaura, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4073,7 +4073,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-6, 14, SHADOW_SIZE_L) FOOTPRINT(Aurorus) OVERWORLD( - gObjectEventPic_Aurorus, + sPicTable_Aurorus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4146,7 +4146,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(3, 6, SHADOW_SIZE_S) FOOTPRINT(Hawlucha) OVERWORLD( - gObjectEventPic_Hawlucha, + sPicTable_Hawlucha, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4215,7 +4215,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Dedenne) OVERWORLD( - gObjectEventPic_Dedenne, + sPicTable_Dedenne, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4292,7 +4292,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Carbink) OVERWORLD( - gObjectEventPic_Carbink, + sPicTable_Carbink, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4361,7 +4361,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Goomy) OVERWORLD( - gObjectEventPic_Goomy, + sPicTable_Goomy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4431,7 +4431,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(1, 6, SHADOW_SIZE_S) FOOTPRINT(Sliggoo) OVERWORLD( - gObjectEventPic_Sliggoo, + sPicTable_Sliggoo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4502,7 +4502,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Goodra) OVERWORLD( - gObjectEventPic_Goodra, + sPicTable_Goodra, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4567,7 +4567,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Sliggoo) OVERWORLD( - gObjectEventPic_SliggooHisui, + sPicTable_SliggooHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4633,7 +4633,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Goodra) OVERWORLD( - gObjectEventPic_GoodraHisui, + sPicTable_GoodraHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4712,7 +4712,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Klefki) OVERWORLD( - gObjectEventPic_Klefki, + sPicTable_Klefki, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4782,7 +4782,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Phantump) OVERWORLD( - gObjectEventPic_Phantump, + sPicTable_Phantump, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4854,7 +4854,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Trevenant) OVERWORLD( - gObjectEventPic_Trevenant, + sPicTable_Trevenant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4918,7 +4918,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) OVERWORLD( - gObjectEventPic_PumpkabooAverage, + sPicTable_PumpkabooAverage, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4983,7 +4983,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) OVERWORLD( - gObjectEventPic_PumpkabooSmall, + sPicTable_PumpkabooSmall, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5048,7 +5048,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) OVERWORLD( - gObjectEventPic_PumpkabooLarge, + sPicTable_PumpkabooLarge, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5115,7 +5115,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) OVERWORLD( - gObjectEventPic_PumpkabooSuper, + sPicTable_PumpkabooSuper, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5181,7 +5181,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(3, 10, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) OVERWORLD( - gObjectEventPic_GourgeistAverage, + sPicTable_GourgeistAverage, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5244,7 +5244,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(4, 9, SHADOW_SIZE_S) FOOTPRINT(Gourgeist) OVERWORLD( - gObjectEventPic_GourgeistSmall, + sPicTable_GourgeistSmall, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5307,7 +5307,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(4, 12, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) OVERWORLD( - gObjectEventPic_GourgeistLarge, + sPicTable_GourgeistLarge, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5372,7 +5372,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(4, 14, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) OVERWORLD( - gObjectEventPic_GourgeistSuper, + sPicTable_GourgeistSuper, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5449,7 +5449,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Bergmite) OVERWORLD( - gObjectEventPic_Bergmite, + sPicTable_Bergmite, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5519,7 +5519,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(1, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Avalugg) OVERWORLD( - gObjectEventPic_Avalugg, + sPicTable_Avalugg, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5582,7 +5582,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(2, -2, SHADOW_SIZE_L) FOOTPRINT(Avalugg) OVERWORLD( - gObjectEventPic_AvaluggHisui, + sPicTable_AvaluggHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5663,7 +5663,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Noibat) OVERWORLD( - gObjectEventPic_Noibat, + sPicTable_Noibat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5734,7 +5734,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(5, 10, SHADOW_SIZE_L) FOOTPRINT(Noivern) OVERWORLD( - gObjectEventPic_Noivern, + sPicTable_Noivern, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5794,7 +5794,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Xerneas) OVERWORLD( - gObjectEventPic_XerneasNeutral, + sPicTable_XerneasNeutral, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5857,7 +5857,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Xerneas) OVERWORLD( - gObjectEventPic_XerneasActive, + sPicTable_XerneasActive, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5932,7 +5932,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 16, SHADOW_SIZE_L) FOOTPRINT(Yveltal) OVERWORLD( - gObjectEventPic_Yveltal, + sPicTable_Yveltal, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5996,7 +5996,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( - gObjectEventPic_Zygarde50, + sPicTable_Zygarde50, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6059,7 +6059,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( - gObjectEventPic_Zygarde50, + sPicTable_Zygarde50, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6122,7 +6122,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( - gObjectEventPic_Zygarde10, + sPicTable_Zygarde10, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6186,7 +6186,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( - gObjectEventPic_Zygarde10, + sPicTable_Zygarde10, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6258,7 +6258,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Zygarde) OVERWORLD( - gObjectEventPic_ZygardeComplete, + sPicTable_ZygardeComplete, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6332,7 +6332,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Diancie) OVERWORLD( - gObjectEventPic_Diancie, + sPicTable_Diancie, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6400,6 +6400,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .iconPalIndex = 0, SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Diancie) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_DiancieMega, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_DiancieMega, + gShinyOverworldPalette_DiancieMega + ) + #endif //OW_BATTLE_ONLY_FORMS .isMythical = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, @@ -6474,7 +6485,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Hoopa) OVERWORLD( - gObjectEventPic_HoopaConfined, + sPicTable_HoopaConfined, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6545,7 +6556,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Hoopa) OVERWORLD( - gObjectEventPic_HoopaUnbound, + sPicTable_HoopaUnbound, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6617,7 +6628,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Volcanion) OVERWORLD( - gObjectEventPic_Volcanion, + sPicTable_Volcanion, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index b0115420ad..fb97530b74 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -57,7 +57,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Rowlet) OVERWORLD( - gObjectEventPic_Rowlet, + sPicTable_Rowlet, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -125,7 +125,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Dartrix) OVERWORLD( - gObjectEventPic_Dartrix, + sPicTable_Dartrix, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -192,7 +192,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Decidueye) OVERWORLD( - gObjectEventPic_Decidueye, + sPicTable_Decidueye, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -256,7 +256,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Decidueye) OVERWORLD( - gObjectEventPic_DecidueyeHisui, + sPicTable_DecidueyeHisui, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -323,7 +323,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Litten) OVERWORLD( - gObjectEventPic_Litten, + sPicTable_Litten, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -387,7 +387,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(5, 7, SHADOW_SIZE_M) FOOTPRINT(Torracat) OVERWORLD( - gObjectEventPic_Torracat, + sPicTable_Torracat, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -450,7 +450,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Incineroar) OVERWORLD( - gObjectEventPic_Incineroar, + sPicTable_Incineroar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -514,7 +514,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Popplio) OVERWORLD( - gObjectEventPic_Popplio, + sPicTable_Popplio, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -578,7 +578,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-5, 6, SHADOW_SIZE_M) FOOTPRINT(Brionne) OVERWORLD( - gObjectEventPic_Brionne, + sPicTable_Brionne, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -641,7 +641,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-6, 11, SHADOW_SIZE_L) FOOTPRINT(Primarina) OVERWORLD( - gObjectEventPic_Primarina, + sPicTable_Primarina, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -710,7 +710,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Pikipek) OVERWORLD( - gObjectEventPic_Pikipek, + sPicTable_Pikipek, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -780,7 +780,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(1, 8, SHADOW_SIZE_S) FOOTPRINT(Trumbeak) OVERWORLD( - gObjectEventPic_Trumbeak, + sPicTable_Trumbeak, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -847,7 +847,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(9, 12, SHADOW_SIZE_M) FOOTPRINT(Toucannon) OVERWORLD( - gObjectEventPic_Toucannon, + sPicTable_Toucannon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -912,7 +912,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-9, 1, SHADOW_SIZE_M) FOOTPRINT(Yungoos) OVERWORLD( - gObjectEventPic_Yungoos, + sPicTable_Yungoos, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -973,7 +973,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Gumshoos) OVERWORLD( - gObjectEventPic_Gumshoos, + sPicTable_Gumshoos, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1033,7 +1033,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Gumshoos) OVERWORLD( - gObjectEventPic_Gumshoos, + sPicTable_Gumshoos, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1100,7 +1100,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Grubbin) OVERWORLD( - gObjectEventPic_Grubbin, + sPicTable_Grubbin, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1169,7 +1169,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = NO_SHADOW FOOTPRINT(Charjabug) OVERWORLD( - gObjectEventPic_Charjabug, + sPicTable_Charjabug, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1231,7 +1231,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 16, SHADOW_SIZE_S) FOOTPRINT(Vikavolt) OVERWORLD( - gObjectEventPic_Vikavolt, + sPicTable_Vikavolt, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1299,7 +1299,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 16, SHADOW_SIZE_S) FOOTPRINT(Vikavolt) OVERWORLD( - gObjectEventPic_Vikavolt, + sPicTable_Vikavolt, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1367,7 +1367,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(7, 6, SHADOW_SIZE_M) FOOTPRINT(Crabrawler) OVERWORLD( - gObjectEventPic_Crabrawler, + sPicTable_Crabrawler, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1433,7 +1433,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Crabominable) OVERWORLD( - gObjectEventPic_Crabominable, + sPicTable_Crabominable, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1498,7 +1498,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-4, 9, SHADOW_SIZE_S) FOOTPRINT(Oricorio) OVERWORLD( - gObjectEventPic_OricorioBaile, + sPicTable_OricorioBaile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1564,7 +1564,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(5, 8, SHADOW_SIZE_S) FOOTPRINT(Oricorio) OVERWORLD( - gObjectEventPic_OricorioPomPom, + sPicTable_OricorioPomPom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1630,7 +1630,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-3, 11, SHADOW_SIZE_S) FOOTPRINT(Oricorio) OVERWORLD( - gObjectEventPic_OricorioPau, + sPicTable_OricorioPau, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1696,7 +1696,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(7, 10, SHADOW_SIZE_S) FOOTPRINT(Oricorio) OVERWORLD( - gObjectEventPic_OricorioSensu, + sPicTable_OricorioSensu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1798,7 +1798,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Cutiefly) OVERWORLD( - gObjectEventPic_Cutiefly, + sPicTable_Cutiefly, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1861,7 +1861,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Ribombee) OVERWORLD( - gObjectEventPic_Ribombee, + sPicTable_Ribombee, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1922,7 +1922,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Ribombee) OVERWORLD( - gObjectEventPic_Ribombee, + sPicTable_Ribombee, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1985,7 +1985,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rockruff) OVERWORLD( - gObjectEventPic_Rockruff, + sPicTable_Rockruff, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2047,7 +2047,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rockruff) OVERWORLD( - gObjectEventPic_Rockruff, + sPicTable_Rockruff, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2115,7 +2115,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( - gObjectEventPic_LycanrocMidday, + sPicTable_LycanrocMidday, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2181,7 +2181,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(5, 13, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( - gObjectEventPic_LycanrocMidnight, + sPicTable_LycanrocMidnight, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2247,7 +2247,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( - gObjectEventPic_LycanrocDusk, + sPicTable_LycanrocDusk, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2313,7 +2313,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Wishiwashi) OVERWORLD( - gObjectEventPic_WishiwashiSolo, + sPicTable_WishiwashiSolo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2437,7 +2437,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Mareanie) OVERWORLD( - gObjectEventPic_Mareanie, + sPicTable_Mareanie, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2502,7 +2502,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Toxapex) OVERWORLD( - gObjectEventPic_Toxapex, + sPicTable_Toxapex, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2567,7 +2567,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Mudbray) OVERWORLD( - gObjectEventPic_Mudbray, + sPicTable_Mudbray, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2632,7 +2632,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(4, 13, SHADOW_SIZE_L) FOOTPRINT(Mudsdale) OVERWORLD( - gObjectEventPic_Mudsdale, + sPicTable_Mudsdale, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2704,7 +2704,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Dewpider) OVERWORLD( - gObjectEventPic_Dewpider, + sPicTable_Dewpider, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2766,7 +2766,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Araquanid) OVERWORLD( - gObjectEventPic_Araquanid, + sPicTable_Araquanid, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2826,7 +2826,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-6, 9, SHADOW_SIZE_S) FOOTPRINT(Araquanid) OVERWORLD( - gObjectEventPic_Araquanid, + sPicTable_Araquanid, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2894,7 +2894,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Fomantis) OVERWORLD( - gObjectEventPic_Fomantis, + sPicTable_Fomantis, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2956,7 +2956,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Lurantis) OVERWORLD( - gObjectEventPic_Lurantis, + sPicTable_Lurantis, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3016,7 +3016,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Lurantis) OVERWORLD( - gObjectEventPic_Lurantis, + sPicTable_Lurantis, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3085,7 +3085,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Morelull) OVERWORLD( - gObjectEventPic_Morelull, + sPicTable_Morelull, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3151,7 +3151,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Shiinotic) OVERWORLD( - gObjectEventPic_Shiinotic, + sPicTable_Shiinotic, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3220,7 +3220,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(3, 1, SHADOW_SIZE_M) FOOTPRINT(Salandit) OVERWORLD( - gObjectEventPic_Salandit, + sPicTable_Salandit, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3282,7 +3282,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Salazzle) OVERWORLD( - gObjectEventPic_Salazzle, + sPicTable_Salazzle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3342,7 +3342,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Salazzle) OVERWORLD( - gObjectEventPic_Salazzle, + sPicTable_Salazzle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3413,7 +3413,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Stufful) OVERWORLD( - gObjectEventPic_Stufful, + sPicTable_Stufful, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3481,7 +3481,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Bewear) OVERWORLD( - gObjectEventPic_Bewear, + sPicTable_Bewear, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3546,7 +3546,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, -3, SHADOW_SIZE_S) FOOTPRINT(Bounsweet) OVERWORLD( - gObjectEventPic_Bounsweet, + sPicTable_Bounsweet, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3612,7 +3612,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Steenee) OVERWORLD( - gObjectEventPic_Steenee, + sPicTable_Steenee, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3677,7 +3677,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(1, 13, SHADOW_SIZE_M) FOOTPRINT(Tsareena) OVERWORLD( - gObjectEventPic_Tsareena, + sPicTable_Tsareena, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3744,7 +3744,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Comfey) OVERWORLD( - gObjectEventPic_Comfey, + sPicTable_Comfey, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3812,7 +3812,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, 6, SHADOW_SIZE_M) FOOTPRINT(Oranguru) OVERWORLD( - gObjectEventPic_Oranguru, + sPicTable_Oranguru, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3880,7 +3880,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-4, 12, SHADOW_SIZE_L) FOOTPRINT(Passimian) OVERWORLD( - gObjectEventPic_Passimian, + sPicTable_Passimian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3949,7 +3949,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-4, -3, SHADOW_SIZE_S) FOOTPRINT(Wimpod) OVERWORLD( - gObjectEventPic_Wimpod, + sPicTable_Wimpod, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4017,7 +4017,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Golisopod) OVERWORLD( - gObjectEventPic_Golisopod, + sPicTable_Golisopod, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4082,7 +4082,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = NO_SHADOW FOOTPRINT(Sandygast) OVERWORLD( - gObjectEventPic_Sandygast, + sPicTable_Sandygast, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4147,7 +4147,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = NO_SHADOW FOOTPRINT(Palossand) OVERWORLD( - gObjectEventPic_Palossand, + sPicTable_Palossand, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4215,7 +4215,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-3, -3, SHADOW_SIZE_S) FOOTPRINT(Pyukumuku) OVERWORLD( - gObjectEventPic_Pyukumuku, + sPicTable_Pyukumuku, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4280,7 +4280,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Type_Null) OVERWORLD( - gObjectEventPic_TypeNull, + sPicTable_TypeNull, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4343,7 +4343,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(1, 13, SHADOW_SIZE_L) \ FOOTPRINT(Silvally) \ OVERWORLD( \ - gObjectEventPic_Silvally, \ + sPicTable_Silvally, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ @@ -4435,7 +4435,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .iconPalIndex = 0, \ SHADOW(0, 14, SHADOW_SIZE_S) \ OVERWORLD( \ - gObjectEventPic_MiniorMeteor, \ + sPicTable_MiniorMeteor, \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ @@ -4543,7 +4543,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-4, 0, SHADOW_SIZE_S) FOOTPRINT(Komala) OVERWORLD( - gObjectEventPic_Komala, + sPicTable_Komala, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4613,7 +4613,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-3, 12, SHADOW_SIZE_L) FOOTPRINT(Turtonator) OVERWORLD( - gObjectEventPic_Turtonator, + sPicTable_Turtonator, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4675,7 +4675,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Togedemaru) OVERWORLD( - gObjectEventPic_Togedemaru, + sPicTable_Togedemaru, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4736,7 +4736,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Togedemaru) OVERWORLD( - gObjectEventPic_Togedemaru, + sPicTable_Togedemaru, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4801,7 +4801,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) OVERWORLD( - gObjectEventPic_MimikyuDisguised, + sPicTable_MimikyuDisguised, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4916,7 +4916,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) OVERWORLD( - gObjectEventPic_MimikyuDisguised, + sPicTable_MimikyuDisguised, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5041,7 +5041,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Bruxish) OVERWORLD( - gObjectEventPic_Bruxish, + sPicTable_Bruxish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5110,7 +5110,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(5, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Drampa) OVERWORLD( - gObjectEventPic_Drampa, + sPicTable_Drampa, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5177,7 +5177,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Dhelmise) OVERWORLD( - gObjectEventPic_Dhelmise, + sPicTable_Dhelmise, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5245,7 +5245,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(JangmoO) OVERWORLD( - gObjectEventPic_JangmoO, + sPicTable_JangmoO, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5313,7 +5313,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(HakamoO) OVERWORLD( - gObjectEventPic_HakamoO, + sPicTable_HakamoO, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5374,7 +5374,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(KommoO) OVERWORLD( - gObjectEventPic_KommoO, + sPicTable_KommoO, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5440,7 +5440,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(KommoO) OVERWORLD( - gObjectEventPic_KommoO, + sPicTable_KommoO, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5516,7 +5516,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 19, SHADOW_SIZE_M) FOOTPRINT(TapuKoko) OVERWORLD( - gObjectEventPic_TapuKoko, + sPicTable_TapuKoko, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5587,7 +5587,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(TapuLele) OVERWORLD( - gObjectEventPic_TapuLele, + sPicTable_TapuLele, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5660,7 +5660,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(4, 16, SHADOW_SIZE_M) FOOTPRINT(TapuBulu) OVERWORLD( - gObjectEventPic_TapuBulu, + sPicTable_TapuBulu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5732,7 +5732,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(TapuFini) OVERWORLD( - gObjectEventPic_TapuFini, + sPicTable_TapuFini, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5799,7 +5799,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Cosmog) OVERWORLD( - gObjectEventPic_Cosmog, + sPicTable_Cosmog, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5868,7 +5868,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Cosmoem) OVERWORLD( - gObjectEventPic_Cosmoem, + sPicTable_Cosmoem, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5936,7 +5936,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Solgaleo) OVERWORLD( - gObjectEventPic_Solgaleo, + sPicTable_Solgaleo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6002,7 +6002,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(4, 17, SHADOW_SIZE_L) FOOTPRINT(Lunala) OVERWORLD( - gObjectEventPic_Lunala, + sPicTable_Lunala, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6070,7 +6070,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, 14, SHADOW_SIZE_S) FOOTPRINT(Nihilego) OVERWORLD( - gObjectEventPic_Nihilego, + sPicTable_Nihilego, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6137,7 +6137,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Buzzwole) OVERWORLD( - gObjectEventPic_Buzzwole, + sPicTable_Buzzwole, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6203,7 +6203,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Pheromosa) OVERWORLD( - gObjectEventPic_Pheromosa, + sPicTable_Pheromosa, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6269,7 +6269,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Xurkitree) OVERWORLD( - gObjectEventPic_Xurkitree, + sPicTable_Xurkitree, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6337,7 +6337,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Celesteela) OVERWORLD( - gObjectEventPic_Celesteela, + sPicTable_Celesteela, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6404,7 +6404,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Kartana) OVERWORLD( - gObjectEventPic_Kartana, + sPicTable_Kartana, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6470,7 +6470,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(4, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Guzzlord) OVERWORLD( - gObjectEventPic_Guzzlord, + sPicTable_Guzzlord, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6539,7 +6539,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 15, SHADOW_SIZE_M) FOOTPRINT(Necrozma) OVERWORLD( - gObjectEventPic_Necrozma, + sPicTable_Necrozma, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6607,7 +6607,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Necrozma) OVERWORLD( - gObjectEventPic_NecrozmaDuskMane, + sPicTable_NecrozmaDuskMane, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6677,7 +6677,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(3, 17, SHADOW_SIZE_L) FOOTPRINT(Necrozma) OVERWORLD( - gObjectEventPic_NecrozmaDawnWings, + sPicTable_NecrozmaDawnWings, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6749,6 +6749,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .iconPalIndex = 2, SHADOW(-1, 16, SHADOW_SIZE_L) FOOTPRINT(Necrozma) + #if OW_BATTLE_ONLY_FORMS + OVERWORLD( + sPicTable_NecrozmaUltra, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + sAnimTable_Following, + gOverworldPalette_NecrozmaUltra, + gShinyOverworldPalette_NecrozmaUltra + ) + #endif //OW_BATTLE_ONLY_FORMS .isLegendary = TRUE, .isUltraBurst = TRUE, .cannotBeTraded = TRUE, @@ -6813,7 +6824,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Magearna) OVERWORLD( - gObjectEventPic_Magearna, + sPicTable_Magearna, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6878,7 +6889,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Magearna) OVERWORLD( - gObjectEventPic_MagearnaOriginal, + sPicTable_MagearnaOriginal, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6952,7 +6963,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Marshadow) OVERWORLD( - gObjectEventPic_Marshadow, + sPicTable_Marshadow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7019,7 +7030,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Poipole) OVERWORLD( - gObjectEventPic_Poipole, + sPicTable_Poipole, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7084,7 +7095,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(7, 17, SHADOW_SIZE_M) FOOTPRINT(Naganadel) OVERWORLD( - gObjectEventPic_Naganadel, + sPicTable_Naganadel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7150,7 +7161,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(2, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Stakataka) OVERWORLD( - gObjectEventPic_Stakataka, + sPicTable_Stakataka, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7216,7 +7227,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Blacephalon) OVERWORLD( - gObjectEventPic_Blacephalon, + sPicTable_Blacephalon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7281,7 +7292,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Zeraora) OVERWORLD( - gObjectEventPic_Zeraora, + sPicTable_Zeraora, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7347,7 +7358,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Meltan) OVERWORLD( - gObjectEventPic_Meltan, + sPicTable_Meltan, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7411,7 +7422,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = SHADOW(3, 10, SHADOW_SIZE_L) FOOTPRINT(Melmetal) OVERWORLD( - gObjectEventPic_Melmetal, + sPicTable_Melmetal, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index a7239d1c32..ee3a17dfe9 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -54,7 +54,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Grookey) OVERWORLD( - gObjectEventPic_Grookey, + sPicTable_Grookey, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -117,7 +117,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(5, 6, SHADOW_SIZE_M) FOOTPRINT(Thwackey) OVERWORLD( - gObjectEventPic_Thwackey, + sPicTable_Thwackey, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -179,7 +179,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Rillaboom) OVERWORLD( - gObjectEventPic_Rillaboom, + sPicTable_Rillaboom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -302,7 +302,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Scorbunny) OVERWORLD( - gObjectEventPic_Scorbunny, + sPicTable_Scorbunny, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -365,7 +365,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-4, 5, SHADOW_SIZE_S) FOOTPRINT(Raboot) OVERWORLD( - gObjectEventPic_Raboot, + sPicTable_Raboot, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -428,7 +428,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Cinderace) OVERWORLD( - gObjectEventPic_Cinderace, + sPicTable_Cinderace, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -553,7 +553,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-3, 3, SHADOW_SIZE_S) FOOTPRINT(Sobble) OVERWORLD( - gObjectEventPic_Sobble, + sPicTable_Sobble, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -616,7 +616,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(2, 5, SHADOW_SIZE_M) FOOTPRINT(Drizzile) OVERWORLD( - gObjectEventPic_Drizzile, + sPicTable_Drizzile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -679,7 +679,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Inteleon) OVERWORLD( - gObjectEventPic_Inteleon, + sPicTable_Inteleon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -803,7 +803,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-7, 5, SHADOW_SIZE_S) FOOTPRINT(Skwovet) OVERWORLD( - gObjectEventPic_Skwovet, + sPicTable_Skwovet, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -868,7 +868,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-11, 10, SHADOW_SIZE_M) FOOTPRINT(Greedent) OVERWORLD( - gObjectEventPic_Greedent, + sPicTable_Greedent, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -940,7 +940,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Rookidee) OVERWORLD( - gObjectEventPic_Rookidee, + sPicTable_Rookidee, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1013,7 +1013,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(2, 16, SHADOW_SIZE_S) FOOTPRINT(Corvisquire) OVERWORLD( - gObjectEventPic_Corvisquire, + sPicTable_Corvisquire, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1080,7 +1080,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Corviknight) OVERWORLD( - gObjectEventPic_Corviknight, + sPicTable_Corviknight, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1203,7 +1203,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Blipbug) OVERWORLD( - gObjectEventPic_Blipbug, + sPicTable_Blipbug, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1269,7 +1269,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, 0, SHADOW_SIZE_M) FOOTPRINT(Dottler) OVERWORLD( - gObjectEventPic_Dottler, + sPicTable_Dottler, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1334,7 +1334,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(Orbeetle) OVERWORLD( - gObjectEventPic_Orbeetle, + sPicTable_Orbeetle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1459,7 +1459,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Nickit) OVERWORLD( - gObjectEventPic_Nickit, + sPicTable_Nickit, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1523,7 +1523,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-9, 7, SHADOW_SIZE_M) FOOTPRINT(Thievul) OVERWORLD( - gObjectEventPic_Thievul, + sPicTable_Thievul, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1587,7 +1587,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Gossifleur) OVERWORLD( - gObjectEventPic_Gossifleur, + sPicTable_Gossifleur, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1651,7 +1651,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-2, 8, SHADOW_SIZE_S) FOOTPRINT(Eldegoss) OVERWORLD( - gObjectEventPic_Eldegoss, + sPicTable_Eldegoss, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1715,7 +1715,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Wooloo) OVERWORLD( - gObjectEventPic_Wooloo, + sPicTable_Wooloo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1779,7 +1779,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Dubwool) OVERWORLD( - gObjectEventPic_Dubwool, + sPicTable_Dubwool, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1846,7 +1846,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(3, 1, SHADOW_SIZE_S) FOOTPRINT(Chewtle) OVERWORLD( - gObjectEventPic_Chewtle, + sPicTable_Chewtle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1913,7 +1913,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-2, 4, SHADOW_SIZE_L) FOOTPRINT(Drednaw) OVERWORLD( - gObjectEventPic_Drednaw, + sPicTable_Drednaw, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2037,7 +2037,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Yamper) OVERWORLD( - gObjectEventPic_Yamper, + sPicTable_Yamper, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2101,7 +2101,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Boltund) OVERWORLD( - gObjectEventPic_Boltund, + sPicTable_Boltund, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2165,7 +2165,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, -3, SHADOW_SIZE_S) FOOTPRINT(Rolycoly) OVERWORLD( - gObjectEventPic_Rolycoly, + sPicTable_Rolycoly, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2228,7 +2228,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Carkol) OVERWORLD( - gObjectEventPic_Carkol, + sPicTable_Carkol, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2291,7 +2291,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Coalossal) OVERWORLD( - gObjectEventPic_Coalossal, + sPicTable_Coalossal, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2415,7 +2415,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Applin) OVERWORLD( - gObjectEventPic_Applin, + sPicTable_Applin, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2482,7 +2482,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-6, 11, SHADOW_SIZE_S) FOOTPRINT(Flapple) OVERWORLD( - gObjectEventPic_Flapple, + sPicTable_Flapple, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2603,7 +2603,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(5, 6, SHADOW_SIZE_L) FOOTPRINT(Appletun) OVERWORLD( - gObjectEventPic_Appletun, + sPicTable_Appletun, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2725,7 +2725,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-4, 8, SHADOW_SIZE_S) FOOTPRINT(Dipplin) OVERWORLD( - gObjectEventPic_Dipplin, + sPicTable_Dipplin, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2788,7 +2788,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Hydrapple) OVERWORLD( - gObjectEventPic_Hydrapple, + sPicTable_Hydrapple, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2852,7 +2852,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(3, 1, SHADOW_SIZE_M) FOOTPRINT(Silicobra) OVERWORLD( - gObjectEventPic_Silicobra, + sPicTable_Silicobra, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2916,7 +2916,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(2, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Sandaconda) OVERWORLD( - gObjectEventPic_Sandaconda, + sPicTable_Sandaconda, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3039,7 +3039,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Cramorant) OVERWORLD( - gObjectEventPic_Cramorant, + sPicTable_Cramorant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3218,7 +3218,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, -5, SHADOW_SIZE_S) FOOTPRINT(Arrokuda) OVERWORLD( - gObjectEventPic_Arrokuda, + sPicTable_Arrokuda, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3282,7 +3282,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(4, 5, SHADOW_SIZE_M) FOOTPRINT(Barraskewda) OVERWORLD( - gObjectEventPic_Barraskewda, + sPicTable_Barraskewda, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3346,7 +3346,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-2, 1, SHADOW_SIZE_M) FOOTPRINT(Toxel) OVERWORLD( - gObjectEventPic_Toxel, + sPicTable_Toxel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3411,7 +3411,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-6, 13, SHADOW_SIZE_M) FOOTPRINT(Toxtricity) OVERWORLD( - gObjectEventPic_ToxtricityAmped, + sPicTable_ToxtricityAmped, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3528,7 +3528,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Toxtricity) OVERWORLD( - gObjectEventPic_ToxtricityLowKey, + sPicTable_ToxtricityLowKey, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3651,7 +3651,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(6, -4, SHADOW_SIZE_S) FOOTPRINT(Sizzlipede) OVERWORLD( - gObjectEventPic_Sizzlipede, + sPicTable_Sizzlipede, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3719,7 +3719,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-3, 7, SHADOW_SIZE_M) FOOTPRINT(Centiskorch) OVERWORLD( - gObjectEventPic_Centiskorch, + sPicTable_Centiskorch, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3843,7 +3843,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Clobbopus) OVERWORLD( - gObjectEventPic_Clobbopus, + sPicTable_Clobbopus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3906,7 +3906,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(4, 9, SHADOW_SIZE_M) FOOTPRINT(Grapploct) OVERWORLD( - gObjectEventPic_Grapploct, + sPicTable_Grapploct, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3970,7 +3970,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Sinistea) OVERWORLD( - gObjectEventPic_Sinistea, + sPicTable_Sinistea, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4035,7 +4035,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(3, 4, SHADOW_SIZE_S) FOOTPRINT(Sinistea) OVERWORLD( - gObjectEventPic_Sinistea, + sPicTable_Sinistea, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4099,7 +4099,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Polteageist) OVERWORLD( - gObjectEventPic_Polteageist, + sPicTable_Polteageist, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4163,7 +4163,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Polteageist) OVERWORLD( - gObjectEventPic_Polteageist, + sPicTable_Polteageist, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4228,7 +4228,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Hatenna) OVERWORLD( - gObjectEventPic_Hatenna, + sPicTable_Hatenna, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4291,7 +4291,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Hattrem) OVERWORLD( - gObjectEventPic_Hattrem, + sPicTable_Hattrem, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4353,7 +4353,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(6, 13, SHADOW_SIZE_S) FOOTPRINT(Hatterene) OVERWORLD( - gObjectEventPic_Hatterene, + sPicTable_Hatterene, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4477,7 +4477,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Impidimp) OVERWORLD( - gObjectEventPic_Impidimp, + sPicTable_Impidimp, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4540,7 +4540,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Morgrem) OVERWORLD( - gObjectEventPic_Morgrem, + sPicTable_Morgrem, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4603,7 +4603,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Grimmsnarl) OVERWORLD( - gObjectEventPic_Grimmsnarl, + sPicTable_Grimmsnarl, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4727,7 +4727,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Milcery) OVERWORLD( - gObjectEventPic_Milcery, + sPicTable_Milcery, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4798,7 +4798,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 5, SHADOW_SIZE_S) \ FOOTPRINT(Alcremie) \ OVERWORLD( \ - gObjectEventPic_AlcremieStrawberry, /*Alcremie ##sweet*/ \ + sPicTable_AlcremieStrawberry, /*Alcremie ##sweet*/ \ SIZE_32x32, \ SHADOW_SIZE_M, \ TRACKS_FOOT, \ @@ -4968,7 +4968,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-7, 5, SHADOW_SIZE_S) FOOTPRINT(Falinks) OVERWORLD( - gObjectEventPic_Falinks, + sPicTable_Falinks, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5031,7 +5031,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, -4, SHADOW_SIZE_S) FOOTPRINT(Pincurchin) OVERWORLD( - gObjectEventPic_Pincurchin, + sPicTable_Pincurchin, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5097,7 +5097,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-2, -7, SHADOW_SIZE_S) FOOTPRINT(Snom) OVERWORLD( - gObjectEventPic_Snom, + sPicTable_Snom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5162,7 +5162,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-7, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Frosmoth) OVERWORLD( - gObjectEventPic_Frosmoth, + sPicTable_Frosmoth, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5226,7 +5226,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 10, SHADOW_SIZE_L) FOOTPRINT(Stonjourner) OVERWORLD( - gObjectEventPic_Stonjourner, + sPicTable_Stonjourner, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5291,7 +5291,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Eiscue) OVERWORLD( - gObjectEventPic_EiscueIce, + sPicTable_EiscueIce, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5414,7 +5414,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Indeedee) OVERWORLD( - gObjectEventPic_IndeedeeM, + sPicTable_IndeedeeM, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5477,7 +5477,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Indeedee) OVERWORLD( - gObjectEventPic_IndeedeeF, + sPicTable_IndeedeeF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5543,7 +5543,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Morpeko) OVERWORLD( - gObjectEventPic_MorpekoFullBelly, + sPicTable_MorpekoFullBelly, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5667,7 +5667,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(5, 2, SHADOW_SIZE_M) FOOTPRINT(Cufant) OVERWORLD( - gObjectEventPic_Cufant, + sPicTable_Cufant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5731,7 +5731,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(6, 7, SHADOW_SIZE_L) FOOTPRINT(Copperajah) OVERWORLD( - gObjectEventPic_Copperajah, + sPicTable_Copperajah, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5856,7 +5856,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-4, 10, SHADOW_SIZE_L) FOOTPRINT(Dracozolt) OVERWORLD( - gObjectEventPic_Dracozolt, + sPicTable_Dracozolt, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5919,7 +5919,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Arctozolt) OVERWORLD( - gObjectEventPic_Arctozolt, + sPicTable_Arctozolt, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5983,7 +5983,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Dracovish) OVERWORLD( - gObjectEventPic_Dracovish, + sPicTable_Dracovish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6047,7 +6047,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Arctovish) OVERWORLD( - gObjectEventPic_Arctovish, + sPicTable_Arctovish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6097,8 +6097,12 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .frontPic = gMonFrontPic_Duraludon, .frontPicSize = MON_COORDS_SIZE(56, 64), .frontPicYOffset = 0, - .frontAnimFrames = sAnims_SingleFramePlaceHolder, - //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + .frontAnimFrames = ANIM_FRAMES( + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(1, 60), + ANIMCMD_FRAME(0, 2), + ), + .frontAnimId = ANIM_SHAKE_FLASH_YELLOW_FAST, .backPic = gMonBackPic_Duraludon, .backPicSize = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, @@ -6110,7 +6114,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Duraludon) OVERWORLD( - gObjectEventPic_Duraludon, + sPicTable_Duraludon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6236,7 +6240,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(4, 14, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Archaludon) OVERWORLD( - gObjectEventPic_Archaludon, + sPicTable_Archaludon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6302,7 +6306,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Dreepy) OVERWORLD( - gObjectEventPic_Dreepy, + sPicTable_Dreepy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6366,7 +6370,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 9, SHADOW_SIZE_M) FOOTPRINT(Drakloak) OVERWORLD( - gObjectEventPic_Drakloak, + sPicTable_Drakloak, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6430,7 +6434,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Dragapult) OVERWORLD( - gObjectEventPic_Dragapult, + sPicTable_Dragapult, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6493,7 +6497,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Zacian) OVERWORLD( - gObjectEventPic_ZacianHero, + sPicTable_ZacianHero, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6560,7 +6564,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-3, 12, SHADOW_SIZE_L) FOOTPRINT(Zacian) OVERWORLD( - gObjectEventPic_ZacianCrowned, + sPicTable_ZacianCrowned, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6629,7 +6633,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, 12, SHADOW_SIZE_L) FOOTPRINT(Zamazenta) OVERWORLD( - gObjectEventPic_ZamazentaHero, + sPicTable_ZamazentaHero, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6696,7 +6700,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 12, SHADOW_SIZE_L) FOOTPRINT(Zamazenta) OVERWORLD( - gObjectEventPic_ZamazentaCrowned, + sPicTable_ZamazentaCrowned, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6766,7 +6770,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Eternatus) OVERWORLD( - gObjectEventPic_Eternatus, + sPicTable_Eternatus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6891,7 +6895,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Kubfu) OVERWORLD( - gObjectEventPic_Kubfu, + sPicTable_Kubfu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6959,7 +6963,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Urshifu) OVERWORLD( - gObjectEventPic_Urshifu, + sPicTable_Urshifu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7084,7 +7088,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(4, 14, SHADOW_SIZE_M) FOOTPRINT(Urshifu) OVERWORLD( - gObjectEventPic_Urshifu, + sPicTable_Urshifu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7212,7 +7216,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Zarude) OVERWORLD( - gObjectEventPic_Zarude, + sPicTable_Zarude, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7337,7 +7341,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-3, 14, SHADOW_SIZE_S) FOOTPRINT(Regieleki) OVERWORLD( - gObjectEventPic_Regieleki, + sPicTable_Regieleki, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7404,7 +7408,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Regidrago) OVERWORLD( - gObjectEventPic_Regidrago, + sPicTable_Regidrago, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7469,7 +7473,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-5, 11, SHADOW_SIZE_L) FOOTPRINT(Glastrier) OVERWORLD( - gObjectEventPic_Glastrier, + sPicTable_Glastrier, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7535,7 +7539,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-6, 12, SHADOW_SIZE_L) FOOTPRINT(Spectrier) OVERWORLD( - gObjectEventPic_Spectrier, + sPicTable_Spectrier, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7601,7 +7605,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Calyrex) OVERWORLD( - gObjectEventPic_Calyrex, + sPicTable_Calyrex, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7668,7 +7672,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-5, 11, SHADOW_SIZE_L) FOOTPRINT(Calyrex) OVERWORLD( - gObjectEventPic_CalyrexIce, + sPicTable_CalyrexIce, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7735,7 +7739,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-5, 12, SHADOW_SIZE_L) FOOTPRINT(Calyrex) OVERWORLD( - gObjectEventPic_CalyrexShadow, + sPicTable_CalyrexShadow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7806,7 +7810,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(-3, 19, SHADOW_SIZE_M) FOOTPRINT(Enamorus) OVERWORLD( - gObjectEventPic_EnamorusIncarnate, + sPicTable_EnamorusIncarnate, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, @@ -7819,6 +7823,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .levelUpLearnset = sEnamorusLevelUpLearnset, .teachableLearnset = sEnamorusTeachableLearnset, .formSpeciesIdTable = sEnamorusFormSpeciesIdTable, + .formChangeTable = sEnamorusFormChangeTable, }, [SPECIES_ENAMORUS_THERIAN] = @@ -7871,7 +7876,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Enamorus) OVERWORLD( - gObjectEventPic_EnamorusTherian, + sPicTable_EnamorusTherian, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, @@ -7884,6 +7889,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .levelUpLearnset = sEnamorusLevelUpLearnset, .teachableLearnset = sEnamorusTeachableLearnset, .formSpeciesIdTable = sEnamorusFormSpeciesIdTable, + .formChangeTable = sEnamorusFormChangeTable, }, #endif //P_FAMILY_ENAMORUS diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index d740424f82..f4f76eec33 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -54,7 +54,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Sprigatito) OVERWORLD( - gObjectEventPic_Sprigatito, + sPicTable_Sprigatito, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -118,7 +118,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-3, 11, SHADOW_SIZE_M) FOOTPRINT(Floragato) OVERWORLD( - gObjectEventPic_Floragato, + sPicTable_Floragato, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -181,7 +181,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-3, 14, SHADOW_SIZE_S) FOOTPRINT(Meowscarada) OVERWORLD( - gObjectEventPic_Meowscarada, + sPicTable_Meowscarada, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -245,7 +245,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Fuecoco) OVERWORLD( - gObjectEventPic_Fuecoco, + sPicTable_Fuecoco, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -309,7 +309,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Crocalor) OVERWORLD( - gObjectEventPic_Crocalor, + sPicTable_Crocalor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -372,7 +372,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(6, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Skeledirge) OVERWORLD( - gObjectEventPic_Skeledirge, + sPicTable_Skeledirge, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -436,7 +436,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Quaxly) OVERWORLD( - gObjectEventPic_Quaxly, + sPicTable_Quaxly, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -500,7 +500,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(1, 10, SHADOW_SIZE_S) FOOTPRINT(Quaxwell) OVERWORLD( - gObjectEventPic_Quaxwell, + sPicTable_Quaxwell, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -563,7 +563,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-7, 13, SHADOW_SIZE_M) FOOTPRINT(Quaquaval) OVERWORLD( - gObjectEventPic_Quaquaval, + sPicTable_Quaquaval, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -627,7 +627,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Lechonk) OVERWORLD( - gObjectEventPic_Lechonk, + sPicTable_Lechonk, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -691,7 +691,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, 6, SHADOW_SIZE_M) FOOTPRINT(Oinkologne) OVERWORLD( - gObjectEventPic_OinkologneM, + sPicTable_OinkologneM, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -754,7 +754,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Oinkologne) OVERWORLD( - gObjectEventPic_OinkologneF, + sPicTable_OinkologneF, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -819,7 +819,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Tarountula) OVERWORLD( - gObjectEventPic_Tarountula, + sPicTable_Tarountula, SIZE_32x32, SHADOW_SIZE_S, TRACKS_BUG, @@ -883,7 +883,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(6, 8, SHADOW_SIZE_L) FOOTPRINT(Spidops) OVERWORLD( - gObjectEventPic_Spidops, + sPicTable_Spidops, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -947,7 +947,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Nymble) OVERWORLD( - gObjectEventPic_Nymble, + sPicTable_Nymble, SIZE_32x32, SHADOW_SIZE_S, TRACKS_BUG, @@ -1011,7 +1011,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Lokix) OVERWORLD( - gObjectEventPic_Lokix, + sPicTable_Lokix, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1075,7 +1075,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Pawmi) OVERWORLD( - gObjectEventPic_Pawmi, + sPicTable_Pawmi, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -1139,7 +1139,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-3, 10, SHADOW_SIZE_S) FOOTPRINT(Pawmo) OVERWORLD( - gObjectEventPic_Pawmo, + sPicTable_Pawmo, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -1202,7 +1202,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Pawmot) OVERWORLD( - gObjectEventPic_Pawmot, + sPicTable_Pawmot, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1266,7 +1266,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Tandemaus) OVERWORLD( - gObjectEventPic_Tandemaus, + sPicTable_Tandemaus, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -1331,7 +1331,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(4, -1, SHADOW_SIZE_L) FOOTPRINT(MausholdThree) OVERWORLD( - gObjectEventPic_MausholdThree, + sPicTable_MausholdThree, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -1393,7 +1393,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, -1, SHADOW_SIZE_L) FOOTPRINT(MausholdFour) OVERWORLD( - gObjectEventPic_MausholdFour, + sPicTable_MausholdFour, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -1458,7 +1458,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(4, 0, SHADOW_SIZE_S) FOOTPRINT(Fidough) OVERWORLD( - gObjectEventPic_Fidough, + sPicTable_Fidough, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -1522,7 +1522,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Dachsbun) OVERWORLD( - gObjectEventPic_Dachsbun, + sPicTable_Dachsbun, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1586,7 +1586,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Smoliv) OVERWORLD( - gObjectEventPic_Smoliv, + sPicTable_Smoliv, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -1650,7 +1650,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Dolliv) OVERWORLD( - gObjectEventPic_Dolliv, + sPicTable_Dolliv, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -1713,7 +1713,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Arboliva) OVERWORLD( - gObjectEventPic_Arboliva, + sPicTable_Arboliva, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -1777,7 +1777,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( - gObjectEventPic_SquawkabillyGreen, + sPicTable_SquawkabillyGreen, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -1841,7 +1841,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( - gObjectEventPic_SquawkabillyBlue, + sPicTable_SquawkabillyBlue, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -1905,7 +1905,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( - gObjectEventPic_SquawkabillyYellow, + sPicTable_SquawkabillyYellow, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -1969,7 +1969,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( - gObjectEventPic_SquawkabillyWhite, + sPicTable_SquawkabillyWhite, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -2035,7 +2035,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Nacli) OVERWORLD( - gObjectEventPic_Nacli, + sPicTable_Nacli, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -2099,7 +2099,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 5, SHADOW_SIZE_L) FOOTPRINT(Naclstack) OVERWORLD( - gObjectEventPic_Naclstack, + sPicTable_Naclstack, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2162,7 +2162,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Garganacl) OVERWORLD( - gObjectEventPic_Garganacl, + sPicTable_Garganacl, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2226,7 +2226,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Charcadet) OVERWORLD( - gObjectEventPic_Charcadet, + sPicTable_Charcadet, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -2291,7 +2291,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Armarouge) OVERWORLD( - gObjectEventPic_Armarouge, + sPicTable_Armarouge, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2353,7 +2353,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(9, 14, SHADOW_SIZE_L) FOOTPRINT(Ceruledge) OVERWORLD( - gObjectEventPic_Ceruledge, + sPicTable_Ceruledge, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2418,7 +2418,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 19, SHADOW_SIZE_S) FOOTPRINT(Tadbulb) OVERWORLD( - gObjectEventPic_Tadbulb, + sPicTable_Tadbulb, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -2482,7 +2482,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Bellibolt) OVERWORLD( - gObjectEventPic_Bellibolt, + sPicTable_Bellibolt, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2546,7 +2546,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Wattrel) OVERWORLD( - gObjectEventPic_Wattrel, + sPicTable_Wattrel, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -2610,7 +2610,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-6, 6, SHADOW_SIZE_M) FOOTPRINT(Kilowattrel) OVERWORLD( - gObjectEventPic_Kilowattrel, + sPicTable_Kilowattrel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -2674,7 +2674,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 5, SHADOW_SIZE_L) FOOTPRINT(Maschiff) OVERWORLD( - gObjectEventPic_Maschiff, + sPicTable_Maschiff, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -2738,7 +2738,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(1, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mabosstiff) OVERWORLD( - gObjectEventPic_Mabosstiff, + sPicTable_Mabosstiff, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2802,7 +2802,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, -6, SHADOW_SIZE_S) FOOTPRINT(Shroodle) OVERWORLD( - gObjectEventPic_Shroodle, + sPicTable_Shroodle, SIZE_32x32, SHADOW_SIZE_S, TRACKS_BUG, @@ -2866,7 +2866,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Grafaiai) OVERWORLD( - gObjectEventPic_Grafaiai, + sPicTable_Grafaiai, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -2930,7 +2930,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Bramblin) OVERWORLD( - gObjectEventPic_Bramblin, + sPicTable_Bramblin, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -2994,7 +2994,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Brambleghast) OVERWORLD( - gObjectEventPic_Brambleghast, + sPicTable_Brambleghast, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -3060,7 +3060,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Toedscool) OVERWORLD( - gObjectEventPic_Toedscool, + sPicTable_Toedscool, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -3126,7 +3126,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Toedscruel) OVERWORLD( - gObjectEventPic_Toedscruel, + sPicTable_Toedscruel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3190,7 +3190,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 0, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Klawf) OVERWORLD( - gObjectEventPic_Klawf, + sPicTable_Klawf, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3255,7 +3255,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Capsakid) OVERWORLD( - gObjectEventPic_Capsakid, + sPicTable_Capsakid, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -3319,7 +3319,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(6, 11, SHADOW_SIZE_M) FOOTPRINT(Scovillain) OVERWORLD( - gObjectEventPic_Scovillain, + sPicTable_Scovillain, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3383,7 +3383,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(4, -3, SHADOW_SIZE_L) FOOTPRINT(Rellor) OVERWORLD( - gObjectEventPic_Rellor, + sPicTable_Rellor, SIZE_32x32, SHADOW_SIZE_S, TRACKS_BUG, @@ -3447,7 +3447,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Rabsca) OVERWORLD( - gObjectEventPic_Rabsca, + sPicTable_Rabsca, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -3511,7 +3511,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Flittle) OVERWORLD( - gObjectEventPic_Flittle, + sPicTable_Flittle, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -3575,7 +3575,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-5, 10, SHADOW_SIZE_M) FOOTPRINT(Espathra) OVERWORLD( - gObjectEventPic_Espathra, + sPicTable_Espathra, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3639,7 +3639,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Tinkatink) OVERWORLD( - gObjectEventPic_Tinkatink, + sPicTable_Tinkatink, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -3703,7 +3703,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-4, 5, SHADOW_SIZE_L) FOOTPRINT(Tinkatuff) OVERWORLD( - gObjectEventPic_Tinkatuff, + sPicTable_Tinkatuff, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -3766,7 +3766,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-5, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tinkaton) OVERWORLD( - gObjectEventPic_Tinkaton, + sPicTable_Tinkaton, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -3829,7 +3829,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = NO_SHADOW FOOTPRINT(Wiglett) OVERWORLD( - gObjectEventPic_Wiglett, + sPicTable_Wiglett, SIZE_32x32, SHADOW_SIZE_S, TRACKS_SLITHER, @@ -3892,7 +3892,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = NO_SHADOW FOOTPRINT(Wugtrio) OVERWORLD( - gObjectEventPic_Wugtrio, + sPicTable_Wugtrio, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -3957,7 +3957,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(1, 18, SHADOW_SIZE_M) FOOTPRINT(Bombirdier) OVERWORLD( - gObjectEventPic_Bombirdier, + sPicTable_Bombirdier, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -4021,7 +4021,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Finizen) OVERWORLD( - gObjectEventPic_Finizen, + sPicTable_Finizen, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -4085,7 +4085,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Palafin) OVERWORLD( - gObjectEventPic_PalafinZero, + sPicTable_PalafinZero, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -4149,7 +4149,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(1, 13, SHADOW_SIZE_M) FOOTPRINT(Palafin) OVERWORLD( - gObjectEventPic_PalafinHero, + sPicTable_PalafinHero, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -4215,7 +4215,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 0, SHADOW_SIZE_M) FOOTPRINT(Varoom) OVERWORLD( - gObjectEventPic_Varoom, + sPicTable_Varoom, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -4279,7 +4279,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Revavroom) OVERWORLD( - gObjectEventPic_Revavroom, + sPicTable_Revavroom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -4343,7 +4343,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Cyclizar) OVERWORLD( - gObjectEventPic_Cyclizar, + sPicTable_Cyclizar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4408,7 +4408,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(6, 10, SHADOW_SIZE_L) FOOTPRINT(Orthworm) OVERWORLD( - gObjectEventPic_Orthworm, + sPicTable_Orthworm, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -4474,7 +4474,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Glimmet) OVERWORLD( - gObjectEventPic_Glimmet, + sPicTable_Glimmet, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -4539,7 +4539,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-3, 17, SHADOW_SIZE_M) FOOTPRINT(Glimmora) OVERWORLD( - gObjectEventPic_Glimmora, + sPicTable_Glimmora, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -4603,7 +4603,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(3, 2, SHADOW_SIZE_M) FOOTPRINT(Greavard) OVERWORLD( - gObjectEventPic_Greavard, + sPicTable_Greavard, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -4667,7 +4667,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Houndstone) OVERWORLD( - gObjectEventPic_Houndstone, + sPicTable_Houndstone, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4731,7 +4731,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Flamigo) OVERWORLD( - gObjectEventPic_Flamigo, + sPicTable_Flamigo, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -4796,7 +4796,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 0, SHADOW_SIZE_M) FOOTPRINT(Cetoddle) OVERWORLD( - gObjectEventPic_Cetoddle, + sPicTable_Cetoddle, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -4860,7 +4860,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Cetitan) OVERWORLD( - gObjectEventPic_Cetitan, + sPicTable_Cetitan, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -4925,7 +4925,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Veluza) OVERWORLD( - gObjectEventPic_Veluza, + sPicTable_Veluza, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -4991,7 +4991,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dondozo) OVERWORLD( - gObjectEventPic_Dondozo, + sPicTable_Dondozo, SIZE_64x64, SHADOW_SIZE_L, TRACKS_NONE, @@ -5056,7 +5056,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) OVERWORLD( - gObjectEventPic_TatsugiriCurly, + sPicTable_TatsugiriCurly, SIZE_32x32, SHADOW_SIZE_S, TRACKS_SLITHER, @@ -5119,7 +5119,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) OVERWORLD( - gObjectEventPic_TatsugiriDroopy, + sPicTable_TatsugiriDroopy, SIZE_32x32, SHADOW_SIZE_S, TRACKS_SLITHER, @@ -5182,7 +5182,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) OVERWORLD( - gObjectEventPic_TatsugiriStretchy, + sPicTable_TatsugiriStretchy, SIZE_32x32, SHADOW_SIZE_S, TRACKS_SLITHER, @@ -5249,7 +5249,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(3, 6, SHADOW_SIZE_L) FOOTPRINT(GreatTusk) OVERWORLD( - gObjectEventPic_GreatTusk, + sPicTable_GreatTusk, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5315,7 +5315,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(ScreamTail) OVERWORLD( - gObjectEventPic_ScreamTail, + sPicTable_ScreamTail, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5381,7 +5381,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(BruteBonnet) OVERWORLD( - gObjectEventPic_BruteBonnet, + sPicTable_BruteBonnet, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5450,7 +5450,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, 20, SHADOW_SIZE_S) FOOTPRINT(FlutterMane) OVERWORLD( - gObjectEventPic_FlutterMane, + sPicTable_FlutterMane, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -5515,7 +5515,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-5, 13, SHADOW_SIZE_M) FOOTPRINT(SlitherWing) OVERWORLD( - gObjectEventPic_SlitherWing, + sPicTable_SlitherWing, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -5581,7 +5581,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(SandyShocks) OVERWORLD( - gObjectEventPic_SandyShocks, + sPicTable_SandyShocks, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5647,7 +5647,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(4, 3, SHADOW_SIZE_L) FOOTPRINT(IronTreads) OVERWORLD( - gObjectEventPic_IronTreads, + sPicTable_IronTreads, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5713,7 +5713,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(IronBundle) OVERWORLD( - gObjectEventPic_IronBundle, + sPicTable_IronBundle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5779,7 +5779,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(IronHands) OVERWORLD( - gObjectEventPic_IronHands, + sPicTable_IronHands, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5846,7 +5846,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(IronJugulis) OVERWORLD( - gObjectEventPic_IronJugulis, + sPicTable_IronJugulis, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -5913,7 +5913,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-4, 14, SHADOW_SIZE_M) FOOTPRINT(IronMoth) OVERWORLD( - gObjectEventPic_IronMoth, + sPicTable_IronMoth, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5979,7 +5979,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-9, 12, SHADOW_SIZE_L) FOOTPRINT(IronThorns) OVERWORLD( - gObjectEventPic_IronThorns, + sPicTable_IronThorns, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6044,7 +6044,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Frigibax) OVERWORLD( - gObjectEventPic_Frigibax, + sPicTable_Frigibax, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -6108,7 +6108,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Arctibax) OVERWORLD( - gObjectEventPic_Arctibax, + sPicTable_Arctibax, SIZE_32x32, SHADOW_SIZE_S, TRACKS_FOOT, @@ -6171,7 +6171,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(5, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Baxcalibur) OVERWORLD( - gObjectEventPic_Baxcalibur, + sPicTable_Baxcalibur, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6235,7 +6235,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(GimmighoulChest) OVERWORLD( - gObjectEventPic_GimmighoulChest, + sPicTable_GimmighoulChest, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -6354,7 +6354,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Gholdengo) OVERWORLD( - gObjectEventPic_Gholdengo, + sPicTable_Gholdengo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -6418,7 +6418,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(WoChien) OVERWORLD( - gObjectEventPic_WoChien, + sPicTable_WoChien, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, @@ -6484,7 +6484,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-4, 8, SHADOW_SIZE_L) FOOTPRINT(ChienPao) OVERWORLD( - gObjectEventPic_ChienPao, + sPicTable_ChienPao, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6550,7 +6550,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(12, 13, SHADOW_SIZE_L) FOOTPRINT(TingLu) OVERWORLD( - gObjectEventPic_TingLu, + sPicTable_TingLu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6617,7 +6617,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 16, SHADOW_SIZE_S) FOOTPRINT(ChiYu) OVERWORLD( - gObjectEventPic_ChiYu, + sPicTable_ChiYu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -6685,7 +6685,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(RoaringMoon) OVERWORLD( - gObjectEventPic_RoaringMoon, + sPicTable_RoaringMoon, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6750,7 +6750,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(IronValiant) OVERWORLD( - gObjectEventPic_IronValiant, + sPicTable_IronValiant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -6815,7 +6815,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Koraidon) OVERWORLD( - gObjectEventPic_Koraidon, + sPicTable_Koraidon, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, @@ -6882,7 +6882,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(10, 14, SHADOW_SIZE_L) FOOTPRINT(Miraidon) OVERWORLD( - gObjectEventPic_Miraidon, + sPicTable_Miraidon, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, @@ -6949,7 +6949,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(WalkingWake) OVERWORLD( - gObjectEventPic_WalkingWake, + sPicTable_WalkingWake, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7014,7 +7014,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(IronLeaves) OVERWORLD( - gObjectEventPic_IronLeaves, + sPicTable_IronLeaves, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7080,7 +7080,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 14, SHADOW_SIZE_S) FOOTPRINT(Poltchageist) OVERWORLD( - gObjectEventPic_Poltchageist, + sPicTable_Poltchageist, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -7091,6 +7091,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .levelUpLearnset = sPoltchageistLevelUpLearnset, .teachableLearnset = sPoltchageistTeachableLearnset, .evolutions = EVOLUTION({EVO_ITEM, ITEM_UNREMARKABLE_TEACUP, SPECIES_SINISTCHA_UNREMARKABLE}), + .formSpeciesIdTable = sPoltchageistFormSpeciesIdTable, }, [SPECIES_POLTCHAGEIST_ARTISAN] = { @@ -7143,7 +7144,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 14, SHADOW_SIZE_S) FOOTPRINT(Poltchageist) OVERWORLD( - gObjectEventPic_Poltchageist, + sPicTable_Poltchageist, SIZE_32x32, SHADOW_SIZE_S, TRACKS_NONE, @@ -7154,6 +7155,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .levelUpLearnset = sPoltchageistLevelUpLearnset, .teachableLearnset = sPoltchageistTeachableLearnset, .evolutions = EVOLUTION({EVO_ITEM, ITEM_MASTERPIECE_TEACUP, SPECIES_SINISTCHA_MASTERPIECE}), + .formSpeciesIdTable = sPoltchageistFormSpeciesIdTable, }, [SPECIES_SINISTCHA_UNREMARKABLE] = @@ -7207,7 +7209,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Sinistcha) OVERWORLD( - gObjectEventPic_Sinistcha, + sPicTable_Sinistcha, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -7217,6 +7219,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = ) .levelUpLearnset = sSinistchaLevelUpLearnset, .teachableLearnset = sSinistchaTeachableLearnset, + .formSpeciesIdTable = sSinistchaFormSpeciesIdTable, }, [SPECIES_SINISTCHA_MASTERPIECE] = { @@ -7269,7 +7272,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Sinistcha) OVERWORLD( - gObjectEventPic_Sinistcha, + sPicTable_Sinistcha, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, @@ -7279,6 +7282,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = ) .levelUpLearnset = sSinistchaLevelUpLearnset, .teachableLearnset = sSinistchaTeachableLearnset, + .formSpeciesIdTable = sSinistchaFormSpeciesIdTable, }, #endif //P_FAMILY_POLTCHAGEIST @@ -7333,7 +7337,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Okidogi) OVERWORLD( - gObjectEventPic_Okidogi, + sPicTable_Okidogi, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7399,7 +7403,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(1, 8, SHADOW_SIZE_S) FOOTPRINT(Munkidori) OVERWORLD( - gObjectEventPic_Munkidori, + sPicTable_Munkidori, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7465,7 +7469,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-3, 10, SHADOW_SIZE_M) FOOTPRINT(Fezandipiti) OVERWORLD( - gObjectEventPic_Fezandipiti, + sPicTable_Fezandipiti, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7481,68 +7485,68 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = #endif //P_FAMILY_FEZANDIPITI #if P_FAMILY_OGERPON -#define OGERPON_SPECIES_INFO(Form1, Form2, type, ability, color, frontYOffset, backYOffset, iconpalette, isTeraform) \ - { \ - .baseHP = 80, \ - .baseAttack = 120, \ - .baseDefense = 84, \ - .baseSpeed = 110, \ - .baseSpAttack = 60, \ - .baseSpDefense = 96, \ - .types = MON_TYPES(TYPE_GRASS, type), \ - .forceTeraType = type, \ - .catchRate = 5, \ - .expYield = 275, \ - .evYield_Attack = 3, \ - .genderRatio = MON_FEMALE, \ - .eggCycles = 10, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ability, ABILITY_NONE }, \ - .bodyColor = color, \ - .speciesName = _("Ogerpon"), \ - .cryId = CRY_OGERPON, \ - .natDexNum = NATIONAL_DEX_OGERPON, \ - .categoryName = _("Mask"), \ - .height = 12, \ - .weight = 398, \ - .description = gOgerpon##Form1##MaskPokedexText, \ - .pokemonScale = 356, \ - .pokemonOffset = 17, \ - .trainerScale = 256, \ - .trainerOffset = 0, \ - .frontPic = gMonFrontPic_Ogerpon##Form2, \ - .frontPicSize = MON_COORDS_SIZE(64, 64), \ - .frontPicYOffset = frontYOffset, \ - .frontAnimFrames = sAnims_SingleFramePlaceHolder, \ - /*.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,*/ \ - .backPic = gMonBackPic_Ogerpon##Form2, \ - .backPicSize = MON_COORDS_SIZE(64, 64), \ - .backPicYOffset = backYOffset, \ - /*.backAnimId = BACK_ANIM_NONE,*/ \ - .palette = gMonPalette_Ogerpon##Form2, \ - .shinyPalette = gMonShinyPalette_Ogerpon##Form2, \ - .iconSprite = gMonIcon_Ogerpon##Form1, \ - .iconPalIndex = iconpalette, \ - SHADOW(7, 13, SHADOW_SIZE_L) \ - FOOTPRINT(Ogerpon) \ - OVERWORLD( \ - gObjectEventPic_Ogerpon##Form2, \ - SIZE_32x32, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - sAnimTable_Following, \ - gOverworldPalette_Ogerpon##Form2, \ - gShinyOverworldPalette_Ogerpon##Form2 \ - ) \ - .levelUpLearnset = sOgerponLevelUpLearnset, \ - .teachableLearnset = sOgerponTeachableLearnset, \ - .formSpeciesIdTable = sOgerponFormSpeciesIdTable, \ - .formChangeTable = sOgerponFormChangeTable, \ - .isLegendary = TRUE, \ - .isTeraForm = isTeraform, \ - .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ +#define OGERPON_SPECIES_INFO(Form1, Form2, type, ability, color, frontYOffset, backYOffset, iconpalette, isTeraform) \ + { \ + .baseHP = 80, \ + .baseAttack = 120, \ + .baseDefense = 84, \ + .baseSpeed = 110, \ + .baseSpAttack = 60, \ + .baseSpDefense = 96, \ + .types = MON_TYPES(TYPE_GRASS, type), \ + .forceTeraType = type, \ + .catchRate = 5, \ + .expYield = 275, \ + .evYield_Attack = 3, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 10, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ability, ABILITY_NONE }, \ + .bodyColor = color, \ + .speciesName = _("Ogerpon"), \ + .cryId = CRY_OGERPON, \ + .natDexNum = NATIONAL_DEX_OGERPON, \ + .categoryName = _("Mask"), \ + .height = 12, \ + .weight = 398, \ + .description = gOgerpon##Form1##MaskPokedexText, \ + .pokemonScale = 356, \ + .pokemonOffset = 17, \ + .trainerScale = 256, \ + .trainerOffset = 0, \ + .frontPic = gMonFrontPic_Ogerpon##Form2, \ + .frontPicSize = MON_COORDS_SIZE(64, 64), \ + .frontPicYOffset = frontYOffset, \ + .frontAnimFrames = sAnims_SingleFramePlaceHolder, \ + /*.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,*/ \ + .backPic = gMonBackPic_Ogerpon##Form2, \ + .backPicSize = MON_COORDS_SIZE(64, 64), \ + .backPicYOffset = backYOffset, \ + /*.backAnimId = BACK_ANIM_NONE,*/ \ + .palette = gMonPalette_Ogerpon##Form2, \ + .shinyPalette = gMonShinyPalette_Ogerpon##Form2, \ + .iconSprite = gMonIcon_Ogerpon##Form1, \ + .iconPalIndex = iconpalette, \ + SHADOW(7, 13, SHADOW_SIZE_L) \ + FOOTPRINT(Ogerpon) \ + OVERWORLD( \ + sPicTable_Ogerpon##Form2, \ + SIZE_32x32, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + sAnimTable_Following, \ + gOverworldPalette_Ogerpon##Form2, \ + gShinyOverworldPalette_Ogerpon##Form2 \ + ) \ + .levelUpLearnset = sOgerponLevelUpLearnset, \ + .teachableLearnset = sOgerponTeachableLearnset, \ + .formSpeciesIdTable = sOgerponFormSpeciesIdTable, \ + .formChangeTable = sOgerponFormChangeTable, \ + .isLegendary = TRUE, \ + .isTeraForm = isTeraform, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_OGERPON_TEAL] = OGERPON_SPECIES_INFO(Teal, Teal, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, 7, 1, FALSE), @@ -7610,7 +7614,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(GougingFire) OVERWORLD( - gObjectEventPic_GougingFire, + sPicTable_GougingFire, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7676,7 +7680,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(RagingBolt) OVERWORLD( - gObjectEventPic_RagingBolt, + sPicTable_RagingBolt, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7741,7 +7745,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(4, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(IronBoulder) OVERWORLD( - gObjectEventPic_IronBoulder, + sPicTable_IronBoulder, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7807,7 +7811,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(IronCrown) OVERWORLD( - gObjectEventPic_IronCrown, + sPicTable_IronCrown, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7874,7 +7878,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(3, 13, SHADOW_SIZE_L) FOOTPRINT(TerapagosNormal) OVERWORLD( - gObjectEventPic_TerapagosNormal, + sPicTable_TerapagosNormal, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -7944,7 +7948,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(-4, 4, SHADOW_SIZE_L) FOOTPRINT(TerapagosTerastal) OVERWORLD( - gObjectEventPic_TerapagosTerastal, + sPicTable_TerapagosTerastal, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, @@ -8073,7 +8077,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = SHADOW(2, 1, SHADOW_SIZE_L) FOOTPRINT(Pecharunt) OVERWORLD( - gObjectEventPic_Pecharunt, + sPicTable_Pecharunt, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, diff --git a/src/data/trainers.h b/src/data/trainers.h index a491b482ed..af19c90ae2 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -303,7 +303,7 @@ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 196 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 197 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 198 @@ -555,7 +555,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = #line 294 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 295 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 296 @@ -1007,7 +1007,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = #line 474 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 475 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 476 @@ -1041,7 +1041,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = #line 487 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 488 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 489 @@ -1075,7 +1075,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = #line 500 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 501 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 502 @@ -1229,7 +1229,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, .encounterMusic_gender = #line 561 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 562 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 563 @@ -1274,7 +1274,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, .encounterMusic_gender = #line 578 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 579 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 580 @@ -1375,7 +1375,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 617 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 618 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 619 @@ -1409,7 +1409,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = #line 630 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 631 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 632 @@ -1454,7 +1454,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = #line 647 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 648 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 649 @@ -1564,7 +1564,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = #line 689 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 690 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 691 @@ -1609,7 +1609,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = #line 706 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 707 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 708 @@ -1654,7 +1654,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = #line 723 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 724 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 725 @@ -1710,7 +1710,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = #line 744 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 745 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 746 @@ -1766,7 +1766,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = #line 765 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 766 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 767 @@ -2421,7 +2421,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = #line 1039 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1040 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 1041 @@ -2466,7 +2466,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = #line 1056 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1057 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 1058 @@ -2500,7 +2500,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = #line 1069 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1070 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 1071 @@ -2534,7 +2534,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = #line 1082 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1083 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 1084 @@ -2579,7 +2579,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = #line 1099 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1100 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 1101 @@ -2624,7 +2624,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = #line 1116 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1117 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 1118 @@ -2669,7 +2669,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = #line 1133 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1134 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 1135 @@ -3953,7 +3953,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1656 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1657 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1658 @@ -3994,7 +3994,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1672 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1673 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1674 @@ -4036,7 +4036,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1689 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1690 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1691 @@ -4077,7 +4077,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1705 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1706 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1707 @@ -4156,7 +4156,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1739 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1740 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1741 @@ -4203,7 +4203,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1757 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1758 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1759 @@ -4261,7 +4261,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1779 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1780 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1781 @@ -4297,7 +4297,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1793 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1794 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1795 @@ -4333,7 +4333,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1807 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1808 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1809 @@ -4369,7 +4369,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1821 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1822 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1823 @@ -4427,7 +4427,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1843 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1844 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1845 @@ -4474,7 +4474,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1861 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1862 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1863 @@ -4532,7 +4532,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1883 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1884 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1885 @@ -4590,7 +4590,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1905 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1906 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1907 @@ -4648,7 +4648,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1927 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1928 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1929 @@ -4706,7 +4706,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 1949 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1950 TRAINER_ENCOUNTER_MUSIC_COOL, #line 1951 @@ -4764,7 +4764,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 1971 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1972 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 1973 @@ -4809,7 +4809,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 1988 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 1989 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 1990 @@ -4854,7 +4854,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 2005 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2006 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 2007 @@ -4899,7 +4899,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 2022 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2023 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 2024 @@ -4933,7 +4933,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 2035 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2036 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 2037 @@ -4967,7 +4967,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 2048 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2049 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 2050 @@ -5012,7 +5012,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 2065 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2066 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 2067 @@ -5057,7 +5057,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 2082 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2083 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 2084 @@ -5102,7 +5102,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 2099 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2100 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 2101 @@ -5158,7 +5158,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = #line 2120 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2121 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2122 @@ -5196,7 +5196,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = #line 2134 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2135 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2136 @@ -5315,7 +5315,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = #line 2181 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2182 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2183 @@ -5358,7 +5358,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = #line 2197 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2198 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2199 @@ -5396,7 +5396,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = #line 2211 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2212 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2213 @@ -5434,7 +5434,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = #line 2225 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2226 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2227 @@ -5472,7 +5472,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = #line 2239 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2240 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2241 @@ -5510,7 +5510,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = #line 2253 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2254 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2255 @@ -5548,7 +5548,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = #line 2267 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2268 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2269 @@ -5593,7 +5593,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2285 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2286 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2287 @@ -5627,7 +5627,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2298 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2299 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2300 @@ -5661,7 +5661,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2311 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2312 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2313 @@ -5695,7 +5695,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2324 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2325 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2326 @@ -5754,7 +5754,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2349 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2350 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2351 @@ -5788,7 +5788,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2362 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2363 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2364 @@ -5822,7 +5822,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2375 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2376 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2377 @@ -5898,7 +5898,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2407 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2408 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2409 @@ -5943,7 +5943,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2424 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2425 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2426 @@ -6002,7 +6002,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2449 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2450 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2451 @@ -6061,7 +6061,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2474 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2475 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2476 @@ -6120,7 +6120,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2499 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2500 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2501 @@ -6215,7 +6215,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = #line 2538 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2539 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 2540 @@ -6479,7 +6479,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 2642 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2643 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 2644 @@ -6556,7 +6556,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = #line 2672 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 2673 TRAINER_ENCOUNTER_MUSIC_MAGMA, #line 2674 @@ -8342,7 +8342,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = #line 3385 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 3386 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 3387 @@ -9414,7 +9414,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 3814 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 3815 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 3816 @@ -10595,7 +10595,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 4277 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4278 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4279 @@ -10633,7 +10633,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 4291 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4292 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4293 @@ -10667,7 +10667,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 4304 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4305 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4306 @@ -10701,7 +10701,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 4317 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4318 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4319 @@ -10735,7 +10735,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 4330 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4331 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4332 @@ -10791,7 +10791,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 4351 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4352 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4353 @@ -10836,7 +10836,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 4368 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4369 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4370 @@ -10881,7 +10881,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 4385 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4386 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4387 @@ -10926,7 +10926,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 4402 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4403 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4404 @@ -10971,7 +10971,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 4419 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4420 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4421 @@ -11016,7 +11016,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 4436 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4437 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4438 @@ -11505,7 +11505,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_ELITE_FOUR_PHOEBE, .encounterMusic_gender = #line 4642 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4643 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, #line 4644 @@ -11624,7 +11624,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_ELITE_FOUR_GLACIA, .encounterMusic_gender = #line 4693 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4694 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, #line 4695 @@ -11860,7 +11860,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = #line 4795 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4796 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 4797 @@ -12117,7 +12117,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = #line 4905 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4906 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 4907 @@ -12313,7 +12313,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = #line 4989 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 4990 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 4991 @@ -12945,7 +12945,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = #line 5250 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5251 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 5252 @@ -12979,7 +12979,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = #line 5263 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5264 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 5265 @@ -13024,7 +13024,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = #line 5280 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5281 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 5282 @@ -13069,7 +13069,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = #line 5297 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5298 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 5299 @@ -13114,7 +13114,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = #line 5314 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5315 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 5316 @@ -13159,7 +13159,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = #line 5331 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5332 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 5333 @@ -13899,7 +13899,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = #line 5632 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5633 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 5634 @@ -13935,7 +13935,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = #line 5645 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5646 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 5647 @@ -13971,7 +13971,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = #line 5658 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5659 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 5660 @@ -14033,7 +14033,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = #line 5679 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5680 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 5681 @@ -14082,7 +14082,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = #line 5696 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5697 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 5698 @@ -14131,7 +14131,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = #line 5713 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5714 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 5715 @@ -14180,7 +14180,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = #line 5730 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5731 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 5732 @@ -14229,7 +14229,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = #line 5747 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5748 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 5749 @@ -14466,7 +14466,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = #line 5845 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5846 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 5847 @@ -14507,7 +14507,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = #line 5862 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5863 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 5864 @@ -14552,7 +14552,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = #line 5879 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5880 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 5881 @@ -14597,7 +14597,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = #line 5896 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5897 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 5898 @@ -14642,7 +14642,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = #line 5913 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5914 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 5915 @@ -14687,7 +14687,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = #line 5930 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 5931 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 5932 @@ -15034,7 +15034,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 6072 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6073 TRAINER_ENCOUNTER_MUSIC_COOL, #line 6074 @@ -16662,7 +16662,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = #line 6720 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6721 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6722 @@ -16696,7 +16696,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = #line 6733 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6734 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6735 @@ -16752,7 +16752,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = #line 6754 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6755 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6756 @@ -16786,7 +16786,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = #line 6767 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6768 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6769 @@ -16820,7 +16820,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = #line 6780 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6781 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6782 @@ -16854,7 +16854,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = #line 6793 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6794 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6795 @@ -17048,7 +17048,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = #line 6871 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6872 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6873 @@ -17082,7 +17082,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = #line 6884 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6885 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6886 @@ -17116,7 +17116,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = #line 6897 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6898 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6899 @@ -17150,7 +17150,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = #line 6910 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6911 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6912 @@ -17184,7 +17184,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = #line 6923 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 6924 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6925 @@ -17550,7 +17550,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = #line 7069 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7070 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 7071 @@ -17584,7 +17584,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = #line 7082 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7083 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 7084 @@ -17629,7 +17629,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = #line 7099 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7100 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 7101 @@ -17663,7 +17663,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = #line 7112 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7113 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 7114 @@ -17697,7 +17697,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = #line 7125 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7126 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 7127 @@ -17742,7 +17742,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = #line 7142 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7143 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 7144 @@ -17776,7 +17776,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = #line 7155 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7156 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 7157 @@ -17810,7 +17810,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = #line 7168 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7169 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 7170 @@ -17844,7 +17844,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = #line 7181 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7182 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 7183 @@ -18929,7 +18929,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 7611 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7612 TRAINER_ENCOUNTER_MUSIC_COOL, #line 7613 @@ -18984,7 +18984,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = #line 7632 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7633 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 7634 @@ -19482,7 +19482,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 7838 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7839 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 7840 @@ -19516,7 +19516,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 7851 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7852 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 7853 @@ -19550,7 +19550,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 7864 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7865 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 7866 @@ -19595,7 +19595,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 7881 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7882 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 7883 @@ -19629,7 +19629,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 7894 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7895 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 7896 @@ -19663,7 +19663,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 7907 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7908 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 7909 @@ -19708,7 +19708,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 7924 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7925 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 7926 @@ -19753,7 +19753,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 7941 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7942 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 7943 @@ -19798,7 +19798,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 7958 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7959 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 7960 @@ -19843,7 +19843,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = #line 7975 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7976 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 7977 @@ -19884,7 +19884,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = #line 7992 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 7993 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 7994 @@ -19929,7 +19929,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = #line 8009 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8010 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 8011 @@ -19970,7 +19970,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = #line 8026 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8027 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 8028 @@ -20011,7 +20011,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = #line 8043 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8044 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 8045 @@ -20052,7 +20052,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = #line 8060 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8061 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 8062 @@ -20111,7 +20111,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = #line 8085 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8086 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 8087 @@ -20170,7 +20170,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8110 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8111 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8112 @@ -20215,7 +20215,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8127 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8128 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8129 @@ -20249,7 +20249,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8140 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8141 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8142 @@ -20283,7 +20283,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8153 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8154 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8155 @@ -20328,7 +20328,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8170 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8171 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8172 @@ -20362,7 +20362,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8183 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8184 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8185 @@ -20407,7 +20407,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8200 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8201 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8202 @@ -20441,7 +20441,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8213 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8214 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8215 @@ -20497,7 +20497,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8234 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8235 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8236 @@ -20531,7 +20531,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8247 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8248 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8249 @@ -20565,7 +20565,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8260 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8261 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8262 @@ -20599,7 +20599,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8273 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8274 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8275 @@ -20633,7 +20633,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8286 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8287 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8288 @@ -20678,7 +20678,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8303 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8304 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8305 @@ -20712,7 +20712,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8316 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8317 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8318 @@ -20757,7 +20757,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8333 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8334 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8335 @@ -20791,7 +20791,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8346 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8347 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8348 @@ -20825,7 +20825,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8359 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8360 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8361 @@ -20859,7 +20859,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8372 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8373 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8374 @@ -20904,7 +20904,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8389 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8390 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8391 @@ -20938,7 +20938,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8402 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8403 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8404 @@ -20983,7 +20983,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8419 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8420 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8421 @@ -21028,7 +21028,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8436 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8437 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8438 @@ -21073,7 +21073,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8453 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8454 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8455 @@ -21107,7 +21107,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8466 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8467 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8468 @@ -21141,7 +21141,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8479 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8480 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8481 @@ -21175,7 +21175,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8492 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8493 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8494 @@ -21220,7 +21220,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 8509 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8510 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 8511 @@ -21276,7 +21276,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 8530 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8531 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 8532 @@ -21335,7 +21335,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 8555 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8556 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 8557 @@ -21394,7 +21394,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 8580 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8581 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 8582 @@ -21439,7 +21439,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 8597 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8598 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 8599 @@ -21484,7 +21484,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 8614 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8615 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 8616 @@ -21529,7 +21529,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 8631 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8632 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 8633 @@ -21624,7 +21624,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 8669 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8670 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 8671 @@ -21669,7 +21669,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 8686 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8687 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 8688 @@ -21725,7 +21725,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 8707 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8708 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 8709 @@ -21781,7 +21781,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 8728 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8729 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 8730 @@ -21837,7 +21837,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 8749 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 8750 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 8751 @@ -22878,7 +22878,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = #line 9163 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9164 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 9165 @@ -22941,7 +22941,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 9188 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9189 TRAINER_ENCOUNTER_MUSIC_COOL, #line 9190 @@ -23016,7 +23016,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = #line 9219 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9220 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 9221 @@ -23143,7 +23143,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 9270 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9271 TRAINER_ENCOUNTER_MUSIC_COOL, #line 9272 @@ -23186,7 +23186,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 9288 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9289 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 9290 @@ -24151,7 +24151,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 9673 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9674 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 9675 @@ -24185,7 +24185,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 9686 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9687 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 9688 @@ -24241,7 +24241,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 9707 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9708 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 9709 @@ -24297,7 +24297,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 9728 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9729 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 9730 @@ -24331,7 +24331,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 9741 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9742 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 9743 @@ -24387,7 +24387,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 9762 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9763 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 9764 @@ -24443,7 +24443,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 9783 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9784 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 9785 @@ -24477,7 +24477,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 9796 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9797 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 9798 @@ -24533,7 +24533,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 9817 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 9818 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 9819 @@ -25113,7 +25113,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 10041 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10042 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 10043 @@ -25202,7 +25202,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 10074 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10075 TRAINER_ENCOUNTER_MUSIC_COOL, #line 10076 @@ -25281,7 +25281,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 10105 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10106 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 10107 @@ -25370,7 +25370,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 10138 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10139 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 10140 @@ -25459,7 +25459,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 10171 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10172 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 10173 @@ -25548,7 +25548,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 10204 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10205 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 10206 @@ -25908,7 +25908,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = #line 10347 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10348 TRAINER_ENCOUNTER_MUSIC_COOL, #line 10349 @@ -25955,7 +25955,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = #line 10365 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10366 TRAINER_ENCOUNTER_MUSIC_COOL, #line 10367 @@ -26013,7 +26013,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = #line 10387 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10388 TRAINER_ENCOUNTER_MUSIC_COOL, #line 10389 @@ -26060,7 +26060,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = #line 10405 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10406 TRAINER_ENCOUNTER_MUSIC_COOL, #line 10407 @@ -26107,7 +26107,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = #line 10423 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10424 TRAINER_ENCOUNTER_MUSIC_COOL, #line 10425 @@ -26154,7 +26154,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = #line 10441 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10442 TRAINER_ENCOUNTER_MUSIC_COOL, #line 10443 @@ -26201,7 +26201,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = #line 10459 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10460 TRAINER_ENCOUNTER_MUSIC_COOL, #line 10461 @@ -26323,7 +26323,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = #line 10507 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10508 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 10509 @@ -26368,7 +26368,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = #line 10524 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10525 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 10526 @@ -26531,7 +26531,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 10588 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10589 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 10590 @@ -26597,7 +26597,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 10614 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10615 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 10616 @@ -26663,7 +26663,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 10640 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10641 TRAINER_ENCOUNTER_MUSIC_COOL, #line 10642 @@ -26817,7 +26817,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 10702 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10703 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 10704 @@ -26883,7 +26883,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = #line 10728 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10729 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, #line 10730 @@ -26981,7 +26981,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = #line 10767 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10768 TRAINER_ENCOUNTER_MUSIC_MAGMA, #line 10769 @@ -27154,7 +27154,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 10836 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10837 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 10838 @@ -27317,7 +27317,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = #line 10900 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10901 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 10902 @@ -27351,7 +27351,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = #line 10913 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10914 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 10915 @@ -27549,7 +27549,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 10990 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 10991 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 10992 @@ -27706,7 +27706,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11051 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11052 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11053 @@ -27751,7 +27751,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11068 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11069 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11070 @@ -27796,7 +27796,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11085 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11086 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11087 @@ -27830,7 +27830,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11098 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11099 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11100 @@ -27886,7 +27886,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11119 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11120 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11121 @@ -27931,7 +27931,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11136 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11137 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11138 @@ -27976,7 +27976,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11153 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11154 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11155 @@ -28021,7 +28021,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11170 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11171 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11172 @@ -28077,7 +28077,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11191 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11192 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11193 @@ -28111,7 +28111,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11204 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11205 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11206 @@ -28167,7 +28167,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11225 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11226 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11227 @@ -28201,7 +28201,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = #line 11238 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11239 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11240 @@ -29769,7 +29769,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 11853 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11854 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 11855 @@ -29844,7 +29844,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 11884 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11885 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 11886 @@ -29903,7 +29903,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 11909 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 11910 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 11911 @@ -30158,7 +30158,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 12018 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 12019 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 12020 @@ -30893,7 +30893,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 12327 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 12328 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 12329 @@ -30960,7 +30960,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 12352 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 12353 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 12354 @@ -31027,7 +31027,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 12377 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 12378 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 12379 @@ -31245,7 +31245,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 12461 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 12462 TRAINER_ENCOUNTER_MUSIC_COOL, #line 12463 @@ -31509,7 +31509,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 12565 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 12566 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 12567 @@ -32453,7 +32453,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = #line 12956 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 12957 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 12958 @@ -32534,7 +32534,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = #line 12987 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 12988 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 12989 @@ -32701,7 +32701,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = #line 13051 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13052 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 13053 @@ -32831,7 +32831,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = #line 13103 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13104 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 13105 @@ -32865,7 +32865,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 13116 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13117 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 13118 @@ -32931,7 +32931,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 13142 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13143 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 13144 @@ -33105,7 +33105,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 13210 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13211 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 13212 @@ -33182,7 +33182,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 13240 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13241 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 13242 @@ -33708,7 +33708,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = #line 13451 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13452 TRAINER_ENCOUNTER_MUSIC_MAGMA, #line 13453 @@ -33742,7 +33742,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = #line 13464 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13465 TRAINER_ENCOUNTER_MUSIC_MAGMA, #line 13466 @@ -33776,7 +33776,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = #line 13477 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13478 TRAINER_ENCOUNTER_MUSIC_MAGMA, #line 13479 @@ -33875,7 +33875,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 13515 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13516 TRAINER_ENCOUNTER_MUSIC_COOL, #line 13517 @@ -34008,7 +34008,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = #line 13567 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13568 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 13569 @@ -34214,7 +34214,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 13648 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13649 TRAINER_ENCOUNTER_MUSIC_COOL, #line 13650 @@ -34315,7 +34315,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = #line 13687 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13688 TRAINER_ENCOUNTER_MUSIC_GIRL, #line 13689 @@ -34489,7 +34489,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = #line 13755 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13756 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 13757 @@ -34534,7 +34534,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = #line 13772 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13773 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 13774 @@ -34622,7 +34622,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 13806 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13807 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 13808 @@ -34667,7 +34667,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 13823 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13824 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 13825 @@ -34712,7 +34712,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 13840 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13841 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 13842 @@ -34843,7 +34843,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = #line 13891 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13892 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 13893 @@ -34877,7 +34877,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 13904 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13905 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 13906 @@ -34911,7 +34911,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 13917 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13918 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 13919 @@ -34945,7 +34945,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = #line 13930 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13931 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 13932 @@ -35067,7 +35067,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = #line 13978 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 13979 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 13980 @@ -35141,7 +35141,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 14008 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14009 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 14010 @@ -35316,7 +35316,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 14075 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14076 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 14077 @@ -35405,7 +35405,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 14108 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14109 TRAINER_ENCOUNTER_MUSIC_COOL, #line 14110 @@ -35452,7 +35452,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 14126 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14127 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 14128 @@ -35497,7 +35497,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = #line 14143 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14144 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 14145 @@ -35542,7 +35542,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = #line 14160 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14161 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 14162 @@ -35643,7 +35643,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = #line 14202 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14203 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 14204 @@ -35762,7 +35762,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = #line 14252 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14253 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 14254 @@ -35881,7 +35881,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = #line 14302 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14303 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 14304 @@ -36936,7 +36936,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = #line 14752 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14753 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 14754 @@ -37039,7 +37039,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = #line 14794 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14795 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 14796 @@ -37160,7 +37160,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = #line 14844 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14845 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 14846 @@ -37299,7 +37299,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = #line 14902 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 14903 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 14904 @@ -37906,7 +37906,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = #line 15160 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 15161 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 15162 @@ -38025,7 +38025,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = #line 15210 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 15211 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 15212 @@ -38162,7 +38162,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = #line 15268 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 15269 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 15270 @@ -38299,7 +38299,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = #line 15326 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 15327 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 15328 @@ -39690,7 +39690,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_SALON_MAIDEN_ANABEL, .encounterMusic_gender = #line 15918 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 15919 TRAINER_ENCOUNTER_MUSIC_MALE, #line 15920 @@ -39788,7 +39788,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_ARENA_TYCOON_GRETA, .encounterMusic_gender = #line 15957 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 15958 TRAINER_ENCOUNTER_MUSIC_MALE, #line 15959 @@ -39854,7 +39854,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PIKE_QUEEN_LUCY, .encounterMusic_gender = #line 15983 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 15984 TRAINER_ENCOUNTER_MUSIC_MALE, #line 15985 @@ -40751,7 +40751,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 16333 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16334 TRAINER_ENCOUNTER_MUSIC_COOL, #line 16335 @@ -40798,7 +40798,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 16351 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16352 TRAINER_ENCOUNTER_MUSIC_COOL, #line 16353 @@ -40856,7 +40856,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 16373 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16374 TRAINER_ENCOUNTER_MUSIC_COOL, #line 16375 @@ -40914,7 +40914,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 16395 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16396 TRAINER_ENCOUNTER_MUSIC_COOL, #line 16397 @@ -41393,7 +41393,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 16581 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16582 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 16583 @@ -41482,7 +41482,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 16614 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16615 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 16616 @@ -41571,7 +41571,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 16647 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16648 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 16649 @@ -41660,7 +41660,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 16680 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16681 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 16682 @@ -41749,7 +41749,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 16713 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16714 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 16715 @@ -41794,7 +41794,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 16730 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16731 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 16732 @@ -41850,7 +41850,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 16751 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16752 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 16753 @@ -41906,7 +41906,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = #line 16772 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16773 TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 16774 @@ -41962,7 +41962,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 16793 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16794 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 16795 @@ -42095,7 +42095,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_LEAF, .encounterMusic_gender = #line 16845 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16846 TRAINER_ENCOUNTER_MUSIC_MALE, #line 16847 @@ -42157,7 +42157,7 @@ F_TRAINER_FEMALE | .trainerPic = TRAINER_PIC_RS_MAY, .encounterMusic_gender = #line 16869 -F_TRAINER_FEMALE | +F_TRAINER_FEMALE | #line 16870 TRAINER_ENCOUNTER_MUSIC_MALE, #line 16871 diff --git a/src/daycare.c b/src/daycare.c index 6b6b84ac58..8d2bf13545 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -21,6 +21,7 @@ #include "list_menu.h" #include "overworld.h" #include "item.h" +#include "regions.h" #include "constants/form_change_types.h" #include "constants/items.h" #include "constants/hold_effects.h" @@ -243,7 +244,7 @@ static void TransferEggMoves(void) } } -static void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycareMon) +void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycareMon) { if (MonHasMail(mon)) { @@ -549,14 +550,15 @@ static void _TriggerPendingDaycareEgg(struct DayCare *daycare) { s32 parent; s32 natureTries = 0; + rng_value_t personalityRand; - SeedRng2(gMain.vblankCounter2); + personalityRand = LocalRandomSeed(gMain.vblankCounter2); parent = GetParentToInheritNature(daycare); // don't inherit nature if (parent < 0) { - daycare->offspringPersonality = (Random2() << 16) | ((Random() % 0xfffe) + 1); + daycare->offspringPersonality = (LocalRandom(&personalityRand) << 16) | ((Random() % 0xfffe) + 1); } // inherit nature else @@ -566,7 +568,7 @@ static void _TriggerPendingDaycareEgg(struct DayCare *daycare) do { - personality = (Random2() << 16) | (Random()); + personality = (LocalRandom(&personalityRand) << 16) | (Random()); if (wantedNature == GetNatureFromPersonality(personality) && personality != 0) break; // found a personality with the same nature @@ -985,9 +987,12 @@ STATIC_ASSERT(P_SCATTERBUG_LINE_FORM_BREED == SPECIES_SCATTERBUG_ICY_SNOW || (P_ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parentSlots) { - u16 i; - u16 species[DAYCARE_MON_COUNT]; - u16 eggSpecies; + u32 i; + u32 species[DAYCARE_MON_COUNT]; + u32 eggSpecies, parentSpecies; + bool32 hasMotherEverstone, hasFatherEverstone, motherIsForeign, fatherIsForeign; + bool32 motherEggSpecies, fatherEggSpecies; + u32 currentRegion = GetCurrentRegion(); for (i = 0; i < DAYCARE_MON_COUNT; i++) { @@ -1004,7 +1009,24 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent } } - eggSpecies = GetEggSpecies(species[parentSlots[0]]); + motherEggSpecies = GetEggSpecies(species[parentSlots[0]]); + fatherEggSpecies = GetEggSpecies(species[parentSlots[1]]); + hasMotherEverstone = ItemId_GetHoldEffect(GetBoxMonData(&daycare->mons[parentSlots[0]].mon, MON_DATA_HELD_ITEM)) == HOLD_EFFECT_PREVENT_EVOLVE; + hasFatherEverstone = ItemId_GetHoldEffect(GetBoxMonData(&daycare->mons[parentSlots[1]].mon, MON_DATA_HELD_ITEM)) == HOLD_EFFECT_PREVENT_EVOLVE; + motherIsForeign = IsSpeciesForeignRegionalForm(motherEggSpecies, currentRegion); + fatherIsForeign = IsSpeciesForeignRegionalForm(fatherEggSpecies, currentRegion); + + if (hasMotherEverstone) + parentSpecies = motherEggSpecies; + else if (fatherIsForeign && hasFatherEverstone) + parentSpecies = fatherEggSpecies; + else if (motherIsForeign) + parentSpecies = GetRegionalFormByRegion(motherEggSpecies, currentRegion); + else + parentSpecies = motherEggSpecies; + + eggSpecies = GetEggSpecies(parentSpecies); + if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & EGG_GENDER_MALE) eggSpecies = SPECIES_NIDORAN_M; else if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & EGG_GENDER_MALE) @@ -1049,6 +1071,9 @@ static void _GiveEggFromDaycare(struct DayCare *daycare) u8 parentSlots[DAYCARE_MON_COUNT] = {0}; bool8 isEgg; + if (GetDaycareCompatibilityScore(daycare) == PARENTS_INCOMPATIBLE) + return; + species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots); if (P_INCENSE_BREEDING < GEN_9) AlterEggSpeciesWithIncenseItem(&species, daycare); @@ -1566,4 +1591,3 @@ static u8 ModifyBreedingScoreForOvalCharm(u8 score) return score; } - diff --git a/src/dexnav.c b/src/dexnav.c index 61b7b78ba0..55e328bf83 100644 --- a/src/dexnav.c +++ b/src/dexnav.c @@ -398,7 +398,7 @@ static const struct SpriteTemplate sSearchIconSpriteTemplate = .callback = SpriteCallbackDummy, }; -static const struct SpriteTemplate sOwnedIconTemplate = +static const struct SpriteTemplate sOwnedIconTemplate = { .tileTag = OWNED_ICON_TAG, .paletteTag = 0xFFFF, //held item pal @@ -409,7 +409,7 @@ static const struct SpriteTemplate sOwnedIconTemplate = .callback = SpriteCallbackDummy, }; -static const struct SpriteTemplate sHiddenMonIconTemplate = +static const struct SpriteTemplate sHiddenMonIconTemplate = { .tileTag = HIDDEN_MON_ICON_TAG, .paletteTag = 0xFFFF, //held item pal @@ -446,7 +446,7 @@ static void DrawDexNavSearchMonIcon(u16 species, u8 *dst, bool8 owned) spriteId = CreateMonIcon(species, SpriteCB_MonIcon, SPECIES_ICON_X - 6, GetSearchWindowY() + 8, 0, 0xFFFFFFFF); gSprites[spriteId].oam.priority = 0; *dst = spriteId; - + if (owned) sDexNavSearchDataPtr->ownedIconSpriteId = CreateSprite(&sOwnedIconTemplate, SPECIES_ICON_X + 6, GetSearchWindowY() + 4, 0); } @@ -455,19 +455,19 @@ static void AddSearchWindow(u8 width) { struct WindowTemplate template; u16 y = 16; - + if (sDexNavSearchDataPtr->tileY > (gSaveBlock1Ptr->pos.y + 7)) y = 1; //draw at top if chosen tile is below LoadDexNavWindowGfx(sDexNavSearchDataPtr->windowId, 0x1d5, 14 * 16); - + SetWindowTemplateFields(&template, 0, 1, y, width, 3, 14, 8); - + sDexNavSearchDataPtr->windowId = AddWindow(&template); FillWindowPixelBuffer(sDexNavSearchDataPtr->windowId, PIXEL_FILL(1)); PutWindowTilemap(sDexNavSearchDataPtr->windowId); CopyWindowToVram(sDexNavSearchDataPtr->windowId, 3); - + DrawStdFrameWithCustomTileAndPalette(sDexNavSearchDataPtr->windowId, TRUE, 0x214, 14); } @@ -509,13 +509,13 @@ static void AddSearchWindowText(u16 species, u8 proximity, u8 searchLevel, bool8 StringExpandPlaceholders(gStringVar4, sText_EggMove); AddTextPrinterParameterized3(windowId, 0, WINDOW_MOVE_NAME_X, 0, sSearchFontColor, TEXT_SKIP_DRAW, gStringVar4); } - + if (searchLevel > 2) - { + { // ability name StringCopy(gStringVar1, gAbilitiesInfo[GetAbilityBySpecies(species, sDexNavSearchDataPtr->abilityNum)].name); AddTextPrinterParameterized3(windowId, 0, WINDOW_COL_1 + 16, 12, sSearchFontColor, TEXT_SKIP_DRAW, gStringVar1); - + // item name if (sDexNavSearchDataPtr->heldItem) { @@ -542,7 +542,7 @@ static void AddSearchWindowText(u16 species, u8 proximity, u8 searchLevel, bool8 static void DrawSearchWindow(u16 species, u8 potential, bool8 hidden) { u8 searchLevel = sDexNavSearchDataPtr->searchLevel; - + AddSearchWindow(SEARCH_WINDOW_WIDTH); AddSearchWindowText(species, sDexNavSearchDataPtr->proximity, searchLevel, hidden); } @@ -552,7 +552,7 @@ static void DrawSearchWindow(u16 species, u8 potential, bool8 hidden) static void RemoveDexNavWindowAndGfx(void) { u32 i; - + // try remove sprites if (sDexNavSearchDataPtr->iconSpriteId != MAX_SPRITES) DestroySprite(&gSprites[sDexNavSearchDataPtr->iconSpriteId]); @@ -564,13 +564,13 @@ static void RemoveDexNavWindowAndGfx(void) DestroySprite(&gSprites[sDexNavSearchDataPtr->ownedIconSpriteId]); if (sDexNavSearchDataPtr->exclamationSpriteId != MAX_SPRITES) DestroySprite(&gSprites[sDexNavSearchDataPtr->exclamationSpriteId]); - + for (i = 0; i < NELEMS(sDexNavSearchDataPtr->starSpriteIds); i++) { if (sDexNavSearchDataPtr->starSpriteIds[i] != MAX_SPRITES) DestroySprite(&gSprites[sDexNavSearchDataPtr->starSpriteIds[i]]); } - + FreeSpriteTilesByTag(HELD_ITEM_TAG); FreeSpriteTilesByTag(OWNED_ICON_TAG); FreeSpriteTilesByTag(HIDDEN_SEARCH_TAG); @@ -578,7 +578,7 @@ static void RemoveDexNavWindowAndGfx(void) FreeSpriteTilesByTag(LIT_STAR_TILE_TAG); FreeSpritePaletteByTag(HELD_ITEM_TAG); SafeFreeMonIconPalette(sDexNavSearchDataPtr->species); - + // remove window ClearStdWindowAndFrameToTransparent(sDexNavSearchDataPtr->windowId, FALSE); CopyWindowToVram(sDexNavSearchDataPtr->windowId, 3); @@ -620,7 +620,7 @@ static bool8 DexNavPickTile(u8 environment, u8 areaX, u8 areaY, bool8 smallScan) u8 *yPos = AllocZeroed((botX - topX) * (botY - topY) * sizeof(u8)); u32 iter = 0; bool32 ret = FALSE; - + // loop through every tile in area and evaluate while (topY < botY) { @@ -633,14 +633,14 @@ static bool8 DexNavPickTile(u8 environment, u8 areaX, u8 areaY, bool8 smallScan) tileBuffer = SNEAKING_PROXIMITY + 3; else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) tileBuffer = SNEAKING_PROXIMITY + 1; - + if (GetPlayerDistance(topX, topY) <= tileBuffer) { // tile too close to player topX++; continue; } - + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { if (gObjectEvents[i].currentCoords.x == topX && gObjectEvents[i].currentCoords.y == topY) @@ -650,13 +650,13 @@ static bool8 DexNavPickTile(u8 environment, u8 areaX, u8 areaY, bool8 smallScan) break; } } - + if (nextIter) { topX++; continue; } - + weight = 0; // initiliaze weight switch (environment) { @@ -668,7 +668,7 @@ static bool8 DexNavPickTile(u8 environment, u8 areaX, u8 areaY, bool8 smallScan) // inside (cave) if (IsElevationMismatchAt(gObjectEvents[gPlayerAvatar.spriteId].currentElevation, topX, topY)) break; //occurs at same z coord - + scale = 440 - (smallScan * 200) - (GetPlayerDistance(topX, topY) / 2) - (2 * (topX + topY)); weight = ((Random() % scale) < 1) && !MapGridGetCollisionAt(topX, topY); } @@ -693,21 +693,21 @@ static bool8 DexNavPickTile(u8 environment, u8 areaX, u8 areaY, bool8 smallScan) default: break; } - + if (weight > 0) { xPos[iter] = topX; yPos[iter] = topY; iter++; } - + topX++; } - + topY++; topX = gSaveBlock1Ptr->pos.x - SCANSTART_X + (smallScan * 5); } - + if (iter > 0) { i = Random() % iter; @@ -715,7 +715,7 @@ static bool8 DexNavPickTile(u8 environment, u8 areaX, u8 areaY, bool8 smallScan) sDexNavSearchDataPtr->tileY = yPos[i]; ret = TRUE; } - + Free(xPos); Free(yPos); @@ -727,7 +727,7 @@ static bool8 TryStartHiddenMonFieldEffect(u8 environment, u8 xSize, u8 ySize, bo { u8 currMapType = GetCurrentMapType(); u8 fldEffId = 0; - + if (DexNavPickTile(environment, xSize, ySize, smallScan)) { u8 metatileBehaviour = MapGridGetMetatileBehaviorAt(sDexNavSearchDataPtr->tileX, sDexNavSearchDataPtr->tileY); @@ -770,7 +770,7 @@ static bool8 TryStartHiddenMonFieldEffect(u8 environment, u8 xSize, u8 ySize, bo default: return FALSE; } - + if (fldEffId != 0) { gFieldEffectArguments[0] = sDexNavSearchDataPtr->tileX; @@ -780,7 +780,7 @@ static bool8 TryStartHiddenMonFieldEffect(u8 environment, u8 xSize, u8 ySize, bo sDexNavSearchDataPtr->fldEffSpriteId = FieldEffectStart(fldEffId); if (sDexNavSearchDataPtr->fldEffSpriteId == MAX_SPRITES) return FALSE; - + sDexNavSearchDataPtr->fldEffId = fldEffId; return TRUE; } @@ -827,7 +827,7 @@ static u8 GetSearchLevel(u16 dexNum) static void Task_SetUpDexNavSearch(u8 taskId) { struct Task *task = &gTasks[taskId]; - + u16 species = sDexNavSearchDataPtr->species; u8 searchLevel = GetSearchLevel(SpeciesToNationalPokedexNum(species)); @@ -839,15 +839,15 @@ static void Task_SetUpDexNavSearch(u8 taskId) sDexNavSearchDataPtr->starSpriteIds[1] = MAX_SPRITES; sDexNavSearchDataPtr->starSpriteIds[2] = MAX_SPRITES; sDexNavSearchDataPtr->ownedIconSpriteId = MAX_SPRITES; - sDexNavSearchDataPtr->exclamationSpriteId = MAX_SPRITES; + sDexNavSearchDataPtr->exclamationSpriteId = MAX_SPRITES; sDexNavSearchDataPtr->searchLevel = searchLevel; - + DexNavGenerateMoveset(species, searchLevel, sDexNavSearchDataPtr->monLevel, &sDexNavSearchDataPtr->moves[0]); sDexNavSearchDataPtr->heldItem = DexNavGenerateHeldItem(species, searchLevel); sDexNavSearchDataPtr->abilityNum = DexNavGetAbilityNum(species, searchLevel); sDexNavSearchDataPtr->potential = DexNavGeneratePotential(searchLevel); DexNavProximityUpdate(); - + LoadSearchIconData(); if (sDexNavSearchDataPtr->hiddenSearch) { @@ -858,7 +858,7 @@ static void Task_SetUpDexNavSearch(u8 taskId) DexNavDrawIcons(); DexNavUpdateSearchWindow(sDexNavSearchDataPtr->proximity, searchLevel); } - + FlagSet(DN_FLAG_SEARCHING); gPlayerAvatar.creeping = TRUE; //initialize as true in case mon appears beside you task->tProximity = gSprites[gPlayerAvatar.spriteId].x; @@ -872,7 +872,7 @@ static void DexNavSearchBail(u8 taskId, const u8 *script) TRY_FREE_AND_SET_NULL(sDexNavSearchDataPtr); FreeMonIconPalettes(); ScriptContext_SetupScript(script); - DestroyTask(taskId); + DestroyTask(taskId); } static void Task_InitDexNavSearch(u8 taskId) @@ -880,32 +880,32 @@ static void Task_InitDexNavSearch(u8 taskId) struct Task *task = &gTasks[taskId]; u16 species = task->tSpecies; u8 environment = task->tEnvironment; - + sDexNavSearchDataPtr = AllocZeroed(sizeof(struct DexNavSearch)); if (sDexNavSearchDataPtr == NULL) { DexNavSearchBail(taskId, EventScript_NotFoundNearby); return; } - + // assign non-objects to struct sDexNavSearchDataPtr->species = species; sDexNavSearchDataPtr->environment = environment; //updated in DexNavTryGenerateMonLevel if hidden mon sDexNavSearchDataPtr->isHiddenMon = (environment == ENCOUNTER_TYPE_HIDDEN) ? TRUE : FALSE; sDexNavSearchDataPtr->monLevel = DexNavTryGenerateMonLevel(species, environment); - + if (GetFlashLevel() > 0) { DexNavSearchBail(taskId, EventScript_TooDark); return; } - + if (sDexNavSearchDataPtr->monLevel == MON_LEVEL_NONEXISTENT || !TryStartHiddenMonFieldEffect(sDexNavSearchDataPtr->environment, 12, 12, FALSE)) { DexNavSearchBail(taskId, EventScript_NotFoundNearby); return; } - + sDexNavSearchDataPtr->hiddenSearch = FALSE; task->tRevealed = TRUE; //search window revealed task->func = Task_SetUpDexNavSearch; @@ -915,13 +915,13 @@ static void DexNavDrawPotentialStars(u8 potential, u8* dst) { u8 spriteId; u32 i; - + for (i = 0; i < NELEMS(sDexNavSearchDataPtr->starSpriteIds); i++) { spriteId = MAX_SPRITES; if (potential > i) spriteId = CreateSprite(&sPotentialStarTemplate, SPECIES_ICON_X - 20, GetSearchWindowY() + 4 + (i * 8), 0); - + dst[i] = spriteId; if (spriteId != MAX_SPRITES) gSprites[spriteId].invisible = TRUE; @@ -938,7 +938,7 @@ static void DexNavUpdateDirectionArrow(void) u16 deltaY = abs(tileY - playerY); const u8 *str; u8 windowId = sDexNavSearchDataPtr->windowId; - + FillWindowPixelRect(windowId, PIXEL_FILL(1), SEARCH_ARROW_X, SEARCH_ARROW_Y, 12, 12); if (deltaX <= 1 && deltaY <= 1) { @@ -958,7 +958,7 @@ static void DexNavUpdateDirectionArrow(void) else str = sText_ArrowDown; //player above } - + AddTextPrinterParameterized3(windowId, 1, SEARCH_ARROW_X, SEARCH_ARROW_Y, sSearchFontColor, TEXT_SKIP_DRAW, str); CopyWindowToVram(windowId, 2); } @@ -966,7 +966,7 @@ static void DexNavUpdateDirectionArrow(void) static void DexNavDrawIcons(void) { u16 species = sDexNavSearchDataPtr->species; - + DrawSearchWindow(species, sDexNavSearchDataPtr->potential, FALSE); DrawDexNavSearchMonIcon(species, &sDexNavSearchDataPtr->iconSpriteId, GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)); DrawDexNavSearchHeldItem(&sDexNavSearchDataPtr->itemSpriteId); @@ -981,10 +981,10 @@ bool8 TryStartDexNavSearch(void) { u8 taskId; u16 val = VarGet(DN_VAR_SPECIES); - + if (FlagGet(DN_FLAG_SEARCHING) || (val & DEXNAV_MASK_SPECIES) == SPECIES_NONE) return FALSE; - + HideMapNamePopUpWindow(); ChangeBgY_ScreenOff(0, 0, 0); taskId = CreateTask(Task_InitDexNavSearch, 0); @@ -1024,26 +1024,26 @@ static void Task_RevealHiddenMon(u8 taskId) { struct Task *task = &gTasks[taskId]; u16 species = sDexNavSearchDataPtr->species; - + // remove owned icon if it exists if (sDexNavSearchDataPtr->ownedIconSpriteId != MAX_SPRITES) { DestroySprite(&gSprites[sDexNavSearchDataPtr->ownedIconSpriteId]); sDexNavSearchDataPtr->ownedIconSpriteId = MAX_SPRITES; } - + // remove exclamation if it exists if (sDexNavSearchDataPtr->exclamationSpriteId != MAX_SPRITES) { DestroySprite(&gSprites[sDexNavSearchDataPtr->exclamationSpriteId]); sDexNavSearchDataPtr->exclamationSpriteId = MAX_SPRITES; } - - + + if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN)) { u8 index; - + //if not seen, hide name and whiteout mon DrawSearchWindow(species, sDexNavSearchDataPtr->potential, TRUE); DrawDexNavSearchMonIcon(species, &sDexNavSearchDataPtr->iconSpriteId, FALSE); @@ -1058,7 +1058,7 @@ static void Task_RevealHiddenMon(u8 taskId) DrawSearchWindow(species, sDexNavSearchDataPtr->potential, FALSE); DrawDexNavSearchMonIcon(species, &sDexNavSearchDataPtr->iconSpriteId, GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)); } - + DexNavUpdateDirectionArrow(); task->func = Task_DexNavSearch; task->tFrameCount = 0; //restart search clock @@ -1067,7 +1067,7 @@ static void Task_RevealHiddenMon(u8 taskId) static void Task_DexNavSearch(u8 taskId) { struct Task *task = &gTasks[taskId]; - + if (sDexNavSearchDataPtr->proximity > MAX_PROXIMITY) { // out of range if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed) @@ -1076,7 +1076,7 @@ static void Task_DexNavSearch(u8 taskId) EndDexNavSearchSetupScript(EventScript_LostSignal, taskId); return; } - + if (sDexNavSearchDataPtr->proximity <= CREEPING_PROXIMITY && !gPlayerAvatar.creeping && task->tFrameCount > 60) { //should be creeping but player walks normally if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed) @@ -1085,20 +1085,20 @@ static void Task_DexNavSearch(u8 taskId) EndDexNavSearchSetupScript(EventScript_MovedTooFast, taskId); return; } - - if (sDexNavSearchDataPtr->proximity <= SNEAKING_PROXIMITY && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_BIKE)) + + if (sDexNavSearchDataPtr->proximity <= SNEAKING_PROXIMITY && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_BIKE)) { // running/biking too close //always do event script, even if player hasn't revealed a hidden mon. It's assumed they would be creeping towards it EndDexNavSearchSetupScript(EventScript_MovedTooFast, taskId); return; } - + if (ArePlayerFieldControlsLocked() == TRUE) { // check if script just executed EndDexNavSearch(taskId); return; } - + if (gTasks[taskId].tFrameCount > DEXNAV_TIMEOUT * 60) { // player took too long if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed) @@ -1107,11 +1107,11 @@ static void Task_DexNavSearch(u8 taskId) EndDexNavSearchSetupScript(EventScript_PokemonGotAway, taskId); return; } - + if (sDexNavSearchDataPtr->proximity < 1) { gDexNavBattle = TRUE; - CreateDexNavWildMon(sDexNavSearchDataPtr->species, sDexNavSearchDataPtr->potential, sDexNavSearchDataPtr->monLevel, + CreateDexNavWildMon(sDexNavSearchDataPtr->species, sDexNavSearchDataPtr->potential, sDexNavSearchDataPtr->monLevel, sDexNavSearchDataPtr->abilityNum, sDexNavSearchDataPtr->heldItem, sDexNavSearchDataPtr->moves); FlagClear(DN_FLAG_SEARCHING); @@ -1120,7 +1120,7 @@ static void Task_DexNavSearch(u8 taskId) DestroyTask(taskId); return; } - + if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed && (JOY_NEW(R_BUTTON) || (sDexNavSearchDataPtr->proximity < CREEPING_PROXIMITY))) { @@ -1141,13 +1141,13 @@ static void Task_DexNavSearch(u8 taskId) && task->tRevealed) { FieldEffectStop(&gSprites[sDexNavSearchDataPtr->fldEffSpriteId], sDexNavSearchDataPtr->fldEffId); - + if (!TryStartHiddenMonFieldEffect(sDexNavSearchDataPtr->environment, 10, 10, TRUE)) { EndDexNavSearchSetupScript(EventScript_PokemonGotAway, taskId); return; } - + sDexNavSearchDataPtr->movementCount++; } @@ -1157,10 +1157,10 @@ static void Task_DexNavSearch(u8 taskId) //player has moved if (task->tRevealed) //update search window info only if hidden mon has been revealed (always true for search mode) DexNavUpdateSearchWindow(sDexNavSearchDataPtr->proximity, sDexNavSearchDataPtr->searchLevel); - + task->tProximity = sDexNavSearchDataPtr->proximity; } - + task->tFrameCount++; } @@ -1170,12 +1170,12 @@ static void DexNavUpdateSearchWindow(u8 proximity, u8 searchLevel) if (sDexNavSearchDataPtr->hiddenSearch && !GetSetPokedexFlag(SpeciesToNationalPokedexNum(sDexNavSearchDataPtr->species), FLAG_GET_SEEN)) hideName = TRUE; //if a detector mode hidden search and player hasn't seen the mon, hide info - + FillWindowPixelBuffer(sDexNavSearchDataPtr->windowId, PIXEL_FILL(1)); //clear window AddSearchWindowText(sDexNavSearchDataPtr->species, proximity, searchLevel, hideName); - + DexNavUpdateDirectionArrow(); - + //init hidden sprites if (sDexNavSearchDataPtr->itemSpriteId != MAX_SPRITES) gSprites[sDexNavSearchDataPtr->itemSpriteId].invisible = TRUE; @@ -1185,7 +1185,7 @@ static void DexNavUpdateSearchWindow(u8 proximity, u8 searchLevel) gSprites[sDexNavSearchDataPtr->starSpriteIds[1]].invisible = TRUE; if (sDexNavSearchDataPtr->starSpriteIds[2] != MAX_SPRITES) gSprites[sDexNavSearchDataPtr->starSpriteIds[2]].invisible = TRUE; - + if (proximity <= SNEAKING_PROXIMITY) { if (searchLevel > 2 && sDexNavSearchDataPtr->heldItem) @@ -1194,7 +1194,7 @@ static void DexNavUpdateSearchWindow(u8 proximity, u8 searchLevel) if (sDexNavSearchDataPtr->itemSpriteId != MAX_SPRITES) gSprites[sDexNavSearchDataPtr->itemSpriteId].invisible = FALSE; } - + if (searchLevel > 4) { if (sDexNavSearchDataPtr->starSpriteIds[0] != MAX_SPRITES) @@ -1218,9 +1218,9 @@ static void CreateDexNavWildMon(u16 species, u8 potential, u8 level, u8 abilityN u8 iv[3] = {NUM_STATS}; u8 i; u8 perfectIv = 31; - + CreateWildMon(species, level); // shiny rate bonus handled in CreateBoxMon - + // Pick random, unique IVs to set to 31. The number of perfect IVs that are assigned is equal to the potential iv[0] = Random() % NUM_STATS; // choose 1st perfect stat do { @@ -1228,17 +1228,17 @@ static void CreateDexNavWildMon(u16 species, u8 potential, u8 level, u8 abilityN iv[2] = Random() % NUM_STATS; } while ((iv[1] == iv[0]) // unique 2nd perfect stat || (iv[2] == iv[0] || iv[2] == iv[1])); // unique 3rd perfect stat - + if (potential > 2 && iv[2] != NUM_STATS) SetMonData(mon, MON_DATA_HP_IV + iv[2], &perfectIv); if (potential > 1 && iv[1] != NUM_STATS) SetMonData(mon, MON_DATA_HP_IV + iv[1], &perfectIv); if (potential > 0 && iv[0] != NUM_STATS) SetMonData(mon, MON_DATA_HP_IV + iv[0], &perfectIv); - + //Set ability SetMonData(mon, MON_DATA_ABILITY_NUM, &abilityNum); - + // Set Held Item if (item) SetMonData(mon, MON_DATA_HELD_ITEM, &item); @@ -1259,7 +1259,7 @@ static u8 DexNavTryGenerateMonLevel(u16 species, u8 environment) if (levelBase == MON_LEVEL_NONEXISTENT) return MON_LEVEL_NONEXISTENT; //species not found in the area - + if (Random() % 100 < 4) levelBonus += 10; //4% chance of having a +10 level @@ -1315,7 +1315,7 @@ static void DexNavGenerateMoveset(u16 species, u8 searchLevel, u8 encounterLevel for (i = 0; i < MAX_MON_MOVES; i++) moveDst[i] = GetMonData(&gEnemyParty[0], MON_DATA_MOVE1 + i, NULL); - // set first move slot to a random egg move if search level is good enough + // set first move slot to a random egg move if search level is good enough if (genMove) { u8 numEggMoves = GetEggMoves(&gEnemyParty[0], eggMoveBuffer); @@ -1330,7 +1330,7 @@ static u16 DexNavGenerateHeldItem(u16 species, u8 searchLevel) u8 searchLevelInfluence = searchLevel >> 1; u16 item1 = gSpeciesInfo[species].itemCommon; u16 item2 = gSpeciesInfo[species].itemRare; - + // if both are the same, 100% to hold if (item1 == item2) return item1; @@ -1357,7 +1357,7 @@ static u8 DexNavGetAbilityNum(u16 species, u8 searchLevel) bool8 genAbility = FALSE; u16 randVal = Random() % 100; u8 abilityNum = 0; - + if (searchLevel < 5) { #if (SEARCHLEVEL0_ABILITYCHANCE != 0) @@ -1400,7 +1400,7 @@ static u8 DexNavGetAbilityNum(u16 species, u8 searchLevel) genAbility = TRUE; #endif } - + if (genAbility && gSpeciesInfo[species].abilities[2] != ABILITY_NONE && GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) @@ -1416,7 +1416,7 @@ static u8 DexNavGetAbilityNum(u16 species, u8 searchLevel) else abilityNum = 0; } - + return abilityNum; } @@ -1424,7 +1424,7 @@ static u8 DexNavGeneratePotential(u8 searchLevel) { u8 genChance = 0; int randVal = Random() % 100; - + if (searchLevel < 5) { genChance = SEARCHLEVEL0_ONESTAR + SEARCHLEVEL0_TWOSTAR + SEARCHLEVEL0_THREESTAR; @@ -1509,7 +1509,7 @@ static u8 DexNavGeneratePotential(u8 searchLevel) return 3; } } - + return 0; // No potential } @@ -1522,7 +1522,7 @@ static u8 GetEncounterLevelFromMapData(u16 species, u8 environment) u8 min = 100; u8 max = 0; u8 i; - + switch (environment) { case ENCOUNTER_TYPE_LAND: // grass @@ -1554,7 +1554,7 @@ static u8 GetEncounterLevelFromMapData(u16 species, u8 environment) case ENCOUNTER_TYPE_HIDDEN: if (hiddenMonsInfo == NULL) return MON_LEVEL_NONEXISTENT; - + for (i = 0; i < HIDDEN_WILD_COUNT; i++) { if (hiddenMonsInfo->wildPokemon[i].species == species) @@ -1563,7 +1563,7 @@ static u8 GetEncounterLevelFromMapData(u16 species, u8 environment) max = (max > hiddenMonsInfo->wildPokemon[i].maxLevel) ? max : hiddenMonsInfo->wildPokemon[i].maxLevel; } } - + // use encounter rate to signify is hidden pokemon are on land or in water if (hiddenMonsInfo->encounterRate == 1) sDexNavSearchDataPtr->environment = ENCOUNTER_TYPE_WATER; @@ -1591,7 +1591,7 @@ static const struct BgTemplate sDexNavMenuBgTemplates[2] = .charBaseIndex = 0, .mapBaseIndex = 31, .priority = 0 - }, + }, { .bg = 1, .charBaseIndex = 3, @@ -1623,7 +1623,7 @@ static bool8 DexNav_InitBgs(void) sBg1TilemapBuffer = Alloc(0x800); if (sBg1TilemapBuffer == NULL) return FALSE; - + memset(sBg1TilemapBuffer, 0, 0x800); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sDexNavMenuBgTemplates, NELEMS(sDexNavMenuBgTemplates)); @@ -1660,14 +1660,14 @@ static bool8 DexNav_LoadGraphics(void) sDexNavUiDataPtr->state = 0; return TRUE; } - + return FALSE; } static void UpdateCursorPosition(void) { u16 x, y; - + switch (sDexNavUiDataPtr->cursorRow) { case ROW_WATER: @@ -1693,10 +1693,10 @@ static void UpdateCursorPosition(void) default: return; } - + gSprites[sDexNavUiDataPtr->cursorSpriteId].x = x; gSprites[sDexNavUiDataPtr->cursorSpriteId].y = y; - + PrintCurrentSpeciesInfo(); } @@ -1704,17 +1704,17 @@ static void CreateSelectionCursor(void) { u8 spriteId; struct CompressedSpriteSheet spriteSheet; - + spriteSheet.data = sSelectionCursorGfx; spriteSheet.size = 0x200; spriteSheet.tag = SELECTION_CURSOR_TAG; LoadCompressedSpriteSheet(&spriteSheet); - + LoadPalette(sSelectionCursorPal, (16 * sSelectionCursorOam.paletteNum) + 0x100, 32); - - spriteId = CreateSprite(&sSelectionCursorSpriteTemplate, 12, 32, 0); + + spriteId = CreateSprite(&sSelectionCursorSpriteTemplate, 12, 32, 0); //gSprites[spriteId].data[1] = -1; - + sDexNavUiDataPtr->cursorSpriteId = spriteId; UpdateCursorPosition(); } @@ -1729,9 +1729,9 @@ static bool8 CapturedAllLandMons(u16 headerId) u16 i, species; int count = 0; const struct WildPokemonInfo* landMonsInfo = gWildMonHeaders[headerId].landMonsInfo; - + if (landMonsInfo != NULL) - { + { for (i = 0; i < LAND_WILD_COUNT; ++i) { species = landMonsInfo->wildPokemon[i].species; @@ -1739,7 +1739,7 @@ static bool8 CapturedAllLandMons(u16 headerId) { if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) break; - + count++; } } @@ -1793,7 +1793,7 @@ static bool8 CapturedAllHiddenMons(u16 headerId) u16 species; u8 count = 0; const struct WildPokemonInfo* hiddenMonsInfo = gWildMonHeaders[headerId].hiddenMonsInfo; - + if (hiddenMonsInfo != NULL) { for (i = 0; i < HIDDEN_WILD_COUNT; ++i) @@ -1821,7 +1821,7 @@ static bool8 CapturedAllHiddenMons(u16 headerId) static void DexNavLoadCapturedAllSymbols(void) { u16 headerId = GetCurrentMapWildMonHeaderId(); - + LoadCompressedSpriteSheetUsingHeap(&sCapturedAllPokemonSpriteSheet); if (CapturedAllLandMons(headerId)) @@ -1829,7 +1829,7 @@ static void DexNavLoadCapturedAllSymbols(void) if (CapturedAllWaterMons(headerId)) CreateSprite(&sCaptureAllMonsSpriteTemplate, 139, 17, 0); - + if (CapturedAllHiddenMons(headerId)) CreateSprite(&sCaptureAllMonsSpriteTemplate, 114, 123, 0); } @@ -1852,7 +1852,7 @@ static void DexNavGuiFreeResources(void) static void CB1_InitDexNavSearch(void) { u8 taskId; - + if (!gPaletteFade.active && !ArePlayerFieldControlsLocked() && gMain.callback2 == CB2_Overworld) { SetMainCallback1(CB1_Overworld); @@ -1897,7 +1897,7 @@ static bool8 SpeciesInArray(u16 species, u8 section) { u32 i; u16 dexNum = SpeciesToNationalPokedexNum(species); - + switch (section) { case 0: //land @@ -1924,7 +1924,7 @@ static bool8 SpeciesInArray(u16 species, u8 section) default: break; } - + return FALSE; } @@ -1940,12 +1940,12 @@ static void DexNavLoadEncounterData(void) const struct WildPokemonInfo* landMonsInfo = gWildMonHeaders[headerId].landMonsInfo; const struct WildPokemonInfo* waterMonsInfo = gWildMonHeaders[headerId].waterMonsInfo; const struct WildPokemonInfo* hiddenMonsInfo = gWildMonHeaders[headerId].hiddenMonsInfo; - + // nop struct data memset(sDexNavUiDataPtr->landSpecies, 0, sizeof(sDexNavUiDataPtr->landSpecies)); memset(sDexNavUiDataPtr->waterSpecies, 0, sizeof(sDexNavUiDataPtr->waterSpecies)); memset(sDexNavUiDataPtr->hiddenSpecies, 0, sizeof(sDexNavUiDataPtr->hiddenSpecies)); - + // land mons if (landMonsInfo != NULL && landMonsInfo->encounterRate != 0) { @@ -1967,7 +1967,7 @@ static void DexNavLoadEncounterData(void) sDexNavUiDataPtr->waterSpecies[waterIndex++] = waterMonsInfo->wildPokemon[i].species; } } - + // hidden mons if (hiddenMonsInfo != NULL) // no encounter rate check since 0 means land, 1 means water encounters { @@ -1995,24 +1995,24 @@ static void DrawSpeciesIcons(void) s16 x, y; u32 i; u16 species; - + LoadCompressedSpriteSheetUsingHeap(&sNoDataIconSpriteSheet); for (i = 0; i < LAND_WILD_COUNT; i++) { species = sDexNavUiDataPtr->landSpecies[i]; - x = 20 + (24 * (i % 6)); - y = ROW_LAND_TOP_ICON_Y + (i > 5 ? 28 : 0); + x = ROW_LAND_ICON_X + (24 * (i % COL_LAND_COUNT)); + y = ROW_LAND_TOP_ICON_Y + (i > COL_LAND_MAX ? 28 : 0); TryDrawIconInSlot(species, x, y); } - + for (i = 0; i < WATER_WILD_COUNT; i++) { species = sDexNavUiDataPtr->waterSpecies[i]; - x = 30 + 24 * i; + x = ROW_WATER_ICON_X + 24 * i; y = ROW_WATER_ICON_Y; TryDrawIconInSlot(species, x, y); } - + for (i = 0; i < HIDDEN_WILD_COUNT; i++) { species = sDexNavUiDataPtr->hiddenSpecies[i]; @@ -2030,7 +2030,7 @@ static void DrawSpeciesIcons(void) static u16 DexNavGetSpecies(void) { u16 species; - + switch (sDexNavUiDataPtr->cursorRow) { case ROW_WATER: @@ -2051,10 +2051,10 @@ static u16 DexNavGetSpecies(void) default: return SPECIES_NONE; } - + if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN)) return SPECIES_NONE; - + return species; } @@ -2092,7 +2092,7 @@ static const u8 sMoveTypeToOamPaletteNum[NUMBER_OF_MON_TYPES] = static void SetTypeIconPosAndPal(u8 typeId, u8 x, u8 y, u8 spriteArrayId) { struct Sprite *sprite; - + sprite = &gSprites[sDexNavUiDataPtr->typeIconSpriteIds[spriteArrayId]]; StartSpriteAnim(sprite, typeId); sprite->oam.paletteNum = sMoveTypeToOamPaletteNum[typeId]; @@ -2106,25 +2106,25 @@ static void PrintCurrentSpeciesInfo(void) u16 species = DexNavGetSpecies(); u16 dexNum = SpeciesToNationalPokedexNum(species); u8 type1, type2; - + if (!GetSetPokedexFlag(dexNum, FLAG_GET_SEEN)) species = SPECIES_NONE; // clear windows FillWindowPixelBuffer(WINDOW_INFO, PIXEL_FILL(TEXT_COLOR_TRANSPARENT)); - + //species name if (species == SPECIES_NONE) AddTextPrinterParameterized3(WINDOW_INFO, 0, 0, SPECIES_INFO_Y, sFontColor_Black, 0, sText_DexNav_NoInfo); else AddTextPrinterParameterized3(WINDOW_INFO, 0, 0, SPECIES_INFO_Y, sFontColor_Black, 0, GetSpeciesName(species)); - + //type icon(s) type1 = gSpeciesInfo[species].types[0]; type2 = gSpeciesInfo[species].types[1]; if (species == SPECIES_NONE) type1 = type2 = TYPE_MYSTERY; - + if (type1 == type2) { SetTypeIconPosAndPal(type1, 186, 69, 0); @@ -2135,7 +2135,7 @@ static void PrintCurrentSpeciesInfo(void) SetTypeIconPosAndPal(type1, 168, 69, 0); SetTypeIconPosAndPal(type2, 168 + 33, 69, 1); } - + //search level if (species == SPECIES_NONE) { @@ -2146,7 +2146,7 @@ static void PrintCurrentSpeciesInfo(void) ConvertIntToDecimalStringN(gStringVar4, GetSearchLevel(dexNum), 0, 4); AddTextPrinterParameterized3(WINDOW_INFO, 0, 0, SEARCH_LEVEL_Y, sFontColor_Black, 0, gStringVar4); } - + //hidden ability if (species == SPECIES_NONE) { @@ -2163,11 +2163,11 @@ static void PrintCurrentSpeciesInfo(void) { AddTextPrinterParameterized3(WINDOW_INFO, 0, 0, HA_INFO_Y, sFontColor_Black, 0, sText_DexNav_CaptureToSee); } - + //current chain ConvertIntToDecimalStringN(gStringVar1, gSaveBlock3Ptr->dexNavChain, STR_CONV_MODE_LEFT_ALIGN, 3); AddTextPrinterParameterized3(WINDOW_INFO, 0, 0, CHAIN_BONUS_Y, sFontColor_Black, 0, gStringVar1); - + CopyWindowToVram(WINDOW_INFO, 3); PutWindowTilemap(WINDOW_INFO); } @@ -2195,7 +2195,7 @@ static void PrintSearchableSpecies(u16 species) StringExpandPlaceholders(gStringVar4, sText_DexNav_SearchForRegisteredSpecies); AddTextPrinterParameterized3(WINDOW_REGISTERED, 1, 0, 0, sFontColor_White, TEXT_SKIP_DRAW, gStringVar4); } - + PrintMapName(); } @@ -2208,8 +2208,8 @@ static void CreateTypeIconSprites(void) for (i = 0; i < 2; i++) { if (sDexNavUiDataPtr->typeIconSpriteIds[i] == 0xFF) - sDexNavUiDataPtr->typeIconSpriteIds[i] = CreateSprite(&gSpriteTemplate_MoveTypes, 10, 10, 2); - + sDexNavUiDataPtr->typeIconSpriteIds[i] = CreateSprite(&gSpriteTemplate_MoveTypes, 10, 10, 2); + SetSpriteInvisibility(i, TRUE); } } @@ -2217,7 +2217,7 @@ static void CreateTypeIconSprites(void) static bool8 DexNav_DoGfxSetup(void) { u8 taskId; - + switch (gMain.state) { case 0: @@ -2299,7 +2299,7 @@ static bool8 DexNav_DoGfxSetup(void) SetMainCallback2(DexNav_MainCB); return TRUE; } - + return FALSE; } @@ -2316,7 +2316,7 @@ static void DexNavGuiInit(MainCallback callback) SetMainCallback2(callback); return; } - + sDexNavUiDataPtr->state = 0; sDexNavUiDataPtr->savedCallback = callback; SetMainCallback2(DexNav_RunSetup); @@ -2347,10 +2347,10 @@ static void Task_DexNavMain(u8 taskId) { struct Task *task = &gTasks[taskId]; u16 species; - + if (IsSEPlaying()) return; - + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_POKENAV_OFF); @@ -2369,10 +2369,10 @@ static void Task_DexNavMain(u8 taskId) { if (sDexNavUiDataPtr->cursorRow == ROW_LAND_TOP && sDexNavUiDataPtr->cursorCol == COL_LAND_MAX) sDexNavUiDataPtr->cursorCol = COL_WATER_MAX; - + sDexNavUiDataPtr->cursorRow--; } - + PlaySE(SE_RG_BAG_CURSOR); UpdateCursorPosition(); } @@ -2386,14 +2386,14 @@ static void Task_DexNavMain(u8 taskId) { if (sDexNavUiDataPtr->cursorCol >= COL_HIDDEN_COUNT) sDexNavUiDataPtr->cursorCol = COL_HIDDEN_MAX; - + sDexNavUiDataPtr->cursorRow++; } else { sDexNavUiDataPtr->cursorRow++; } - + PlaySE(SE_RG_BAG_CURSOR); UpdateCursorPosition(); } @@ -2418,7 +2418,7 @@ static void Task_DexNavMain(u8 taskId) { sDexNavUiDataPtr->cursorCol--; } - + PlaySE(SE_RG_BAG_CURSOR); UpdateCursorPosition(); } @@ -2445,7 +2445,7 @@ static void Task_DexNavMain(u8 taskId) sDexNavUiDataPtr->cursorCol++; break; } - + PlaySE(SE_RG_BAG_CURSOR); UpdateCursorPosition(); } @@ -2453,13 +2453,13 @@ static void Task_DexNavMain(u8 taskId) { // check selection is valid. Play sound if invalid species = DexNavGetSpecies(); - + if (species != SPECIES_NONE) - { + { PrintSearchableSpecies(species); //PlaySE(SE_DEX_SEARCH); PlayCry_Script(species, 0); - + // create value to store in a var VarSet(DN_VAR_SPECIES, ((sDexNavUiDataPtr->environment << 14) | species)); } @@ -2493,7 +2493,7 @@ static void Task_DexNavMain(u8 taskId) bool8 TryFindHiddenPokemon(void) { u16 *stepPtr = GetVarPointer(DN_VAR_STEP_COUNTER); - + if (DEXNAV_ENABLED == 0 || !FlagGet(DN_FLAG_DETECTOR_MODE) || FlagGet(DN_FLAG_SEARCHING) @@ -2503,7 +2503,7 @@ bool8 TryFindHiddenPokemon(void) (*stepPtr) = 0; return FALSE; } - + (*stepPtr)++; (*stepPtr) %= HIDDEN_MON_STEP_COUNT; if ((*stepPtr) == 0 && (Random() % 100 < HIDDEN_MON_SEARCH_RATE)) @@ -2516,12 +2516,12 @@ bool8 TryFindHiddenPokemon(void) u8 taskId; const struct WildPokemonInfo* hiddenMonsInfo = gWildMonHeaders[headerId].hiddenMonsInfo; bool8 isHiddenMon = FALSE; - + // while you can still technically find hidden pokemon if there are not hidden-only pokemon on a map, // this prevents any potential lagging on maps you dont want hidden pokemon to appear on if (hiddenMonsInfo == NULL) return FALSE; - + // encounter rate signifies surfing (1) or land mons (0)! // again, for simplicity switch (hiddenMonsInfo->encounterRate) @@ -2571,12 +2571,12 @@ bool8 TryFindHiddenPokemon(void) default: return FALSE; } - + if (species == SPECIES_NONE) return FALSE; - + sDexNavSearchDataPtr = AllocZeroed(sizeof(struct DexNavSearch)); - + // init search data sDexNavSearchDataPtr->isHiddenMon = isHiddenMon; sDexNavSearchDataPtr->species = species; @@ -2600,7 +2600,7 @@ bool8 TryFindHiddenPokemon(void) gFieldEffectArguments[3] = 2; ObjectEventGetLocalIdAndMap(&gObjectEvents[gPlayerAvatar.objectEventId], &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON); - + PlayCry_Script(species, 0); taskId = CreateTask(Task_SetUpDexNavSearch, 0); gTasks[taskId].tSpecies = sDexNavSearchDataPtr->species; @@ -2610,14 +2610,14 @@ bool8 TryFindHiddenPokemon(void) ChangeBgY_ScreenOff(0, 0, 0); return FALSE; // we dont actually want to enable the script context or the game will freeze } - + return FALSE; } static void DrawSearchIcon(void) { - struct CompressedSpriteSheet spriteSheet; - + struct CompressedSpriteSheet spriteSheet; + spriteSheet.data = sHiddenSearchIconGfx; spriteSheet.size = 0x200; spriteSheet.tag = SELECTION_CURSOR_TAG; @@ -2632,7 +2632,7 @@ static void DrawHiddenSearchWindow(u8 width) { AddSearchWindow(width); AddTextPrinterParameterized3(sDexNavSearchDataPtr->windowId, 0, SPECIES_ICON_X + 4, 0, sSearchFontColor, TEXT_SKIP_DRAW, sText_ThreeQmarks); - + ConvertIntToDecimalStringN(gStringVar1, sDexNavSearchDataPtr->searchLevel, STR_CONV_MODE_LEFT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, sText_SearchLevel); AddTextPrinterParameterized3(sDexNavSearchDataPtr->windowId, 0, SPECIES_ICON_X + 4, 12, sSearchFontColor, TEXT_SKIP_DRAW, gStringVar4); @@ -2642,13 +2642,13 @@ static void DrawHiddenSearchWindow(u8 width) static void DexNavDrawHiddenIcons(void) { u16 species = sDexNavSearchDataPtr->species; - + DrawHiddenSearchWindow(12); DrawSearchIcon(); - + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) sDexNavSearchDataPtr->ownedIconSpriteId = CreateSprite(&sOwnedIconTemplate, SPECIES_ICON_X + 6, GetSearchWindowY() + 2, 0); - + if (sDexNavSearchDataPtr->isHiddenMon) sDexNavSearchDataPtr->exclamationSpriteId = CreateSprite(&sHiddenMonIconTemplate, SPECIES_ICON_X + 34, GetSearchWindowY() + 8, 0); } @@ -2660,7 +2660,7 @@ u32 CalculateDexNavShinyRolls(void) { u32 chainBonus, rndBonus; u8 chain = gSaveBlock3Ptr->dexNavChain; - + chainBonus = (chain >= 100) ? 10 : (chain >= 50) ? 5 : 0; rndBonus = (Random() % 100 < 4) ? 4 : 0; return chainBonus + rndBonus; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 0328bb3497..2ca51e798c 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -187,7 +187,7 @@ static void SetSpriteDataForNormalStep(struct Sprite *, u8, u8); static void InitSpriteForFigure8Anim(struct Sprite *); static bool8 AnimateSpriteInFigure8(struct Sprite *); u8 GetDirectionToFace(s16 x1, s16 y1, s16 x2, s16 y2); -static void FollowerSetGraphics(struct ObjectEvent *, u16, u8, bool8, bool8); +static void FollowerSetGraphics(struct ObjectEvent *objEvent, u32 species, bool32 shiny, bool32 female); static void ObjectEventSetGraphics(struct ObjectEvent *, const struct ObjectEventGraphicsInfo *); static void SpriteCB_VirtualObject(struct Sprite *); static void DoShadowFieldEffect(struct ObjectEvent *); @@ -198,13 +198,16 @@ static u8 DoJumpSpriteMovement(struct Sprite *); static u8 DoJumpSpecialSpriteMovement(struct Sprite *); static void CreateLevitateMovementTask(struct ObjectEvent *); static void DestroyLevitateMovementTask(u8); -static bool8 GetFollowerInfo(u16 *species, u8 *form, u8 *shiny); -static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny); -static const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u16 species, u8 form); +static bool8 GetFollowerInfo(u32 *species, bool32 *shiny, bool32 *female); +static u32 LoadDynamicFollowerPalette(u32 species, bool32 shiny, bool32 female); +static const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u32 species, bool32 shiny, bool32 female); static bool8 NpcTakeStep(struct Sprite *); static bool8 AreElevationsCompatible(u8, u8); static void CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(u16 graphicsId, u16 movementType, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables); +static u16 GetGraphicsIdForMon(u32 species, bool32 shiny, bool32 female); +static u16 GetUnownSpecies(struct Pokemon *mon); + static const struct SpriteFrameImage sPicTable_PechaBerryTree[]; static void StartSlowRunningAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction); @@ -1683,17 +1686,8 @@ static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEven if (OW_GFX_COMPRESS) spriteTemplate->tileTag = LoadSheetGraphicsInfo(graphicsInfo, objectEvent->graphicsId, NULL); - if (objectEvent->graphicsId >= OBJ_EVENT_GFX_MON_BASE + SPECIES_SHINY_TAG) - { + if (objectEvent->graphicsId & OBJ_EVENT_MON && objectEvent->graphicsId & OBJ_EVENT_MON_SHINY) objectEvent->shiny = TRUE; - objectEvent->graphicsId -= SPECIES_SHINY_TAG; - } - - if (objectEvent->graphicsId >= OBJ_EVENT_GFX_MON_BASE + SPECIES_SHINY_TAG) - { - objectEvent->shiny = TRUE; - objectEvent->graphicsId -= SPECIES_SHINY_TAG; - } spriteId = CreateSprite(spriteTemplate, 0, 0, 0); if (spriteId == MAX_SPRITES) @@ -1705,7 +1699,7 @@ static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEven sprite = &gSprites[spriteId]; // Use palette from species palette table if (spriteTemplate->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) - sprite->oam.paletteNum = LoadDynamicFollowerPalette(OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny); + sprite->oam.paletteNum = LoadDynamicFollowerPalette(OW_SPECIES(objectEvent), OW_SHINY(objectEvent), OW_FEMALE(objectEvent)); if (OW_GFX_COMPRESS && sprite->usingSheet) sprite->sheetSpan = GetSpanPerImage(sprite->oam.shape, sprite->oam.size); GetMapCoordsFromSpritePos(objectEvent->currentCoords.x + cameraX, objectEvent->currentCoords.y + cameraY, &sprite->x, &sprite->y); @@ -1817,13 +1811,20 @@ static void UNUSED MakeSpriteTemplateFromObjectEventTemplate(const struct Object // Loads information from graphicsId, with shininess separate // also can write palette tag to the template -static u8 LoadDynamicFollowerPaletteFromGraphicsId(u16 graphicsId, bool8 shiny, struct SpriteTemplate *template) +static u32 LoadDynamicFollowerPaletteFromGraphicsId(u16 graphicsId, struct SpriteTemplate *template) { - u16 species = ((graphicsId & OBJ_EVENT_GFX_SPECIES_MASK) - OBJ_EVENT_GFX_MON_BASE); - u8 form = (graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS); - u8 paletteNum = LoadDynamicFollowerPalette(species, form, shiny); + u16 species = graphicsId & OBJ_EVENT_MON_SPECIES_MASK; + bool32 shiny = graphicsId & OBJ_EVENT_MON_SHINY; + bool32 female = graphicsId & OBJ_EVENT_MON_FEMALE; + u8 paletteNum = LoadDynamicFollowerPalette(species, shiny, female); if (template) - template->paletteTag = species; + { + template->paletteTag = species + OBJ_EVENT_MON; + if (shiny) + template->paletteTag += OBJ_EVENT_MON_SHINY; + if (female) + template->paletteTag += OBJ_EVENT_MON_FEMALE; + } return paletteNum; } @@ -1848,7 +1849,7 @@ u8 CreateObjectGraphicsSpriteWithTag(u16 graphicsId, void (*callback)(struct Spr const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); struct Sprite *sprite; u8 spriteId; - bool32 isShiny = graphicsId >= SPECIES_SHINY_TAG + OBJ_EVENT_GFX_MON_BASE; + bool32 isShiny = graphicsId & OBJ_EVENT_MON_SHINY; spriteTemplate = Alloc(sizeof(struct SpriteTemplate)); CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, callback, spriteTemplate, &subspriteTables); @@ -1865,60 +1866,7 @@ u8 CreateObjectGraphicsSpriteWithTag(u16 graphicsId, void (*callback)(struct Spr if (spriteTemplate->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) { - u32 paletteNum = LoadDynamicFollowerPaletteFromGraphicsId(graphicsId, isShiny, spriteTemplate); - spriteTemplate->paletteTag = GetSpritePaletteTagByPaletteNum(paletteNum); - } - else if (spriteTemplate->paletteTag != TAG_NONE) - { - if (paletteTag == TAG_NONE) - { - LoadObjectEventPalette(spriteTemplate->paletteTag); - } - else - { - LoadObjectEventPaletteWithTag(spriteTemplate->paletteTag, paletteTag); - spriteTemplate->paletteTag = paletteTag; - } - } - - spriteId = CreateSprite(spriteTemplate, x, y, subpriority); - - Free(spriteTemplate); - - if (spriteId != MAX_SPRITES && subspriteTables != NULL) - { - sprite = &gSprites[spriteId]; - if (OW_GFX_COMPRESS && graphicsInfo->compressed) - sprite->sheetSpan = GetSpanPerImage(sprite->oam.shape, sprite->oam.size); - SetSubspriteTables(sprite, subspriteTables); - sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; - } - return spriteId; -} - -// Horrible workaround for sprite the visualizer, this should probably be reworked later -u8 CreateObjectGraphicsFollowerSpriteForVisualizer(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, struct FollowerSpriteVisualizerData *data) -{ - struct SpriteTemplate *spriteTemplate; - const struct SubspriteTable *subspriteTables; - const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); - struct Sprite *sprite; - u8 spriteId; - bool32 isShiny = data->isShiny; - - spriteTemplate = Alloc(sizeof(struct SpriteTemplate)); - CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, callback, spriteTemplate, &subspriteTables); - - if (OW_GFX_COMPRESS) - { - // Checking only for compressed here so as not to mess with decorations - if (graphicsInfo->compressed) - spriteTemplate->tileTag = LoadSheetGraphicsInfo(graphicsInfo, graphicsId, NULL); - } - - if (spriteTemplate->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) - { - u32 paletteNum = LoadDynamicFollowerPaletteFromGraphicsId(graphicsId, isShiny, spriteTemplate); + u32 paletteNum = LoadDynamicFollowerPaletteFromGraphicsId(graphicsId, spriteTemplate); spriteTemplate->paletteTag = GetSpritePaletteTagByPaletteNum(paletteNum); } else if (spriteTemplate->paletteTag != TAG_NONE) @@ -2025,19 +1973,18 @@ struct ObjectEvent *GetFollowerObject(void) } // Return graphicsInfo for a pokemon species & form -static const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u16 species, u8 form) +static const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u32 species, bool32 shiny, bool32 female) { const struct ObjectEventGraphicsInfo *graphicsInfo = NULL; #if OW_POKEMON_OBJECT_EVENTS switch (species) { - case SPECIES_UNOWN: // Letters >A are defined as species >= NUM_SPECIES, so are not contiguous with A - form %= NUM_UNOWN_FORMS; - graphicsInfo = &gSpeciesInfo[form ? SPECIES_UNOWN_B + form - 1 : species].overworldData; + case SPECIES_UNOWN: // Deal with Unown forms later + graphicsInfo = &gSpeciesInfo[species].overworldData; break; default: #if P_GENDER_DIFFERENCES - if (form == 1 && gSpeciesInfo[species].overworldDataFemale.paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) + if (female && gSpeciesInfo[species].overworldDataFemale.paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) { graphicsInfo = &gSpeciesInfo[species].overworldDataFemale; } @@ -2061,17 +2008,20 @@ static const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u16 species, } // Find, or load, the palette for the specified pokemon info -static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny) +static u32 LoadDynamicFollowerPalette(u32 species, bool32 shiny, bool32 female) { u32 paletteNum; - bool32 female = (form == 1); // Use standalone palette, unless entry is OOB or NULL (fallback to front-sprite-based) #if OW_POKEMON_OBJECT_EVENTS == TRUE && OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE if ((shiny && gSpeciesInfo[species].overworldPalette) || (!shiny && gSpeciesInfo[species].overworldShinyPalette)) { struct SpritePalette spritePalette; - u16 palTag = shiny ? (species + SPECIES_SHINY_TAG + OBJ_EVENT_PAL_TAG_DYNAMIC) : (species + OBJ_EVENT_PAL_TAG_DYNAMIC); + u16 palTag = species + OBJ_EVENT_MON + (shiny ? OBJ_EVENT_MON_SHINY : 0); + #if P_GENDER_DIFFERENCES + if (female && gSpeciesInfo[species].overworldShinyPaletteFemale != NULL) + palTag += OBJ_EVENT_MON_FEMALE; + #endif // palette already loaded if ((paletteNum = IndexOfSpritePaletteTag(palTag)) < 16) return paletteNum; @@ -2128,21 +2078,19 @@ static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny) } // Set graphics & sprite for a follower object event by species & shininess. -static void FollowerSetGraphics(struct ObjectEvent *objEvent, u16 species, u8 form, bool8 shiny, bool8 doPalette) +static void FollowerSetGraphics(struct ObjectEvent *objEvent, u32 species, bool32 shiny, bool32 female) { - const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, form); + const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, shiny, female); ObjectEventSetGraphics(objEvent, graphicsInfo); - objEvent->graphicsId = (OBJ_EVENT_GFX_MON_BASE + species) & OBJ_EVENT_GFX_SPECIES_MASK; - objEvent->graphicsId |= form << OBJ_EVENT_GFX_SPECIES_BITS; - objEvent->shiny = shiny; - if (graphicsInfo->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC && doPalette) // Use palette from species palette table + objEvent->graphicsId = GetGraphicsIdForMon(species, shiny, female); + if (graphicsInfo->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) // Use palette from species palette table { struct Sprite *sprite = &gSprites[objEvent->spriteId]; // Free palette if otherwise unused sprite->inUse = FALSE; FieldEffectFreePaletteIfUnused(sprite->oam.paletteNum); sprite->inUse = TRUE; - sprite->oam.paletteNum = LoadDynamicFollowerPalette(species, form, shiny); + sprite->oam.paletteNum = LoadDynamicFollowerPalette(species, shiny, female); } } @@ -2151,9 +2099,9 @@ static void FollowerSetGraphics(struct ObjectEvent *objEvent, u16 species, u8 fo static void RefreshFollowerGraphics(struct ObjectEvent *objEvent) { u32 species = OW_SPECIES(objEvent); - u32 form = OW_FORM(objEvent); - u32 shiny = objEvent->shiny; - const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, form); + bool32 shiny = OW_SHINY(objEvent); + bool32 female = OW_FEMALE(objEvent); + const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, shiny, female); struct Sprite *sprite = &gSprites[objEvent->spriteId]; u32 i = FindObjectEventPaletteIndexByTag(graphicsInfo->paletteTag); @@ -2182,7 +2130,7 @@ static void RefreshFollowerGraphics(struct ObjectEvent *objEvent) sprite->inUse = FALSE; FieldEffectFreePaletteIfUnused(sprite->oam.paletteNum); sprite->inUse = TRUE; - sprite->oam.paletteNum = LoadDynamicFollowerPalette(species, form, shiny); + sprite->oam.paletteNum = LoadDynamicFollowerPalette(species, shiny, female); } else if (i != 0xFF) { @@ -2212,23 +2160,22 @@ u16 GetOverworldWeatherSpecies(u16 species) return species; } -static bool8 GetMonInfo(struct Pokemon *mon, u16 *species, u8 *form, u8 *shiny) +static bool8 GetMonInfo(struct Pokemon *mon, u32 *species, bool32 *shiny, bool32 *female) { - *form = 0; // default if (!mon) { *species = SPECIES_NONE; - *form = 0; - *shiny = 0; + *shiny = FALSE; + *female = FALSE; return FALSE; } *species = GetMonData(mon, MON_DATA_SPECIES); - *form = GetMonGender(mon) == MON_FEMALE; - *shiny = IsMonShiny(mon); + *shiny = IsMonShiny(mon) ? OBJ_EVENT_MON_SHINY : 0; + *female = GetMonGender(mon) == MON_FEMALE ? OBJ_EVENT_MON_FEMALE : 0; switch (*species) { case SPECIES_UNOWN: - *form = GET_UNOWN_LETTER(mon->box.personality); + *species = GetUnownSpecies(mon); break; default: *species = GetOverworldWeatherSpecies(*species); @@ -2238,9 +2185,9 @@ static bool8 GetMonInfo(struct Pokemon *mon, u16 *species, u8 *form, u8 *shiny) } // Retrieve graphic information about the following pokemon, if any -static bool8 GetFollowerInfo(u16 *species, u8 *form, u8 *shiny) +static bool8 GetFollowerInfo(u32 *species, bool32 *shiny, bool32 *female) { - return GetMonInfo(GetFirstLiveMon(), species, form, shiny); + return GetMonInfo(GetFirstLiveMon(), species, shiny, female); } // Update following pokemon if any @@ -2248,18 +2195,19 @@ void UpdateFollowingPokemon(void) { struct ObjectEvent *objEvent = GetFollowerObject(); struct Sprite *sprite; - u16 species; - bool8 shiny; - u8 form; + u32 species; + bool32 shiny; + bool32 female; // Don't spawn follower if: // 1. GetFollowerInfo returns FALSE // 2. Map is indoors and gfx is larger than 32x32 // 3. flag is set if (OW_POKEMON_OBJECT_EVENTS == FALSE || OW_FOLLOWERS_ENABLED == FALSE - || !GetFollowerInfo(&species, &form, &shiny) - || SpeciesToGraphicsInfo(species, form) == NULL - || (gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, form)->oam->size > ST_OAM_SIZE_2) + || FlagGet(B_FLAG_FOLLOWERS_DISABLED) + || !GetFollowerInfo(&species, &shiny, &female) + || SpeciesToGraphicsInfo(species, shiny, female) == NULL + || (gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, shiny, female)->oam->size > ST_OAM_SIZE_2) || FlagGet(FLAG_TEMP_HIDE_FOLLOWER)) { RemoveFollowingPokemon(); @@ -2273,7 +2221,7 @@ void UpdateFollowingPokemon(void) struct ObjectEventTemplate template = { .localId = OBJ_EVENT_ID_FOLLOWER, - .graphicsId = OBJ_EVENT_GFX_MON_BASE + species, + .graphicsId = GetGraphicsIdForMon(species, shiny, female), .flagId = 0, .x = gSaveBlock1Ptr->pos.x, .y = gSaveBlock1Ptr->pos.y, @@ -2281,7 +2229,7 @@ void UpdateFollowingPokemon(void) .elevation = gObjectEvents[objId].active ? gObjectEvents[objId].currentElevation : 3, .movementType = MOVEMENT_TYPE_FOLLOW_PLAYER, // store form info in template - .trainerRange_berryTreeId = (form & 0x1F) | (shiny << 5), + //.trainerRange_berryTreeId = (form & 0x1F) | (shiny << 5), // ???? what? }; if ((objId = SpawnSpecialObjectEvent(&template)) >= OBJECT_EVENTS_COUNT) return; @@ -2290,10 +2238,12 @@ void UpdateFollowingPokemon(void) } sprite = &gSprites[objEvent->spriteId]; // Follower appearance changed; move to player and set invisible - if (species != OW_SPECIES(objEvent) || shiny != objEvent->shiny || form != OW_FORM(objEvent)) + if (species != OW_SPECIES(objEvent) || shiny != OW_SHINY(objEvent) || female != OW_FEMALE(objEvent)) { - MoveObjectEventToMapCoords(objEvent, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y); - FollowerSetGraphics(objEvent, species, form, shiny, TRUE); + MoveObjectEventToMapCoords(objEvent, + gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x, + gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y); + FollowerSetGraphics(objEvent, species, shiny, female); objEvent->invisible = TRUE; } sprite->data[6] = 0; // set animation data @@ -2894,7 +2844,7 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) if (spriteTemplate.paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) { - u32 paletteNum = LoadDynamicFollowerPalette(OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny); + u32 paletteNum = LoadDynamicFollowerPalette(OW_SPECIES(objectEvent), OW_SHINY(objectEvent), OW_FEMALE(objectEvent)); spriteTemplate.paletteTag = GetSpritePaletteTagByPaletteNum(paletteNum); } else if (spriteTemplate.paletteTag != TAG_NONE) @@ -3099,24 +3049,14 @@ static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u16 graphicsId) { - u32 form = 0; - if (graphicsId >= OBJ_EVENT_GFX_VARS && graphicsId <= OBJ_EVENT_GFX_VAR_F) graphicsId = VarGetObjectEventGraphicsId(graphicsId - OBJ_EVENT_GFX_VARS); - if (graphicsId > OBJ_EVENT_GFX_SPECIES_MASK) - { - form = graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS; - graphicsId = graphicsId & OBJ_EVENT_GFX_SPECIES_MASK; - } - if (graphicsId == OBJ_EVENT_GFX_BARD) - { return gMauvilleOldManGraphicsInfoPointers[GetCurrentMauvilleOldMan()]; - } - if (graphicsId >= OBJ_EVENT_GFX_MON_BASE) - return SpeciesToGraphicsInfo(graphicsId - OBJ_EVENT_GFX_MON_BASE, form); + if (graphicsId & OBJ_EVENT_MON) + return SpeciesToGraphicsInfo(graphicsId & OBJ_EVENT_MON_SPECIES_MASK, graphicsId & OBJ_EVENT_MON_SHINY, graphicsId & OBJ_EVENT_MON_FEMALE); if (graphicsId >= NUM_OBJ_EVENT_GFX) graphicsId = OBJ_EVENT_GFX_NINJA_BOY; @@ -5602,7 +5542,7 @@ static bool8 UpdateFollowerTransformEffect(struct ObjectEvent *objectEvent, stru objectEvent->graphicsId = multi; break; } - objectEvent->graphicsId += OBJ_EVENT_GFX_MON_BASE; + objectEvent->graphicsId += OBJ_EVENT_MON; RefreshFollowerGraphics(objectEvent); break; case TRANSFORM_TYPE_RANDOM_WILD: @@ -5613,7 +5553,7 @@ static bool8 UpdateFollowerTransformEffect(struct ObjectEvent *objectEvent, stru objectEvent->graphicsId = multi; break; } - objectEvent->graphicsId += OBJ_EVENT_GFX_MON_BASE; + objectEvent->graphicsId += OBJ_EVENT_MON; RefreshFollowerGraphics(objectEvent); objectEvent->graphicsId = multi; break; @@ -5752,6 +5692,7 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri if (objectEvent->invisible) { // Animate exiting pokeball + // Player is jumping, but follower is invisible // don't emerge if player is jumping or moving via script if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2 || ArePlayerFieldControlsLocked()) { @@ -5777,7 +5718,7 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri // During a script, if player sidesteps or backsteps, // mirror player's direction instead if (ArePlayerFieldControlsLocked() - && gObjectEvents[gPlayerAvatar.objectEventId].facingDirection != gObjectEvents[gPlayerAvatar.objectEventId].movementDirection) + && gObjectEvents[gPlayerAvatar.objectEventId].facingDirection != gObjectEvents[gPlayerAvatar.objectEventId].movementDirection) { direction = gObjectEvents[gPlayerAvatar.objectEventId].movementDirection; objectEvent->facingDirectionLocked = TRUE; @@ -6687,9 +6628,9 @@ bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementAct // When player is moved via script, set copyable movement // for any followers via a lookup table - if (ArePlayerFieldControlsLocked() && - objectEvent->isPlayer && - FlagGet(FLAG_SAFE_FOLLOWER_MOVEMENT)) + if (ArePlayerFieldControlsLocked() + && objectEvent->isPlayer + && FlagGet(FLAG_SAFE_FOLLOWER_MOVEMENT)) { objectEvent->playerCopyableMovement = sActionIdToCopyableMovement[objectEvent->movementActionId]; } @@ -6720,9 +6661,9 @@ void ObjectEventClearHeldMovement(struct ObjectEvent *objectEvent) // When player is moved via script, set copyable movement // for any followers via a lookup table - if (ArePlayerFieldControlsLocked() && - objectEvent->isPlayer && - FlagGet(FLAG_SAFE_FOLLOWER_MOVEMENT)) + if (ArePlayerFieldControlsLocked() + && objectEvent->isPlayer + && FlagGet(FLAG_SAFE_FOLLOWER_MOVEMENT)) { objectEvent->playerCopyableMovement = sActionIdToCopyableMovement[objectEvent->movementActionId]; } @@ -7713,7 +7654,7 @@ bool8 MovementAction_ExitPokeball_Step1(struct ObjectEvent *objectEvent, struct // Set graphics, palette, and affine animation else if (sprite->sDuration == animStepFrame) { - FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny, FALSE); + FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_SHINY(objectEvent), OW_FEMALE(objectEvent)); LoadFillColorPalette(RGB_WHITE, OBJ_EVENT_PAL_TAG_WHITE, sprite); // Initialize affine animation sprite->affineAnims = sAffineAnims_PokeballFollower; @@ -7730,7 +7671,7 @@ bool8 MovementAction_ExitPokeball_Step1(struct ObjectEvent *objectEvent, struct sprite->affineAnimEnded = TRUE; FreeSpriteOamMatrix(sprite); sprite->oam.affineMode = ST_OAM_AFFINE_OFF; - FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny, TRUE); + FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_SHINY(objectEvent), OW_FEMALE(objectEvent)); } return FALSE; } @@ -7786,7 +7727,7 @@ bool8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_EnterPokeball_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny, FALSE); + FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_SHINY(objectEvent), OW_FEMALE(objectEvent)); objectEvent->invisible = TRUE; sprite->sTypeFuncId = 0; sprite->sSpeedFlip = 0; @@ -11254,9 +11195,9 @@ void GetDaycareGraphics(struct ScriptContext *ctx) { u16 varGfx[] = {ScriptReadHalfword(ctx), ScriptReadHalfword(ctx)}; u16 varForm[] = {ScriptReadHalfword(ctx), ScriptReadHalfword(ctx)}; - u16 specGfx; - u8 form; - u8 shiny; + u32 specGfx; + bool32 shiny; + bool32 female; s32 i; Script_RequestEffects(SCREFF_V1); @@ -11267,14 +11208,17 @@ void GetDaycareGraphics(struct ScriptContext *ctx) for (i = 0; i < 2; i++) { - GetMonInfo((struct Pokemon *) &gSaveBlock1Ptr->daycare.mons[i].mon, &specGfx, &form, &shiny); + GetMonInfo((struct Pokemon *) &gSaveBlock1Ptr->daycare.mons[i].mon, &specGfx, &shiny, &female); if (specGfx == SPECIES_NONE) break; // Assemble gfx ID like FollowerSetGraphics - specGfx = (OBJ_EVENT_GFX_MON_BASE + specGfx) & OBJ_EVENT_GFX_SPECIES_MASK; - specGfx |= form << OBJ_EVENT_GFX_SPECIES_BITS; - VarSet(varGfx[i], specGfx); - VarSet(varForm[i], form | (shiny << 5)); + specGfx = specGfx + OBJ_EVENT_MON; + if (shiny) + specGfx += OBJ_EVENT_MON_SHINY; + if (female) + specGfx += OBJ_EVENT_MON_FEMALE; + VarSet(varGfx[i], (u16)specGfx); + VarSet(varForm[i], 0); // This shouldn't be needed anymore, track down } gSpecialVar_Result = i; } @@ -11325,3 +11269,21 @@ bool8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct S } return FALSE; } + +static u16 GetGraphicsIdForMon(u32 species, bool32 shiny, bool32 female) +{ + u16 graphicsId = species + OBJ_EVENT_MON; + if (shiny) + graphicsId += OBJ_EVENT_MON_SHINY; + if (female) + graphicsId += OBJ_EVENT_MON_FEMALE; + return graphicsId; +} + +static u16 GetUnownSpecies(struct Pokemon *mon) +{ + u32 form = GET_UNOWN_LETTER(mon->box.personality); + if (form == 0) + return SPECIES_UNOWN; + return SPECIES_UNOWN_B + form - 1; +} diff --git a/src/field_specials.c b/src/field_specials.c index 1353d197f4..db86f99f32 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -71,6 +71,7 @@ #include "constants/rgb.h" #include "palette.h" #include "battle_util.h" +#include "naming_screen.h" #define TAG_ITEM_ICON 5500 @@ -4346,3 +4347,17 @@ void UseBlankMessageToCancelPokemonPic(void) AddTextPrinterParameterized(0, FONT_NORMAL, &t, 0, 1, 0, NULL); ScriptMenu_HidePokemonPic(); } + +void EnterCode(void) +{ + DoNamingScreen(NAMING_SCREEN_CODE, gStringVar2, 0, 0, 0, CB2_ReturnToFieldContinueScript); +} + +void GetCodeFeedback(void) +{ + static const u8 sText_SampleCode[] = _("SampleCode"); + if (!StringCompare(gStringVar2, sText_SampleCode)) + gSpecialVar_Result = 1; + else + gSpecialVar_Result = 0; +} diff --git a/src/frontier_util.c b/src/frontier_util.c index 30c22d4442..ab6dc867fd 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -1849,7 +1849,7 @@ void ResetFrontierTrainerIds(void) static void IsTrainerFrontierBrain(void) { - if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_FRONTIER_BRAIN) gSpecialVar_Result = TRUE; else gSpecialVar_Result = FALSE; @@ -1900,7 +1900,7 @@ static void GiveBattlePoints(void) challengeNum = ARRAY_COUNT(sBattlePointAwards[0][0]) - 1; points = sBattlePointAwards[facility][battleMode][challengeNum]; - if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_FRONTIER_BRAIN) points += 10; gSaveBlock2Ptr->frontier.battlePoints += points; ConvertIntToDecimalStringN(gStringVar1, points, STR_CONV_MODE_LEFT_ALIGN, 2); @@ -1910,7 +1910,7 @@ static void GiveBattlePoints(void) points = gSaveBlock2Ptr->frontier.cardBattlePoints; points += sBattlePointAwards[facility][battleMode][challengeNum]; IncrementDailyBattlePoints(sBattlePointAwards[facility][battleMode][challengeNum]); - if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_FRONTIER_BRAIN) { points += 10; IncrementDailyBattlePoints(10); @@ -2182,10 +2182,10 @@ static void BufferFrontierTrainerName(void) switch (gSpecialVar_0x8005) { case 0: - GetFrontierTrainerName(gStringVar1, gTrainerBattleOpponent_A); + GetFrontierTrainerName(gStringVar1, TRAINER_BATTLE_PARAM.opponentA); break; case 1: - GetFrontierTrainerName(gStringVar2, gTrainerBattleOpponent_A); + GetFrontierTrainerName(gStringVar2, TRAINER_BATTLE_PARAM.opponentA); break; } } @@ -2564,7 +2564,7 @@ u16 GetFrontierBrainMonSpecies(u8 monId) void SetFrontierBrainObjEventGfx(u8 facility) { - gTrainerBattleOpponent_A = TRAINER_FRONTIER_BRAIN; + TRAINER_BATTLE_PARAM.opponentA = TRAINER_FRONTIER_BRAIN; VarSet(VAR_OBJ_GFX_ID_0, gFrontierBrainInfo[facility].objEventGfx); } diff --git a/src/graphics.c b/src/graphics.c index 59ad13af80..08607d0484 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1287,6 +1287,12 @@ const u32 gBattleAnimSpritePal_Meteor[] = INCBIN_U32("graphics/battle_anims/spri const u32 gBattleAnimSpriteGfx_FlatRock[] = INCBIN_U32("graphics/battle_anims/sprites/flat_rock.4bpp.lz"); const u32 gBattleAnimSpritePal_FlatRock[] = INCBIN_U32("graphics/battle_anims/sprites/flat_rock.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_TeraStarstormBeam[] = INCBIN_U32("graphics/battle_anims/sprites/starstorm_beam.4bpp.lz"); +const u32 gBattleAnimSpritePal_TeraStarstormBeam[] = INCBIN_U32("graphics/battle_anims/sprites/starstorm_beam.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_SaltParticle[] = INCBIN_U32("graphics/battle_anims/sprites/salt_particle.4bpp.lz"); +const u32 gBattleAnimSpritePal_SaltParticle[] = INCBIN_U32("graphics/battle_anims/sprites/salt_particle.gbapal.lz"); + const u32 gBattleAnimUnusedPal_Unknown2[] = INCBIN_U32("graphics/battle_anims/unused/unknown_2.gbapal.lz"); #include "data/graphics/trainers.h" diff --git a/src/load_save.c b/src/load_save.c index 6fde540b8c..9c94808536 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -235,7 +235,7 @@ void LoadObjectEvents(void) // Try to restore saved inactive follower if (gObjectEvents[i].localId == OBJ_EVENT_ID_FOLLOWER && !gObjectEvents[i].active && - gObjectEvents[i].graphicsId >= OBJ_EVENT_GFX_MON_BASE) + gObjectEvents[i].graphicsId & OBJ_EVENT_MON) gObjectEvents[i].active = TRUE; } } diff --git a/src/naming_screen.c b/src/naming_screen.c index 118d91cfb4..e1307aa658 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -672,18 +672,8 @@ static bool8 MainState_PressedOKButton(void) SetInputState(INPUT_STATE_DISABLED); SetCursorFlashing(FALSE); TryStartButtonFlash(BUTTON_COUNT, FALSE, TRUE); - if (sNamingScreen->templateNum == NAMING_SCREEN_CAUGHT_MON - && CalculatePlayerPartyCount() >= PARTY_SIZE) - { - DisplaySentToPCMessage(); - sNamingScreen->state = STATE_WAIT_SENT_TO_PC_MESSAGE; - return FALSE; - } - else - { - sNamingScreen->state = STATE_FADE_OUT; - return TRUE; - } + sNamingScreen->state = STATE_FADE_OUT; + return TRUE; } static bool8 MainState_FadeOut(void) @@ -699,7 +689,11 @@ static bool8 MainState_Exit(void) { if (sNamingScreen->templateNum == NAMING_SCREEN_PLAYER) SeedRngAndSetTrainerId(); - SetMainCallback2(sNamingScreen->returnCallback); + if (sNamingScreen->templateNum == NAMING_SCREEN_CAUGHT_MON + && CalculatePlayerPartyCount() < PARTY_SIZE) + SetMainCallback2(BattleMainCB2); + else + SetMainCallback2(sNamingScreen->returnCallback); DestroyTask(FindTaskIdByFunc(Task_NamingScreen)); FreeAllWindowBuffers(); FREE_AND_SET_NULL(sNamingScreen); @@ -707,7 +701,7 @@ static bool8 MainState_Exit(void) return FALSE; } -static void DisplaySentToPCMessage(void) +static UNUSED void DisplaySentToPCMessage(void) { u8 stringToDisplay = 0; @@ -1373,6 +1367,7 @@ static void NamingScreen_CreatePlayerIcon(void); static void NamingScreen_CreatePCIcon(void); static void NamingScreen_CreateMonIcon(void); static void NamingScreen_CreateWaldaDadIcon(void); +static void NamingScreen_CreateCodeIcon(void); static void (*const sIconFunctions[])(void) = { @@ -1381,6 +1376,7 @@ static void (*const sIconFunctions[])(void) = NamingScreen_CreatePCIcon, NamingScreen_CreateMonIcon, NamingScreen_CreateWaldaDadIcon, + NamingScreen_CreateCodeIcon, }; static void CreateInputTargetIcon(void) @@ -1431,6 +1427,13 @@ static void NamingScreen_CreateWaldaDadIcon(void) StartSpriteAnim(&gSprites[spriteId], ANIM_STD_GO_SOUTH); } +static void NamingScreen_CreateCodeIcon(void) +{ + u8 spriteId; + spriteId = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MYSTERY_GIFT_MAN, SpriteCallbackDummy, 56, 37, 0); + gSprites[spriteId].oam.priority = 3; +} + //-------------------------------------------------- // Keyboard handling //-------------------------------------------------- @@ -1744,6 +1747,7 @@ static void (*const sDrawTextEntryBoxFuncs[])(void) = [NAMING_SCREEN_CAUGHT_MON] = DrawMonTextEntryBox, [NAMING_SCREEN_NICKNAME] = DrawMonTextEntryBox, [NAMING_SCREEN_WALDA] = DrawNormalTextEntryBox, + [NAMING_SCREEN_CODE] = DrawNormalTextEntryBox, }; static void DrawTextEntryBox(void) @@ -2146,6 +2150,18 @@ static const struct NamingScreenTemplate sWaldaWordsScreenTemplate = .title = gText_TellHimTheWords, }; +static const u8 sText_EnterCode[] = _("Enter code:"); +static const struct NamingScreenTemplate sCodeScreenTemplate = +{ + .copyExistingString = FALSE, + .maxChars = CODE_NAME_LENGTH, + .iconFunction = 5, + .addGenderIcon = FALSE, + .initialPage = KBPAGE_LETTERS_UPPER, + .unused = 35, + .title = sText_EnterCode, +}; + static const struct NamingScreenTemplate *const sNamingScreenTemplates[] = { [NAMING_SCREEN_PLAYER] = &sPlayerNamingScreenTemplate, @@ -2153,6 +2169,7 @@ static const struct NamingScreenTemplate *const sNamingScreenTemplates[] = [NAMING_SCREEN_CAUGHT_MON] = &sMonNamingScreenTemplate, [NAMING_SCREEN_NICKNAME] = &sMonNamingScreenTemplate, [NAMING_SCREEN_WALDA] = &sWaldaWordsScreenTemplate, + [NAMING_SCREEN_CODE] = &sCodeScreenTemplate, }; static const struct OamData sOam_8x8 = diff --git a/src/overworld.c b/src/overworld.c index 32f673bca3..d665917cc8 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -76,6 +76,8 @@ #include "constants/trainer_hill.h" #include "constants/weather.h" +STATIC_ASSERT((B_FLAG_FOLLOWERS_DISABLED == 0 || OW_FOLLOWERS_ENABLED), FollowersFlagAssignedWithoutEnablingThem); + struct CableClubPlayer { u8 playerId; diff --git a/src/party_menu.c b/src/party_menu.c index bda62ba3d1..5e79d74d45 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -174,6 +174,14 @@ enum { #define MENU_DIR_RIGHT 2 #define MENU_DIR_LEFT -2 +#define HM_MOVES_END 0xFFFF + +static const u16 sHMMoves[] = +{ + MOVE_CUT, MOVE_FLY, MOVE_SURF, MOVE_STRENGTH, MOVE_FLASH, + MOVE_ROCK_SMASH, MOVE_WATERFALL, MOVE_DIVE, HM_MOVES_END +}; + enum { CAN_LEARN_MOVE, CANNOT_LEARN_MOVE, @@ -320,6 +328,7 @@ static void HandleChooseMonSelection(u8, s8 *); static u16 PartyMenuButtonHandler(s8 *); static s8 *GetCurrentPartySlotPtr(void); static bool8 IsSelectedMonNotEgg(u8 *); +static bool8 DoesSelectedMonKnowHM(u8 *); static void PartyMenuRemoveWindow(u8 *); static void CB2_SetUpExitToBattleScreen(void); static void Task_ClosePartyMenuAfterText(u8); @@ -1524,6 +1533,30 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) } break; } + case PARTY_ACTION_SEND_MON_TO_BOX: + { + u8 partyId = GetPartyIdFromBattleSlot((u8)*slotPtr); + if (partyId == 0 || ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && partyId == 2) + || ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && partyId >= (PARTY_SIZE / 2))) + { + // Can't select if mon is currently on the field, or doesn't belong to you + PlaySE(SE_FAILURE); + } + else if (DoesSelectedMonKnowHM((u8 *)slotPtr)) + { + PlaySE(SE_FAILURE); + DisplayPartyMenuMessage(gText_CannotSendMonToBoxHM, FALSE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + } + else + { + PlaySE(SE_SELECT); + gSelectedMonPartyId = partyId; + Task_ClosePartyMenu(taskId); + } + break; + } default: case PARTY_ACTION_ABILITY_PREVENTS: case PARTY_ACTION_SWITCHING: @@ -1544,6 +1577,25 @@ static bool8 IsSelectedMonNotEgg(u8 *slotPtr) return TRUE; } +static bool8 DoesSelectedMonKnowHM(u8 *slotPtr) +{ + if (B_CATCH_SWAP_CHECK_HMS == FALSE) + return FALSE; + + for (u32 i = 0; i < MAX_MON_MOVES; i++) + { + u32 j = 0; + u16 move = GetMonData(&gPlayerParty[*slotPtr], MON_DATA_MOVE1 + i); + + while (sHMMoves[j] != HM_MOVES_END) + { + if (sHMMoves[j++] == move) + return TRUE; + } + } + return FALSE; +} + static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr) { switch (gPartyMenu.action) @@ -1561,6 +1613,11 @@ static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr) PlaySE(SE_SELECT); CancelParticipationPrompt(taskId); break; + case PARTY_ACTION_SEND_MON_TO_BOX: + PlaySE(SE_SELECT); + gSelectedMonPartyId = PARTY_SIZE + 1; + Task_ClosePartyMenu(taskId); + break; default: PlaySE(SE_SELECT); if (DisplayCancelChooseMonYesNo(taskId) != TRUE) @@ -1924,7 +1981,10 @@ static void Task_ReturnToChooseMonAfterText(u8 taskId) } else { - DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + if (gPartyMenu.action == PARTY_ACTION_SEND_MON_TO_BOX) + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON_FOR_BOX); + else + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); gTasks[taskId].func = Task_HandleChooseMonInput; } } @@ -4665,8 +4725,7 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) if (!IsItemFlute(item)) { PlaySE(SE_USE_ITEM); - if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM) - RemoveBagItem(item, 1); + RemoveBagItem(item, 1); } else { @@ -7124,7 +7183,11 @@ static u8 GetPartyLayoutFromBattleType(void) void OpenPartyMenuInBattle(u8 partyAction) { - InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), partyAction, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_SetUpReshowBattleScreenAfterMenu); + if (partyAction == PARTY_ACTION_SEND_MON_TO_BOX) + InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), partyAction, FALSE, PARTY_MSG_CHOOSE_MON_FOR_BOX, Task_HandleChooseMonInput, ReshowBlankBattleScreenAfterMenu); + else + InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), partyAction, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_SetUpReshowBattleScreenAfterMenu); + ReshowBattleScreenDummy(); UpdatePartyToBattleOrder(); } diff --git a/src/pokeball.c b/src/pokeball.c index 2b168cd7e3..6db184b496 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -993,16 +993,11 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) u16 wantedCryCase; u8 taskId; + mon = GetPartyBattlerData(battlerId); if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - { - mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; pan = 25; - } else - { - mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; pan = -25; - } if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) && IsDoubleBattle() && gBattleSpritesDataPtr->animationData->introAnimActive) diff --git a/src/pokedex.c b/src/pokedex.c index e4b5076e59..141ae3cdd2 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4539,7 +4539,7 @@ u16 GetHoennPokedexCount(u8 caseID) u16 count = 0; u16 i; - for (i = 0; i < HOENN_DEX_COUNT; i++) + for (i = 0; i < HOENN_DEX_COUNT - 1; i++) { switch (caseID) { @@ -4582,7 +4582,7 @@ bool16 HasAllHoennMons(void) { u32 i, j; - for (i = 0; i < HOENN_DEX_COUNT; i++) + for (i = 0; i < HOENN_DEX_COUNT - 1; i++) { j = HoennToNationalOrder(i + 1); if (!(gSpeciesInfo[j].isMythical && !gSpeciesInfo[j].dexForceRequired) && !GetSetPokedexFlag(j, FLAG_GET_CAUGHT)) diff --git a/src/pokemon.c b/src/pokemon.c index 748a21d3f8..2483d636a3 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -37,7 +37,6 @@ #include "recorded_battle.h" #include "rtc.h" #include "sound.h" -#include "sprite.h" #include "string_util.h" #include "strings.h" #include "task.h" @@ -59,6 +58,7 @@ #include "constants/items.h" #include "constants/layouts.h" #include "constants/moves.h" +#include "constants/regions.h" #include "constants/songs.h" #include "constants/trainers.h" #include "constants/union_room.h" @@ -381,7 +381,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_ATK, .backAnim = 0, .pokeBlockAnim = {ANIM_HARDY, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlHardy, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAttackHighAttackLow, .battlePalacePercents = PALACE_STYLE(61, 7, 61, 7), //32% support >= 50% HP, 32% support < 50% HP .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -393,7 +393,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_DEF, .backAnim = 2, .pokeBlockAnim = {ANIM_LONELY, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlLonely, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlSupportHighAttackLow, .battlePalacePercents = PALACE_STYLE(20, 25, 84, 8), //55%, 8% .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -405,7 +405,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPEED, .backAnim = 0, .pokeBlockAnim = {ANIM_BRAVE, AFFINE_TURN_UP}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlBrave, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAttackHighDefenseLow, .battlePalacePercents = PALACE_STYLE(70, 15, 32, 60), //15%, 8% .battlePalaceFlavorText = B_MSG_GETTING_IN_POS, .battlePalaceSmokescreen = PALACE_TARGET_WEAKER, @@ -417,7 +417,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPATK, .backAnim = 0, .pokeBlockAnim = {ANIM_ADAMANT, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAdamant, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAttackHighAttackLow, .battlePalacePercents = PALACE_STYLE(38, 31, 70, 15), //31%, 15% .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -429,7 +429,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPDEF, .backAnim = 0, .pokeBlockAnim = {ANIM_NAUGHTY, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlNaughty, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDefenseHighAttackLow, .battlePalacePercents = PALACE_STYLE(20, 70, 70, 22), //10%, 8% .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE, .battlePalaceSmokescreen = PALACE_TARGET_WEAKER, @@ -441,7 +441,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_ATK, .backAnim = 1, .pokeBlockAnim = {ANIM_BOLD, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlBold, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlSupportHighDefenseLow, .battlePalacePercents = PALACE_STYLE(30, 20, 32, 58), //50%, 10% .battlePalaceFlavorText = B_MSG_GETTING_IN_POS, .battlePalaceSmokescreen = PALACE_TARGET_WEAKER, @@ -453,7 +453,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_DEF, .backAnim = 1, .pokeBlockAnim = {ANIM_DOCILE, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAttackHighAttackLow, .battlePalacePercents = PALACE_STYLE(56, 22, 56, 22), //22%, 22% .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE, .battlePalaceSmokescreen = PALACE_TARGET_RANDOM, @@ -465,7 +465,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPEED, .backAnim = 1, .pokeBlockAnim = {ANIM_RELAXED, AFFINE_TURN_UP_AND_DOWN}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlRelaxed, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlSupportHighAttackLow, .battlePalacePercents = PALACE_STYLE(25, 15, 75, 15), //60%, 10% .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -477,7 +477,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPATK, .backAnim = 0, .pokeBlockAnim = {ANIM_IMPISH, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlImpish, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAttackHighDefenseLow, .battlePalacePercents = PALACE_STYLE(69, 6, 28, 55), //25%, 17% .battlePalaceFlavorText = B_MSG_GETTING_IN_POS, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -489,7 +489,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPDEF, .backAnim = 1, .pokeBlockAnim = {ANIM_LAX, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlLax, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlSupportHighSupportLow, .battlePalacePercents = PALACE_STYLE(35, 10, 29, 6), //55%, 65% .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -501,7 +501,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_ATK, .backAnim = 2, .pokeBlockAnim = {ANIM_TIMID, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlTimid, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAttackHighSupportLow, .battlePalacePercents = PALACE_STYLE(62, 10, 30, 20), //28%, 50% .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY, .battlePalaceSmokescreen = PALACE_TARGET_WEAKER, @@ -513,7 +513,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_DEF, .backAnim = 0, .pokeBlockAnim = {ANIM_HASTY, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlHasty, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAttackHighAttackLow, .battlePalacePercents = PALACE_STYLE(58, 37, 88, 6), //5%, 6% .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE, .battlePalaceSmokescreen = PALACE_TARGET_WEAKER, @@ -525,7 +525,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPEED, .backAnim = 1, .pokeBlockAnim = {ANIM_SERIOUS, AFFINE_TURN_DOWN}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlSerious, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlSupportHighSupportLow, .battlePalacePercents = PALACE_STYLE(34, 11, 29, 11), //55%, 60% .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE, .battlePalaceSmokescreen = PALACE_TARGET_WEAKER, @@ -537,7 +537,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPATK, .backAnim = 0, .pokeBlockAnim = {ANIM_JOLLY, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlJolly, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlSupportHighDefenseLow, .battlePalacePercents = PALACE_STYLE(35, 5, 35, 60), //60%, 5% .battlePalaceFlavorText = B_MSG_GETTING_IN_POS, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -549,7 +549,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPDEF, .backAnim = 0, .pokeBlockAnim = {ANIM_NAIVE, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAttackHighAttackLow, .battlePalacePercents = PALACE_STYLE(56, 22, 56, 22), //22%, 22% .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE, .battlePalaceSmokescreen = PALACE_TARGET_RANDOM, @@ -561,7 +561,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_ATK, .backAnim = 2, .pokeBlockAnim = {ANIM_MODEST, AFFINE_TURN_DOWN_SLOW}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlModest, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDefenseHighDefenseLow, .battlePalacePercents = PALACE_STYLE(35, 45, 34, 60), //20%, 6% .battlePalaceFlavorText = B_MSG_GETTING_IN_POS, .battlePalaceSmokescreen = PALACE_TARGET_WEAKER, @@ -573,7 +573,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_DEF, .backAnim = 2, .pokeBlockAnim = {ANIM_MILD, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlMild, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDefenseHighSupportLow, .battlePalacePercents = PALACE_STYLE(44, 50, 34, 6), //6%, 60% .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -585,7 +585,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPEED, .backAnim = 2, .pokeBlockAnim = {ANIM_QUIET, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAttackHighAttackLow, .battlePalacePercents = PALACE_STYLE(56, 22, 56, 22), //22%, 22% .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE, .battlePalaceSmokescreen = PALACE_TARGET_WEAKER, @@ -597,7 +597,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPATK, .backAnim = 2, .pokeBlockAnim = {ANIM_BASHFUL, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlBashful, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDefenseHighDefenseLow, .battlePalacePercents = PALACE_STYLE(30, 58, 30, 58), //12%, 12% .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE, .battlePalaceSmokescreen = PALACE_TARGET_WEAKER, @@ -609,7 +609,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPDEF, .backAnim = 1, .pokeBlockAnim = {ANIM_RASH, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlRash, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlSupportHighSupportLow, .battlePalacePercents = PALACE_STYLE(30, 13, 27, 6), //57%, 67% .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -621,7 +621,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_ATK, .backAnim = 1, .pokeBlockAnim = {ANIM_CALM, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlCalm, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDefenseHighDefenseLow, .battlePalacePercents = PALACE_STYLE(40, 50, 25, 62), //10%, 13% .battlePalaceFlavorText = B_MSG_GETTING_IN_POS, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -633,7 +633,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_DEF, .backAnim = 2, .pokeBlockAnim = {ANIM_GENTLE, AFFINE_TURN_DOWN_SLIGHT}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlGentle, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDefenseHighAttackLow, .battlePalacePercents = PALACE_STYLE(18, 70, 90, 5), //12%, 5% .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -645,7 +645,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPEED, .backAnim = 1, .pokeBlockAnim = {ANIM_SASSY, AFFINE_TURN_UP_HIGH}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlSassy, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAttackHighSupportLow, .battlePalacePercents = PALACE_STYLE(88, 6, 22, 20), //6%, 58% .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY, .battlePalaceSmokescreen = PALACE_TARGET_WEAKER, @@ -657,7 +657,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPATK, .backAnim = 2, .pokeBlockAnim = {ANIM_CAREFUL, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlCareful, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDefenseHighSupportLow, .battlePalacePercents = PALACE_STYLE(42, 50, 42, 5), //8%, 53% .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY, .battlePalaceSmokescreen = PALACE_TARGET_WEAKER, @@ -669,7 +669,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = .statDown = STAT_SPDEF, .backAnim = 1, .pokeBlockAnim = {ANIM_QUIRKY, AFFINE_NONE}, - .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky, + .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAttackHighAttackLow, .battlePalacePercents = PALACE_STYLE(56, 22, 56, 22), //22%, 22% .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE, .battlePalaceSmokescreen = PALACE_TARGET_STRONGER, @@ -706,6 +706,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = #include "data/pokemon/form_species_tables.h" #include "data/pokemon/form_change_tables.h" #include "data/pokemon/form_change_table_pointers.h" +#include "data/object_events/object_event_pic_tables_followers.h" #include "data/pokemon/species_info.h" @@ -2067,8 +2068,9 @@ void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) u8 CountAliveMonsInBattle(u8 caseId, u32 battler) { - s32 i; - u8 retVal = 0; + u32 i; + u32 battlerSide; + u32 retVal = 0; switch (caseId) { @@ -2087,9 +2089,10 @@ u8 CountAliveMonsInBattle(u8 caseId, u32 battler) } break; case BATTLE_ALIVE_SIDE: + battlerSide = GetBattlerSide(battler); for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - if (GetBattlerSide(i) == GetBattlerSide(battler) && !(gAbsentBattlerFlags & (1u << i))) + if (GetBattlerSide(i) == battlerSide && !(gAbsentBattlerFlags & (1u << i))) retVal++; } break; @@ -2219,7 +2222,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerPicId, u8 battlerPosition gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition]; else gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition]; - gMultiuseSpriteTemplate.anims = sAnims_Trainer; + gMultiuseSpriteTemplate.anims = gAnims_Trainer; } } @@ -2231,7 +2234,7 @@ void SetMultiuseSpriteTemplateToTrainerFront(u16 trainerPicId, u8 battlerPositio gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition]; gMultiuseSpriteTemplate.paletteTag = trainerPicId; - gMultiuseSpriteTemplate.anims = sAnims_Trainer; + gMultiuseSpriteTemplate.anims = gAnims_Trainer; } static void EncryptBoxMon(struct BoxPokemon *boxMon) @@ -5181,7 +5184,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event) { u8 friendshipLevel = 0; s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0); - u32 opponentTrainerClass = GetTrainerClassFromId(gTrainerBattleOpponent_A); + u32 opponentTrainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); if (friendship > 99) friendshipLevel++; @@ -5748,11 +5751,11 @@ u16 GetBattleBGM(void) u8 trainerClass; if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - trainerClass = GetFrontierOpponentClass(gTrainerBattleOpponent_A); + trainerClass = GetFrontierOpponentClass(TRAINER_BATTLE_PARAM.opponentA); else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) trainerClass = TRAINER_CLASS_EXPERT; else - trainerClass = GetTrainerClassFromId(gTrainerBattleOpponent_A); + trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); switch (trainerClass) { @@ -5771,7 +5774,7 @@ u16 GetBattleBGM(void) case TRAINER_CLASS_RIVAL: if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) return MUS_VS_RIVAL; - if (!StringCompare(GetTrainerNameFromId(gTrainerBattleOpponent_A), gText_BattleWallyName)) + if (!StringCompare(GetTrainerNameFromId(TRAINER_BATTLE_PARAM.opponentA), gText_BattleWallyName)) return MUS_VS_TRAINER; return MUS_VS_RIVAL; case TRAINER_CLASS_ELITE_FOUR: @@ -6987,3 +6990,70 @@ uq4_12_t GetDynamaxLevelHPMultiplier(u32 dynamaxLevel, bool32 inverseMultiplier) return UQ_4_12(1.0/(1.5 + 0.05 * dynamaxLevel)); return UQ_4_12(1.5 + 0.05 * dynamaxLevel); } + +bool32 IsSpeciesRegionalForm(u32 species) +{ + return gSpeciesInfo[species].isAlolanForm + || gSpeciesInfo[species].isGalarianForm + || gSpeciesInfo[species].isHisuianForm + || gSpeciesInfo[species].isPaldeanForm; +} + +bool32 IsSpeciesRegionalFormFromRegion(u32 species, u32 region) +{ + switch (region) + { + case REGION_ALOLA: return gSpeciesInfo[species].isAlolanForm; + case REGION_GALAR: return gSpeciesInfo[species].isGalarianForm; + case REGION_HISUI: return gSpeciesInfo[species].isHisuianForm; + case REGION_PALDEA: return gSpeciesInfo[species].isPaldeanForm; + default: return FALSE; + } +} + +bool32 SpeciesHasRegionalForm(u32 species) +{ + u32 formId; + const u16 *formTable = GetSpeciesFormTable(species); + for (formId = 0; formTable != NULL && formTable[formId] != FORM_SPECIES_END; formId++) + { + if (IsSpeciesRegionalForm(formTable[formId])) + return TRUE; + } + return FALSE; +} + +u32 GetRegionalFormByRegion(u32 species, u32 region) +{ + u32 formId = 0; + u32 firstFoundSpecies = 0; + const u16 *formTable = GetSpeciesFormTable(species); + + if (formTable != NULL) + { + for (formId = 0; formTable[formId] != FORM_SPECIES_END; formId++) + { + if (firstFoundSpecies == 0) + firstFoundSpecies = formTable[formId]; + + if (IsSpeciesRegionalFormFromRegion(formTable[formId], region)) + return formTable[formId]; + } + if (firstFoundSpecies != 0) + return firstFoundSpecies; + } + return species; +} + +bool32 IsSpeciesForeignRegionalForm(u32 species, u32 currentRegion) +{ + u32 i; + for (i = 0; i < REGIONS_COUNT; i++) + { + if (currentRegion != i && IsSpeciesRegionalFormFromRegion(species, i)) + return TRUE; + else if (currentRegion == i && SpeciesHasRegionalForm(species) && !IsSpeciesRegionalFormFromRegion(species, i)) + return TRUE; + } + return FALSE; +} diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c index 3e245d3eb8..11588f673d 100644 --- a/src/pokemon_sprite_visualizer.c +++ b/src/pokemon_sprite_visualizer.c @@ -1311,7 +1311,7 @@ void CB2_Pokemon_Sprite_Visualizer(void) gSprites[data->iconspriteId].oam.priority = 0; //Follower Sprite - data->followerspriteId = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MON_BASE + species, SpriteCB_Follower, VISUALIZER_FOLLOWER_X, VISUALIZER_FOLLOWER_Y, 0); + data->followerspriteId = CreateObjectGraphicsSprite(OBJ_EVENT_MON + species, SpriteCB_Follower, VISUALIZER_FOLLOWER_X, VISUALIZER_FOLLOWER_Y, 0); gSprites[data->followerspriteId].oam.priority = 0; gSprites[data->followerspriteId].anims = sAnims_Follower; @@ -2002,18 +2002,16 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data) gSprites[data->iconspriteId].oam.priority = 0; //Follower Sprite - u16 graphicsId = (OBJ_EVENT_GFX_MON_BASE + species) & OBJ_EVENT_GFX_SPECIES_MASK; - struct FollowerSpriteVisualizerData followerData; - followerData.currentmonId = graphicsId; - followerData.isFemale = data->isFemale; - followerData.isShiny = data->isShiny; - graphicsId |= data->isFemale << OBJ_EVENT_GFX_SPECIES_BITS; - data->followerspriteId = CreateObjectGraphicsFollowerSpriteForVisualizer(graphicsId, + u16 graphicsId = species + OBJ_EVENT_MON; + if (data->isShiny) + graphicsId += OBJ_EVENT_MON_SHINY; + if (data->isFemale) + graphicsId += OBJ_EVENT_MON_FEMALE; + data->followerspriteId = CreateObjectGraphicsSprite(graphicsId, SpriteCB_Follower, VISUALIZER_FOLLOWER_X, VISUALIZER_FOLLOWER_Y, - 0, - &followerData); + 0); gSprites[data->followerspriteId].oam.priority = 0; gSprites[data->followerspriteId].anims = sAnims_Follower; diff --git a/src/record_mixing.c b/src/record_mixing.c index 7d78119f86..1ff36d1fe8 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -770,14 +770,12 @@ static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *records, size bool8 canHoldItem[MAX_LINK_PLAYERS][DAYCARE_MON_COUNT]; u8 idxs[MAX_LINK_PLAYERS][2]; u8 numDaycareCanHold; - u16 oldSeed; bool32 anyRS; + rng_value_t localRngState = LocalRandomSeed(gLinkPlayers[0].trainerId); // Seed RNG to the first player's trainer id so that // every player has the same random swap occur // (see the other use of Random2 in this function) - oldSeed = Random2(); - SeedRng2(gLinkPlayers[0].trainerId); linkPlayerCount = GetLinkPlayerCount(); for (i = 0; i < MAX_LINK_PLAYERS; i++) { @@ -907,7 +905,7 @@ static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *records, size itemId2 = GetDaycareMailItemId(&mixMail->mail[1]); if ((!itemId1 && !itemId2) || (itemId1 && itemId2)) - idxs[j][DAYCARE_SLOT] = Random2() % 2; + idxs[j][DAYCARE_SLOT] = LocalRandom32(&localRngState) % 2; else if (itemId1 && !itemId2) idxs[j][DAYCARE_SLOT] = 0; else if (!itemId1 && itemId2) @@ -958,7 +956,6 @@ static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *records, size mixMail = (void *)records + multiplayerId * recordSize; memcpy(&gSaveBlock1Ptr->daycare.mons[0].mail, &mixMail->mail[0], sizeof(struct DaycareMail)); memcpy(&gSaveBlock1Ptr->daycare.mons[1].mail, &mixMail->mail[1], sizeof(struct DaycareMail)); - SeedRng(oldSeed); } diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 6a1587930d..0b385c017c 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -349,8 +349,8 @@ bool32 MoveRecordedBattleToSaveData(void) battleSave->battleFlags = sBattleFlags; } - battleSave->opponentA = gTrainerBattleOpponent_A; - battleSave->opponentB = gTrainerBattleOpponent_B; + battleSave->opponentA = TRAINER_BATTLE_PARAM.opponentA; + battleSave->opponentB = TRAINER_BATTLE_PARAM.opponentB; battleSave->partnerId = gPartnerTrainerId; battleSave->multiplayerId = gRecordedBattleMultiplayerId; battleSave->lvlMode = gSaveBlock2Ptr->frontier.lvlMode; @@ -360,41 +360,41 @@ bool32 MoveRecordedBattleToSaveData(void) battleSave->textSpeed = gSaveBlock2Ptr->optionsTextSpeed; battleSave->AI_scripts = sAI_Scripts; - if (gTrainerBattleOpponent_A >= TRAINER_RECORD_MIXING_FRIEND && gTrainerBattleOpponent_A < TRAINER_RECORD_MIXING_APPRENTICE) + if (TRAINER_BATTLE_PARAM.opponentA >= TRAINER_RECORD_MIXING_FRIEND && TRAINER_BATTLE_PARAM.opponentA < TRAINER_RECORD_MIXING_APPRENTICE) { for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) - battleSave->recordMixFriendName[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].name[i]; - battleSave->recordMixFriendClass = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].facilityClass; + battleSave->recordMixFriendName[i] = gSaveBlock2Ptr->frontier.towerRecords[TRAINER_BATTLE_PARAM.opponentA - TRAINER_RECORD_MIXING_FRIEND].name[i]; + battleSave->recordMixFriendClass = gSaveBlock2Ptr->frontier.towerRecords[TRAINER_BATTLE_PARAM.opponentA - TRAINER_RECORD_MIXING_FRIEND].facilityClass; if (sBattleOutcome == B_OUTCOME_WON) { for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) - battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].speechLost[i]; + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[TRAINER_BATTLE_PARAM.opponentA - TRAINER_RECORD_MIXING_FRIEND].speechLost[i]; } else { for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) - battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].speechWon[i]; + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[TRAINER_BATTLE_PARAM.opponentA - TRAINER_RECORD_MIXING_FRIEND].speechWon[i]; } - battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].language; + battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[TRAINER_BATTLE_PARAM.opponentA - TRAINER_RECORD_MIXING_FRIEND].language; } - else if (gTrainerBattleOpponent_B >= TRAINER_RECORD_MIXING_FRIEND && gTrainerBattleOpponent_B < TRAINER_RECORD_MIXING_APPRENTICE) + else if (TRAINER_BATTLE_PARAM.opponentB >= TRAINER_RECORD_MIXING_FRIEND && TRAINER_BATTLE_PARAM.opponentB < TRAINER_RECORD_MIXING_APPRENTICE) { for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) - battleSave->recordMixFriendName[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].name[i]; - battleSave->recordMixFriendClass = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].facilityClass; + battleSave->recordMixFriendName[i] = gSaveBlock2Ptr->frontier.towerRecords[TRAINER_BATTLE_PARAM.opponentB - TRAINER_RECORD_MIXING_FRIEND].name[i]; + battleSave->recordMixFriendClass = gSaveBlock2Ptr->frontier.towerRecords[TRAINER_BATTLE_PARAM.opponentB - TRAINER_RECORD_MIXING_FRIEND].facilityClass; if (sBattleOutcome == B_OUTCOME_WON) { for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) - battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].speechLost[i]; + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[TRAINER_BATTLE_PARAM.opponentB - TRAINER_RECORD_MIXING_FRIEND].speechLost[i]; } else { for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) - battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].speechWon[i]; + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[TRAINER_BATTLE_PARAM.opponentB - TRAINER_RECORD_MIXING_FRIEND].speechWon[i]; } - battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].language; + battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[TRAINER_BATTLE_PARAM.opponentB - TRAINER_RECORD_MIXING_FRIEND].language; } else if (gPartnerTrainerId >= TRAINER_RECORD_MIXING_FRIEND && gPartnerTrainerId < TRAINER_RECORD_MIXING_APPRENTICE) { @@ -405,19 +405,19 @@ bool32 MoveRecordedBattleToSaveData(void) battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[gPartnerTrainerId - TRAINER_RECORD_MIXING_FRIEND].language; } - if (gTrainerBattleOpponent_A >= TRAINER_RECORD_MIXING_APPRENTICE) + if (TRAINER_BATTLE_PARAM.opponentA >= TRAINER_RECORD_MIXING_APPRENTICE) { - battleSave->apprenticeId = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].id; + battleSave->apprenticeId = gSaveBlock2Ptr->apprentices[TRAINER_BATTLE_PARAM.opponentA - TRAINER_RECORD_MIXING_APPRENTICE].id; for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) - battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].speechWon[i]; - battleSave->apprenticeLanguage = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].language; + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[TRAINER_BATTLE_PARAM.opponentA - TRAINER_RECORD_MIXING_APPRENTICE].speechWon[i]; + battleSave->apprenticeLanguage = gSaveBlock2Ptr->apprentices[TRAINER_BATTLE_PARAM.opponentA - TRAINER_RECORD_MIXING_APPRENTICE].language; } - else if (gTrainerBattleOpponent_B >= TRAINER_RECORD_MIXING_APPRENTICE) + else if (TRAINER_BATTLE_PARAM.opponentB >= TRAINER_RECORD_MIXING_APPRENTICE) { - battleSave->apprenticeId = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].id; + battleSave->apprenticeId = gSaveBlock2Ptr->apprentices[TRAINER_BATTLE_PARAM.opponentB - TRAINER_RECORD_MIXING_APPRENTICE].id; for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) - battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].speechWon[i]; - battleSave->apprenticeLanguage = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].language; + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[TRAINER_BATTLE_PARAM.opponentB - TRAINER_RECORD_MIXING_APPRENTICE].speechWon[i]; + battleSave->apprenticeLanguage = gSaveBlock2Ptr->apprentices[TRAINER_BATTLE_PARAM.opponentB - TRAINER_RECORD_MIXING_APPRENTICE].language; } else if (gPartnerTrainerId >= TRAINER_RECORD_MIXING_APPRENTICE) { @@ -472,8 +472,8 @@ static void CB2_RecordedBattleEnd(void) gSaveBlock2Ptr->frontier.lvlMode = sLvlMode; gBattleOutcome = 0; gBattleTypeFlags = 0; - gTrainerBattleOpponent_A = 0; - gTrainerBattleOpponent_B = 0; + TRAINER_BATTLE_PARAM.opponentA = 0; + TRAINER_BATTLE_PARAM.opponentB = 0; gPartnerTrainerId = 0; RecordedBattle_RestoreSavedParties(); @@ -530,8 +530,8 @@ void SetVariablesForRecordedBattle(struct RecordedBattleSave *src) gRecordedBattleRngSeed = src->rngSeed; gBattleTypeFlags = src->battleFlags | BATTLE_TYPE_RECORDED; - gTrainerBattleOpponent_A = src->opponentA; - gTrainerBattleOpponent_B = src->opponentB; + TRAINER_BATTLE_PARAM.opponentA = src->opponentA; + TRAINER_BATTLE_PARAM.opponentB = src->opponentB; gPartnerTrainerId = src->partnerId; gRecordedBattleMultiplayerId = src->multiplayerId; sLvlMode = gSaveBlock2Ptr->frontier.lvlMode; diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 87f639194c..ba6f615595 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -18,9 +18,11 @@ // this file's functions static void CB2_ReshowBattleScreenAfterMenu(void); +static void CB2_ReshowBlankBattleScreenAfterMenu(void); static bool8 LoadBattlerSpriteGfx(u32 battler); static void CreateHealthboxSprite(u32 battler); static void ClearBattleBgCntBaseBlocks(void); +static void CreateCaughtMonSprite(void); void ReshowBattleScreenDummy(void) { @@ -168,6 +170,89 @@ static void CB2_ReshowBattleScreenAfterMenu(void) gBattleScripting.reshowMainState++; } +void ReshowBlankBattleScreenAfterMenu(void) +{ + gPaletteFade.bufferTransferDisabled = 1; + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + gBattleScripting.reshowMainState = 0; + gBattleScripting.reshowHelperState = 0; + SetMainCallback2(CB2_ReshowBlankBattleScreenAfterMenu); +} + +static void CB2_ReshowBlankBattleScreenAfterMenu(void) +{ + switch (gBattleScripting.reshowMainState) + { + case 0: + ScanlineEffect_Clear(); + BattleInitBgsAndWindows(); + SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); + SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + ResetPaletteFade(); + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + gBattle_BG3_X = 255; + gBattle_BG3_Y = 0; + break; + case 1: + CpuFastFill(0, (void *)(VRAM), VRAM_SIZE); + break; + case 2: + LoadBattleTextboxAndBackground(); + break; + case 3: + ResetSpriteData(); + break; + case 4: + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = MAX_BATTLERS_COUNT; + break; + case 5: + ClearSpritesHealthboxAnimData(); + break; + case 6: + if (!LoadBattlerSpriteGfx(0)) + gBattleScripting.reshowMainState--; + break; + case 7: + if (!LoadBattlerSpriteGfx(1)) + gBattleScripting.reshowMainState--; + break; + case 8: + if (!LoadBattlerSpriteGfx(2)) + gBattleScripting.reshowMainState--; + break; + case 9: + if (!LoadBattlerSpriteGfx(3)) + gBattleScripting.reshowMainState--; + break; + case 10: + if (gBattleScripting.monCaught) + CreateCaughtMonSprite(); // displays the caught mon for the switch into party feature + break; + default: + SetVBlankCallback(VBlankCB_Battle); + ClearBattleBgCntBaseBlocks(); + BeginHardwarePaletteFade(0xFF, 0, 0x10, 0, 1); + gPaletteFade.bufferTransferDisabled = 0; + SetMainCallback2(BattleMainCB2); + FillAroundBattleWindows(); + break; + } + + gBattleScripting.reshowMainState++; +} + static void ClearBattleBgCntBaseBlocks(void) { vBgCnt *regBgcnt1, *regBgcnt2; @@ -311,3 +396,17 @@ static void CreateHealthboxSprite(u32 battler) } } } + +static void CreateCaughtMonSprite(void) +{ + SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES), GetBattlerPosition(gBattlerTarget)); + gBattlerSpriteIds[gBattlerTarget] = CreateSprite(&gMultiuseSpriteTemplate, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, GetBattlerSpriteSubpriority(gBattlerTarget)); + gSprites[gBattlerSpriteIds[gBattlerTarget]].oam.paletteNum = gBattlerTarget; + gSprites[gBattlerSpriteIds[gBattlerTarget]].callback = SpriteCallbackDummy; + gSprites[gBattlerSpriteIds[gBattlerTarget]].data[0] = gBattlerTarget; + gSprites[gBattlerSpriteIds[gBattlerTarget]].data[2] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES); + + StartSpriteAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]], 0); + + gSprites[gBattlerSpriteIds[gBattlerTarget]].invisible = FALSE; +} diff --git a/src/scrcmd.c b/src/scrcmd.c index 5e4881ee63..8bc915f2c0 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1256,7 +1256,7 @@ bool8 ScrCmd_fadeinbgm(struct ScriptContext *ctx) return FALSE; } -struct ObjectEvent * ScriptHideFollower(void) +struct ObjectEvent *ScriptHideFollower(void) { struct ObjectEvent *obj = GetFollowerObject(); @@ -1280,7 +1280,8 @@ bool8 ScrCmd_applymovement(struct ScriptContext *ctx) Script_RequestEffects(SCREFF_V1 | SCREFF_HARDWARE); // When applying script movements to follower, it may have frozen animation that must be cleared - if (localId == OBJ_EVENT_ID_FOLLOWER && (objEvent = GetFollowerObject()) && objEvent->frozen) + if ((localId == OBJ_EVENT_ID_FOLLOWER && (objEvent = GetFollowerObject()) && objEvent->frozen) + || ((objEvent = &gObjectEvents[GetObjectEventIdByLocalId(localId)]) && IS_OW_MON_OBJ(objEvent))) { ClearObjectEventMovement(objEvent, &gSprites[objEvent->spriteId]); gSprites[objEvent->spriteId].animCmdIndex = 0; // Reset start frame of animation @@ -1289,9 +1290,9 @@ bool8 ScrCmd_applymovement(struct ScriptContext *ctx) gObjectEvents[GetObjectEventIdByLocalId(localId)].directionOverwrite = DIR_NONE; ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript); sMovingNpcId = localId; - if (localId != OBJ_EVENT_ID_FOLLOWER && - !FlagGet(FLAG_SAFE_FOLLOWER_MOVEMENT) - && (movementScript < Common_Movement_FollowerSafeStart || movementScript > Common_Movement_FollowerSafeEnd)) + if (localId != OBJ_EVENT_ID_FOLLOWER + && !FlagGet(FLAG_SAFE_FOLLOWER_MOVEMENT) + && (movementScript < Common_Movement_FollowerSafeStart || movementScript > Common_Movement_FollowerSafeEnd)) { ScriptHideFollower(); } @@ -2058,7 +2059,7 @@ bool8 ScrCmd_vmessage(struct ScriptContext *ctx) bool8 ScrCmd_bufferspeciesname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); - u16 species = VarGet(ScriptReadHalfword(ctx)) & OBJ_EVENT_GFX_SPECIES_MASK; // ignore possible shiny / form bits + u16 species = VarGet(ScriptReadHalfword(ctx)) & OBJ_EVENT_MON_SPECIES_MASK; // ignore possible shiny / form bits Script_RequestEffects(SCREFF_V1); @@ -2389,7 +2390,8 @@ bool8 ScrCmd_updatecoinsbox(struct ScriptContext *ctx) bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx) { Script_RequestEffects(SCREFF_V1 | SCREFF_TRAINERBATTLE); - + + TrainerBattleLoadArgs(ctx->scriptPtr); ctx->scriptPtr = BattleSetup_ConfigureTrainerBattle(ctx->scriptPtr); return FALSE; } @@ -3111,13 +3113,6 @@ bool8 Scrcmd_getobjectfacingdirection(struct ScriptContext *ctx) return FALSE; } -void Script_EndTrainerCanSeeIf(struct ScriptContext *ctx) -{ - u8 condition = ScriptReadByte(ctx); - if (ctx->breakOnTrainerBattle && sScriptConditionTable[condition][ctx->comparisonResult] == 1) - StopScript(ctx); -} - bool8 ScrFunc_hidefollower(struct ScriptContext *ctx) { bool16 wait = VarGet(ScriptReadHalfword(ctx)); @@ -3139,3 +3134,10 @@ bool8 ScrFunc_hidefollower(struct ScriptContext *ctx) // execute next script command with no delay return TRUE; } + +void Script_EndTrainerCanSeeIf(struct ScriptContext *ctx) +{ + u8 condition = ScriptReadByte(ctx); + if (ctx->breakOnTrainerBattle && sScriptConditionTable[condition][ctx->comparisonResult] == 1) + StopScript(ctx); +} diff --git a/src/script_movement.c b/src/script_movement.c index 28e9e02a47..80d9b323f6 100644 --- a/src/script_movement.c +++ b/src/script_movement.c @@ -215,19 +215,17 @@ static void ScriptMovement_TakeStep(u8 taskId, u8 moveScrId, u8 objEventId, cons u8 nextMoveActionId; struct ObjectEvent *obj = &gObjectEvents[objEventId]; - if (ObjectEventIsHeldMovementActive(obj) && - !ObjectEventClearHeldMovementIfFinished(obj)) + if (ObjectEventIsHeldMovementActive(obj) && !ObjectEventClearHeldMovementIfFinished(obj)) { // If, while undergoing scripted movement, // a non-player object collides with an active follower pokemon, // put that follower into a pokeball // (sTimer helps limit this expensive check to once per step) - if (OW_FOLLOWERS_SCRIPT_MOVEMENT && - gSprites[obj->spriteId].sTimer == 1 && - (objEventId = GetObjectObjectCollidesWith(obj, 0, 0, TRUE)) < OBJECT_EVENTS_COUNT && + if (OW_FOLLOWERS_SCRIPT_MOVEMENT && gSprites[obj->spriteId].sTimer == 1 + && (objEventId = GetObjectObjectCollidesWith(obj, 0, 0, TRUE)) < OBJECT_EVENTS_COUNT // switch `obj` to follower - ((obj = &gObjectEvents[objEventId])->movementType == MOVEMENT_TYPE_FOLLOW_PLAYER) && - gSprites[obj->spriteId].sTypeFuncId != 0) + && ((obj = &gObjectEvents[objEventId])->movementType == MOVEMENT_TYPE_FOLLOW_PLAYER) + && gSprites[obj->spriteId].sTypeFuncId != 0) { ClearObjectEventMovement(obj, &gSprites[obj->spriteId]); ScriptMovement_StartObjectMovementScript(obj->localId, obj->mapNum, obj->mapGroup, EnterPokeballMovement); diff --git a/src/secret_base.c b/src/secret_base.c index 7e0c1ae107..d4dc43c5bd 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1163,7 +1163,7 @@ const u8 *GetSecretBaseTrainerLoseText(void) void PrepSecretBaseBattleFlags(void) { TryGainNewFanFromCounter(FANCOUNTER_BATTLED_AT_BASE); - gTrainerBattleOpponent_A = TRAINER_SECRET_BASE; + TRAINER_BATTLE_PARAM.opponentA = TRAINER_SECRET_BASE; gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_SECRET_BASE; } diff --git a/src/shop.c b/src/shop.c index 1a10e0d028..42861e42c7 100644 --- a/src/shop.c +++ b/src/shop.c @@ -872,7 +872,7 @@ static void BuyMenuCollectObjectEventData(void) u8 objEventId = GetObjectEventIdByXY(facingX - 4 + x, facingY - 2 + y); // skip if invalid or an overworld pokemon that is not following the player - if (objEventId != OBJECT_EVENTS_COUNT && !(gObjectEvents[objEventId].active && gObjectEvents[objEventId].graphicsId >= OBJ_EVENT_GFX_MON_BASE && gObjectEvents[objEventId].localId != OBJ_EVENT_ID_FOLLOWER)) + if (objEventId != OBJECT_EVENTS_COUNT && !(gObjectEvents[objEventId].active && gObjectEvents[objEventId].graphicsId & OBJ_EVENT_MON && gObjectEvents[objEventId].localId != OBJ_EVENT_ID_FOLLOWER)) { sShopData->viewportObjects[numObjects][OBJ_EVENT_ID] = objEventId; sShopData->viewportObjects[numObjects][X_COORD] = x; @@ -1067,7 +1067,11 @@ static void Task_BuyHowManyDialogueInit(u8 taskId) BuyMenuPrintItemQuantityAndPrice(taskId); ScheduleBgCopyTilemapToVram(0); - maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / sShopData->totalCost; + // Avoid division by zero in-case something costs 0 pokedollars. + if (sShopData->totalCost == 0) + maxQuantity = MAX_BAG_ITEM_CAPACITY; + else + maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / sShopData->totalCost; if (maxQuantity > MAX_BAG_ITEM_CAPACITY) sShopData->maxQuantity = MAX_BAG_ITEM_CAPACITY; diff --git a/src/sound.c b/src/sound.c index db59e7e73c..9a67f2c21b 100644 --- a/src/sound.c +++ b/src/sound.c @@ -8,6 +8,7 @@ #include "constants/cries.h" #include "constants/songs.h" #include "task.h" +#include "test_runner.h" struct Fanfare { @@ -237,6 +238,13 @@ bool8 IsFanfareTaskInactive(void) static void Task_Fanfare(u8 taskId) { + if (gTestRunnerHeadless) + { + DestroyTask(taskId); + sFanfareCounter = 0; + return; + } + if (sFanfareCounter) { sFanfareCounter--; diff --git a/src/start_menu.c b/src/start_menu.c index a49b7c6d8a..72a420e90e 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -329,13 +329,13 @@ static void AddStartMenuAction(u8 action) } static void BuildNormalStartMenu(void) -{ +{ if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE) AddStartMenuAction(MENU_ACTION_POKEDEX); - + if (DN_FLAG_DEXNAV_GET != 0 && FlagGet(DN_FLAG_DEXNAV_GET)) AddStartMenuAction(MENU_ACTION_DEXNAV); - + if (FlagGet(FLAG_SYS_POKEMON_GET) == TRUE) AddStartMenuAction(MENU_ACTION_POKEMON); @@ -644,7 +644,7 @@ static bool8 HandleStartMenuInput(void) if (sCurrentStartMenuActions[sStartMenuCursorPos] == MENU_ACTION_DEXNAV && MapHasNoEncounterData()) return FALSE; - + gMenuCallback = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void; if (gMenuCallback != StartMenuSaveCallback diff --git a/src/strings.c b/src/strings.c index 37feea0da0..c112db4616 100644 --- a/src/strings.c +++ b/src/strings.c @@ -319,6 +319,7 @@ const u8 gText_CurrentIsTooFast[] = _("The current is much too fast!"); const u8 gText_DoWhatWithMail[] = _("Do what with the MAIL?"); const u8 gText_ChoosePokemonCancel[] = _("Choose POKéMON or CANCEL."); const u8 gText_ChoosePokemonConfirm[] = _("Choose POKéMON and confirm."); +const u8 gText_SendWhichMonToPC[] = _("Send which POKéMON to the PC?"); const u8 gText_EnjoyCycling[] = _("Let's enjoy cycling!"); const u8 gText_InUseAlready_PM[] = _("This is in use already."); const u8 gText_AlreadyHoldingOne[] = _("{STR_VAR_1} is already holding\none {STR_VAR_2}."); @@ -1293,3 +1294,4 @@ const u8 gText_AM[] = _("AM"); const u8 gText_PM[] = _("PM"); const u8 gText_Relearn[] = _("{START_BUTTON} RELEARN"); // future note: don't decap this, because it mimics the summary screen BG graphics which will not get decapped const u8 gText_Rename[] = _("RENAME"); +const u8 gText_CannotSendMonToBoxHM[] = _("Cannot send that mon to the box,\nbecause it knows a HM move.{PAUSE_UNTIL_PRESS}"); diff --git a/src/trainer_hill.c b/src/trainer_hill.c index dd8ae78aa7..ce2b894bf0 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -864,7 +864,7 @@ void SetHillTrainerFlag(void) for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) { - if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_A) + if (gSaveBlock2Ptr->frontier.trainerIds[i] == TRAINER_BATTLE_PARAM.opponentA) { gSaveBlock2Ptr->frontier.trainerFlags |= 1u << (trainerIndexStart + i); break; @@ -875,7 +875,7 @@ void SetHillTrainerFlag(void) { for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) { - if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_B) + if (gSaveBlock2Ptr->frontier.trainerIds[i] == TRAINER_BATTLE_PARAM.opponentB) { gSaveBlock2Ptr->frontier.trainerFlags |= 1u << (trainerIndexStart + i); break; @@ -922,14 +922,14 @@ static void CreateNPCTrainerHillParty(u16 trainerId, u8 firstMonId) void FillHillTrainerParty(void) { ZeroEnemyPartyMons(); - CreateNPCTrainerHillParty(gTrainerBattleOpponent_A, 0); + CreateNPCTrainerHillParty(TRAINER_BATTLE_PARAM.opponentA, 0); } void FillHillTrainersParties(void) { ZeroEnemyPartyMons(); - CreateNPCTrainerHillParty(gTrainerBattleOpponent_A, 0); - CreateNPCTrainerHillParty(gTrainerBattleOpponent_B, PARTY_SIZE / 2); + CreateNPCTrainerHillParty(TRAINER_BATTLE_PARAM.opponentA, 0); + CreateNPCTrainerHillParty(TRAINER_BATTLE_PARAM.opponentB, PARTY_SIZE / 2); } // This function is unused, but my best guess is diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index 675c7643c8..bd3a7f3e06 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -116,7 +116,7 @@ static void AssignSpriteAnimsTable(bool8 isTrainer) if (!isTrainer) sCreatingSpriteTemplate.anims = gAnims_MonPic; else - sCreatingSpriteTemplate.anims = sAnims_Trainer; + sCreatingSpriteTemplate.anims = gAnims_Trainer; } static u16 CreatePicSprite(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer) diff --git a/src/trainer_pools.c b/src/trainer_pools.c new file mode 100644 index 0000000000..a2db4d81f5 --- /dev/null +++ b/src/trainer_pools.c @@ -0,0 +1,391 @@ +#include "global.h" +#include "data.h" +#include "malloc.h" +#include "pokemon.h" +#include "random.h" +#include "trainer_pools.h" +#include "constants/battle.h" +#include "constants/items.h" + +#include "data/battle_pool_rules.h" + +static void HasRequiredTag(const struct Trainer *trainer, u8* poolIndexArray, struct PoolRules *rules, u32 *arrayIndex, bool32 *foundRequiredTag, u32 currIndex) +{ + // Start from index 2, since lead and ace has special handling + for (u32 currTag = 2; currTag < POOL_NUM_TAGS; currTag++) + { + if (rules->tagRequired[currTag] + && trainer->party[poolIndexArray[currIndex]].tags & (1u << currTag)) + { + *arrayIndex = currIndex; + *foundRequiredTag = TRUE; + break; + } + } +} + +static u32 DefaultLeadPickFunction(const struct Trainer *trainer, u8 *poolIndexArray, u32 partyIndex, u32 monsCount, u32 battleTypeFlags, struct PoolRules *rules) +{ + u32 arrayIndex = 0; + u32 monIndex = POOL_SLOT_DISABLED; + // monIndex is set to 255 if nothing has been chosen yet, this gives an upper limit on pool size of 255 + if ((partyIndex == 0) + || (partyIndex == 1 && (battleTypeFlags & BATTLE_TYPE_DOUBLE))) + { + // Find required + lead tags + bool32 foundRequiredTag = FALSE; + u32 firstLeadIndex = POOL_SLOT_DISABLED; + for (u32 currIndex = 0; currIndex < trainer->poolSize; currIndex++) + { + if ((poolIndexArray[currIndex] != POOL_SLOT_DISABLED) + && (trainer->party[poolIndexArray[currIndex]].tags & (1u << POOL_TAG_LEAD))) + { + if (firstLeadIndex == POOL_SLOT_DISABLED) + firstLeadIndex = currIndex; + // Start from index 2, since lead and ace has special handling + HasRequiredTag(trainer, poolIndexArray, rules, &arrayIndex, &foundRequiredTag, currIndex); + } + if (foundRequiredTag) + break; + } + // If a combination of required + lead wasn't found, apply the first found lead + if (foundRequiredTag) + { + monIndex = poolIndexArray[arrayIndex]; + poolIndexArray[arrayIndex] = POOL_SLOT_DISABLED; + } + else if (firstLeadIndex != POOL_SLOT_DISABLED) + { + monIndex = poolIndexArray[firstLeadIndex]; + poolIndexArray[firstLeadIndex] = POOL_SLOT_DISABLED; + } + } + return monIndex; +} + +static u32 DefaultAcePickFunction(const struct Trainer *trainer, u8 *poolIndexArray, u32 partyIndex, u32 monsCount, u32 battleTypeFlags, struct PoolRules *rules) +{ + u32 arrayIndex = 0; + u32 monIndex = POOL_SLOT_DISABLED; + // monIndex is set to 255 if nothing has been chosen yet, this gives an upper limit on pool size of 255 + if (((partyIndex == monsCount - 1) || (partyIndex == monsCount - 2 && battleTypeFlags & BATTLE_TYPE_DOUBLE)) + && (rules->tagMaxMembers[1] == POOL_MEMBER_COUNT_UNLIMITED || rules->tagMaxMembers[1] >= 1)) + { + // Find required + ace tags + bool32 foundRequiredTag = FALSE; + u32 firstAceIndex = POOL_SLOT_DISABLED; + for (u32 currIndex = 0; currIndex < trainer->poolSize; currIndex++) + { + if ((poolIndexArray[currIndex] != POOL_SLOT_DISABLED) + && (trainer->party[poolIndexArray[currIndex]].tags & (1u << POOL_TAG_ACE))) + { + if (firstAceIndex == POOL_SLOT_DISABLED) + firstAceIndex = currIndex; + HasRequiredTag(trainer, poolIndexArray, rules, &arrayIndex, &foundRequiredTag, currIndex); + } + if (foundRequiredTag) + break; + } + // If a combination of required + ace wasn't found, apply the first found lead + if (foundRequiredTag) + { + monIndex = poolIndexArray[arrayIndex]; + poolIndexArray[arrayIndex] = POOL_SLOT_DISABLED; + } + else if (firstAceIndex != POOL_SLOT_DISABLED) + { + monIndex = poolIndexArray[firstAceIndex]; + poolIndexArray[firstAceIndex] = POOL_SLOT_DISABLED; + } + } + return monIndex; +} + +static u32 DefaultOtherPickFunction(const struct Trainer *trainer, u8 *poolIndexArray, u32 partyIndex, u32 monsCount, u32 battleTypeFlags, struct PoolRules *rules) +{ + u32 arrayIndex = 0; + u32 monIndex = POOL_SLOT_DISABLED; + // monIndex is set to 255 if nothing has been chosen yet, this gives an upper limit on pool size of 255 + // Find required tag + bool32 foundRequiredTag = FALSE; + u32 firstUnpickedIndex = POOL_SLOT_DISABLED; + for (u32 currIndex = 0; currIndex < trainer->poolSize; currIndex++) + { + if (poolIndexArray[currIndex] != POOL_SLOT_DISABLED + && !(trainer->party[poolIndexArray[currIndex]].tags & (1u << POOL_TAG_LEAD)) + && !(trainer->party[poolIndexArray[currIndex]].tags & (1u << POOL_TAG_ACE))) + { + if (firstUnpickedIndex == POOL_SLOT_DISABLED) + firstUnpickedIndex = currIndex; + HasRequiredTag(trainer, poolIndexArray, rules, &arrayIndex, &foundRequiredTag, currIndex); + } + if (foundRequiredTag) + break; + } + // If a combination of required + ace wasn't found, apply the first found lead + if (foundRequiredTag) + { + monIndex = poolIndexArray[arrayIndex]; + poolIndexArray[arrayIndex] = POOL_SLOT_DISABLED; + } + else if (firstUnpickedIndex != POOL_SLOT_DISABLED) + { + monIndex = poolIndexArray[firstUnpickedIndex]; + poolIndexArray[firstUnpickedIndex] = POOL_SLOT_DISABLED; + } + return monIndex; +} + +static u32 PickLowest(const struct Trainer *trainer, u8 *poolIndexArray, u32 partyIndex, u32 monsCount, u32 battleTypeFlags, struct PoolRules *rules) +{ + u32 monIndex = POOL_SLOT_DISABLED; + u32 lowestIndex = POOL_SLOT_DISABLED; + for (u32 i = 0; i < trainer->poolSize; i++) + { + if (poolIndexArray[i] < monIndex) + { + lowestIndex = i; + monIndex = poolIndexArray[i]; + } + } + if (lowestIndex == POOL_SLOT_DISABLED) + return POOL_SLOT_DISABLED; + poolIndexArray[lowestIndex] = POOL_SLOT_DISABLED; + return monIndex; +} + +static u32 PickMonFromPool(const struct Trainer *trainer, u8 *poolIndexArray, u32 partyIndex, u32 monsCount, u32 battleTypeFlags, struct PoolRules *rules, struct PickFunctions pickFunctions) +{ + u32 monIndex = POOL_SLOT_DISABLED; + // Pick Lead + if (monIndex == POOL_SLOT_DISABLED) + monIndex = pickFunctions.LeadFunction(trainer, poolIndexArray, partyIndex, monsCount, battleTypeFlags, rules); + // Pick Ace + if (monIndex == POOL_SLOT_DISABLED) + monIndex = pickFunctions.AceFunction(trainer, poolIndexArray, partyIndex, monsCount, battleTypeFlags, rules); + // If no mon has been found yet continue looking + if (monIndex == POOL_SLOT_DISABLED) + monIndex = pickFunctions.OtherFunction(trainer, poolIndexArray, partyIndex, monsCount, battleTypeFlags, rules); + u32 chosenTags = trainer->party[monIndex].tags; + u16 chosenSpecies = trainer->party[monIndex].species; + u16 chosenItem = trainer->party[monIndex].heldItem; + u16 chosenNatDex = gSpeciesInfo[chosenSpecies].natDexNum; + // If tag was required, change pool rule to account for the required tag already being picked + u32 tagsToEliminate = 0; + for (u32 currTag = 0; currTag < POOL_NUM_TAGS; currTag++) + { + if (chosenTags & (1u << currTag) + && rules->tagMaxMembers[currTag] != POOL_MEMBER_COUNT_UNLIMITED) + { + if (rules->tagMaxMembers[currTag] == 1) + rules->tagMaxMembers[currTag] = POOL_MEMBER_COUNT_NONE; + else + rules->tagMaxMembers[currTag]--; + } + if (chosenTags & (1u << currTag)) + rules->tagRequired[currTag] = FALSE; + if (rules->tagMaxMembers[currTag] == POOL_MEMBER_COUNT_NONE) + tagsToEliminate |= 1u << currTag; + } + // If species clause, remove picked species from pool + // If item clause, remove all mons with same held item from pool + // If matching a tag that's been exhausted, remove from pool + for (u32 currIndex = 0; currIndex < trainer->poolSize; currIndex++) + { + if (poolIndexArray[currIndex] != POOL_SLOT_DISABLED) + { + u32 currentTags = trainer->party[poolIndexArray[currIndex]].tags; + u16 currentSpecies = trainer->party[poolIndexArray[currIndex]].species; + u16 currentItem = trainer->party[poolIndexArray[currIndex]].heldItem; + u16 currentNatDex = gSpeciesInfo[currentSpecies].natDexNum; + if (currentTags & tagsToEliminate) + { + poolIndexArray[currIndex] = POOL_SLOT_DISABLED; + } + if (rules->speciesClause && chosenSpecies == currentSpecies) + poolIndexArray[currIndex] = POOL_SLOT_DISABLED; + if (!rules->excludeForms && chosenNatDex == currentNatDex) + poolIndexArray[currIndex] = POOL_SLOT_DISABLED; + if (rules->itemClause && currentItem != ITEM_NONE) + { + if (rules->itemClauseExclusions) + { + bool32 isExcluded = FALSE; + for (u32 i = 0; i < ARRAY_COUNT(poolItemClauseExclusions); i++) + { + if (chosenItem == poolItemClauseExclusions[i]) + { + isExcluded = TRUE; + break; + } + } + if (!isExcluded) + poolIndexArray[currIndex] = POOL_SLOT_DISABLED; + } + else if (chosenItem == currentItem) + { + poolIndexArray[currIndex] = POOL_SLOT_DISABLED; + } + } + } + } + return monIndex; +} + +static u32 GetPoolSeed(const struct Trainer *trainer) +{ + u32 seed; + if (B_POOL_SETTING_USE_FIXED_SEED) + seed = B_POOL_SETTING_FIXED_SEED; + else + seed = gSaveBlock2Ptr->playerTrainerId[0] + (gSaveBlock2Ptr->playerTrainerId[1] << 8) + (gSaveBlock2Ptr->playerTrainerId[2] << 16) + (gSaveBlock2Ptr->playerTrainerId[3] << 24); + seed ^= (u32)trainer; + return seed; +} + +static void RandomizePoolIndices(const struct Trainer *trainer, u8 *poolIndexArray) +{ + // Basically the modern (Durstenfield's) Fisher-Yates shuffle + // Reducing the amount of calls to random needed by only using as many bits as needed per shuffle + u32 poolSize = trainer->poolSize; + for (u32 i = 0; i < poolSize; i++) + poolIndexArray[i] = i; + u32 rnd; + rng_value_t localRngState; + if (B_POOL_SETTING_CONSISTENT_RNG) + { + u32 seed = GetPoolSeed(trainer); + localRngState = LocalRandomSeed(seed); + // Replace the LocalRandom with LocalRandom32 when implemented + rnd = LocalRandom32(&localRngState); + } + else + { + rnd = Random32(); + } + u32 usedBits = 0; + for (u32 i = 0; i < poolSize - 1; i++) + { + u32 numBits = 1; + if (poolSize - i > 127) + numBits = 8; + else if (poolSize - i > 63) + numBits = 7; + else if (poolSize - i > 31) + numBits = 6; + else if (poolSize - i > 15) + numBits = 5; + else if (poolSize - i > 7) + numBits = 4; + else if (poolSize - i > 3) + numBits = 3; + else if (poolSize - i > 1) + numBits = 2; + if (usedBits + numBits > 32) + { + if (B_POOL_SETTING_CONSISTENT_RNG) + rnd = LocalRandom32(&localRngState); + else + rnd = Random32(); + usedBits = 0; + } + u32 currIndex = (rnd & ((1u << numBits) - 1)) % (poolSize - i); + rnd = rnd >> numBits; + usedBits += numBits; + u32 tempValue = poolIndexArray[poolSize - 1 - i]; + poolIndexArray[poolSize - 1 - i] = poolIndexArray[currIndex]; + poolIndexArray[currIndex] = tempValue; + } +} + +static struct PickFunctions GetPickFunctions(const struct Trainer *trainer) +{ + struct PickFunctions pickFunctions; + switch (trainer->poolPickIndex) + { + // Repeats, but better to have the safety + case POOL_PICK_DEFAULT: + pickFunctions.LeadFunction = &DefaultLeadPickFunction; + pickFunctions.AceFunction = &DefaultAcePickFunction; + pickFunctions.OtherFunction = &DefaultOtherPickFunction; + break; + case POOL_PICK_LOWEST: + pickFunctions.LeadFunction = &PickLowest; + pickFunctions.AceFunction = &PickLowest; + pickFunctions.OtherFunction = &PickLowest; + break; + default: + pickFunctions.LeadFunction = &DefaultLeadPickFunction; + pickFunctions.AceFunction = &DefaultAcePickFunction; + pickFunctions.OtherFunction = &DefaultOtherPickFunction; + break; + } + return pickFunctions; +} + +static void TestPrune(const struct Trainer *trainer, u8 *poolIndexArray, const struct PoolRules *rules) +{ + // Test function to demonstrate pruning + for (u32 i = 0; i < trainer->poolSize; i++) + if (trainer->party[poolIndexArray[i]].species == SPECIES_WOBBUFFET) + poolIndexArray[i] = POOL_SLOT_DISABLED; +} + +static void RandomTagPrune(const struct Trainer *trainer, u8 *poolIndexArray, const struct PoolRules *rules) +{ + u32 tagToUse = trainer->party[poolIndexArray[0]].tags; + for (u32 i = 0; i < trainer->poolSize; i++) + if (!(trainer->party[poolIndexArray[i]].tags & tagToUse)) + poolIndexArray[i] = POOL_SLOT_DISABLED; +} + +static void PrunePool(const struct Trainer *trainer, u8 *poolIndexArray, const struct PoolRules *rules) +{ + // Use defined pruning functions go here + switch (trainer->poolPruneIndex) + { + case POOL_PRUNE_NONE: + break; + case POOL_PRUNE_TEST: + TestPrune(trainer, poolIndexArray, rules); + break; + case POOL_PRUNE_RANDOM_TAG: + RandomTagPrune(trainer, poolIndexArray, rules); + break; + default: + break; + } +} + +void DoTrainerPartyPool(const struct Trainer *trainer, u32 *monIndices, u8 monsCount, u32 battleTypeFlags) +{ + bool32 usingPool = FALSE; + struct PoolRules rules = defaultPoolRules; + if (trainer->poolSize != 0) + { + usingPool = TRUE; + rules = gPoolRulesetsList[trainer->poolRuleIndex]; + u8 *poolIndexArray = Alloc(trainer->poolSize); + RandomizePoolIndices(trainer, poolIndexArray); + + struct PickFunctions pickFunctions = GetPickFunctions(trainer); + + PrunePool(trainer, poolIndexArray, &rules); + + for (u32 i = 0; i < monsCount; i++) + { + monIndices[i] = PickMonFromPool(trainer, poolIndexArray, i, monsCount, battleTypeFlags, &rules, pickFunctions); + // If the slot doesn't have a proper value, the pool creation failed, fall back to normal mon pick process + if (monIndices[i] == POOL_SLOT_DISABLED) + { + usingPool = FALSE; + break; + } + } + Free(poolIndexArray); + } + + if (!usingPool) + for (u32 i = 0; i < monsCount; i++) + monIndices[i] = i; +} diff --git a/src/trainer_see.c b/src/trainer_see.c index 12c6cba612..07eb46efdd 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -478,9 +478,10 @@ static u8 CheckTrainer(u8 objectEventId) if (trainerBattlePtr) { - if (trainerBattlePtr[1] == TRAINER_BATTLE_DOUBLE - || trainerBattlePtr[1] == TRAINER_BATTLE_REMATCH_DOUBLE - || trainerBattlePtr[1] == TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE) + TrainerBattleParameter *temp = (TrainerBattleParameter *)(trainerBattlePtr + 1); + if (temp->params.mode == TRAINER_BATTLE_DOUBLE + || temp->params.mode == TRAINER_BATTLE_REMATCH_DOUBLE + || temp->params.mode == TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE) { if (GetMonsStateToDoubles_2() != PLAYER_HAS_TWO_USABLE_MONS) return 0; diff --git a/src/trainer_slide.c b/src/trainer_slide.c index 1606ae5155..209f47f0c3 100644 --- a/src/trainer_slide.c +++ b/src/trainer_slide.c @@ -59,14 +59,14 @@ static const u8* const sTrainerSlides[DIFFICULTY_COUNT][TRAINERS_COUNT][TRAINER_ }, }; -static const u8* const sFrontierTrainerSlides[DIFFICULTY_COUNT][TRAINERS_COUNT][TRAINER_SLIDE_COUNT] = +static const u8* const sFrontierTrainerSlides[DIFFICULTY_COUNT][FRONTIER_TRAINERS_COUNT][TRAINER_SLIDE_COUNT] = { [DIFFICULTY_NORMAL] = { }, }; -static const u8* const sTestTrainerSlides[DIFFICULTY_COUNT][FRONTIER_TRAINERS_COUNT][TRAINER_SLIDE_COUNT] = +static const u8* const sTestTrainerSlides[DIFFICULTY_COUNT][TRAINERS_COUNT][TRAINER_SLIDE_COUNT] = { #include "../test/battle/trainer_slides.h" }; @@ -107,24 +107,36 @@ static u32 GetEnemyMonCount(u32 firstId, u32 lastId, bool32 onlyAlive) return count; } -static bool32 DoesTrainerHaveSlideMessage(enum DifficultyLevel difficulty, u32 trainerId, u32 slideId) +static const u8* const *GetTrainerSlideArray(enum DifficultyLevel difficulty, u32 trainerId, u32 slideId) { if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - return (sFrontierTrainerSlides[difficulty][trainerId][slideId] != NULL); + return sFrontierTrainerSlides[difficulty][trainerId]; else if (TESTING) - return (sTestTrainerSlides[difficulty][trainerId][slideId] != NULL); + return sTestTrainerSlides[difficulty][trainerId]; else - return (sTrainerSlides[difficulty][trainerId][slideId] != NULL); + return sTrainerSlides[difficulty][trainerId]; +} + +static bool32 DoesTrainerHaveSlideMessage(enum DifficultyLevel difficulty, u32 trainerId, u32 slideId) +{ + const u8* const *trainerSlides = GetTrainerSlideArray(difficulty, trainerId, slideId); + const u8* const *trainerSlidesNormal = GetTrainerSlideArray(DIFFICULTY_NORMAL, trainerId, slideId); + + if (trainerSlides[slideId] == NULL) + return (trainerSlidesNormal[slideId] != NULL); + else + return TRUE; } void SetTrainerSlideMessage(enum DifficultyLevel difficulty, u32 trainerId, u32 slideId) { - if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - gBattleStruct->trainerSlideMsg = sFrontierTrainerSlides[difficulty][trainerId][slideId]; - else if (TESTING) - gBattleStruct->trainerSlideMsg = sTestTrainerSlides[difficulty][trainerId][slideId]; + const u8* const *trainerSlides = GetTrainerSlideArray(difficulty, trainerId, slideId); + const u8* const *trainerSlidesNormal = GetTrainerSlideArray(DIFFICULTY_NORMAL, trainerId, slideId); + + if (trainerSlides[slideId] != NULL) + gBattleStruct->trainerSlideMsg = trainerSlides[slideId]; else - gBattleStruct->trainerSlideMsg = sTrainerSlides[difficulty][trainerId][slideId]; + gBattleStruct->trainerSlideMsg = trainerSlidesNormal[slideId]; } static bool32 ShouldRunTrainerSlidePlayerLandsFirstCriticalHit(enum TrainerSlideType slideId) @@ -204,21 +216,21 @@ static void SetTrainerSlideParamters(u32 battler, u32* firstId, u32* lastId, u32 { *firstId = MULTI_PARTY_SIZE; *lastId = PARTY_SIZE; - *trainerId = SanitizeTrainerId(gTrainerBattleOpponent_B); + *trainerId = SanitizeTrainerId(TRAINER_BATTLE_PARAM.opponentB); *retValue = TRAINER_SLIDE_TARGET_TRAINER_B; } else { *firstId = 0; *lastId = MULTI_PARTY_SIZE; - *trainerId = SanitizeTrainerId(gTrainerBattleOpponent_A); + *trainerId = SanitizeTrainerId(TRAINER_BATTLE_PARAM.opponentA); } } else { *firstId = 0; *lastId = PARTY_SIZE; - *trainerId = SanitizeTrainerId(gTrainerBattleOpponent_A); + *trainerId = SanitizeTrainerId(TRAINER_BATTLE_PARAM.opponentA); } } @@ -232,7 +244,7 @@ enum TrainerSlideTargets ShouldDoTrainerSlide(u32 battler, enum TrainerSlideType return TRAINER_SLIDE_TARGET_NONE; SetTrainerSlideParamters(battler, &firstId, &lastId, &trainerId, &retValue); - enum DifficultyLevel difficulty = GetTrainerDifficultyLevel(trainerId); + enum DifficultyLevel difficulty = GetCurrentDifficultyLevel(); gBattleScripting.battler = battler; @@ -300,7 +312,7 @@ static bool32 IsSlideInitalizedOrPlayed(enum TrainerSlideType slideId) return FALSE; } -void TryInitalizeFirstSTABMoveTrainerSlide(u32 battlerDef, u32 battlerAtk, u32 moveType) +void TryInitializeFirstSTABMoveTrainerSlide(u32 battlerDef, u32 battlerAtk, u32 moveType) { enum TrainerSlideType slideId = TRAINER_SLIDE_PLAYER_LANDS_FIRST_STAB_MOVE; @@ -316,7 +328,7 @@ void TryInitalizeFirstSTABMoveTrainerSlide(u32 battlerDef, u32 battlerAtk, u32 m InitalizeTrainerSlide(slideId); } -void TryInitalizeTrainerSlidePlayerLandsFirstCriticalHit(u32 target) +void TryInitializeTrainerSlidePlayerLandsFirstCriticalHit(u32 target) { enum TrainerSlideType slideId = TRAINER_SLIDE_PLAYER_LANDS_FIRST_CRITICAL_HIT; @@ -329,7 +341,7 @@ void TryInitalizeTrainerSlidePlayerLandsFirstCriticalHit(u32 target) InitalizeTrainerSlide(slideId); } -void TryInitalizeTrainerSlideEnemyLandsFirstCriticalHit(u32 target) +void TryInitializeTrainerSlideEnemyLandsFirstCriticalHit(u32 target) { enum TrainerSlideType slideId = TRAINER_SLIDE_ENEMY_LANDS_FIRST_CRITICAL_HIT; @@ -342,7 +354,7 @@ void TryInitalizeTrainerSlideEnemyLandsFirstCriticalHit(u32 target) InitalizeTrainerSlide(slideId); } -void TryInitalizeTrainerSlidePlayerLandsFirstSuperEffectiveHit(u32 target) +void TryInitializeTrainerSlidePlayerLandsFirstSuperEffectiveHit(u32 target) { enum TrainerSlideType slideId = TRAINER_SLIDE_PLAYER_LANDS_FIRST_SUPER_EFFECTIVE_HIT; @@ -355,7 +367,7 @@ void TryInitalizeTrainerSlidePlayerLandsFirstSuperEffectiveHit(u32 target) InitalizeTrainerSlide(slideId); } -void TryInitalizeTrainerSlideEnemyMonUnaffected(u32 target) +void TryInitializeTrainerSlideEnemyMonUnaffected(u32 target) { enum TrainerSlideType slideId = TRAINER_SLIDE_ENEMY_MON_UNAFFECTED; diff --git a/src/union_room_battle.c b/src/union_room_battle.c index 4d5f7d8278..2bcbaef19c 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -69,7 +69,7 @@ static void CB2_SetUpPartiesAndStartBattle(void) } IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES); CalculatePlayerPartyCount(); - gTrainerBattleOpponent_A = TRAINER_UNION_ROOM; + TRAINER_BATTLE_PARAM.opponentA = TRAINER_UNION_ROOM; SetMainCallback2(CB2_InitBattle); } diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 771c01dc72..15829c3bd5 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -513,7 +513,7 @@ void ClearRematchMovementByTrainerId(void) struct ObjectEventTemplate *objectEventTemplates = gSaveBlock1Ptr->objectEventTemplates; struct ObjectEvent *objectEvent; - int vsSeekerDataIdx = TrainerIdToRematchTableId(gRematchTable, gTrainerBattleOpponent_A); + int vsSeekerDataIdx = TrainerIdToRematchTableId(gRematchTable, TRAINER_BATTLE_PARAM.opponentA); if (!I_VS_SEEKER_CHARGING) return; diff --git a/test/battle/ability/aroma_veil.c b/test/battle/ability/aroma_veil.c index dc53fa1492..08dedfae6e 100644 --- a/test/battle/ability/aroma_veil.c +++ b/test/battle/ability/aroma_veil.c @@ -1,15 +1,198 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Taunt"); -TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Torment"); -TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Encore"); -TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Disable"); -TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Cursed Body"); -TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Heal Block"); -TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Infatuation"); -TO_DO_BATTLE_TEST("Aroma Veil does not protect the Pokémon's side from Imprison"); +DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Taunt") +{ + struct BattlePokemon *moveTarget = NULL; + PARAMETRIZE { moveTarget = playerLeft; } + PARAMETRIZE { moveTarget = playerRight; } + GIVEN { + ASSUME(GetMoveEffect(MOVE_TAUNT) == EFFECT_TAUNT); + ASSUME(GetMoveCategory(MOVE_HARDEN) == DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TAUNT, target: moveTarget); MOVE(moveTarget, MOVE_HARDEN); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TAUNT, opponentLeft); + ABILITY_POPUP(playerLeft, ABILITY_AROMA_VEIL); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, moveTarget); + } +} + +DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Torment") +{ + struct BattlePokemon *moveTarget = NULL; + PARAMETRIZE { moveTarget = playerLeft; } + PARAMETRIZE { moveTarget = playerRight; } + GIVEN { + ASSUME(GetMoveEffect(MOVE_TORMENT) == EFFECT_TORMENT); + ASSUME(GetMoveCategory(MOVE_HARDEN) == DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TORMENT, target: moveTarget); MOVE(moveTarget, MOVE_HARDEN); } + TURN { MOVE(moveTarget, MOVE_HARDEN); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TORMENT, opponentLeft); + ABILITY_POPUP(playerLeft, ABILITY_AROMA_VEIL); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, moveTarget); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, moveTarget); + } +} + +DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Encore") +{ + struct BattlePokemon *moveTarget = NULL; + PARAMETRIZE { moveTarget = playerLeft; } + PARAMETRIZE { moveTarget = playerRight; } + GIVEN { + ASSUME(GetMoveEffect(MOVE_ENCORE) == EFFECT_ENCORE); + ASSUME(GetMoveCategory(MOVE_HARDEN) == DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_ENCORE, target: moveTarget); MOVE(moveTarget, MOVE_HARDEN); } + TURN { MOVE(moveTarget, MOVE_CELEBRATE); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponentLeft); + ABILITY_POPUP(playerLeft, ABILITY_AROMA_VEIL); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, moveTarget); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, moveTarget); + } +} + +DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Disable") +{ + struct BattlePokemon *moveTarget = NULL; + PARAMETRIZE { moveTarget = playerLeft; } + PARAMETRIZE { moveTarget = playerRight; } + GIVEN { + ASSUME(GetMoveEffect(MOVE_DISABLE) == EFFECT_DISABLE); + ASSUME(GetMoveCategory(MOVE_HARDEN) == DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_DISABLE, target: moveTarget); MOVE(moveTarget, MOVE_HARDEN); } + TURN { MOVE(moveTarget, MOVE_HARDEN); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, opponentLeft); + ABILITY_POPUP(playerLeft, ABILITY_AROMA_VEIL); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, moveTarget); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, moveTarget); + } +} + +DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Cursed Body") +{ + GIVEN { + ASSUME(MoveMakesContact(MOVE_PECK)); + PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_JELLICENT) { Ability(ABILITY_CURSED_BODY); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_PECK, target: opponentLeft); MOVE(playerRight, MOVE_PECK, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_PECK, target: opponentLeft); MOVE(playerRight, MOVE_PECK, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PECK, playerLeft); + NOT ABILITY_POPUP(opponentLeft, ABILITY_CURSED_BODY); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PECK, playerRight); + NOT ABILITY_POPUP(opponentLeft, ABILITY_CURSED_BODY); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PECK, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PECK, playerRight); + } +} + +DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Heal Block") +{ + struct BattlePokemon *moveTarget = NULL; + PARAMETRIZE { moveTarget = playerLeft; } + PARAMETRIZE { moveTarget = playerRight; } + GIVEN { + ASSUME(GetMoveEffect(MOVE_HEAL_BLOCK) == EFFECT_HEAL_BLOCK); + ASSUME(GetMoveEffect(MOVE_RECOVER) == EFFECT_RESTORE_HP); + PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); HP(1); } + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_HEAL_BLOCK, target: moveTarget); MOVE(moveTarget, MOVE_RECOVER); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BLOCK, opponentLeft); + ABILITY_POPUP(playerLeft, ABILITY_AROMA_VEIL); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, moveTarget); + } +} + +DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Infatuation") +{ + struct BattlePokemon *moveTarget = NULL; + PARAMETRIZE { moveTarget = playerLeft; } + PARAMETRIZE { moveTarget = playerRight; } + GIVEN { + ASSUME(GetMoveEffect(MOVE_ATTRACT) == EFFECT_ATTRACT); + PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_ATTRACT, target: moveTarget); MOVE(moveTarget, MOVE_CELEBRATE); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ATTRACT, opponentLeft); + ABILITY_POPUP(playerLeft, ABILITY_AROMA_VEIL); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, moveTarget); + } +} + +DOUBLE_BATTLE_TEST("Aroma Veil does not protect the Pokémon's side from Imprison") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_IMPRISON) == EFFECT_IMPRISON); + PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_IMPRISON, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_IMPRISON); MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_SPLASH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_IMPRISON, opponentLeft); + NONE_OF { + ABILITY_POPUP(playerLeft, ABILITY_AROMA_VEIL); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Aroma Veil prevents Psychic Noise's effect") +{ + struct BattlePokemon *moveTarget = NULL; + PARAMETRIZE { moveTarget = playerLeft; } + PARAMETRIZE { moveTarget = playerRight; } + GIVEN { + ASSUME(GetMoveAdditionalEffectById(MOVE_PSYCHIC_NOISE, 0)->moveEffect == MOVE_EFFECT_PSYCHIC_NOISE); + PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_PSYCHIC_NOISE, target: moveTarget); MOVE(moveTarget, MOVE_RECOVER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_NOISE, opponentLeft); + ABILITY_POPUP(playerLeft, ABILITY_AROMA_VEIL); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, moveTarget); + } +} // Marked in Bulbapedia as need of research //TO_DO_BATTLE_TEST("Aroma Veil prevents G-Max Meltdown's effect"); -//TO_DO_BATTLE_TEST("Aroma Veil prevents Psychic Noise's effect"); diff --git a/test/battle/ability/battle_armor.c b/test/battle/ability/battle_armor.c new file mode 100644 index 0000000000..9424d57e59 --- /dev/null +++ b/test/battle/ability/battle_armor.c @@ -0,0 +1,49 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Battle Armor and Shell Armor block critical hits") +{ + u32 species; + u32 ability; + + PARAMETRIZE { species = SPECIES_KINGLER; ability = ABILITY_SHELL_ARMOR; } + PARAMETRIZE { species = SPECIES_ARMALDO; ability = ABILITY_BATTLE_ARMOR; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, criticalHit: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + NOT MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Mold Breaker, Teravolt and Turboblaze ignore Battle Armor and Shell Armor") +{ + u32 j; + u32 species1, species2, ability1, ability2; + static const u32 breakerData[][2] = + { + {SPECIES_PINSIR, ABILITY_MOLD_BREAKER}, + {SPECIES_ZEKROM, ABILITY_TERAVOLT}, + {SPECIES_RESHIRAM, ABILITY_TURBOBLAZE}, + }; + + for (j = 0; j < ARRAY_COUNT(breakerData); j++) + { + PARAMETRIZE { species1 = breakerData[j][0]; ability1 = breakerData[j][1]; species2 = SPECIES_KINGLER; ability2 = ABILITY_SHELL_ARMOR; } + PARAMETRIZE { species1 = breakerData[j][0]; ability1 = breakerData[j][1]; species2 = SPECIES_ARMALDO; ability2 = ABILITY_BATTLE_ARMOR; } + } + + GIVEN { + PLAYER(species1) { Ability(ability1); } + OPPONENT(species2) { Ability(ability2); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, criticalHit: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/ability/big_pecks.c b/test/battle/ability/big_pecks.c new file mode 100644 index 0000000000..44bb008a1d --- /dev/null +++ b/test/battle/ability/big_pecks.c @@ -0,0 +1,116 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Big Pecks prevents Defense stage reduction from moves") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_LEER) == EFFECT_DEFENSE_DOWN); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); } + } WHEN { + TURN { MOVE(player, MOVE_LEER); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_BIG_PECKS); + MESSAGE("The opposing Pidgey's Big Pecks prevents Defense loss!"); + } +} + +SINGLE_BATTLE_TEST("Big Pecks is ignored by Mold Breaker") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_LEER) == EFFECT_DEFENSE_DOWN); + PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } + OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); } + } WHEN { + TURN { MOVE(player, MOVE_LEER); } + } SCENE { + ABILITY_POPUP(player, ABILITY_MOLD_BREAKER); + MESSAGE("Pinsir breaks the mold!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, player); + MESSAGE("The opposing Pidgey's Defense fell!"); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_BIG_PECKS); + MESSAGE("The opposing Pidgey's Big Pecks prevents Defense loss!"); + } + } +} + +SINGLE_BATTLE_TEST("Big Pecks doesn't prevent Defense stage reduction from moves used by the user") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffectSelf(MOVE_SUPERPOWER, MOVE_EFFECT_ATK_DEF_DOWN) == TRUE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); } + } WHEN { + TURN { MOVE(opponent, MOVE_SUPERPOWER); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPERPOWER, opponent); + MESSAGE("The opposing Pidgey's Attack fell!"); + MESSAGE("The opposing Pidgey's Defense fell!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); + } +} + +SINGLE_BATTLE_TEST("Big Pecks doesn't prevent Topsy-Turvy") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_HARDEN) == EFFECT_DEFENSE_UP); + ASSUME(GetMoveEffect(MOVE_TOPSY_TURVY) == EFFECT_TOPSY_TURVY); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); } + } WHEN { + TURN { MOVE(opponent, MOVE_HARDEN); MOVE(player, MOVE_TOPSY_TURVY); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, opponent); + MESSAGE("The opposing Pidgey's Defense rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); + MESSAGE("All stat changes on the opposing Pidgey were inverted!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); + } +} + +SINGLE_BATTLE_TEST("Big Pecks doesn't prevent Spectral Thief from resetting positive Defense stage changes") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_HARDEN) == EFFECT_DEFENSE_UP); + ASSUME(GetMoveEffect(MOVE_SPECTRAL_THIEF) == EFFECT_SPECTRAL_THIEF); + ASSUME(GetMoveEffect(MOVE_SOAK) == EFFECT_SOAK); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player,MOVE_SOAK); } + TURN { MOVE(opponent, MOVE_HARDEN); MOVE(player, MOVE_SPECTRAL_THIEF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, opponent); + MESSAGE("The opposing Pidgey's Defense rose!"); + MESSAGE("Wobbuffet stole the target's boosted stats!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Big Pecks doesn't prevent receiving negative Defense stage changes from Baton Pass") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_LEER) == EFFECT_DEFENSE_DOWN); + ASSUME(GetMoveEffect(MOVE_BATON_PASS) == EFFECT_BATON_PASS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); } + } WHEN { + TURN { MOVE(player, MOVE_LEER); + MOVE(opponent, MOVE_BATON_PASS); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); + MESSAGE("2 sent out Pidgey!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); + } +} diff --git a/test/battle/ability/chlorophyll.c b/test/battle/ability/chlorophyll.c index 493a197638..84546dbe4c 100644 --- a/test/battle/ability/chlorophyll.c +++ b/test/battle/ability/chlorophyll.c @@ -1,6 +1,50 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Chlorophyll doubles speed if it's sunny"); -TO_DO_BATTLE_TEST("Chlorophyll doesn't double speed if Cloud Nine/Air Lock is on the field"); -TO_DO_BATTLE_TEST("Chlorophyll doesn't double speed if they have an Utility Umbrella"); +SINGLE_BATTLE_TEST("Chlorophyll doubles speed if it's sunny") +{ + GIVEN { + PLAYER(SPECIES_VENUSAUR) { Ability(ABILITY_CHLOROPHYLL); Speed(100); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(199); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SUNNY_DAY); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } +} + +SINGLE_BATTLE_TEST("Chlorophyll doesn't double speed if Cloud Nine/Air Lock is on the field") +{ + GIVEN { + PLAYER(SPECIES_VENUSAUR) { Ability(ABILITY_CHLOROPHYLL); Speed(100); } + OPPONENT(SPECIES_GOLDUCK) { Speed(199); Ability(ABILITY_CLOUD_NINE); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SUNNY_DAY); } + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + } +} + +SINGLE_BATTLE_TEST("Chlorophyll doesn't double speed if they have an Utility Umbrella") +{ + GIVEN { + PLAYER(SPECIES_VENUSAUR) { Ability(ABILITY_CHLOROPHYLL); Speed(100); Item(ITEM_UTILITY_UMBRELLA); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(199); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SUNNY_DAY); } + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + } +} diff --git a/test/battle/ability/clear_body.c b/test/battle/ability/clear_body.c index 89b89e96bf..fd2317a545 100644 --- a/test/battle/ability/clear_body.c +++ b/test/battle/ability/clear_body.c @@ -377,7 +377,7 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } GIVEN { - ASSUME(MoveHasAdditionalEffect(MOVE_SPECTRAL_THIEF, MOVE_EFFECT_SPECTRAL_THIEF) == TRUE); + ASSUME(GetMoveEffect(MOVE_SPECTRAL_THIEF) == EFFECT_SPECTRAL_THIEF); ASSUME(GetMoveEffect(MOVE_AGILITY) == EFFECT_SPEED_UP_2); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } OPPONENT(species) { Speed(5); Ability(ability); } diff --git a/test/battle/ability/color_change.c b/test/battle/ability/color_change.c index d3a6489f00..668cb01b62 100644 --- a/test/battle/ability/color_change.c +++ b/test/battle/ability/color_change.c @@ -4,29 +4,33 @@ SINGLE_BATTLE_TEST("Color Change changes the type of a Pokemon being hit by a move if the type of the move and the Pokemon are different") { GIVEN { + ASSUME(gSpeciesInfo[SPECIES_KECLEON].types[0] != TYPE_PSYCHIC && gSpeciesInfo[SPECIES_KECLEON].types[1] != TYPE_PSYCHIC); + ASSUME(gMovesInfo[MOVE_PSYWAVE].type == TYPE_PSYCHIC); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_COLOR_CHANGE); } + OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } } WHEN { - TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_PSYWAVE); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYWAVE, player); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("The opposing Wobbuffet's Color Change made it the Normal type!"); + MESSAGE("The opposing Kecleon's Color Change made it the Psychic type!"); } } SINGLE_BATTLE_TEST("Color Change does not change the type when hit by a move that's the same type as itself") { GIVEN { + ASSUME(gSpeciesInfo[SPECIES_KECLEON].types[0] == TYPE_NORMAL || gSpeciesInfo[SPECIES_KECLEON].types[1] == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_COLOR_CHANGE); } + OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } } WHEN { - TURN { MOVE(player, MOVE_PSYCHO_CUT); } + TURN { MOVE(player, MOVE_TACKLE); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("The opposing Wobbuffet's Color Change made it the Normal type!"); + MESSAGE("The opposing Kecleon's Color Change made it the Normal type!"); } } } @@ -34,11 +38,12 @@ SINGLE_BATTLE_TEST("Color Change does not change the type when hit by a move tha SINGLE_BATTLE_TEST("Color Change does not change the type of a dual-type Pokemon when hit by a move that shares its primary type") { GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_XATU) { Ability(ABILITY_COLOR_CHANGE); } + PLAYER(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } + OPPONENT(SPECIES_SLOWBRO); } WHEN { - TURN { MOVE(player, MOVE_PSYCHO_CUT); } + TURN { MOVE(opponent, MOVE_SKILL_SWAP); MOVE(player, MOVE_PSYCHO_CUT); } } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); @@ -50,11 +55,12 @@ SINGLE_BATTLE_TEST("Color Change does not change the type of a dual-type Pokemon SINGLE_BATTLE_TEST("Color Change does not change the type of a dual-type Pokemon when hit by a move that shares its secondary type") { GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_SLOWBRO) { Ability(ABILITY_COLOR_CHANGE); } + PLAYER(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } + OPPONENT(SPECIES_SLOWBRO); } WHEN { - TURN { MOVE(player, MOVE_PSYCHO_CUT); } + TURN { MOVE(opponent, MOVE_SKILL_SWAP); MOVE(player, MOVE_PSYCHO_CUT); } } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); @@ -67,13 +73,13 @@ SINGLE_BATTLE_TEST("Color Change changes the user to Electric type if hit by a m { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_COLOR_CHANGE); } + OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } } WHEN { TURN { MOVE(opponent, MOVE_ELECTRIFY); MOVE(player, MOVE_PSYCHO_CUT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("The opposing Wobbuffet's Color Change made it the Electric type!"); + MESSAGE("The opposing Kecleon's Color Change made it the Electric type!"); } } @@ -81,16 +87,16 @@ SINGLE_BATTLE_TEST("Color Change changes the type when a Pokemon is hit by Futur { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_SNORLAX) { Ability(ABILITY_COLOR_CHANGE); } + OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } } WHEN { TURN { MOVE(player, MOVE_FUTURE_SIGHT); } TURN { } TURN { } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("The opposing Snorlax took the Future Sight attack!"); + MESSAGE("The opposing Kecleon took the Future Sight attack!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("The opposing Snorlax's Color Change made it the Psychic type!"); + MESSAGE("The opposing Kecleon's Color Change made it the Psychic type!"); } } @@ -98,35 +104,33 @@ SINGLE_BATTLE_TEST("Color Change changes the type when a Pokemon is hit by Doom { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_COLOR_CHANGE); } + OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } } WHEN { TURN { MOVE(player, MOVE_DOOM_DESIRE); } TURN { } TURN { } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOOM_DESIRE, player); - MESSAGE("The opposing Wobbuffet took the Doom Desire attack!"); + MESSAGE("The opposing Kecleon took the Doom Desire attack!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("The opposing Wobbuffet's Color Change made it the Steel type!"); + MESSAGE("The opposing Kecleon's Color Change made it the Steel type!"); } } SINGLE_BATTLE_TEST("Color Change changes the type to Electric when a Pokemon is hit by a forseen attack under the effect of Electrify") { - KNOWN_FAILING; // #4471. GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_BLASTOISE) { Ability(ABILITY_COLOR_CHANGE); } + OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_FUTURE_SIGHT); } TURN { } TURN { MOVE(opponent, MOVE_ELECTRIFY); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("The opposing Blastoise took the Future Sight attack!"); - MESSAGE("It's super effective!"); + MESSAGE("The opposing Kecleon took the Future Sight attack!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("The opposing Blastoise's Color Change made it the Electr type!"); + MESSAGE("The opposing Kecleon's Color Change made it the Electric type!"); } } @@ -134,15 +138,18 @@ SINGLE_BATTLE_TEST("Color Change changes the type to Normal when a Pokemon is hi { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_NORMALIZE); } - OPPONENT(SPECIES_BLASTOISE) { Ability(ABILITY_COLOR_CHANGE); } + OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_FUTURE_SIGHT); } - TURN { } + TURN { MOVE(player, MOVE_SOAK); } TURN { } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("The opposing Blastoise took the Future Sight attack!"); + MESSAGE("Wobbuffet used Soak!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SOAK, player); + MESSAGE("The opposing Kecleon transformed into the Water type!"); + MESSAGE("The opposing Kecleon took the Future Sight attack!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("The opposing Blastoise's Color Change made it the Normal type!"); + MESSAGE("The opposing Kecleon's Color Change made it the Normal type!"); } } diff --git a/test/battle/ability/electric_surge.c b/test/battle/ability/electric_surge.c index 3509f1c687..3213cfc323 100644 --- a/test/battle/ability/electric_surge.c +++ b/test/battle/ability/electric_surge.c @@ -1,4 +1,15 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Electric Surge creates Electric Terrain when entering the battle"); +SINGLE_BATTLE_TEST("Electric Surge creates Electric Terrain when entering the battle") +{ + GIVEN { + PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + } SCENE { + ABILITY_POPUP(player, ABILITY_ELECTRIC_SURGE); + MESSAGE("An electric current ran across the battlefield!"); + } +} diff --git a/test/battle/ability/grassy_surge.c b/test/battle/ability/grassy_surge.c index ccdb471d9f..e8f1a0cbae 100644 --- a/test/battle/ability/grassy_surge.c +++ b/test/battle/ability/grassy_surge.c @@ -1,4 +1,15 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Grassy Surge creates Grassy Terrain when entering the battle"); +SINGLE_BATTLE_TEST("Grassy Surge creates Grassy Terrain when entering the battle") +{ + GIVEN { + PLAYER(SPECIES_TAPU_BULU) { Ability(ABILITY_GRASSY_SURGE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + } SCENE { + ABILITY_POPUP(player, ABILITY_GRASSY_SURGE); + MESSAGE("Grass grew to cover the battlefield!"); + } +} diff --git a/test/battle/ability/hydration.c b/test/battle/ability/hydration.c index 7d16ad04ae..7df2681c13 100644 --- a/test/battle/ability/hydration.c +++ b/test/battle/ability/hydration.c @@ -15,4 +15,15 @@ SINGLE_BATTLE_TEST("Hydration cures non-volatile Status conditions if it is rain } } -TO_DO_BATTLE_TEST("Hydration doesn't cure status conditions if Cloud Nine/Air Lock is on the field"); +SINGLE_BATTLE_TEST("Hydration doesn't cure status conditions if Cloud Nine/Air Lock is on the field") +{ + GIVEN { + PLAYER(SPECIES_VAPOREON) { Ability(ABILITY_HYDRATION); Status1(STATUS1_BURN); } + OPPONENT(SPECIES_GOLDUCK) { Ability(ABILITY_CLOUD_NINE); } + } WHEN { + TURN { MOVE(player, MOVE_RAIN_DANCE); } + } SCENE { + NOT ABILITY_POPUP(player, ABILITY_HYDRATION); + MESSAGE("Vaporeon was hurt by its burn!"); + } +} diff --git a/test/battle/ability/hyper_cutter.c b/test/battle/ability/hyper_cutter.c index 7bd5504965..1dc434173a 100644 --- a/test/battle/ability/hyper_cutter.c +++ b/test/battle/ability/hyper_cutter.c @@ -117,7 +117,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Spectral Thief from resetting p { GIVEN { ASSUME(GetMoveEffect(MOVE_SWORDS_DANCE) == EFFECT_ATTACK_UP_2); - ASSUME(MoveHasAdditionalEffect(MOVE_SPECTRAL_THIEF, MOVE_EFFECT_SPECTRAL_THIEF)); + ASSUME(GetMoveEffect(MOVE_SPECTRAL_THIEF) == EFFECT_SPECTRAL_THIEF); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); } } WHEN { @@ -125,8 +125,8 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Spectral Thief from resetting p } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent); MESSAGE("The opposing Krabby's Attack sharply rose!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); MESSAGE("Wobbuffet stole the target's boosted stats!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); } diff --git a/test/battle/ability/innards_out.c b/test/battle/ability/innards_out.c index ed11354e3a..516bde342e 100644 --- a/test/battle/ability/innards_out.c +++ b/test/battle/ability/innards_out.c @@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Innards Out does not damage Magic Guard Pokemon") SINGLE_BATTLE_TEST("Innards Out uses correct damage amount for Future Sight") { GIVEN { - ASSUME(gMovesInfo[MOVE_FUTURE_SIGHT].effect == EFFECT_FUTURE_SIGHT); + ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT); PLAYER(SPECIES_PYUKUMUKU) { HP(1); Ability(ABILITY_INNARDS_OUT); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); @@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("Innards Out uses correct damage amount for Future Sight") SINGLE_BATTLE_TEST("Innards Out doesn't trigger if Future Sight user is not on field") { GIVEN { - ASSUME(gMovesInfo[MOVE_FUTURE_SIGHT].effect == EFFECT_FUTURE_SIGHT); + ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT); PLAYER(SPECIES_PYUKUMUKU) { HP(1); Ability(ABILITY_INNARDS_OUT); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -112,7 +112,7 @@ SINGLE_BATTLE_TEST("Innards Out doesn't trigger if Future Sight user is not on f SINGLE_BATTLE_TEST("Innards Out triggers if Future Sight user is back on the field") { GIVEN { - ASSUME(gMovesInfo[MOVE_FUTURE_SIGHT].effect == EFFECT_FUTURE_SIGHT); + ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT); PLAYER(SPECIES_PYUKUMUKU) { HP(1); Ability(ABILITY_INNARDS_OUT); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); diff --git a/test/battle/ability/inner_focus.c b/test/battle/ability/inner_focus.c index 5a470b742f..509b46d176 100644 --- a/test/battle/ability/inner_focus.c +++ b/test/battle/ability/inner_focus.c @@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents flinching") } } -SINGLE_BATTLE_TEST("Inner Focus is ignored by Mold Breaker") +SINGLE_BATTLE_TEST("Mold Breaker ignores Inner Focus") { GIVEN { PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); }; diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index 2553c2755f..727a4086a7 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -351,3 +351,27 @@ SINGLE_BATTLE_TEST("Intimidate activates when it's no longer affected by Neutral } } +DOUBLE_BATTLE_TEST("Intimidate will correctly decrease the attack of the second mon after Protosynthesis activated") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); } + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WALKING_WAKE) { Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); } + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { SWITCH(opponentLeft, 2); SEND_OUT(playerLeft, 2); } + } SCENE { + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + ABILITY_POPUP(playerLeft, ABILITY_PROTOSYNTHESIS); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + } +} diff --git a/test/battle/ability/keen_eye.c b/test/battle/ability/keen_eye.c index 0268477ded..f6a5fbc38a 100644 --- a/test/battle/ability/keen_eye.c +++ b/test/battle/ability/keen_eye.c @@ -174,7 +174,7 @@ SINGLE_BATTLE_TEST("Keen Eye & Gen9+ Illuminate don't prevent Spectral Thief fro GIVEN { ASSUME(GetMoveEffect(MOVE_HONE_CLAWS) == EFFECT_ATTACK_ACCURACY_UP); - ASSUME(MoveHasAdditionalEffect(MOVE_SPECTRAL_THIEF, MOVE_EFFECT_SPECTRAL_THIEF) == TRUE); + ASSUME(GetMoveEffect(MOVE_SPECTRAL_THIEF) == EFFECT_SPECTRAL_THIEF); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species) { Ability(ability); } } WHEN { @@ -191,8 +191,8 @@ SINGLE_BATTLE_TEST("Keen Eye & Gen9+ Illuminate don't prevent Spectral Thief fro MESSAGE("The opposing Staryu's Attack rose!"); MESSAGE("The opposing Staryu's accuracy rose!"); } - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); MESSAGE("Wobbuffet stole the target's boosted stats!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); } THEN { EXPECT_EQ(opponent->statStages[STAT_ACC], DEFAULT_STAT_STAGE); } diff --git a/test/battle/ability/lightning_rod.c b/test/battle/ability/lightning_rod.c index e3c0a59212..f2e9e434ce 100644 --- a/test/battle/ability/lightning_rod.c +++ b/test/battle/ability/lightning_rod.c @@ -75,7 +75,7 @@ DOUBLE_BATTLE_TEST("Lightning Rod forces single-target Electric-type moves to ta DOUBLE_BATTLE_TEST("Lightning Rod redirects an ally's attack") { GIVEN { - ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); + ASSUME(GetMoveType(MOVE_THUNDERBOLT) == TYPE_ELECTRIC); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_RAICHU) { Ability(ABILITY_LIGHTNING_ROD); } diff --git a/test/battle/ability/liquid_ooze.c b/test/battle/ability/liquid_ooze.c index 6398a0be2b..fb20522937 100644 --- a/test/battle/ability/liquid_ooze.c +++ b/test/battle/ability/liquid_ooze.c @@ -108,9 +108,11 @@ SINGLE_BATTLE_TEST("Liquid Ooze causes Strength Sap users to lose HP instead of } } -SINGLE_BATTLE_TEST("Liquid Ooze causes leech seedee to faint before seeder") +/* * https://bulbapedia.bulbagarden.net/wiki/Liquid_Ooze_(Ability)#In_battle: + * If the recipient of Leech Seed's effect were to faint due to Liquid Ooze on the same turn as the victim of Leech Seed, then the victim faints before the recipient. This means that the victim's team loses the battle if both teams had their final Pokémon sent out. + */ +SINGLE_BATTLE_TEST("Liquid Ooze causes leech seed victim to faint before seeder") { - KNOWN_FAILING; // Message fails u16 ability; PARAMETRIZE { ability = ABILITY_CLEAR_BODY; } PARAMETRIZE { ability = ABILITY_LIQUID_OOZE; } @@ -120,16 +122,17 @@ SINGLE_BATTLE_TEST("Liquid Ooze causes leech seedee to faint before seeder") } WHEN { TURN { MOVE(player, MOVE_LEECH_SEED); } } SCENE { + // Player seeds opponent MESSAGE("Bulbasaur used Leech Seed!"); // Drain at end of turn ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_LEECH_SEED_DRAIN, opponent); if (ability != ABILITY_LIQUID_OOZE) { - MESSAGE("The opposing Tentacool's health is sapped by Leech Seed!"); MESSAGE("The opposing Tentacool fainted!"); + MESSAGE("The opposing Tentacool's health is sapped by Leech Seed!"); } else { + MESSAGE("The opposing Tentacool fainted!"); ABILITY_POPUP(opponent, ABILITY_LIQUID_OOZE); MESSAGE("Bulbasaur sucked up the liquid ooze!"); - MESSAGE("The opposing Tentacool fainted!"); MESSAGE("Bulbasaur fainted!"); } } diff --git a/test/battle/ability/liquid_voice.c b/test/battle/ability/liquid_voice.c new file mode 100644 index 0000000000..6d3fa992f1 --- /dev/null +++ b/test/battle/ability/liquid_voice.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(GetMoveType(MOVE_HYPER_VOICE) == TYPE_NORMAL); + ASSUME(GetMovePower(MOVE_HYPER_VOICE) > 0); +} + +SINGLE_BATTLE_TEST("Liquid voice turns a sound move into a Water-type move") +{ + GIVEN { + PLAYER(SPECIES_TYPHLOSION); + OPPONENT(SPECIES_PRIMARINA) { Ability(ABILITY_LIQUID_VOICE); } + } WHEN { + TURN { MOVE(opponent, MOVE_HYPER_VOICE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, opponent); + MESSAGE("It's super effective!"); + } +} diff --git a/test/battle/ability/merciless.c b/test/battle/ability/merciless.c new file mode 100644 index 0000000000..f9337fb820 --- /dev/null +++ b/test/battle/ability/merciless.c @@ -0,0 +1,15 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Merciless causes a move to result in a critical hit if the target is poisoned") +{ + GIVEN { + PLAYER(SPECIES_MAREANIE) { Ability(ABILITY_MERCILESS); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/ability/misty_surge.c b/test/battle/ability/misty_surge.c index 229d26c3ba..d09f3e8f65 100644 --- a/test/battle/ability/misty_surge.c +++ b/test/battle/ability/misty_surge.c @@ -1,4 +1,15 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Misty Surge creates Misty Terrain when entering the battle"); +SINGLE_BATTLE_TEST("Misty Surge creates Misty Terrain when entering the battle") +{ + GIVEN { + PLAYER(SPECIES_TAPU_FINI) { Ability(ABILITY_MISTY_SURGE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + } SCENE { + ABILITY_POPUP(player, ABILITY_MISTY_SURGE); + MESSAGE("Mist swirled around the battlefield!"); + } +} diff --git a/test/battle/ability/own_tempo.c b/test/battle/ability/own_tempo.c index a6dd8c4591..e9abcf1cf4 100644 --- a/test/battle/ability/own_tempo.c +++ b/test/battle/ability/own_tempo.c @@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the user") } } -SINGLE_BATTLE_TEST("Own Tempo is ignored by Mold Breaker") +SINGLE_BATTLE_TEST("Mold Breaker ignores Own Tempo") { KNOWN_FAILING; // Ideally the func CanBeConfused should be split into AttackerCanBeConfused and TargetCanBeConfused or we do it in the same func but have a check for when battlerAtk == battlerDef GIVEN { @@ -73,7 +73,7 @@ SINGLE_BATTLE_TEST("Own Tempo is ignored by Mold Breaker") } } -SINGLE_BATTLE_TEST("Own Tempo cures confusion obtained from an opponent with Mold Breaker") +SINGLE_BATTLE_TEST("Mold Breaker does not prevent Own Tempo from curing confusion right after") { KNOWN_FAILING; GIVEN { diff --git a/test/battle/ability/parental_bond.c b/test/battle/ability/parental_bond.c index 29f137f6af..40f70252f9 100644 --- a/test/battle/ability/parental_bond.c +++ b/test/battle/ability/parental_bond.c @@ -131,12 +131,15 @@ SINGLE_BATTLE_TEST("Parental Bond-converted moves only hit once on Lightning Rod } } -SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they still hit twice 35% of the time") +SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they still hit twice 37.5/35% of the time") { - PASSES_RANDOMLY(35, 100, RNG_HITS); + u32 genConfig, passes, trials; + PARAMETRIZE { genConfig = GEN_4; passes = 3; trials = 8; } // 37.5% + PARAMETRIZE { genConfig = GEN_5; passes = 7; trials = 20; } // 35% + PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); + WITH_CONFIG(GEN_CONFIG_MULTI_HIT_CHANCE, genConfig); ASSUME(GetMoveCategory(MOVE_COMET_PUNCH) != DAMAGE_CATEGORY_STATUS); ASSUME(GetMoveEffect(MOVE_COMET_PUNCH) == EFFECT_MULTI_HIT); PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } @@ -157,12 +160,15 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil } } -SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they still hit thrice 35% of the time") +SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they still hit thrice 37.5/35% of the time") { - PASSES_RANDOMLY(35, 100, RNG_HITS); + u32 genConfig, passes, trials; + PARAMETRIZE { genConfig = GEN_4; passes = 3; trials = 8; } // 37.5% + PARAMETRIZE { genConfig = GEN_5; passes = 7; trials = 20; } // 35% + PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); + WITH_CONFIG(GEN_CONFIG_MULTI_HIT_CHANCE, genConfig); ASSUME(GetMoveCategory(MOVE_COMET_PUNCH) != DAMAGE_CATEGORY_STATUS); ASSUME(GetMoveEffect(MOVE_COMET_PUNCH) == EFFECT_MULTI_HIT); PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } @@ -184,12 +190,15 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil } } -SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they still hit four times 15% of the time") +SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they still hit four times 12.5/15% of the time") { - PASSES_RANDOMLY(15, 100, RNG_HITS); + u32 genConfig, passes, trials; + PARAMETRIZE { genConfig = GEN_4; passes = 1; trials = 8; } // 12.5% + PARAMETRIZE { genConfig = GEN_5; passes = 3; trials = 20; } // 15% + PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); + WITH_CONFIG(GEN_CONFIG_MULTI_HIT_CHANCE, genConfig); ASSUME(GetMoveCategory(MOVE_COMET_PUNCH) != DAMAGE_CATEGORY_STATUS); ASSUME(GetMoveEffect(MOVE_COMET_PUNCH) == EFFECT_MULTI_HIT); PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } @@ -212,12 +221,15 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil } } -SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they still hit five times 15% of the time") +SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they still hit five times 12.5/15% of the time") { - PASSES_RANDOMLY(15, 100, RNG_HITS); + u32 genConfig, passes, trials; + PARAMETRIZE { genConfig = GEN_4; passes = 1; trials = 8; } // 12.5% + PARAMETRIZE { genConfig = GEN_5; passes = 3; trials = 20; } // 15% + PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); + WITH_CONFIG(GEN_CONFIG_MULTI_HIT_CHANCE, genConfig); ASSUME(GetMoveCategory(MOVE_COMET_PUNCH) != DAMAGE_CATEGORY_STATUS); ASSUME(GetMoveEffect(MOVE_COMET_PUNCH) == EFFECT_MULTI_HIT); PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } diff --git a/test/battle/ability/psychic_surge.c b/test/battle/ability/psychic_surge.c index d840e8d440..02b2080043 100644 --- a/test/battle/ability/psychic_surge.c +++ b/test/battle/ability/psychic_surge.c @@ -1,4 +1,15 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Psychic Surge creates Psychic Terrain when entering the battle"); +SINGLE_BATTLE_TEST("Psychic Surge creates Psychic Terrain when entering the battle") +{ + GIVEN { + PLAYER(SPECIES_TAPU_LELE) { Ability(ABILITY_PSYCHIC_SURGE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + } SCENE { + ABILITY_POPUP(player, ABILITY_PSYCHIC_SURGE); + MESSAGE("The battlefield got weird!"); + } +} diff --git a/test/battle/ability/sheer_force.c b/test/battle/ability/sheer_force.c index c5add71df0..7624dee9cb 100644 --- a/test/battle/ability/sheer_force.c +++ b/test/battle/ability/sheer_force.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Sheer Force doesn't boost Eruption", s16 damage) PLAYER(SPECIES_TAUROS) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_PRESENT); } + TURN { MOVE(player, MOVE_ERUPTION); } } SCENE { HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Sheer Force doesn't boost Water Spout", s16 damage) PLAYER(SPECIES_TAUROS) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_PRESENT); } + TURN { MOVE(player, MOVE_WATER_SPOUT); } } SCENE { HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -347,7 +347,7 @@ SINGLE_BATTLE_TEST("Sheer Force doesn't boost Comeuppance", s16 damage) EXPECT_NE(results[0].damage, 0); } } -SINGLE_BATTLE_TEST("Sheer Force doesn't boost Comeuppance", s16 damage) +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Payback", s16 damage) { u16 ability = 0; PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } diff --git a/test/battle/ability/shell_armor.c b/test/battle/ability/shell_armor.c new file mode 100644 index 0000000000..7d97b0a069 --- /dev/null +++ b/test/battle/ability/shell_armor.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for Shell Armor are handled in test/battle/ability/battle_armor.c diff --git a/test/battle/ability/shield_dust.c b/test/battle/ability/shield_dust.c index c5a9fbec66..59f5b1162c 100644 --- a/test/battle/ability/shield_dust.c +++ b/test/battle/ability/shield_dust.c @@ -93,7 +93,7 @@ SINGLE_BATTLE_TEST("Shield Dust does not block self-targeting effects, primary o PARAMETRIZE { move = MOVE_METEOR_ASSAULT; } GIVEN { - ASSUME(gMovesInfo[MOVE_RAPID_SPIN].effect == EFFECT_RAPID_SPIN); + ASSUME(GetMoveEffect(MOVE_RAPID_SPIN) == EFFECT_RAPID_SPIN); ASSUME(MoveHasAdditionalEffectSelf(MOVE_POWER_UP_PUNCH, MOVE_EFFECT_ATK_PLUS_1) == TRUE); ASSUME(MoveHasAdditionalEffectSelf(MOVE_LEAF_STORM, MOVE_EFFECT_SP_ATK_MINUS_2) == TRUE); ASSUME(MoveHasAdditionalEffectSelf(MOVE_METEOR_ASSAULT, MOVE_EFFECT_RECHARGE) == TRUE); diff --git a/test/battle/ability/snow_cloak.c b/test/battle/ability/snow_cloak.c index 4e129c3ff7..fe0adeaff9 100644 --- a/test/battle/ability/snow_cloak.c +++ b/test/battle/ability/snow_cloak.c @@ -28,5 +28,30 @@ SINGLE_BATTLE_TEST("Snow Cloak increases evasion during hail") } } -TO_DO_BATTLE_TEST("Snow Cloak doesn't prevent hail damage if Cloud Nine/Air Lock is on the field"); -TO_DO_BATTLE_TEST("Snow Cloak doesn't increase evasion if Cloud Nine/Air Lock is on the field"); +SINGLE_BATTLE_TEST("Snow Cloak doesn't increase evasion if Cloud Nine/Air Lock is on the field") +{ + PASSES_RANDOMLY(10, 10, RNG_ACCURACY); + GIVEN { + PLAYER(SPECIES_GLACEON) { Ability(ABILITY_SNOW_CLOAK); } + OPPONENT(SPECIES_GOLDUCK) { Ability(ABILITY_CLOUD_NINE); } + } WHEN { + TURN { MOVE(player, MOVE_HAIL); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + HP_BAR(player); + } +} + +SINGLE_BATTLE_TEST("Snow Cloak increases evasion during snow") +{ + PASSES_RANDOMLY(4, 5, RNG_ACCURACY); + GIVEN { + ASSUME(GetMoveAccuracy(MOVE_POUND) == 100); + PLAYER(SPECIES_GLACEON) { Ability(ABILITY_SNOW_CLOAK); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SNOWSCAPE); } + TURN { MOVE(opponent, MOVE_POUND); } + } SCENE { + HP_BAR(player); + } +} diff --git a/test/battle/ability/stance_change.c b/test/battle/ability/stance_change.c index d6e08909f9..c2325ec768 100644 --- a/test/battle/ability/stance_change.c +++ b/test/battle/ability/stance_change.c @@ -79,5 +79,3 @@ SINGLE_BATTLE_TEST("Stance Change doesn't change Aegislash to Shield if King's S EXPECT_EQ(player->species, SPECIES_AEGISLASH_BLADE); } } - -TO_DO_BATTLE_TEST("Stance Change doesn't change Aegislash to Shield if King's Shield is called by a different move - Me First"); diff --git a/test/battle/ability/super_luck.c b/test/battle/ability/super_luck.c new file mode 100644 index 0000000000..39fd20ce16 --- /dev/null +++ b/test/battle/ability/super_luck.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Super Luck increases the critical hit ratio by 1 stage") +{ + u32 j, genConfig = 0, passes = 0, trials = 0; + + PARAMETRIZE { genConfig = GEN_1; passes = 5; trials = 32; } // ~15.6% with Togepi's base speed + for (j = GEN_2; j <= GEN_9; j++) + PARAMETRIZE { genConfig = j; passes = 1; trials = 8; } // 12.5% + PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_TOGEPI].baseSpeed == 20); + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); + PLAYER(SPECIES_TOGEPI) { Ability(ABILITY_SUPER_LUCK); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} + +TO_DO_BATTLE_TEST("Super Luck increases the chances of wild Pokémon holding items (Gen8+)"); diff --git a/test/battle/ability/unnerve.c b/test/battle/ability/unnerve.c index 9ad4ee7e5f..4547854231 100644 --- a/test/battle/ability/unnerve.c +++ b/test/battle/ability/unnerve.c @@ -2,5 +2,73 @@ #include "test/battle.h" // Remember to add a PARAMETRIZE for As One in the following tests: -TO_DO_BATTLE_TEST("Unnerve prevents opposing Pokémon from eating their own berries"); -TO_DO_BATTLE_TEST("Unnerve doesn't prevent opposing Pokémon from using Natural Gift"); +SINGLE_BATTLE_TEST("Unnerve prevents opposing Pokémon from eating their own berries") +{ + u16 mon; + u16 ability; + PARAMETRIZE { mon = SPECIES_JOLTIK, ability = ABILITY_UNNERVE; } + PARAMETRIZE { mon = SPECIES_CALYREX_ICE, ability = ABILITY_AS_ONE_ICE_RIDER; } + GIVEN { + ASSUME(gItemsInfo[ITEM_RAWST_BERRY].holdEffect == HOLD_EFFECT_CURE_BRN); + PLAYER(mon) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RAWST_BERRY); Status1(STATUS1_BURN); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(player, ability); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Unnerve doesn't prevent opposing Pokémon from using Natural Gift") +{ + u16 mon; + u16 ability; + PARAMETRIZE { mon = SPECIES_JOLTIK, ability = ABILITY_UNNERVE; } + PARAMETRIZE { mon = SPECIES_CALYREX_ICE, ability = ABILITY_AS_ONE_ICE_RIDER; } + GIVEN { + ASSUME(GetMoveEffect(MOVE_NATURAL_GIFT) == EFFECT_NATURAL_GIFT); + PLAYER(mon) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); } + } WHEN { + TURN { MOVE(opponent, MOVE_NATURAL_GIFT); } + } SCENE { + ABILITY_POPUP(player, ability); + HP_BAR(player); + } +} + +SINGLE_BATTLE_TEST("Unnerve prints the correct string (player)") +{ + u16 mon; + u16 ability; + PARAMETRIZE { mon = SPECIES_JOLTIK, ability = ABILITY_UNNERVE; } + PARAMETRIZE { mon = SPECIES_CALYREX_ICE, ability = ABILITY_AS_ONE_ICE_RIDER; } + GIVEN { + PLAYER(mon) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + } SCENE { + ABILITY_POPUP(player, ability); + MESSAGE("The opposing team is too nervous to eat Berries!"); + } +} + +SINGLE_BATTLE_TEST("Unnerve prints the correct string (opponent)") +{ + u16 mon; + u16 ability; + PARAMETRIZE { mon = SPECIES_JOLTIK, ability = ABILITY_UNNERVE; } + PARAMETRIZE { mon = SPECIES_CALYREX_ICE, ability = ABILITY_AS_ONE_ICE_RIDER; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(mon) { Ability(ability); } + } WHEN { + TURN {} + } SCENE { + ABILITY_POPUP(opponent, ability); + MESSAGE("Your team is too nervous to eat Berries!"); + } +} diff --git a/test/battle/ability/water_compaction.c b/test/battle/ability/water_compaction.c new file mode 100644 index 0000000000..e4e32e2713 --- /dev/null +++ b/test/battle/ability/water_compaction.c @@ -0,0 +1,61 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Water Compaction raises Defense 2 stages when hit by a water type move") +{ + GIVEN { + ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER); + PLAYER(SPECIES_SANDYGAST) { Ability(ABILITY_WATER_COMPACTION); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_WATER_GUN); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); + ABILITY_POPUP(player, ABILITY_WATER_COMPACTION); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("Water Compaction raises Defense 2 stages on each hit of a multi-hit Water type move") +{ + GIVEN { + ASSUME(GetMoveType(MOVE_SURGING_STRIKES) == TYPE_WATER); + ASSUME(GetMoveStrikeCount(MOVE_SURGING_STRIKES) == 3); + PLAYER(SPECIES_SANDYGAST) { Ability(ABILITY_WATER_COMPACTION); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SURGING_STRIKES); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURGING_STRIKES, opponent); + ABILITY_POPUP(player, ABILITY_WATER_COMPACTION); + MESSAGE("Sandygast's Defense sharply rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURGING_STRIKES, opponent); + ABILITY_POPUP(player, ABILITY_WATER_COMPACTION); + MESSAGE("Sandygast's Defense sharply rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURGING_STRIKES, opponent); + ABILITY_POPUP(player, ABILITY_WATER_COMPACTION); + MESSAGE("Sandygast's Defense sharply rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 6); + } +} + +SINGLE_BATTLE_TEST("Water Compaction does not affect damage taken from Water type moves", s16 damage) +{ + u16 ability; + PARAMETRIZE { ability = ABILITY_SAND_VEIL; } + PARAMETRIZE { ability = ABILITY_WATER_COMPACTION; } + GIVEN { + ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER); + PLAYER(SPECIES_SANDYGAST) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_WATER_GUN); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} diff --git a/test/battle/ai/ai_check_viability.c b/test/battle/ai/ai_check_viability.c index 2c20a08db6..0e9377fdea 100644 --- a/test/battle/ai/ai_check_viability.c +++ b/test/battle/ai/ai_check_viability.c @@ -203,7 +203,7 @@ AI_DOUBLE_BATTLE_TEST("AI chooses moves that cure self or partner") GIVEN { ASSUME(GetMoveEffect(MOVE_HEAL_BELL) == EFFECT_HEAL_BELL); - ASSUME(B_HEAL_BELL_SOUNDPROOF >= GEN_8); + WITH_CONFIG(GEN_CONFIG_HEAL_BELL_SOUNDPROOF, GEN_8); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); @@ -219,21 +219,22 @@ AI_DOUBLE_BATTLE_TEST("AI chooses moves that cure self or partner") AI_SINGLE_BATTLE_TEST("AI chooses moves that cure inactive party members") { - u32 status, ability; + u32 status, ability, config; PARAMETRIZE { status = STATUS1_TOXIC_POISON; ability = ABILITY_SCRAPPY; } - PARAMETRIZE { status = STATUS1_NONE; ability = ABILITY_SCRAPPY; } - PARAMETRIZE { status = STATUS1_TOXIC_POISON; ability = ABILITY_SOUNDPROOF; } + PARAMETRIZE { status = STATUS1_NONE; ability = ABILITY_SCRAPPY; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; ability = ABILITY_SOUNDPROOF; config = GEN_4; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; ability = ABILITY_SOUNDPROOF; config = GEN_5; } GIVEN { ASSUME(GetMoveEffect(MOVE_HEAL_BELL) == EFFECT_HEAL_BELL); - ASSUME(B_HEAL_BELL_SOUNDPROOF >= GEN_5); + WITH_CONFIG(GEN_CONFIG_HEAL_BELL_SOUNDPROOF, config); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_REGIROCK) { Moves(MOVE_BODY_PRESS, MOVE_HEAL_BELL); } OPPONENT(SPECIES_EXPLOUD) { Status1(status); Ability(ability); } } WHEN { - if (status == STATUS1_NONE) + if (status == STATUS1_NONE || (ability == ABILITY_SOUNDPROOF && config <= GEN_4)) TURN { EXPECT_MOVE(opponent, MOVE_BODY_PRESS); } else TURN { EXPECT_MOVE(opponent, MOVE_HEAL_BELL); } @@ -254,3 +255,16 @@ AI_DOUBLE_BATTLE_TEST("AI prioritizes Skill Swapping Contrary to allied mons tha TURN { EXPECT_MOVE(opponentLeft, MOVE_SKILL_SWAP, target:opponentRight); EXPECT_MOVE(opponentRight, MOVE_OVERHEAT); } } } + +AI_SINGLE_BATTLE_TEST("AI prioritizes Pursuit if it would KO opponent") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_PURSUIT) == EFFECT_PURSUIT); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY); + PLAYER(SPECIES_ESPEON) { Level(5); } + PLAYER(SPECIES_TYRANITAR); + OPPONENT(SPECIES_TYRANITAR) { Moves(MOVE_CRUNCH, MOVE_PURSUIT); } + } WHEN { + TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_PURSUIT); SEND_OUT(player, 1); } + } +} diff --git a/test/battle/ai/ai_choice.c b/test/battle/ai/ai_choice.c index f1f13a373e..b19af6a073 100644 --- a/test/battle/ai/ai_choice.c +++ b/test/battle/ai/ai_choice.c @@ -24,6 +24,8 @@ AI_SINGLE_BATTLE_TEST("Choiced Pokémon switch out after using a status move onc PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; } } + PASSES_RANDOMLY(SHOULD_SWITCH_CHOICE_LOCKED_PERCENTAGE, 100, RNG_AI_SWITCH_CHOICE_LOCKED); + GIVEN { ASSUME(GetMoveCategory(MOVE_YAWN) == DAMAGE_CATEGORY_STATUS); ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); @@ -42,6 +44,20 @@ AI_SINGLE_BATTLE_TEST("Choiced Pokémon switch out after using a status move onc } } +AI_SINGLE_BATTLE_TEST("Choiced Pokémon only consider their own status moves when determining if they should switch") +{ + GIVEN + { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY | AI_FLAG_SMART_SWITCHING | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_ZIGZAGOON) { Speed(4); Moves(MOVE_TAIL_WHIP, MOVE_TACKLE); } + OPPONENT(SPECIES_ZIGZAGOON) { Speed(5); Moves(MOVE_TACKLE); Item(ITEM_CHOICE_BAND); } + OPPONENT(SPECIES_ZIGZAGOON) { Speed(5); Moves(MOVE_TACKLE); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_TAIL_WHIP); } + TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_TAIL_WHIP); } + } +} + AI_SINGLE_BATTLE_TEST("Choiced Pokémon won't use stat boosting moves") { // Moves defined by MOVE_TARGET_USER (with exceptions?) diff --git a/test/battle/ai/ai_flag_predict_switch.c b/test/battle/ai/ai_flag_predict_switch.c index a5e74ff2d7..132ddf4175 100644 --- a/test/battle/ai/ai_flag_predict_switch.c +++ b/test/battle/ai/ai_flag_predict_switch.c @@ -27,18 +27,6 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_PREDICT_SWITCH: AI would switch out in Pursuit sc } } -AI_SINGLE_BATTLE_TEST("AI_FLAG_PREDICT_SWITCH: AI would switch out in Wonder Guard scenario") -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_SHEDINJA) { Moves(MOVE_PURSUIT, MOVE_CRUNCH); } - OPPONENT(SPECIES_GENGAR) { Moves(MOVE_PSYCHIC); } - OPPONENT(SPECIES_SWELLOW) { Moves(MOVE_PECK); } - } WHEN { - TURN { MOVE(player, MOVE_PURSUIT); EXPECT_SWITCH(opponent, 1); } - } -} - AI_SINGLE_BATTLE_TEST("AI_FLAG_PREDICT_SWITCH: AI will use hit escape moves on predicted switches") { PASSES_RANDOMLY(5, 10, RNG_AI_PREDICT_SWITCH); @@ -137,7 +125,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_PREDICT_SWITCH | AI_FLAG_PREDICT_INCOMING_MON: AI AI_SINGLE_BATTLE_TEST("AI_FLAG_PREDICT_SWITCH: AI would switch out in predicted-incoming-mon scenario") { - PASSES_RANDOMLY(5, 10, RNG_AI_SWITCH_HASBADODDS); + PASSES_RANDOMLY(SHOULD_SWITCH_HASBADODDS_PERCENTAGE, 100, RNG_AI_SWITCH_HASBADODDS); GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); PLAYER(SPECIES_TYRANITAR) { Moves(MOVE_CRUNCH, MOVE_SPORE); } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index f86dd2b5f9..367afbc0f1 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -24,6 +24,7 @@ AI_SINGLE_BATTLE_TEST("AI gets baited by Protect Switch tactics") // This behavi // General switching behaviour AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill") { + PASSES_RANDOMLY(SHOULD_SWITCH_PERISH_SONG_PERCENTAGE, 100, RNG_AI_SWITCH_PERISH_SONG); GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET); @@ -46,6 +47,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spot PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } PARAMETRIZE {flags = 0; } + PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD); GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | flags); PLAYER(SPECIES_RATTATA); @@ -67,8 +69,22 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spot } } +AI_SINGLE_BATTLE_TEST("AI will switch out if it has no move that affects the player") +{ + PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD); + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_RATTATA); + OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } + OPPONENT(SPECIES_RATTATA) { Moves(MOVE_TACKLE); } + } WHEN { + TURN { EXPECT_SWITCH(opponent, 1); } + } +} + AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle (Wonder Guard)") { + PASSES_RANDOMLY(SHOULD_SWITCH_WONDER_GUARD_PERCENTAGE, 100, RNG_AI_SWITCH_WONDER_GUARD); GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING); PLAYER(SPECIES_SHEDINJA); @@ -103,6 +119,37 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: U-Turn will send out Ace Mon i } } +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Eject Button will send out Ace Mon if it's the only one remaining") +{ + u32 aiSmartMonChoicesFlag; + PARAMETRIZE { aiSmartMonChoicesFlag = 0; } + PARAMETRIZE { aiSmartMonChoicesFlag = AI_FLAG_SMART_MON_CHOICES; } + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartMonChoicesFlag | AI_FLAG_ACE_POKEMON); + PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_ZIGZAGOON) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_LINOONE); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_TACKLE); EXPECT_SEND_OUT(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Eject Pack will send out Ace Mon if it's the only one remaining") +{ + u32 aiSmartMonChoicesFlag; + PARAMETRIZE { aiSmartMonChoicesFlag = 0; } + PARAMETRIZE { aiSmartMonChoicesFlag = AI_FLAG_SMART_MON_CHOICES; } + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartMonChoicesFlag | AI_FLAG_ACE_POKEMON); + PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + PLAYER(SPECIES_ARCANINE) { Ability(ABILITY_INTIMIDATE); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_ZIGZAGOON) { Item(ITEM_EJECT_PACK); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_LINOONE) { Moves(MOVE_HEADBUTT); } + } WHEN { + TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_TACKLE); EXPECT_SEND_OUT(opponent, 1); } + } +} + // General AI_FLAG_SMART_MON_CHOICES behaviour AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is less than recurring healing to avoid an infinite loop") { @@ -399,7 +446,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch in trapping mon m u32 aiSmartSwitchingFlag = 0; PARAMETRIZE { aiSmartSwitchingFlag = 0; } PARAMETRIZE { aiSmartSwitchingFlag = AI_FLAG_SMART_SWITCHING; } - + PASSES_RANDOMLY(SHOULD_SWITCH_TRAPPER_PERCENTAGE, 100, RNG_AI_SWITCH_TRAPPER); GIVEN { ASSUME(gSpeciesInfo[SPECIES_GOLURK].types[0] == TYPE_GROUND); ASSUME(gSpeciesInfo[SPECIES_GOLURK].types[1] == TYPE_GHOST); @@ -457,6 +504,7 @@ AI_SINGLE_BATTLE_TEST("AI won't use trapping behaviour if player only has 1 mon AI_SINGLE_BATTLE_TEST("AI will trap player using Trace if player has a trapper") { + PASSES_RANDOMLY(SHOULD_SWITCH_TRAPPER_PERCENTAGE, 100, RNG_AI_SWITCH_TRAPPER); GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING); PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_ARENA_TRAP); Moves(MOVE_ROCK_TOMB); } @@ -470,7 +518,7 @@ AI_SINGLE_BATTLE_TEST("AI will trap player using Trace if player has a trapper") AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if mon would be OKHO'd and they have a good switchin 50% of the time") { - PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_HASBADODDS); + PASSES_RANDOMLY(SHOULD_SWITCH_HASBADODDS_PERCENTAGE, 100, RNG_AI_SWITCH_HASBADODDS); GIVEN { ASSUME(gSpeciesInfo[SPECIES_RHYDON].types[0] == TYPE_GROUND); ASSUME(gSpeciesInfo[SPECIES_PELIPPER].types[0] == TYPE_WATER); @@ -489,6 +537,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if mon would AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if it can't deal damage to a mon with Wonder Guard") { + PASSES_RANDOMLY(SHOULD_SWITCH_WONDER_GUARD_PERCENTAGE, 100, RNG_AI_SWITCH_WONDER_GUARD); GIVEN { ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[0] == TYPE_BUG); ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[1] == TYPE_GHOST); @@ -508,6 +557,7 @@ AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if it can't deal damage to AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it can't deal damage to a mon with Wonder Guard") { + PASSES_RANDOMLY(SHOULD_SWITCH_WONDER_GUARD_PERCENTAGE, 100, RNG_AI_SWITCH_WONDER_GUARD); GIVEN { ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[0] == TYPE_BUG); ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[1] == TYPE_GHOST); @@ -529,7 +579,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has bee { u32 species = SPECIES_NONE, odds = 0; PARAMETRIZE { species = SPECIES_ZIGZAGOON, odds = 0; } - PARAMETRIZE { species = SPECIES_HARIYAMA, odds = 50; } + PARAMETRIZE { species = SPECIES_HARIYAMA, odds = SHOULD_SWITCH_BADLY_POISONED_PERCENTAGE; } PASSES_RANDOMLY(odds, 100, RNG_AI_SWITCH_BADLY_POISONED); GIVEN { ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); @@ -546,7 +596,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has bee AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Curse'd 50% of the time") { - PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_CURSED); + PASSES_RANDOMLY(SHOULD_SWITCH_CURSED_PERCENTAGE, 100, RNG_AI_SWITCH_CURSED); GIVEN { ASSUME(GetMoveEffect(MOVE_CURSE) == EFFECT_CURSE); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -562,7 +612,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has bee AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Nightmare'd 33% of the time") { - PASSES_RANDOMLY(33, 100, RNG_AI_SWITCH_NIGHTMARE); + PASSES_RANDOMLY(SHOULD_SWITCH_NIGHTMARE_PERCENTAGE, 100, RNG_AI_SWITCH_NIGHTMARE); GIVEN { ASSUME(GetMoveEffect(MOVE_NIGHTMARE) == EFFECT_NIGHTMARE); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -577,7 +627,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has bee AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Leech Seed'd 25% of the time") { - PASSES_RANDOMLY(25, 100, RNG_AI_SWITCH_SEEDED); + PASSES_RANDOMLY(SHOULD_SWITCH_SEEDED_PERCENTAGE, 100, RNG_AI_SWITCH_SEEDED); GIVEN { ASSUME(GetMoveEffect(MOVE_LEECH_SEED) == EFFECT_LEECH_SEED); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -592,6 +642,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has bee AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been infatuated") { + PASSES_RANDOMLY(SHOULD_SWITCH_INFATUATION_PERCENTAGE, 100, RNG_AI_SWITCH_INFATUATION); GIVEN { ASSUME(GetMoveEffect(MOVE_ATTRACT) == EFFECT_ATTRACT); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -604,17 +655,18 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has bee } } -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Yawn'd with more than 1/3 HP remaining") +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Yawn'd with more than 1/3 HP remaining and it has a good switchin") { u32 hp; PARAMETRIZE { hp = 30; } PARAMETRIZE { hp = 10; } + PASSES_RANDOMLY(SHOULD_SWITCH_YAWN_PERCENTAGE, 100, RNG_AI_SWITCH_YAWN); GIVEN { ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); PLAYER(SPECIES_SLAKOTH) { Moves(MOVE_TACKLE, MOVE_YAWN); } - OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); HP(hp); MaxHP(30); } - OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_SLAKOTH) { Moves(MOVE_TACKLE); HP(hp); MaxHP(30); } + OPPONENT(SPECIES_SLAKOTH) { Moves(MOVE_HEADBUTT); } } WHEN { TURN { MOVE(player, MOVE_YAWN) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } if (hp == 30) @@ -624,11 +676,29 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has bee } } +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will not switch out if it has been Yawn'd with more than 1/3 HP remaining and it does not have a good switchin") +{ + u32 hp; + PARAMETRIZE { hp = 30; } + PARAMETRIZE { hp = 10; } + GIVEN { + ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_SLAKOTH) { Moves(MOVE_TACKLE, MOVE_YAWN); } + OPPONENT(SPECIES_SLAKOTH) { Moves(MOVE_TACKLE); HP(hp); MaxHP(30); } + OPPONENT(SPECIES_SLAKOTH) { Level(1); Moves(MOVE_HEADBUTT); } + } WHEN { + TURN { MOVE(player, MOVE_YAWN) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } + } +} + AI_DOUBLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Yawn'd with more than 1/3 HP remaining (Doubles)") { u32 hp; PARAMETRIZE { hp = 30; } PARAMETRIZE { hp = 10; } + PASSES_RANDOMLY(SHOULD_SWITCH_YAWN_PERCENTAGE, 100, RNG_AI_SWITCH_YAWN); GIVEN { ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -649,6 +719,7 @@ AI_DOUBLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has bee AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if player's mon is semi-invulnerable and it has an absorber") { + PASSES_RANDOMLY(SHOULD_SWITCH_FREE_TURN_PERCENTAGE, 100, RNG_AI_SWITCH_FREE_TURN); GIVEN { ASSUME(GetMoveType(MOVE_DIVE) == TYPE_WATER); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -663,7 +734,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if player's m AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has an absorber but current mon has SE move 33% of the time") { - PASSES_RANDOMLY(33, 100, RNG_AI_SWITCH_ABSORBING); + PASSES_RANDOMLY(33, 100, RNG_AI_SWITCH_ABSORBING_STAY_IN); GIVEN { ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -678,7 +749,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has an AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if player's mon is charging and it has an absorber") { - PASSES_RANDOMLY(100, 100, RNG_AI_SWITCH_ABSORBING); + PASSES_RANDOMLY(SHOULD_SWITCH_ABSORBS_MOVE_PERCENTAGE, 100, RNG_AI_SWITCH_ABSORBING); GIVEN { ASSUME(GetMoveType(MOVE_SOLAR_BEAM) == TYPE_GRASS); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -693,6 +764,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if player's m AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if player's mon is charging and it has a good switchin immunity (type)") { + PASSES_RANDOMLY(SHOULD_SWITCH_FREE_TURN_PERCENTAGE, 100, RNG_AI_SWITCH_FREE_TURN); GIVEN { ASSUME(GetMoveType(MOVE_DIG) == TYPE_GROUND); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -707,6 +779,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if player's m AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if player's mon is charging and it has a good switchin immunity (ability)") { + PASSES_RANDOMLY(SHOULD_SWITCH_FREE_TURN_PERCENTAGE, 100, RNG_AI_SWITCH_FREE_TURN); GIVEN { ASSUME(GetMoveType(MOVE_DIG) == TYPE_GROUND); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -768,7 +841,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if opponent u AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if badly statused with >= 50% HP remaining and has Natural Cure and a good switchin 66% of the time") { - PASSES_RANDOMLY(66, 100, RNG_AI_SWITCH_NATURAL_CURE); + PASSES_RANDOMLY(SHOULD_SWITCH_NATURAL_CURE_STRONG_PERCENTAGE, 100, RNG_AI_SWITCH_NATURAL_CURE); GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_ODDISH) { Moves(MOVE_TOXIC, MOVE_TACKLE); } @@ -782,7 +855,7 @@ AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if badly statused with >= 5 AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if it has <= 66% HP remaining and has Regenerator and a good switchin 50% of the time") { - PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_REGENERATOR); + PASSES_RANDOMLY(SHOULD_SWITCH_REGENERATOR_PERCENTAGE, 100, RNG_AI_SWITCH_REGENERATOR); GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } @@ -795,6 +868,7 @@ AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if it has <= 66% HP remaini AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Encore'd into a status move") { + PASSES_RANDOMLY(SHOULD_SWITCH_ENCORE_STATUS_PERCENTAGE, 100, RNG_AI_SWITCH_ENCORE); GIVEN { ASSUME(GetMoveEffect(MOVE_ENCORE) == EFFECT_ENCORE); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -824,7 +898,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will stay in if Encore'd into AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if Encore'd into neutral move with good switchin 50% of the time") { KNOWN_FAILING; // AI still switches even if ShouldSwitch is set to immediately return FALSE, something external seems to be triggering this - PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_ENCORE); + PASSES_RANDOMLY(SHOULD_SWITCH_ENCORE_DAMAGE_PERCENTAGE, 100, RNG_AI_SWITCH_ENCORE); GIVEN { ASSUME(GetMoveEffect(MOVE_ENCORE) == EFFECT_ENCORE); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -839,6 +913,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if Encore'd i AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if mon has Truant and opponent has Protect") { + PASSES_RANDOMLY(SHOULD_SWITCH_TRUANT_PERCENTAGE, 100, RNG_AI_SWITCH_TRUANT); GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); PLAYER(SPECIES_ARON) { Moves(MOVE_TACKLE, MOVE_PROTECT); } @@ -852,6 +927,7 @@ AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if mon has Truant and oppon AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if mon has Truant and opponent has invulnerability move and is faster") { + PASSES_RANDOMLY(SHOULD_SWITCH_TRUANT_PERCENTAGE, 100, RNG_AI_SWITCH_TRUANT); GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); PLAYER(SPECIES_SWELLOW) { Speed(5); Moves(MOVE_FLY); } @@ -867,7 +943,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if main attac { u32 aiSpecies = SPECIES_NONE, aiMove = MOVE_NONE, move = MOVE_NONE; - PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_STATS_LOWERED); + PASSES_RANDOMLY(SHOULD_SWITCH_ATTACKING_STAT_MINUS_TWO_PERCENTAGE, 100, RNG_AI_SWITCH_STATS_LOWERED); PARAMETRIZE {move = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; }; PARAMETRIZE {move = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_CONFUSION; }; @@ -888,7 +964,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if main attac { u32 aiSpecies = SPECIES_NONE, aiMove = MOVE_NONE, move = MOVE_NONE, move2 = MOVE_NONE; - PASSES_RANDOMLY(100, 100, RNG_AI_SWITCH_STATS_LOWERED); + PASSES_RANDOMLY(SHOULD_SWITCH_ATTACKING_STAT_MINUS_THREE_PLUS_PERCENTAGE, 100, RNG_AI_SWITCH_STATS_LOWERED); PARAMETRIZE {move = MOVE_GROWL; move2 = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; }; PARAMETRIZE {move = MOVE_CONFIDE; move2 = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_STORED_POWER; }; @@ -944,17 +1020,17 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI won't switch out if Yawn'd wi PARAMETRIZE{ aceFlag = 0; } PARAMETRIZE{ aceFlag = AI_FLAG_ACE_POKEMON; } GIVEN { - ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN); + ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | aceFlag | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_SMART_SWITCHING); - PLAYER(SPECIES_SLOWKING) { Moves(MOVE_YAWN, MOVE_CONFUSION, MOVE_POWER_GEM, MOVE_WATER_PULSE); Item(ITEM_LEFTOVERS); } - OPPONENT(SPECIES_SCOLIPEDE) { Moves(MOVE_POISON_TAIL); } - OPPONENT(SPECIES_ABSOL) { Moves(MOVE_KNOCK_OFF, MOVE_CRUNCH); } + PLAYER(SPECIES_SLAKOTH) { Moves(MOVE_TACKLE, MOVE_YAWN); } + OPPONENT(SPECIES_SLAKOTH) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_SLAKOTH) { Moves(MOVE_HEADBUTT); } } WHEN { - TURN { MOVE(player, MOVE_YAWN); EXPECT_MOVE(opponent, MOVE_POISON_TAIL); } + TURN { MOVE(player, MOVE_YAWN); EXPECT_MOVE(opponent, MOVE_TACKLE); } if (aceFlag) - TURN { MOVE(player, MOVE_POWER_GEM); EXPECT_MOVE(opponent, MOVE_POISON_TAIL); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_TACKLE); } else - TURN { MOVE(player, MOVE_POWER_GEM); EXPECT_SWITCH(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } } } @@ -995,3 +1071,17 @@ AI_SINGLE_BATTLE_TEST("Switch AI: AI won't switch in ace mon after U-Turn if oth TURN { EXPECT_MOVE(opponent, MOVE_U_TURN); EXPECT_SEND_OUT(opponent, 2); MOVE(player, MOVE_SURF); } } } + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI won't switch in absorbing mon immediately after sending out new mon") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_BLAZIKEN) { Moves(MOVE_FLAMETHROWER, MOVE_CLOSE_COMBAT); } + OPPONENT(SPECIES_FERROTHORN) { Moves(MOVE_GYRO_BALL); } + OPPONENT(SPECIES_DIALGA) { Moves(MOVE_DRACO_METEOR); } + OPPONENT(SPECIES_HEATRAN) { Moves(MOVE_EARTH_POWER, MOVE_FLAMETHROWER); } + } WHEN { + TURN { MOVE(player, MOVE_FLAMETHROWER); EXPECT_SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_CLOSE_COMBAT); EXPECT_MOVE(opponent, MOVE_DRACO_METEOR); } + } +} diff --git a/test/battle/crit_chance.c b/test/battle/crit_chance.c index 32c4c3380d..0bc8841845 100644 --- a/test/battle/crit_chance.c +++ b/test/battle/crit_chance.c @@ -1,200 +1,41 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Crit Chance: Side effected by Lucky Chant blocks critical hits") +SINGLE_BATTLE_TEST("Critical hits without modifiers occur at different rates by generation") { + u32 genConfig, passes, trials; + PARAMETRIZE { genConfig = GEN_1; passes = 1; trials = 16; } // 6.25% with Wobbuffet's base speed + PARAMETRIZE { genConfig = GEN_2; passes = 17; trials = 256; } // ~6.64% + for (u32 j = GEN_3; j <= GEN_6; j++) + PARAMETRIZE { genConfig = j; passes = 1, trials = 16; } // 6.25% + for (u32 j = GEN_7; j <= GEN_9; j++) + PARAMETRIZE { genConfig = j; passes = 1, trials = 24; } // ~4.17% + + PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - ASSUME(GetMoveEffect(MOVE_LUCKY_CHANT) == EFFECT_LUCKY_CHANT); + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].baseSpeed == 33); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_LUCKY_CHANT); MOVE(player, MOVE_TACKLE, criticalHit: TRUE); } + TURN { MOVE(player, MOVE_SCRATCH); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - NOT MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Crit Chance: Battle Armor and Shell Armor block critical hits") -{ - u32 species; - u32 ability; - - PARAMETRIZE { species = SPECIES_KINGLER; ability = ABILITY_SHELL_ARMOR; } - PARAMETRIZE { species = SPECIES_ARMALDO; ability = ABILITY_BATTLE_ARMOR; } - - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(species) { Ability(ability); } - } WHEN { - TURN { MOVE(player, MOVE_TACKLE, criticalHit: TRUE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - NOT MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Crit Chance: Flag ignoresTargetAbility ignores Battle Armor and Shell Armor") -{ - u32 species; - u32 ability; - - PARAMETRIZE { species = SPECIES_KINGLER; ability = ABILITY_SHELL_ARMOR; } - PARAMETRIZE { species = SPECIES_ARMALDO; ability = ABILITY_BATTLE_ARMOR; } - - GIVEN { - ASSUME(MoveIgnoresTargetAbility(MOVE_SUNSTEEL_STRIKE)); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(species) { Ability(ability); } - } WHEN { - TURN { MOVE(player, MOVE_SUNSTEEL_STRIKE, criticalHit: TRUE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNSTEEL_STRIKE, player); MESSAGE("A critical hit!"); } } -SINGLE_BATTLE_TEST("Crit Chance: Mold Breaker, Teravolt and Turboblaze ignore Battle Armor and Shell Armor") +SINGLE_BATTLE_TEST("Crit Chance: Raising critical hit rate to 3 guarantees a critical hit (Gen 6+)") { - u32 j; - static const u32 pokemonPlayer[][2] = - { - {SPECIES_PINSIR, ABILITY_MOLD_BREAKER}, - {SPECIES_ZEKROM, ABILITY_TERAVOLT}, - {SPECIES_KYUREM_WHITE, ABILITY_TURBOBLAZE}, - }; - - u32 speciesPlayer; - u32 abilityPlayer; - u32 speciesOpponent; - u32 abilityOpponent; - - for (j = 0; j < ARRAY_COUNT(pokemonPlayer); j++) - { - PARAMETRIZE { - speciesPlayer = pokemonPlayer[j][0]; - abilityPlayer = pokemonPlayer[j][1]; - speciesOpponent = SPECIES_KINGLER; - abilityOpponent = ABILITY_SHELL_ARMOR; - } - - PARAMETRIZE { - speciesPlayer = pokemonPlayer[j][0]; - abilityPlayer = pokemonPlayer[j][1]; - speciesOpponent = SPECIES_ARMALDO; - abilityOpponent = ABILITY_BATTLE_ARMOR; - } - } - + u32 genConfig = 0, passes, trials; + PARAMETRIZE { genConfig = GEN_1; passes = 255; trials = 256; } // ~99.6% + PARAMETRIZE { genConfig = GEN_2; passes = 85; trials = 256; } // ~33.2% + for (u32 j = GEN_3; j <= GEN_5; j++) + PARAMETRIZE { genConfig = j; passes = 1, trials = 3; } // ~33.3% + for (u32 j = GEN_6; j <= GEN_9; j++) + PARAMETRIZE { genConfig = j; passes = 1, trials = 1; } // 100% + PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - PLAYER(speciesPlayer) { Ability(abilityPlayer); } - OPPONENT(speciesOpponent) { Ability(abilityOpponent); } - } WHEN { - TURN { MOVE(player, MOVE_TACKLE, criticalHit: TRUE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Crit Chance: User effected by Laser Focus causes moves to result in a critical hit") -{ - GIVEN { - ASSUME(GetMoveEffect(MOVE_LASER_FOCUS) == EFFECT_LASER_FOCUS); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_LASER_FOCUS); } - TURN { MOVE(player, MOVE_TACKLE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_LASER_FOCUS, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Crit Chance: If the target is poisoned the ability Merciless causes a move to result in a critical hit") -{ - GIVEN { - PLAYER(SPECIES_MAREANIE) { Ability(ABILITY_MERCILESS); } - OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } - } WHEN { - TURN { MOVE(player, MOVE_TACKLE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Crit Chance: Focus Energy increases the user's critical hit ratio by two stage") -{ - PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(GetMoveEffect(MOVE_FOCUS_ENERGY) == EFFECT_FOCUS_ENERGY); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_FOCUS_ENERGY); } - TURN { MOVE(player, MOVE_TACKLE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Crit Chance: High crit rate increases the critical hit ratio by one stage") -{ - PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(GetMoveCriticalHitStage(MOVE_SLASH) == 1); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_SLASH); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_SLASH, player); - MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Crit Chance: Super Luck increases the critical hit ratio by one stage") -{ - PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); - PLAYER(SPECIES_TOGEPI) { Ability(ABILITY_SUPER_LUCK); }; - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_TACKLE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Crit Chance: Scope Lens increases the critical hit ratio by one stage") -{ - PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(gItemsInfo[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SCOPE_LENS); }; - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_TACKLE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Crit Chance: High crit rate, Super Luck and Scope Lens cause the move to result in a critical hit") -{ - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_SLASH) == 1); ASSUME(gItemsInfo[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS); PLAYER(SPECIES_TOGEKISS) { Ability(ABILITY_SUPER_LUCK); Item(ITEM_SCOPE_LENS); }; @@ -206,68 +47,3 @@ SINGLE_BATTLE_TEST("Crit Chance: High crit rate, Super Luck and Scope Lens cause MESSAGE("A critical hit!"); } } - -SINGLE_BATTLE_TEST("Crit Chance: Signature items Leek and Lucky Punch increase the critical hit ratio by 2 stages") -{ - u32 species; - u32 item; - - PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); - - PARAMETRIZE { species = SPECIES_FARFETCHD; item = ITEM_LEEK; } - PARAMETRIZE { species = SPECIES_FARFETCHD_GALAR; item = ITEM_LEEK; } - PARAMETRIZE { species = SPECIES_SIRFETCHD; item = ITEM_LEEK; } - PARAMETRIZE { species = SPECIES_CHANSEY; item = ITEM_LUCKY_PUNCH; } - - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(gItemsInfo[ITEM_LEEK].holdEffect == HOLD_EFFECT_LEEK); - ASSUME(gItemsInfo[ITEM_LUCKY_PUNCH].holdEffect == HOLD_EFFECT_LUCKY_PUNCH); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(species) { Item(item); } - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Crit Chance: Dire Hit increases a battler's critical hit chance by 2 stages") -{ - PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(gItemsInfo[ITEM_DIRE_HIT].battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { USE_ITEM(player, ITEM_DIRE_HIT, partyIndex: 0); } - TURN { MOVE(player, MOVE_SCRATCH); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); - MESSAGE("Wobbuffet used the Dire Hit to get pumped!"); - MESSAGE("Wobbuffet used Scratch!"); - MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Crit Chance: Focus Energy increases critical hit ratio by two") -{ - PASSES_RANDOMLY(8, 8, RNG_CRITICAL_HIT); - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(GetMoveCriticalHitStage(MOVE_SLASH) == 1); - ASSUME(GetMoveEffect(MOVE_FOCUS_ENERGY) == EFFECT_FOCUS_ENERGY); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_FOCUS_ENERGY); } - TURN { MOVE(player, MOVE_SLASH); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); - MESSAGE("Wobbuffet is getting pumped!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SLASH, player); - MESSAGE("A critical hit!"); - } -} diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 19cecdf8cb..809e0f65d3 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -683,7 +683,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed") { GIVEN { // Fails?: ASSUME(GetMaxMove(B_POSITION_PLAYER_LEFT, MOVE_TACKLE) == MOVE_MAX_STRIKE); - ASSUME(GetMoveMaxEffect(MOVE_MAX_STRIKE) == MAX_EFFECT_LOWER_SPEED); + ASSUME(MoveHasAdditionalEffect(MOVE_MAX_STRIKE, MOVE_EFFECT_LOWER_SPEED_SIDE)); OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } PLAYER(SPECIES_WOBBUFFET) { Speed(80); } } WHEN { @@ -707,7 +707,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed") DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_MAX_STRIKE) == MAX_EFFECT_LOWER_SPEED); + ASSUME(MoveHasAdditionalEffect(MOVE_MAX_STRIKE, MOVE_EFFECT_LOWER_SPEED_SIDE)); PLAYER(SPECIES_WOBBUFFET) { Speed(80); } PLAYER(SPECIES_WOBBUFFET) { Speed(79); } OPPONENT(SPECIES_WOBBUFFET) {Speed(100); } @@ -744,7 +744,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack") { s16 damage[4]; GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_MAX_KNUCKLE) == MAX_EFFECT_RAISE_TEAM_ATTACK); + ASSUME(MoveHasAdditionalEffect(MOVE_MAX_KNUCKLE, MOVE_EFFECT_RAISE_TEAM_ATTACK)); ASSUME(GetMoveCategory(MOVE_CLOSE_COMBAT) == DAMAGE_CATEGORY_PHYSICAL); ASSUME(GetMoveCategory(MOVE_TACKLE) == DAMAGE_CATEGORY_PHYSICAL); PLAYER(SPECIES_WOBBUFFET); @@ -786,7 +786,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack") SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_MAX_FLARE) == MAX_EFFECT_SUN); + ASSUME(MoveHasAdditionalEffect(MOVE_MAX_FLARE, MOVE_EFFECT_SUN)); OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { @@ -802,7 +802,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight") SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_MAX_GEYSER) == MAX_EFFECT_RAIN); + ASSUME(MoveHasAdditionalEffect(MOVE_MAX_GEYSER, MOVE_EFFECT_RAIN)); OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { @@ -818,7 +818,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain") SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_MAX_HAILSTORM) == MAX_EFFECT_HAIL); + ASSUME(MoveHasAdditionalEffect(MOVE_MAX_HAILSTORM, MOVE_EFFECT_HAIL)); OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { @@ -834,7 +834,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail") SINGLE_BATTLE_TEST("(DYNAMAX) Max Rockfall sets up a sandstorm") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_MAX_ROCKFALL) == MAX_EFFECT_SANDSTORM); + ASSUME(MoveHasAdditionalEffect(MOVE_MAX_ROCKFALL, MOVE_EFFECT_SANDSTORM)); OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { @@ -851,7 +851,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain") { s32 maxHP = 490; // Because of recalculated stats upon Dynamaxing GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_MAX_OVERGROWTH) == MAX_EFFECT_GRASSY_TERRAIN); + ASSUME(MoveHasAdditionalEffect(MOVE_MAX_OVERGROWTH, MOVE_EFFECT_GRASSY_TERRAIN)); ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].baseHP == 190); OPPONENT(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); }; PLAYER(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); }; @@ -871,7 +871,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain") SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_MAX_MINDSTORM) == MAX_EFFECT_PSYCHIC_TERRAIN); + ASSUME(MoveHasAdditionalEffect(MOVE_MAX_MINDSTORM, MOVE_EFFECT_PSYCHIC_TERRAIN)); OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { @@ -888,7 +888,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain") SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_MAX_LIGHTNING) == MAX_EFFECT_ELECTRIC_TERRAIN); + ASSUME(MoveHasAdditionalEffect(MOVE_MAX_LIGHTNING, MOVE_EFFECT_ELECTRIC_TERRAIN)); OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { @@ -903,7 +903,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain") SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_MAX_STARFALL) == MAX_EFFECT_MISTY_TERRAIN); + ASSUME(MoveHasAdditionalEffect(MOVE_MAX_STARFALL, MOVE_EFFECT_MISTY_TERRAIN)); OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { @@ -918,7 +918,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain") SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Stonesurge sets up Stealth Rocks") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_STONESURGE) == MAX_EFFECT_STEALTH_ROCK); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_STONESURGE, MOVE_EFFECT_STEALTH_ROCK)); PLAYER(SPECIES_DREDNAW) { GigantamaxFactor(TRUE); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -938,7 +938,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Stonesurge sets up Stealth Rocks") SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_STEELSURGE) == MAX_EFFECT_STEELSURGE); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_STEELSURGE, MOVE_EFFECT_STEELSURGE)); PLAYER(SPECIES_COPPERAJAH) { GigantamaxFactor(TRUE); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_HATTERENE); @@ -969,7 +969,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Hydrosnipe has fixed power and ignores abili PARAMETRIZE { move = MOVE_WATER_GUN; } PARAMETRIZE { move = MOVE_HYDRO_CANNON; } GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_HYDROSNIPE) == MAX_EFFECT_FIXED_POWER); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_HYDROSNIPE, MOVE_EFFECT_FIXED_POWER)); PLAYER(SPECIES_INTELEON) { GigantamaxFactor(TRUE); } OPPONENT(SPECIES_ARCTOVISH) { Ability(ABILITY_WATER_ABSORB); } } WHEN { @@ -985,7 +985,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Hydrosnipe has fixed power and ignores abili DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Volt Crash paralyzes both opponents") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_VOLT_CRASH) == MAX_EFFECT_PARALYZE_FOES); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_VOLT_CRASH, MOVE_EFFECT_PARALYZE_SIDE)); PLAYER(SPECIES_PIKACHU) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_PICHU); OPPONENT(SPECIES_WOBBUFFET); @@ -1012,7 +1012,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = STATUS1_PARALYSIS; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = STATUS1_POISON; } GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_STUN_SHOCK) == MAX_EFFECT_POISON_PARALYZE_FOES); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_STUN_SHOCK, MOVE_EFFECT_POISON_PARALYZE_SIDE)); PLAYER(SPECIES_TOXTRICITY) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_TOXEL); OPPONENT(SPECIES_WOBBUFFET); @@ -1049,7 +1049,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock chooses statuses before considering immunities") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_STUN_SHOCK) == MAX_EFFECT_POISON_PARALYZE_FOES); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_STUN_SHOCK, MOVE_EFFECT_POISON_PARALYZE_SIDE)); PLAYER(SPECIES_TOXTRICITY) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_TOXEL); OPPONENT(SPECIES_GARBODOR); @@ -1082,7 +1082,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = STATUS1_POISON; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = STATUS1_SLEEP; } GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_BEFUDDLE) == MAX_EFFECT_EFFECT_SPORE_FOES); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_BEFUDDLE, MOVE_EFFECT_EFFECT_SPORE_SIDE)); PLAYER(SPECIES_BUTTERFREE) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_CATERPIE); OPPONENT(SPECIES_WOBBUFFET); @@ -1126,7 +1126,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and generates money") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_GOLD_RUSH) == MAX_EFFECT_CONFUSE_FOES_PAY_DAY); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_GOLD_RUSH, MOVE_EFFECT_CONFUSE_PAY_DAY_SIDE)); PLAYER(SPECIES_MEOWTH) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_PERSIAN); OPPONENT(SPECIES_WOBBUFFET); @@ -1146,7 +1146,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and genera DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_SMITE) == MAX_EFFECT_CONFUSE_FOES); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_SMITE, MOVE_EFFECT_CONFUSE_SIDE)); PLAYER(SPECIES_HATTERENE) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_HATENNA); OPPONENT(SPECIES_WOBBUFFET); @@ -1165,7 +1165,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents") DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possible") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_CUDDLE) == MAX_EFFECT_INFATUATE_FOES); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_CUDDLE, MOVE_EFFECT_INFATUATE_SIDE)); PLAYER(SPECIES_EEVEE) { Gender(MON_MALE); GigantamaxFactor(TRUE); } PLAYER(SPECIES_EEVEE); OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); } @@ -1186,7 +1186,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possibl DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_TERROR) == MAX_EFFECT_MEAN_LOOK); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_TERROR, MOVE_EFFECT_PREVENT_ESCAPE_SIDE)); PLAYER(SPECIES_GENGAR) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_GASTLY); OPPONENT(SPECIES_WOBBUFFET); @@ -1202,12 +1202,27 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") } } -TO_DO_BATTLE_TEST("(DYNAMAX) Baton Pass passes G-Max Terror's escape prevention effect"); +SINGLE_BATTLE_TEST("(DYNAMAX) Baton Pass passes G-Max Terror's escape prevention effect") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_TERROR, MOVE_EFFECT_PREVENT_ESCAPE_SIDE)); + PLAYER(SPECIES_GENGAR) { GigantamaxFactor(TRUE); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_LICK, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_G_MAX_TERROR, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); + } THEN { + EXPECT(opponent->status2 & STATUS2_ESCAPE_PREVENTION); + } +} DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_MELTDOWN) == MAX_EFFECT_TORMENT_FOES); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_MELTDOWN, MOVE_EFFECT_TORMENT_SIDE)); PLAYER(SPECIES_MELMETAL) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_MELTAN); OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, MOVE_CELEBRATE); } @@ -1244,7 +1259,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Wildfire sets a field effect that damages no { s16 damage; GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_WILDFIRE) == MAX_EFFECT_WILDFIRE); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_WILDFIRE, MOVE_EFFECT_WILDFIRE)); PLAYER(SPECIES_CHARIZARD) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_CHARMANDER); OPPONENT(SPECIES_WOBBUFFET) { HP(600); MaxHP(600); } @@ -1290,7 +1305,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Replenish recycles allies' berries 50\% of t { PASSES_RANDOMLY(1, 2, RNG_G_MAX_REPLENISH); GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_REPLENISH) == MAX_EFFECT_RECYCLE_BERRIES); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_REPLENISH, MOVE_EFFECT_RECYCLE_BERRIES)); PLAYER(SPECIES_SNORLAX) { Item(ITEM_APICOT_BERRY); GigantamaxFactor(TRUE); } PLAYER(SPECIES_MUNCHLAX) { Item(ITEM_APICOT_BERRY); Ability(ABILITY_THICK_FAT); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_APICOT_BERRY); } @@ -1318,7 +1333,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy") { PASSES_RANDOMLY(1, 2, RNG_G_MAX_SNOOZE); GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_SNOOZE) == MAX_EFFECT_YAWN_FOE); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_SNOOZE, MOVE_EFFECT_YAWN_FOE)); ASSUME(GetMoveCategory(MOVE_DARK_PULSE) == DAMAGE_CATEGORY_SPECIAL); // Otherwise, Blissey faints. PLAYER(SPECIES_GRIMMSNARL) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_IMPIDIMP); @@ -1342,7 +1357,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Finale heals allies by 1/6 of their health") { s16 damage1, damage2; GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_FINALE) == MAX_EFFECT_HEAL_TEAM); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_FINALE, MOVE_EFFECT_HEAL_TEAM)); PLAYER(SPECIES_ALCREMIE) { HP(1); GigantamaxFactor(TRUE); } PLAYER(SPECIES_MILCERY) { HP(1); } OPPONENT(SPECIES_WOBBUFFET); @@ -1361,10 +1376,15 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Finale heals allies by 1/6 of their health") DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Sweetness cures allies' status conditions") { + u32 j; GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_SWEETNESS) == MAX_EFFECT_AROMATHERAPY); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_SWEETNESS, MOVE_EFFECT_AROMATHERAPY)); PLAYER(SPECIES_APPLETUN) { Status1(STATUS1_POISON); GigantamaxFactor(TRUE); } PLAYER(SPECIES_APPLIN) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_APPLIN) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_APPLIN) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_APPLIN) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_APPLIN) { Status1(STATUS1_POISON); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -1372,9 +1392,10 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Sweetness cures allies' status conditions") } SCENE { MESSAGE("Appletun used G-Max Sweetness!"); STATUS_ICON(playerLeft, none: TRUE); - MESSAGE("Appletun's status returned to normal!"); STATUS_ICON(playerRight, none: TRUE); - MESSAGE("Applin's status returned to normal!"); + } THEN { + for (j = 0; j < PARTY_SIZE; j++) + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_STATUS), STATUS1_NONE); } } @@ -1382,7 +1403,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Sweetness cures allies' status conditions") DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Centiferno traps both opponents in Fire Spin") { GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_CENTIFERNO) == MAX_EFFECT_FIRE_SPIN_FOES); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_CENTIFERNO, MOVE_EFFECT_FIRE_SPIN_SIDE)); PLAYER(SPECIES_CENTISKORCH) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_SIZZLIPEDE); PLAYER(SPECIES_SIZZLIPEDE); @@ -1406,12 +1427,12 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Centiferno traps both opponents in Fire Spin } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Chi Strike boosts allies' crit chance") +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Chi Strike boosts allies' crit chance by 1 stage") { u32 j; GIVEN { ASSUME(B_CRIT_CHANCE >= GEN_6); - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_CHI_STRIKE) == MAX_EFFECT_CRIT_PLUS); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_CHI_STRIKE, MOVE_EFFECT_CRIT_PLUS_SIDE)); PLAYER(SPECIES_MACHAMP) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_MACHOP); OPPONENT(SPECIES_WOBBUFFET); @@ -1443,11 +1464,12 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's { GIVEN { ASSUME(GetMoveCategory(MOVE_DRAGON_CLAW) == DAMAGE_CATEGORY_PHYSICAL); // Otherwise Sableye faints. - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_DEPLETION) == MAX_EFFECT_SPITE); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_DEPLETION, MOVE_EFFECT_SPITE)); + ASSUME(GetMovePP(MOVE_CELEBRATE) >= 3); PLAYER(SPECIES_DURALUDON) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_WYNAUT); // Dynamax behaves weird with test turn order because stats are recalculated. - OPPONENT(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } + OPPONENT(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); Moves(MOVE_CELEBRATE); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(playerLeft, MOVE_DRAGON_CLAW, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } @@ -1455,6 +1477,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's MESSAGE("The opposing Sableye used Celebrate!"); MESSAGE("Duraludon used G-Max Depletion!"); MESSAGE("The opposing Sableye's PP was reduced!"); + } THEN { + EXPECT_EQ(opponentLeft->pp[0], GetMovePP(MOVE_CELEBRATE) - 3); // 1 from regular use + 2 from G-Max Depletion } } @@ -1465,7 +1489,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max One Blow bypasses Max Guard for full damage" PARAMETRIZE { protect = TRUE; } PARAMETRIZE { protect = FALSE; } GIVEN { - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_ONE_BLOW) == MAX_EFFECT_BYPASS_PROTECT); + ASSUME(MoveIgnoresProtect(MOVE_G_MAX_RAPID_FLOW)); PLAYER(SPECIES_URSHIFU) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_KUBFU); OPPONENT(SPECIES_WOBBUFFET); @@ -1584,4 +1608,4 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass absorbing abilities") } ABILITY_POPUP(opponent, ability); } -} \ No newline at end of file +} diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index c9e51faa8b..7ea75c3e4a 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -192,7 +192,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor does not apply to dyna PARAMETRIZE { tera = GIMMICK_NONE; } PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { - ASSUME(gMovesInfo[MOVE_WATER_SPOUT].effect == EFFECT_POWER_BASED_ON_USER_HP); + ASSUME(GetMoveEffect(MOVE_WATER_SPOUT) == EFFECT_POWER_BASED_ON_USER_HP); PLAYER(SPECIES_WOBBUFFET) { HP(1); TeraType(TYPE_WATER); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/gimmick/zmove.c b/test/battle/gimmick/zmove.c index 358e38d031..4ab84eb389 100644 --- a/test/battle/gimmick/zmove.c +++ b/test/battle/gimmick/zmove.c @@ -518,10 +518,17 @@ SINGLE_BATTLE_TEST("(Z-MOVE) Light That Burns the Sky uses the battler's highest SINGLE_BATTLE_TEST("(Z-MOVE) 10,000,000 Volt Thunderbolt has an increased critical hit ratio") { - PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); + u32 genConfig, chance; + PARAMETRIZE { genConfig = GEN_1; chance = 1; } + for (u32 j = GEN_2; j <= GEN_5; j++) + PARAMETRIZE { genConfig = j; chance = 4; } + for (u32 j = GEN_6; j <= GEN_9; j++) + PARAMETRIZE { genConfig = j; chance = 2; } + PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_6); + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_10_000_000_VOLT_THUNDERBOLT) == 2); + ASSUME(gSpeciesInfo[SPECIES_PIKACHU_PARTNER].baseSpeed == 90); PLAYER(SPECIES_PIKACHU_PARTNER) { Item(ITEM_PIKASHUNIUM_Z); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/hold_effect/covert_cloak.c b/test/battle/hold_effect/covert_cloak.c index 0920fc0ab9..583a250bcd 100644 --- a/test/battle/hold_effect/covert_cloak.c +++ b/test/battle/hold_effect/covert_cloak.c @@ -97,7 +97,7 @@ SINGLE_BATTLE_TEST("Covert Cloak does not block self-targeting effects, primary PARAMETRIZE { move = MOVE_METEOR_ASSAULT; } GIVEN { - ASSUME(gMovesInfo[MOVE_RAPID_SPIN].effect == EFFECT_RAPID_SPIN); + ASSUME(GetMoveEffect(MOVE_RAPID_SPIN) == EFFECT_RAPID_SPIN); ASSUME(MoveHasAdditionalEffectSelf(MOVE_POWER_UP_PUNCH, MOVE_EFFECT_ATK_PLUS_1) == TRUE); ASSUME(MoveHasAdditionalEffectSelf(MOVE_LEAF_STORM, MOVE_EFFECT_SP_ATK_MINUS_2) == TRUE); ASSUME(MoveHasAdditionalEffectSelf(MOVE_METEOR_ASSAULT, MOVE_EFFECT_RECHARGE) == TRUE); diff --git a/test/battle/hold_effect/critical_hit_up.c b/test/battle/hold_effect/critical_hit_up.c index ee4cb6a7d2..3ea7ef52e7 100644 --- a/test/battle/hold_effect/critical_hit_up.c +++ b/test/battle/hold_effect/critical_hit_up.c @@ -48,12 +48,17 @@ SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two s } } -SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two stages") +SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by 2 stages") { - PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); + u32 genConfig = 0, chance; + for (u32 j = GEN_1; j <= GEN_5; j++) + PARAMETRIZE { genConfig = j; chance = 4; } // 25% + for (u32 j = GEN_6; j <= GEN_9; j++) + PARAMETRIZE { genConfig = j; chance = 2; } // 50% + PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); GIVEN { + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_TACKLE) == 0); - ASSUME(B_CRIT_CHANCE >= GEN_6); PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_LANSAT_BERRY); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/hold_effect/leek.c b/test/battle/hold_effect/leek.c new file mode 100644 index 0000000000..57cc9f1697 --- /dev/null +++ b/test/battle/hold_effect/leek.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Leek increases critical hit ratio by 2 stages for the Farfetch'd Family") +{ + u32 species, genConfig, passes, trials; + + PARAMETRIZE { genConfig = GEN_1; passes = 15; trials = 16; species = SPECIES_FARFETCHD; } // ~93.8% with Farfetch'd's base speed + PARAMETRIZE { genConfig = GEN_1; passes = 27; trials = 32; species = SPECIES_FARFETCHD_GALAR; } // ~84.4% with Galarian Farfetch'd's base speed + PARAMETRIZE { genConfig = GEN_1; passes = 1; trials = 1; species = SPECIES_SIRFETCHD; } // 100% with Sirfetch'd's base speed + for (u32 j = GEN_2; j <= GEN_5; j++) { + PARAMETRIZE { genConfig = j; passes = 1; trials = 4; species = SPECIES_FARFETCHD; } // 25% + PARAMETRIZE { genConfig = j; passes = 1; trials = 4; species = SPECIES_FARFETCHD_GALAR; } // 25% + PARAMETRIZE { genConfig = j; passes = 1; trials = 4; species = SPECIES_SIRFETCHD; } // 25% + } + for (u32 j = GEN_6; j <= GEN_9; j++) { + PARAMETRIZE { genConfig = j; passes = 1; trials = 2; species = SPECIES_FARFETCHD; } // 50% + PARAMETRIZE { genConfig = j; passes = 1; trials = 2; species = SPECIES_FARFETCHD_GALAR; } // 50% + PARAMETRIZE { genConfig = j; passes = 1; trials = 2; species = SPECIES_SIRFETCHD; } // 50% + } + PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); + GIVEN { + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); + ASSUME(gSpeciesInfo[SPECIES_FARFETCHD].baseSpeed == 60); + ASSUME(gSpeciesInfo[SPECIES_FARFETCHD_GALAR].baseSpeed == 55); + ASSUME(gSpeciesInfo[SPECIES_SIRFETCHD].baseSpeed == 65); + ASSUME(gItemsInfo[ITEM_LEEK].holdEffect == HOLD_EFFECT_LEEK); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Item(ITEM_LEEK); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/hold_effect/luck_punch.c b/test/battle/hold_effect/luck_punch.c new file mode 100644 index 0000000000..056723eb36 --- /dev/null +++ b/test/battle/hold_effect/luck_punch.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Lucky Punch increases critical hit ratio by 2 stages for Chansey") +{ + u32 genConfig, passes, trials; + PARAMETRIZE { genConfig = GEN_1; passes = 25; trials = 32; } // ~78.1% with Chansey's base speed + for (u32 j = GEN_2; j <= GEN_5; j++) + PARAMETRIZE { genConfig = j; passes = 1; trials = 4; } // 25% + for (u32 j = GEN_6; j <= GEN_9; j++) + PARAMETRIZE { genConfig = j; passes = 1; trials = 2; } // 50% + PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); + GIVEN { + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); + ASSUME(gItemsInfo[ITEM_LUCKY_PUNCH].holdEffect == HOLD_EFFECT_LUCKY_PUNCH); + ASSUME(gSpeciesInfo[SPECIES_CHANSEY].baseSpeed == 50); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CHANSEY) { Item(ITEM_LUCKY_PUNCH); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index 7b14d8748d..88b208cf50 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -273,12 +273,13 @@ DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker is rooted") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); MESSAGE("The opposing Wobbuffet anchored itself with its roots!"); + NOT MESSAGE("The opposing Unown was dragged out!"); // Red Card already consumed so cannot activate. ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); NONE_OF { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); - MESSAGE("Wynaut held up its Red Card against the opposing Wynaut!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wynaut!"); } } } @@ -301,12 +302,41 @@ DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker has Suction Cup ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); MESSAGE("Wobbuffet held up its Red Card against the opposing Octillery!"); MESSAGE("The opposing Octillery anchors itself with Suction Cups!"); + NOT MESSAGE("The opposing Unown was dragged out!"); // Red Card already consumed so cannot activate. ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); NONE_OF { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); - MESSAGE("Wynaut held up its Red Card against the opposing Wynaut!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wynaut!"); + } + } +} + +DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker has Guard Dog") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_OKIDOGI) { Ability(ABILITY_GUARD_DOG); } + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_UNOWN); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); + MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against the opposing Okidogi!"); + NOT MESSAGE("The opposing Unown was dragged out!"); + + // Red Card already consumed so cannot activate. + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wynaut!"); } } } diff --git a/test/battle/hold_effect/scope_lens.c b/test/battle/hold_effect/scope_lens.c new file mode 100644 index 0000000000..6914025ce7 --- /dev/null +++ b/test/battle/hold_effect/scope_lens.c @@ -0,0 +1,23 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Scope Lens increases the critical hit ratio by 1 stage") +{ + u32 genConfig = 0, passes, trials; + PARAMETRIZE { genConfig = GEN_1; passes = 1; trials = 4; } // 25% with Wobbuffet's base speed + for (u32 j = GEN_2; j <= GEN_9; j++) + PARAMETRIZE { genConfig = j; passes = 1; trials = 8; } // 12.5% + PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); + GIVEN { + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); + ASSUME(gItemsInfo[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].baseSpeed == 33); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SCOPE_LENS); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/hold_effect/seeds.c b/test/battle/hold_effect/seeds.c index 10a415bd63..11aa9037db 100644 --- a/test/battle/hold_effect/seeds.c +++ b/test/battle/hold_effect/seeds.c @@ -1,62 +1,139 @@ #include "global.h" #include "test/battle.h" +ASSUMPTIONS +{ + ASSUME(gItemsInfo[ITEM_ELECTRIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItemsInfo[ITEM_ELECTRIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN); + ASSUME(gItemsInfo[ITEM_GRASSY_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItemsInfo[ITEM_GRASSY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_GRASSY_TERRAIN); + ASSUME(gItemsInfo[ITEM_MISTY_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItemsInfo[ITEM_MISTY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_MISTY_TERRAIN); + ASSUME(gItemsInfo[ITEM_PSYCHIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItemsInfo[ITEM_PSYCHIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN); + +} + SINGLE_BATTLE_TEST("Electric Seed raises the holder's Defense on Electric Terrain") { + u32 ability, item; + PARAMETRIZE { ability = ABILITY_TELEPATHY; item = ITEM_NONE; } + PARAMETRIZE { ability = ABILITY_TELEPATHY; item = ITEM_ELECTRIC_SEED; } + PARAMETRIZE { ability = ABILITY_ELECTRIC_SURGE; item = ITEM_NONE; } + PARAMETRIZE { ability = ABILITY_ELECTRIC_SURGE; item = ITEM_ELECTRIC_SEED; } GIVEN { - ASSUME(gItemsInfo[ITEM_ELECTRIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); - ASSUME(gItemsInfo[ITEM_ELECTRIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ELECTRIC_SEED); } - OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ELECTRIC_SEED); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ability); Item(item); } } WHEN { - TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); } + if (ability == ABILITY_TELEPATHY) + TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); } + TURN { SWITCH(player, 1); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Electric Seed, the Defense of Wobbuffet rose!"); + if (item == ITEM_ELECTRIC_SEED) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Using Electric Seed, the Defense of the opposing Tapu Koko rose!"); + } + SWITCH_OUT_MESSAGE("Wobbuffet"); + SEND_IN_MESSAGE("Wobbuffet"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Electric Seed, the Defense of Wobbuffet rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); } } SINGLE_BATTLE_TEST("Grassy Seed raises the holder's Defense on Grassy Terrain") { + u32 ability, item; + PARAMETRIZE { ability = ABILITY_TELEPATHY; item = ITEM_NONE; } + PARAMETRIZE { ability = ABILITY_TELEPATHY; item = ITEM_GRASSY_SEED; } + PARAMETRIZE { ability = ABILITY_GRASSY_SURGE; item = ITEM_NONE; } + PARAMETRIZE { ability = ABILITY_GRASSY_SURGE; item = ITEM_GRASSY_SEED; } GIVEN { - ASSUME(gItemsInfo[ITEM_GRASSY_SEED].holdEffect == HOLD_EFFECT_SEEDS); - ASSUME(gItemsInfo[ITEM_GRASSY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_GRASSY_TERRAIN); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GRASSY_SEED); } - OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GRASSY_SEED); } + OPPONENT(SPECIES_TAPU_BULU) { Ability(ability); Item(item); } } WHEN { - TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + if (ability == ABILITY_TELEPATHY) + TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + TURN { SWITCH(player, 1); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Grassy Seed, the Defense of Wobbuffet rose!"); + if (item == ITEM_GRASSY_SEED) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Using Grassy Seed, the Defense of the opposing Tapu Bulu rose!"); + } + SWITCH_OUT_MESSAGE("Wobbuffet"); + SEND_IN_MESSAGE("Wobbuffet"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Grassy Seed, the Defense of Wobbuffet rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); } } SINGLE_BATTLE_TEST("Misty Seed raises the holder's Sp. Defense on Misty Terrain") { + u32 ability, item; + PARAMETRIZE { ability = ABILITY_TELEPATHY; item = ITEM_NONE; } + PARAMETRIZE { ability = ABILITY_TELEPATHY; item = ITEM_MISTY_SEED; } + PARAMETRIZE { ability = ABILITY_MISTY_SURGE; item = ITEM_NONE; } + PARAMETRIZE { ability = ABILITY_MISTY_SURGE; item = ITEM_MISTY_SEED; } GIVEN { - ASSUME(gItemsInfo[ITEM_MISTY_SEED].holdEffect == HOLD_EFFECT_SEEDS); - ASSUME(gItemsInfo[ITEM_MISTY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_MISTY_TERRAIN); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MISTY_SEED); } - OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MISTY_SEED); } + OPPONENT(SPECIES_TAPU_FINI) { Ability(ability); Item(item); } } WHEN { - TURN { MOVE(player, MOVE_MISTY_TERRAIN); } + if (ability == ABILITY_TELEPATHY) + TURN { MOVE(player, MOVE_MISTY_TERRAIN); } + TURN { SWITCH(player, 1); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Misty Seed, the Sp. Def of Wobbuffet rose!"); + if (item == ITEM_MISTY_SEED) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Using Misty Seed, the Sp. Def of the opposing Tapu Fini rose!"); + } + SWITCH_OUT_MESSAGE("Wobbuffet"); + SEND_IN_MESSAGE("Wobbuffet"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Misty Seed, the Sp. Def of Wobbuffet rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1); } } SINGLE_BATTLE_TEST("Psychic Seed raises the holder's Sp. Defense on Psychic Terrain") { + u32 ability, item; + PARAMETRIZE { ability = ABILITY_TELEPATHY; item = ITEM_NONE; } + PARAMETRIZE { ability = ABILITY_TELEPATHY; item = ITEM_PSYCHIC_SEED; } + PARAMETRIZE { ability = ABILITY_PSYCHIC_SURGE; item = ITEM_NONE; } + PARAMETRIZE { ability = ABILITY_PSYCHIC_SURGE; item = ITEM_PSYCHIC_SEED; } GIVEN { - ASSUME(gItemsInfo[ITEM_PSYCHIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); - ASSUME(gItemsInfo[ITEM_PSYCHIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_PSYCHIC_SEED); } - OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_PSYCHIC_SEED); } + OPPONENT(SPECIES_TAPU_LELE) { Ability(ability); Item(item); } } WHEN { - TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + if (ability == ABILITY_TELEPATHY) + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { SWITCH(player, 1); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Psychic Seed, the Sp. Def of Wobbuffet rose!"); + if (item == ITEM_PSYCHIC_SEED) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Using Psychic Seed, the Sp. Def of the opposing Tapu Lele rose!"); + } + SWITCH_OUT_MESSAGE("Wobbuffet"); + SEND_IN_MESSAGE("Wobbuffet"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Psychic Seed, the Sp. Def of Wobbuffet rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1); } } diff --git a/test/battle/hold_effect/shell_bell.c b/test/battle/hold_effect/shell_bell.c index 32a105e46f..f669c55081 100644 --- a/test/battle/hold_effect/shell_bell.c +++ b/test/battle/hold_effect/shell_bell.c @@ -133,7 +133,7 @@ SINGLE_BATTLE_TEST("Shell Bell restores 1/8 HP of damage dealt") SINGLE_BATTLE_TEST("Shell Bell doesn't restore HP for damage dealt by a foreseen move") { GIVEN { - ASSUME(gMovesInfo[MOVE_FUTURE_SIGHT].effect == EFFECT_FUTURE_SIGHT); + ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT); PLAYER(SPECIES_WOBBUFFET) { Level(16); Item(ITEM_SHELL_BELL); HP(10); } OPPONENT(SPECIES_WOBBUFFET) { Level(16); }; } WHEN { @@ -198,5 +198,96 @@ SINGLE_BATTLE_TEST("Shell Bell does not activate on Future Sight if the original } } +DOUBLE_BATTLE_TEST("Shell Bell heals accumulated damage for spread moves") +{ + s16 opponentLeftDamage; + s16 opponentRightDamage; + s16 playerRightDamage; + s16 shellBellHeal; + + const u16 maxHp = 200; + const u16 initHp = 1; + GIVEN { + ASSUME(gMovesInfo[MOVE_DISCHARGE].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(SPECIES_ARIADOS) { MaxHP(maxHp); HP(initHp); Item(ITEM_SHELL_BELL); } + PLAYER(SPECIES_WOBBUFFET) {} + OPPONENT(SPECIES_GYARADOS) {} + OPPONENT(SPECIES_CHANSEY) {} + } WHEN { + TURN { + MOVE(playerLeft, MOVE_DISCHARGE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DISCHARGE, playerLeft); + HP_BAR(opponentLeft, captureDamage: &opponentLeftDamage); + HP_BAR(playerRight, captureDamage: &playerRightDamage); + HP_BAR(opponentRight, captureDamage: &opponentRightDamage); + + HP_BAR(playerLeft, captureDamage: &shellBellHeal); + } THEN { + const s16 totalDamage = opponentLeftDamage + + playerRightDamage + opponentRightDamage; + EXPECT_EQ(shellBellHeal, -totalDamage / 8); + EXPECT_EQ(playerLeft->hp, initHp + (totalDamage / 8)); + } +} + +SINGLE_BATTLE_TEST("Shell Bell restores 1/8 HP at move end, one strike") +{ + const u16 maxHp = 200; + u16 hp, opponentHp; + u16 hpGainFromDamage, hpGainActual; + + PARAMETRIZE { hp = maxHp; opponentHp = maxHp; } + PARAMETRIZE { hp = maxHp - 1; opponentHp = maxHp; } + PARAMETRIZE { hp = maxHp / 2; opponentHp = maxHp; } + PARAMETRIZE { hp = maxHp; opponentHp = 24; } // dragon rage only does 24 dmg, only heal 3 HP instead of 5 + PARAMETRIZE { hp = maxHp - 1; opponentHp = 24; } // dragon rage only does 24 dmg, only heal 3 HP instead of 5 + PARAMETRIZE { hp = maxHp / 2; opponentHp = 24; } // dragon rage only does 24 dmg, only heal 3 HP instead of 5 + PARAMETRIZE { hp = maxHp; opponentHp = 1; } + PARAMETRIZE { hp = maxHp - 1; opponentHp = 1; } + PARAMETRIZE { hp = maxHp / 2; opponentHp = 1; } + + hpGainFromDamage = max(1, min(40, opponentHp) / 8); + hpGainActual = min(maxHp - hp, hpGainFromDamage); + + GIVEN { + ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG); + ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40); + PLAYER(SPECIES_WOBBUFFET) { MaxHP(maxHp); HP(hp); Item(ITEM_SHELL_BELL); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(maxHp); HP(opponentHp); } + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, player); + HP_BAR(opponent); + if (hp < maxHp) { + HP_BAR(player, damage: -hpGainActual); + } else { + NOT HP_BAR(player); + } + } THEN { + EXPECT_EQ(player->hp, hp + hpGainActual); + } +} + +SINGLE_BATTLE_TEST("Shell Bell recovers only 1 damage if the move only did 1 damage") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); Item(ITEM_SHELL_BELL); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + HP_BAR(player); + + } THEN { + EXPECT_EQ(player->hp, 2); + } +} + TO_DO_BATTLE_TEST("If a Pokémon steals a Shell Bell with Thief or Covet, it will recover HP for the use of that move that stole the Shell Bell") TO_DO_BATTLE_TEST("If a Pokémon steals a Shell Bell with Magician, it will recover HP for the use of that move that stole the Shell Bell") diff --git a/test/battle/item_effect/dire_hit.c b/test/battle/item_effect/dire_hit.c new file mode 100644 index 0000000000..10b9a28a60 --- /dev/null +++ b/test/battle/item_effect/dire_hit.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stages") +{ + u32 genConfig = 0, chance; + for (u32 j = GEN_1; j <= GEN_5; j++) + PARAMETRIZE { genConfig = j; chance = 4; } // 25% + for (u32 j = GEN_6; j <= GEN_9; j++) + PARAMETRIZE { genConfig = j; chance = 2; } // 50% + PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); + GIVEN { + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); + ASSUME(gItemsInfo[ITEM_DIRE_HIT].battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_DIRE_HIT, partyIndex: 0); } + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); + MESSAGE("Wobbuffet used the Dire Hit to get pumped!"); + MESSAGE("Wobbuffet used Scratch!"); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/move.c b/test/battle/move.c index ff397575b5..6286b48c42 100644 --- a/test/battle/move.c +++ b/test/battle/move.c @@ -134,42 +134,15 @@ DOUBLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie } } -SINGLE_BATTLE_TEST("Critical hits occur at a 1/24 rate") -{ - PASSES_RANDOMLY(1, 24, RNG_CRITICAL_HIT); - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_SCRATCH); } - } SCENE { - MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Slash's critical hits occur at a 1/8 rate") -{ - PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(GetMoveCriticalHitStage(MOVE_SLASH) == 1); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_SLASH); } - } SCENE { - MESSAGE("A critical hit!"); - } -} - -SINGLE_BATTLE_TEST("Critical hits deal 50% more damage", s16 damage) +SINGLE_BATTLE_TEST("Critical hits deal 100% (Gen 1-5) or 50% (Gen 6+) more damage", s16 damage) { bool32 criticalHit; - PARAMETRIZE { criticalHit = FALSE; } - PARAMETRIZE { criticalHit = TRUE; } + u32 genConfig; + PARAMETRIZE { criticalHit = FALSE; genConfig = GEN_5; } + PARAMETRIZE { criticalHit = TRUE; genConfig = GEN_5; } + PARAMETRIZE { criticalHit = TRUE; genConfig = GEN_6; } GIVEN { - ASSUME(B_CRIT_MULTIPLIER >= GEN_6); + WITH_CONFIG(GEN_CONFIG_CRIT_MULTIPLIER, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -177,7 +150,8 @@ SINGLE_BATTLE_TEST("Critical hits deal 50% more damage", s16 damage) } SCENE { HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { - EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[2].damage); } } diff --git a/test/battle/move_effect/charge.c b/test/battle/move_effect/charge.c index bd84a9b4e2..8d4bbd9bcc 100644 --- a/test/battle/move_effect/charge.c +++ b/test/battle/move_effect/charge.c @@ -9,9 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Charge doubles the damage of the next Electric move of the user") { - s16 normalDamage = 0; - s16 chargedUpDamage = 0; - + s16 damage[2] = {0}; GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -21,20 +19,18 @@ SINGLE_BATTLE_TEST("Charge doubles the damage of the next Electric move of the u TURN { MOVE(player, MOVE_THUNDERBOLT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); - HP_BAR(opponent, captureDamage: &normalDamage); + HP_BAR(opponent, captureDamage: &damage[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARGE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); - HP_BAR(opponent, captureDamage: &chargedUpDamage); + HP_BAR(opponent, captureDamage: &damage[1]); } THEN { - EXPECT_MUL_EQ(normalDamage, Q_4_12(2.0), chargedUpDamage); + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); } } SINGLE_BATTLE_TEST("Charge's effect is kept until the user uses an Electric move (Gen 9+)") { - s16 normalDamage = 0; - s16 chargedUpDamage = 0; - + s16 damage[2] = {0}; GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -45,20 +41,19 @@ SINGLE_BATTLE_TEST("Charge's effect is kept until the user uses an Electric move TURN { MOVE(player, MOVE_THUNDERBOLT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); - HP_BAR(opponent, captureDamage: &normalDamage); + HP_BAR(opponent, captureDamage: &damage[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARGE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); - HP_BAR(opponent, captureDamage: &chargedUpDamage); + HP_BAR(opponent, captureDamage: &damage[1]); } THEN { - EXPECT_MUL_EQ(normalDamage, Q_4_12(2.0), chargedUpDamage); + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); } } SINGLE_BATTLE_TEST("Charge's effect is removed if the user fails using an Electric move (Gen 9+)") { s16 damage[2]; - GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -81,8 +76,7 @@ SINGLE_BATTLE_TEST("Charge's effect is removed if the user fails using an Electr SINGLE_BATTLE_TEST("Charge's effect does not stack with Electromorphosis or Wind Power") { u32 species, ability; - s16 normalDamage = 0; - s16 chargedUpDamage = 0; + s16 damage[2]; PARAMETRIZE { species = SPECIES_WATTREL; ability = ABILITY_WIND_POWER; } PARAMETRIZE { species = SPECIES_TADBULB; ability = ABILITY_ELECTROMORPHOSIS; } @@ -97,22 +91,20 @@ SINGLE_BATTLE_TEST("Charge's effect does not stack with Electromorphosis or Wind TURN { MOVE(player, MOVE_THUNDERBOLT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); - HP_BAR(opponent, captureDamage: &normalDamage); + HP_BAR(opponent, captureDamage: &damage[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARGE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_AIR_CUTTER, opponent); ABILITY_POPUP(player, ability); ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); - HP_BAR(opponent, captureDamage: &chargedUpDamage); + HP_BAR(opponent, captureDamage: &damage[1]); } THEN { - EXPECT_MUL_EQ(normalDamage, Q_4_12(2.0), chargedUpDamage); + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); } } SINGLE_BATTLE_TEST("Charge's effect is removed regardless if the next move is Electric or not (Gen 3-8)") { - s16 normalDamage = 0; - s16 chargedUpDamage = 0; - + s16 damage[2]; GIVEN { ASSUME(GetMoveType(MOVE_TACKLE) != TYPE_ELECTRIC); ASSUME(!IsBattleMoveStatus(MOVE_TACKLE)); @@ -125,26 +117,25 @@ SINGLE_BATTLE_TEST("Charge's effect is removed regardless if the next move is El TURN { MOVE(player, MOVE_THUNDERBOLT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); - HP_BAR(opponent, captureDamage: &normalDamage); + HP_BAR(opponent, captureDamage: &damage[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARGE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); - HP_BAR(opponent, captureDamage: &chargedUpDamage); + HP_BAR(opponent, captureDamage: &damage[1]); } THEN { if (B_CHARGE < GEN_9) - EXPECT_EQ(normalDamage, chargedUpDamage); + EXPECT_EQ(damage[0], damage[1]); else - EXPECT_MUL_EQ(normalDamage, Q_4_12(2.0), chargedUpDamage); + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); } } SINGLE_BATTLE_TEST("Charge will not expire if it flinches twice in a row") { - s16 normalDamage = 0; - s16 chargedUpDamage = 0; - + s16 damage[2]; GIVEN { - PLAYER(SPECIES_WOBBUFFET); + ASSUME(GetMoveAdditionalEffectById(MOVE_IRON_HEAD, 0)->moveEffect == MOVE_EFFECT_FLINCH); + PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); } } WHEN { TURN { MOVE(player, MOVE_THUNDERBOLT); } @@ -154,14 +145,14 @@ SINGLE_BATTLE_TEST("Charge will not expire if it flinches twice in a row") TURN { MOVE(player, MOVE_THUNDERBOLT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); - HP_BAR(opponent, captureDamage: &normalDamage); + HP_BAR(opponent, captureDamage: &damage[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARGE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); - HP_BAR(opponent, captureDamage: &chargedUpDamage); + HP_BAR(opponent, captureDamage: &damage[1]); } THEN { if (B_CHARGE < GEN_9) - EXPECT_EQ(normalDamage, chargedUpDamage); + EXPECT_EQ(damage[0], damage[1]); else - EXPECT_MUL_EQ(normalDamage, Q_4_12(2.0), chargedUpDamage); + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); } } diff --git a/test/battle/move_effect/dragon_cheer.c b/test/battle/move_effect/dragon_cheer.c index 1e28c6d4b3..e2929c16d4 100644 --- a/test/battle/move_effect/dragon_cheer.c +++ b/test/battle/move_effect/dragon_cheer.c @@ -1,10 +1,14 @@ #include "global.h" #include "test/battle.h" +ASSUMPTIONS +{ + ASSUME(GetMoveEffect(MOVE_DRAGON_CHEER) == EFFECT_DRAGON_CHEER); +} + SINGLE_BATTLE_TEST("Dragon Cheer fails in a single battle") { GIVEN { - ASSUME(GetMoveEffect(MOVE_DRAGON_CHEER) == EFFECT_DRAGON_CHEER); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -14,43 +18,68 @@ SINGLE_BATTLE_TEST("Dragon Cheer fails in a single battle") } } -DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by one on non-Dragon types") +DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by 1 on non-Dragon types") { - PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); + bool32 useDragonCheer = 0; + u32 genConfig = 0, chance = 0; + for (u32 j = GEN_1; j <= GEN_9; j++) { + PARAMETRIZE { genConfig = j; useDragonCheer = FALSE; chance = j >= GEN_7 ? 24 : 16; } // 6.25% with Wobbuffet's base speed + PARAMETRIZE { genConfig = j; useDragonCheer = TRUE; chance = 8; } // 12.5% with Wobbuffet's base speed + } + PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_TACKLE) == 0); - ASSUME(GetMoveEffect(MOVE_DRAGON_CHEER) == EFFECT_DRAGON_CHEER); PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_DRAGON_CHEER, target: playerRight); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } + TURN { + if (useDragonCheer) + MOVE(playerLeft, MOVE_DRAGON_CHEER, target: playerRight); + MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); + } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_CHEER, playerLeft); - MESSAGE("Wynaut is getting pumped!"); + if (useDragonCheer) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_CHEER, playerLeft); + MESSAGE("Wobbuffet is getting pumped!"); + } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); MESSAGE("A critical hit!"); } } -DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by two on Dragon types") +DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by 2 on Dragon types") { - PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); + bool32 useDragonCheer; + u32 genConfig, passes, trials; + PARAMETRIZE { genConfig = GEN_1; useDragonCheer = FALSE; passes = 25; trials = 256; } // ~9.77% with Dratini's base speed + PARAMETRIZE { genConfig = GEN_1; useDragonCheer = TRUE; passes = 25; trials = 64; } // ~39.06% with Dratini's base speed + for (u32 j = GEN_2; j <= GEN_9; j++) { + PARAMETRIZE { genConfig = j; useDragonCheer = FALSE; passes = 1; trials = j >= GEN_7 ? 24 : 16; } // ~4.16%/6.25% + PARAMETRIZE { genConfig = j; useDragonCheer = TRUE; passes = 1; trials = j >= GEN_6 ? 2 : 4; } // 50%/25% + } + PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_TACKLE) == 0); - ASSUME(GetMoveEffect(MOVE_DRAGON_CHEER) == EFFECT_DRAGON_CHEER); + ASSUME(gSpeciesInfo[SPECIES_DRATINI].baseSpeed == 50); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_DRATINI); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_DRAGON_CHEER, target: playerRight); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } + TURN { + if (useDragonCheer) + MOVE(playerLeft, MOVE_DRAGON_CHEER, target: playerRight); + MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); + } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_CHEER, playerLeft); - MESSAGE("Dratini is getting pumped!"); + if (useDragonCheer) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_CHEER, playerLeft); + MESSAGE("Dratini is getting pumped!"); + } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); MESSAGE("A critical hit!"); } @@ -61,7 +90,6 @@ DOUBLE_BATTLE_TEST("Dragon Cheer fails if critical hit stage was already increas GIVEN { ASSUME(GetMoveCriticalHitStage(MOVE_SLASH) == 1); ASSUME(GetMoveEffect(MOVE_FOCUS_ENERGY) == EFFECT_FOCUS_ENERGY); - ASSUME(GetMoveEffect(MOVE_DRAGON_CHEER) == EFFECT_DRAGON_CHEER); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/dream_eater.c b/test/battle/move_effect/dream_eater.c index b840e9860c..67b2ed5af5 100644 --- a/test/battle/move_effect/dream_eater.c +++ b/test/battle/move_effect/dream_eater.c @@ -55,6 +55,62 @@ SINGLE_BATTLE_TEST("Dream Eater fails if Heal Block applies") } } -TO_DO_BATTLE_TEST("Dream Eater works on targets with Comatose"); -TO_DO_BATTLE_TEST("Dream Eater fails if the target is behind a Substitute (Gen 1-4)"); -TO_DO_BATTLE_TEST("Dream Eater works if the target is behind a Substitute (Gen 5+)"); +SINGLE_BATTLE_TEST("Dream Eater works on targets with Comatose") +{ + s16 damage; + s16 healed; + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); } + } WHEN { + TURN { MOVE(player, MOVE_DREAM_EATER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DREAM_EATER, player); + HP_BAR(opponent, captureDamage: &damage); + HP_BAR(player, captureDamage: &healed); + } THEN { + EXPECT_MUL_EQ(damage, Q_4_12(-1.0/2.0), healed); + } +} + +#if B_UPDATED_MOVE_FLAGS < GEN_5 +SINGLE_BATTLE_TEST("Dream Eater fails if the target is behind a Substitute (Gen 1-4)") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN); + ASSUME(gMovesInfo[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE); + ASSUME(!gMovesInfo[MOVE_DREAM_EATER].ignoresSubstitute); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_YAWN); MOVE(player, MOVE_SUBSTITUTE); } + TURN { } + TURN { MOVE(opponent, MOVE_DREAM_EATER); } + } SCENE { + MESSAGE("The opposing Wobbuffet used Dream Eater!"); + MESSAGE("Wobbuffet wasn't affected!"); + } +} +#else +SINGLE_BATTLE_TEST("Dream Eater works if the target is behind a Substitute (Gen 5+)") +{ + s16 damage; + s16 healed; + GIVEN { + ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN); + ASSUME(gMovesInfo[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + } WHEN { + TURN { MOVE(opponent, MOVE_YAWN); MOVE(player, MOVE_SUBSTITUTE); } + TURN { } + TURN { MOVE(opponent, MOVE_DREAM_EATER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DREAM_EATER, opponent); + HP_BAR(player, captureDamage: &damage); + HP_BAR(opponent, captureDamage: &healed); + } THEN { + EXPECT_MUL_EQ(damage, Q_4_12(-1.0/2.0), healed); + } +} +#endif diff --git a/test/battle/move_effect/electrify.c b/test/battle/move_effect/electrify.c index 71373cdd58..d00d342196 100644 --- a/test/battle/move_effect/electrify.c +++ b/test/battle/move_effect/electrify.c @@ -1,5 +1,72 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Electrify makes the target's move Electric-type for the remainder of the turn"); -TO_DO_BATTLE_TEST("Electrify can change status moves to Electric-type"); // Test type immunity +SINGLE_BATTLE_TEST("Electrify makes the target's move Electric-type for the remainder of the turn (single move)") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_SANDSLASH].types[0] == TYPE_GROUND || gSpeciesInfo[SPECIES_SANDSLASH].types[1] == TYPE_GROUND); + ASSUME(GetMoveType(MOVE_TACKLE) != TYPE_ELECTRIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SANDSLASH); + } WHEN { + TURN { MOVE(opponent, MOVE_ELECTRIFY); MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIFY, opponent); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + } +} + +DOUBLE_BATTLE_TEST("Electrify makes the target's move Electric-type for the remainder of the turn (double move)") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_SANDSLASH].types[0] == TYPE_GROUND || gSpeciesInfo[SPECIES_SANDSLASH].types[1] == TYPE_GROUND); + ASSUME(GetMoveType(MOVE_TACKLE) != TYPE_ELECTRIC); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_SANDSLASH); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_TACKLE, target:opponentLeft); MOVE(playerRight, MOVE_INSTRUCT, target: playerLeft); MOVE(opponentRight, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIFY, opponentLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerRight); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + } +} + +SINGLE_BATTLE_TEST("Electrify can change status moves to Electric-type") +{ + KNOWN_FAILING; + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_SANDSLASH].types[0] == TYPE_GROUND || gSpeciesInfo[SPECIES_SANDSLASH].types[1] == TYPE_GROUND); + ASSUME(GetMoveCategory(MOVE_LEER) == DAMAGE_CATEGORY_STATUS); + ASSUME(GetMoveType(MOVE_LEER) != TYPE_ELECTRIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SANDSLASH); + } WHEN { + TURN { MOVE(opponent, MOVE_ELECTRIFY); MOVE(player, MOVE_LEER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIFY, opponent); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, player); + } +} + +SINGLE_BATTLE_TEST("Electrify changes the type of foreseen moves when hitting its target") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_SANDSLASH].types[0] == TYPE_GROUND || gSpeciesInfo[SPECIES_SANDSLASH].types[1] == TYPE_GROUND); + ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT); + ASSUME(GetMoveType(MOVE_FUTURE_SIGHT) != TYPE_ELECTRIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SANDSLASH); + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_FUTURE_SIGHT); } + TURN {} + TURN { MOVE(opponent, MOVE_ELECTRIFY); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIFY, opponent); + NOT HP_BAR(opponent); + } +} diff --git a/test/battle/move_effect/evasion_up_2.c b/test/battle/move_effect/evasion_up_2.c index cd5cb543a9..e38f037545 100644 --- a/test/battle/move_effect/evasion_up_2.c +++ b/test/battle/move_effect/evasion_up_2.c @@ -6,14 +6,14 @@ /* ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_X].effect == EFFECT_EVASION_UP_2); + ASSUME(GetMoveEffect(MOVE_X) == EFFECT_EVASION_UP_2); } SINGLE_BATTLE_TEST("Double Team raises Evasion by 1 stage") { - PASSES_RANDOMLY(gMovesInfo[MOVE_SCRATCH].accuracy * 3 / 5, 100, RNG_ACCURACY); + PASSES_RANDOMLY(GetMoveAccuracy(MOVE_SCRATCH) * 3 / 5, 100, RNG_ACCURACY); GIVEN { - ASSUME(gMovesInfo[MOVE_SCRATCH].accuracy == 100); + ASSUME(GetMoveAccuracy(MOVE_SCRATCH) == 100); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/focus_energy.c b/test/battle/move_effect/focus_energy.c new file mode 100644 index 0000000000..227f6b4604 --- /dev/null +++ b/test/battle/move_effect/focus_energy.c @@ -0,0 +1,41 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(GetMoveEffect(MOVE_FOCUS_ENERGY) == EFFECT_FOCUS_ENERGY); +} + +SINGLE_BATTLE_TEST("Focus Energy increases the user's critical hit ratio by 1 stage (Gen 1-2) or 2 stages (Gen 3+)") +{ + bool32 useFocusEnergy = 0; + u32 genConfig = 0, chance = 0; + for (u32 j = GEN_1; j <= GEN_9; j++) { + PARAMETRIZE { genConfig = j; useFocusEnergy = FALSE; chance = j >= GEN_7 ? 24 : 16; } // ~4.16%/6.25% with Wobbuffet's base speed + PARAMETRIZE { genConfig = j; useFocusEnergy = TRUE; + if (j >= GEN_6) + chance = 2; // 50% / 25% + else if (j >= GEN_3) + chance = 4; // 25% + else + chance = 8; // 12.5% with Wobbuffet's base speed + } + } + PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); + GIVEN { + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(GEN_CONFIG_FOCUS_ENERGY_CRIT_RATIO, genConfig); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].baseSpeed == 33); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (useFocusEnergy) + TURN { MOVE(player, MOVE_FOCUS_ENERGY); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + if (useFocusEnergy) + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/move_effect/heal_bell.c b/test/battle/move_effect/heal_bell.c index 5c87171056..7730879d45 100644 --- a/test/battle/move_effect/heal_bell.c +++ b/test/battle/move_effect/heal_bell.c @@ -4,48 +4,70 @@ ASSUMPTIONS { ASSUME(GetMoveEffect(MOVE_HEAL_BELL) == EFFECT_HEAL_BELL); - ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL); } -DOUBLE_BATTLE_TEST("Heal Bell cures the entire party") +DOUBLE_BATTLE_TEST("Heal Bell/Aromatherapy cures the entire party of the user from primary status effects") { - u32 move; - - PARAMETRIZE { move = MOVE_HEAL_BELL; } - PARAMETRIZE { move = MOVE_AROMATHERAPY; } + u32 j, move, status; + PARAMETRIZE { move = MOVE_HEAL_BELL; status = STATUS1_SLEEP; } + PARAMETRIZE { move = MOVE_AROMATHERAPY; status = STATUS1_SLEEP; } + PARAMETRIZE { move = MOVE_HEAL_BELL; status = STATUS1_POISON; } + PARAMETRIZE { move = MOVE_AROMATHERAPY; status = STATUS1_POISON; } + PARAMETRIZE { move = MOVE_HEAL_BELL; status = STATUS1_BURN; } + PARAMETRIZE { move = MOVE_AROMATHERAPY; status = STATUS1_BURN; } + PARAMETRIZE { move = MOVE_HEAL_BELL; status = STATUS1_FREEZE; } + PARAMETRIZE { move = MOVE_AROMATHERAPY; status = STATUS1_FREEZE; } + PARAMETRIZE { move = MOVE_HEAL_BELL; status = STATUS1_PARALYSIS; } + PARAMETRIZE { move = MOVE_AROMATHERAPY; status = STATUS1_PARALYSIS; } + PARAMETRIZE { move = MOVE_HEAL_BELL; status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { move = MOVE_AROMATHERAPY; status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { move = MOVE_HEAL_BELL; status = STATUS1_FROSTBITE; } + PARAMETRIZE { move = MOVE_AROMATHERAPY; status = STATUS1_FROSTBITE; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL); + PLAYER(SPECIES_WOBBUFFET) { + if (status != STATUS1_SLEEP && status != STATUS1_FREEZE) + Status1(status); + } + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } OPPONENT(SPECIES_WYNAUT); OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(playerLeft, move, target: playerLeft); } TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); } } SCENE { - int i; - ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); - NOT MESSAGE("Wobbuffet was hurt by its poisoning!"); - for (i = 0; i < 6; i++) + switch(status) + { + case STATUS1_SLEEP: STATUS_ICON(playerLeft, sleep: FALSE); STATUS_ICON(playerRight, sleep: FALSE); break; + case STATUS1_POISON: STATUS_ICON(playerLeft, poison: FALSE); STATUS_ICON(playerRight, poison: FALSE); break; + case STATUS1_BURN: STATUS_ICON(playerLeft, burn: FALSE); STATUS_ICON(playerRight, burn: FALSE); break; + case STATUS1_PARALYSIS: STATUS_ICON(playerLeft, paralysis: FALSE); STATUS_ICON(playerRight, paralysis: FALSE); break; + case STATUS1_TOXIC_POISON: STATUS_ICON(playerLeft, badPoison: FALSE); STATUS_ICON(playerRight, badPoison: FALSE); break; + case STATUS1_FROSTBITE: STATUS_ICON(playerLeft, frostbite: FALSE); STATUS_ICON(playerRight, frostbite: FALSE); break; + } + for (j = 0; j < PARTY_SIZE; j++) EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_STATUS), STATUS1_NONE); } } -DOUBLE_BATTLE_TEST("Heal Bell does not cure soundproof partners") +DOUBLE_BATTLE_TEST("Heal Bell does not cure Soundproof partners (Gen 4, Gen 6+)") { - u32 ability; + u32 ability, config; - PARAMETRIZE { ability = ABILITY_SCRAPPY; } - PARAMETRIZE { ability = ABILITY_SOUNDPROOF; } - - ASSUME(B_HEAL_BELL_SOUNDPROOF != GEN_5); + PARAMETRIZE { ability = ABILITY_SCRAPPY; config = GEN_4; } + PARAMETRIZE { ability = ABILITY_SOUNDPROOF; config = GEN_4; } + PARAMETRIZE { ability = ABILITY_SOUNDPROOF; config = GEN_5; } + PARAMETRIZE { ability = ABILITY_SOUNDPROOF; config = GEN_6; } GIVEN { + ASSUME(IsSoundMove(MOVE_HEAL_BELL)); + WITH_CONFIG(GEN_CONFIG_HEAL_BELL_SOUNDPROOF, config); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_EXPLOUD) { Ability(ability); Status1(STATUS1_POISON); } OPPONENT(SPECIES_WYNAUT); @@ -54,7 +76,7 @@ DOUBLE_BATTLE_TEST("Heal Bell does not cure soundproof partners") TURN { MOVE(playerLeft, MOVE_HEAL_BELL, target: playerLeft); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, playerLeft); - if (ability == ABILITY_SOUNDPROOF) { + if (ability == ABILITY_SOUNDPROOF && config != GEN_5) { MESSAGE("Exploud was hurt by its poisoning!"); } else { NOT MESSAGE("Exploud was hurt by its poisoning!"); @@ -62,16 +84,17 @@ DOUBLE_BATTLE_TEST("Heal Bell does not cure soundproof partners") } } -SINGLE_BATTLE_TEST("Heal Bell cures inactive soundproof Pokemon") +SINGLE_BATTLE_TEST("Heal Bell cures inactive Soundproof Pokemon (Gen5+)") { - u32 ability; + u32 config, ability; - PARAMETRIZE { ability = ABILITY_SCRAPPY; } - PARAMETRIZE { ability = ABILITY_SOUNDPROOF; } - - ASSUME(B_HEAL_BELL_SOUNDPROOF >= GEN_5); + PARAMETRIZE { config = GEN_4, ability = ABILITY_SCRAPPY; } + PARAMETRIZE { config = GEN_4, ability = ABILITY_SOUNDPROOF; } + PARAMETRIZE { config = GEN_5, ability = ABILITY_SOUNDPROOF; } GIVEN { + ASSUME(IsSoundMove(MOVE_HEAL_BELL)); + WITH_CONFIG(GEN_CONFIG_HEAL_BELL_SOUNDPROOF, config); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } PLAYER(SPECIES_EXPLOUD) { Ability(ability); Status1(STATUS1_POISON); } OPPONENT(SPECIES_WYNAUT); @@ -81,21 +104,35 @@ SINGLE_BATTLE_TEST("Heal Bell cures inactive soundproof Pokemon") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, player); SEND_IN_MESSAGE("Exploud"); - NOT MESSAGE("Exploud was hurt by its poisoning!"); + if (ability == ABILITY_SCRAPPY || config >= GEN_5) { + NOT MESSAGE("Exploud was hurt by its poisoning!"); + } else { + MESSAGE("Exploud was hurt by its poisoning!"); + } } } -SINGLE_BATTLE_TEST("Heal Bell cures a soundproof user") +SINGLE_BATTLE_TEST("Heal Bell cures a Soundproof user (Gen5, Gen8+)") { + u32 config; + PARAMETRIZE { config = GEN_4; } + PARAMETRIZE { config = GEN_5; } + PARAMETRIZE { config = GEN_6; } + PARAMETRIZE { config = GEN_8; } GIVEN { - ASSUME(B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8); + ASSUME(IsSoundMove(MOVE_HEAL_BELL)); + WITH_CONFIG(GEN_CONFIG_HEAL_BELL_SOUNDPROOF, config); PLAYER(SPECIES_EXPLOUD) { Ability(ABILITY_SOUNDPROOF); Status1(STATUS1_POISON); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(player, MOVE_HEAL_BELL, target: player); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, player); - NOT MESSAGE("Exploud was hurt by its poisoning!"); + if (config == GEN_5 || config >= GEN_8) { + NOT MESSAGE("Exploud was hurt by its poisoning!"); + } else { + MESSAGE("Exploud was hurt by its poisoning!"); + } } } diff --git a/test/battle/move_effect/hit_switch_target.c b/test/battle/move_effect/hit_switch_target.c index 5a6e480f93..61c92d227e 100644 --- a/test/battle/move_effect/hit_switch_target.c +++ b/test/battle/move_effect/hit_switch_target.c @@ -69,3 +69,53 @@ SINGLE_BATTLE_TEST("Dragon Tail does not fail if replacements fainted") NOT MESSAGE("But it failed!"); } } + +SINGLE_BATTLE_TEST("Dragon Tail switches the target after Rocky Helmet and Iron Barbs") +{ + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TOGEDEMARU) { Ability(ABILITY_IRON_BARBS); Item(ITEM_ROCKY_HELMET); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CHARMANDER); + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + HP_BAR(player); + MESSAGE("Wobbuffet was hurt by the opposing Togedemaru's Iron Barbs!"); + HP_BAR(player); + MESSAGE("Wobbuffet was hurt by the opposing Togedemaru's Rocky Helmet!"); + MESSAGE("The opposing Charmander was dragged out!"); + } +} + +SINGLE_BATTLE_TEST("Dragon Tail effect fails against target with Guard Dog") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_OKIDOGI) { Ability(ABILITY_GUARD_DOG); } + OPPONENT(SPECIES_CHARMANDER); + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + NOT MESSAGE("The opposing Charmander was dragged out!"); + } +} + +SINGLE_BATTLE_TEST("Dragon Tail effect fails against target with Suction Cups") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_OCTILLERY) { Ability(ABILITY_SUCTION_CUPS); } + OPPONENT(SPECIES_CHARMANDER); + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + ABILITY_POPUP(opponent, ABILITY_SUCTION_CUPS); + MESSAGE("The opposing Octillery anchors itself with Suction Cups!"); + NOT MESSAGE("The opposing Charmander was dragged out!"); + } +} diff --git a/test/battle/move_effect/instruct.c b/test/battle/move_effect/instruct.c index 248370cd6a..28294dc3a5 100644 --- a/test/battle/move_effect/instruct.c +++ b/test/battle/move_effect/instruct.c @@ -216,3 +216,26 @@ DOUBLE_BATTLE_TEST("Instruct-called moves keep their priority") NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerRight); } } + +DOUBLE_BATTLE_TEST("Instructed move will be absorbed by Lightning Rod if it turns into an Electric Type move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_PIKACHU) { Ability(ABILITY_LIGHTNING_ROD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); + MOVE(opponentLeft, MOVE_PLASMA_FISTS, target: playerLeft); + MOVE(playerRight, MOVE_INSTRUCT, target: playerLeft); + MOVE(opponentRight, MOVE_CELEBRATE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerRight); + ABILITY_POPUP(opponentLeft, ABILITY_LIGHTNING_ROD); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + } +} diff --git a/test/battle/move_effect/laser_focus.c b/test/battle/move_effect/laser_focus.c new file mode 100644 index 0000000000..c486a3cbee --- /dev/null +++ b/test/battle/move_effect/laser_focus.c @@ -0,0 +1,23 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_LASER_FOCUS].effect == EFFECT_LASER_FOCUS); +} + +SINGLE_BATTLE_TEST("Laser Focus causes the user's move used on the next turn to result in a Critical Hit") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_LASER_FOCUS) == EFFECT_LASER_FOCUS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LASER_FOCUS); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LASER_FOCUS, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/move_effect/lucky_chant.c b/test/battle/move_effect/lucky_chant.c new file mode 100644 index 0000000000..e492d604b6 --- /dev/null +++ b/test/battle/move_effect/lucky_chant.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Lucky Chant prevents critical hits on the user's side") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_LUCKY_CHANT) == EFFECT_LUCKY_CHANT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_LUCKY_CHANT); MOVE(player, MOVE_TACKLE, criticalHit: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + NOT MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c index da96c07c90..c257ddd3b2 100644 --- a/test/battle/move_effect/multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -25,12 +25,15 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit the maximum amount with Skill Link") } } -SINGLE_BATTLE_TEST("Multi hit Moves hit twice 35% of the time") +SINGLE_BATTLE_TEST("Multi hit Moves hit twice 37.5/35% of the time") { - PASSES_RANDOMLY(35, 100, RNG_HITS); + u32 genConfig, passes, trials; + PARAMETRIZE { genConfig = GEN_4; passes = 3; trials = 8; } + PARAMETRIZE { genConfig = GEN_5; passes = 7; trials = 20; } + PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); + WITH_CONFIG(GEN_CONFIG_MULTI_HIT_CHANCE, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -42,12 +45,15 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit twice 35% of the time") } } -SINGLE_BATTLE_TEST("Multi hit Moves hit thrice 35% of the time") +SINGLE_BATTLE_TEST("Multi hit Moves hit thrice 37.5/35% of the time") { - PASSES_RANDOMLY(35, 100, RNG_HITS); + u32 genConfig, passes, trials; + PARAMETRIZE { genConfig = GEN_4; passes = 3; trials = 8; } + PARAMETRIZE { genConfig = GEN_5; passes = 7; trials = 20; } + PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); + WITH_CONFIG(GEN_CONFIG_MULTI_HIT_CHANCE, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -60,12 +66,15 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit thrice 35% of the time") } } -SINGLE_BATTLE_TEST("Multi hit Moves hit four times 15% of the time") +SINGLE_BATTLE_TEST("Multi hit Moves hit four times 12.5/15% of the time") { - PASSES_RANDOMLY(15, 100, RNG_HITS); + u32 genConfig, passes, trials; + PARAMETRIZE { genConfig = GEN_4; passes = 1; trials = 8; } + PARAMETRIZE { genConfig = GEN_5; passes = 3; trials = 20; } + PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); + WITH_CONFIG(GEN_CONFIG_MULTI_HIT_CHANCE, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -79,12 +88,15 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit four times 15% of the time") } } -SINGLE_BATTLE_TEST("Multi hit Moves hit five times 15% of the time") +SINGLE_BATTLE_TEST("Multi hit Moves hit five times 12.5/15% of the time") { - PASSES_RANDOMLY(15, 100, RNG_HITS); + u32 genConfig, passes, trials; + PARAMETRIZE { genConfig = GEN_4; passes = 1; trials = 8; } + PARAMETRIZE { genConfig = GEN_5; passes = 3; trials = 20; } + PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); + WITH_CONFIG(GEN_CONFIG_MULTI_HIT_CHANCE, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/rapid_spin.c b/test/battle/move_effect/rapid_spin.c index e5457395b9..9d142bf32e 100644 --- a/test/battle/move_effect/rapid_spin.c +++ b/test/battle/move_effect/rapid_spin.c @@ -1,19 +1,13 @@ #include "global.h" #include "test/battle.h" -ASSUMPTIONS -{ - ASSUME(gMovesInfo[MOVE_RAPID_SPIN].effect == EFFECT_RAPID_SPIN); - ASSUME(gMovesInfo[MOVE_MORTAL_SPIN].effect == EFFECT_RAPID_SPIN); -#if B_SPEED_BUFFING_RAPID_SPIN >= GEN_8 - ASSUME(MoveHasAdditionalEffectSelf(MOVE_RAPID_SPIN, MOVE_EFFECT_SPD_PLUS_1) == TRUE); -#endif - ASSUME(MoveHasAdditionalEffect(MOVE_MORTAL_SPIN, MOVE_EFFECT_POISON) == TRUE); -} - SINGLE_BATTLE_TEST("Rapid Spin activates after Toxic Debris") { GIVEN { + ASSUME(GetMoveEffect(MOVE_RAPID_SPIN) == EFFECT_RAPID_SPIN); + #if B_SPEED_BUFFING_RAPID_SPIN >= GEN_8 + ASSUME(MoveHasAdditionalEffectSelf(MOVE_RAPID_SPIN, MOVE_EFFECT_SPD_PLUS_1) == TRUE); + #endif PLAYER(SPECIES_GLIMMORA) { Ability(ABILITY_TOXIC_DEBRIS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -29,6 +23,10 @@ SINGLE_BATTLE_TEST("Rapid Spin activates after Toxic Debris") SINGLE_BATTLE_TEST("Rapid Spin blows away Wrap, hazards and raises Speed (Gen 8+)") { GIVEN { + ASSUME(GetMoveEffect(MOVE_RAPID_SPIN) == EFFECT_RAPID_SPIN); + #if B_SPEED_BUFFING_RAPID_SPIN >= GEN_8 + ASSUME(MoveHasAdditionalEffectSelf(MOVE_RAPID_SPIN, MOVE_EFFECT_SPD_PLUS_1) == TRUE); + #endif PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -49,6 +47,8 @@ SINGLE_BATTLE_TEST("Rapid Spin blows away Wrap, hazards and raises Speed (Gen 8+ SINGLE_BATTLE_TEST("Rapid Spin: Mortal Spin blows away Wrap, hazards and poisons foe") { GIVEN { + ASSUME(GetMoveEffect(MOVE_MORTAL_SPIN) == EFFECT_RAPID_SPIN); + ASSUME(MoveHasAdditionalEffect(MOVE_MORTAL_SPIN, MOVE_EFFECT_POISON) == TRUE); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/reflect_type.c b/test/battle/move_effect/reflect_type.c index fc152fc27f..f3093ea4e3 100644 --- a/test/battle/move_effect/reflect_type.c +++ b/test/battle/move_effect/reflect_type.c @@ -1,9 +1,6 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Reflect Type fails if the user is Terastallized"); -TO_DO_BATTLE_TEST("Reflect Type succeeds against a Terastallized target and copies its Tera type"); - SINGLE_BATTLE_TEST("Reflect Type does not affect any of Arceus' forms") { u32 j; @@ -86,7 +83,7 @@ SINGLE_BATTLE_TEST("Reflect Type does not affect any of Silvally's forms") } } -SINGLE_BATTLE_TEST("Reflect Type does not affect Pokémon with no types") +SINGLE_BATTLE_TEST("Reflect Type fails if the target has no types") { GIVEN { ASSUME(gSpeciesInfo[SPECIES_ARCANINE].types[0] == TYPE_FIRE); @@ -151,7 +148,7 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's pure type") } } -SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's types[0] and types[1] if the target only has a 3rd type") +SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's 1st and 2nd types if the target only has a 3rd type") { GIVEN { ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC); @@ -184,3 +181,38 @@ SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's types[0] EXPECT_EQ(player->types[2], TYPE_GRASS); } } + +SINGLE_BATTLE_TEST("Reflect Type fails if the user is Terastallized") +{ + GIVEN { + PLAYER(SPECIES_ARCANINE) { TeraType(TYPE_NORMAL); } + OPPONENT(SPECIES_POLIWRATH); + } WHEN { + TURN { MOVE(player, MOVE_REFLECT_TYPE, gimmick: GIMMICK_TERA); } + } SCENE { + MESSAGE("Arcanine used Reflect Type!"); + MESSAGE("But it failed!"); + } THEN { + EXPECT_EQ(player->types[0], TYPE_FIRE); + EXPECT_EQ(player->types[1], TYPE_FIRE); + EXPECT_EQ(player->types[2], TYPE_MYSTERY); + } +} + +SINGLE_BATTLE_TEST("Reflect Type succeeds against a Terastallized target and copies its Tera type") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_POLIWRATH].types[0] != TYPE_NORMAL); + ASSUME(gSpeciesInfo[SPECIES_POLIWRATH].types[1] != TYPE_NORMAL); + PLAYER(SPECIES_ARCANINE) { TeraType(TYPE_NORMAL); } + OPPONENT(SPECIES_POLIWRATH); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_REFLECT_TYPE); } + } SCENE { + MESSAGE("The opposing Poliwrath used Reflect Type!"); + } THEN { + EXPECT_EQ(opponent->types[0], TYPE_NORMAL); + EXPECT_EQ(opponent->types[1], TYPE_NORMAL); + EXPECT_EQ(opponent->types[2], TYPE_NORMAL); + } +} diff --git a/test/battle/move_effect/roar.c b/test/battle/move_effect/roar.c index ef6439088f..525e75b6df 100644 --- a/test/battle/move_effect/roar.c +++ b/test/battle/move_effect/roar.c @@ -68,3 +68,38 @@ SINGLE_BATTLE_TEST("Roar fails if replacements fainted") MESSAGE("But it failed!"); } } + +SINGLE_BATTLE_TEST("Roar fails against target with Guard Dog") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_OKIDOGI) { Ability(ABILITY_GUARD_DOG); } + OPPONENT(SPECIES_CHARMANDER); + } WHEN { + TURN { MOVE(player, MOVE_ROAR); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROAR, player); + MESSAGE("The opposing Charmander was dragged out!"); + } + MESSAGE("Wobbuffet used Roar!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Roar fails to switch out target with Suction Cups") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_OCTILLERY) { Ability(ABILITY_SUCTION_CUPS); } + OPPONENT(SPECIES_CHARMANDER); + } WHEN { + TURN { MOVE(player, MOVE_ROAR); } + } SCENE { + MESSAGE("Wobbuffet used Roar!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ROAR, player); + ABILITY_POPUP(opponent, ABILITY_SUCTION_CUPS); + MESSAGE("The opposing Octillery anchors itself with Suction Cups!"); + NOT MESSAGE("The opposing Charmander was dragged out!"); + } +} diff --git a/test/battle/move_effect/spectral_thief.c b/test/battle/move_effect/spectral_thief.c new file mode 100644 index 0000000000..7bb5d5a536 --- /dev/null +++ b/test/battle/move_effect/spectral_thief.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Spectral Thief steals opponents boost before attacking", s16 damage) +{ + u32 move; + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_SWORDS_DANCE; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2); + ASSUME(gMovesInfo[MOVE_SPECTRAL_THIEF].effect == EFFECT_SPECTRAL_THIEF); + PLAYER(SPECIES_REGIROCK); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (move == MOVE_CELEBRATE) + TURN { MOVE(player, move); MOVE(opponent, MOVE_SPECTRAL_THIEF); } + else + TURN { MOVE(player, move); MOVE(opponent, MOVE_SPECTRAL_THIEF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + MESSAGE("The opposing Wobbuffet used Spectral Thief!"); + if (move == MOVE_SWORDS_DANCE) + MESSAGE("The opposing Wobbuffet stole the target's boosted stats!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Spectral Thief can't steal opponent's boost if target is immune") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2); + ASSUME(gMovesInfo[MOVE_SPECTRAL_THIEF].effect == EFFECT_SPECTRAL_THIEF); + PLAYER(SPECIES_MEOWTH); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SWORDS_DANCE); MOVE(opponent, MOVE_SPECTRAL_THIEF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player); + MESSAGE("The opposing Wobbuffet used Spectral Thief!"); + NONE_OF { + MESSAGE("The opposing Wobbuffet stole the target's boosted stats!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, opponent); + } + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + } +} diff --git a/test/battle/move_effect_secondary/aromatherapy.c b/test/battle/move_effect_secondary/aromatherapy.c new file mode 100644 index 0000000000..9f1e82ba2d --- /dev/null +++ b/test/battle/move_effect_secondary/aromatherapy.c @@ -0,0 +1,51 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(MoveHasAdditionalEffect(MOVE_SPARKLY_SWIRL, MOVE_EFFECT_AROMATHERAPY)); +} + +DOUBLE_BATTLE_TEST("Sparkly Swirl cures the entire party of the user from primary status effects") +{ + u32 j; + u32 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { + if (status != STATUS1_SLEEP && status != STATUS1_FREEZE) + Status1(status); + } + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_SPARKLY_SWIRL, target: opponentLeft); } + TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); } + } SCENE { + MESSAGE("Wobbuffet used Sparkly Swirl!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLY_SWIRL, playerLeft); + switch(status) + { + case STATUS1_SLEEP: STATUS_ICON(playerLeft, sleep: FALSE); STATUS_ICON(playerRight, sleep: FALSE); break; + case STATUS1_POISON: STATUS_ICON(playerLeft, poison: FALSE); STATUS_ICON(playerRight, poison: FALSE); break; + case STATUS1_BURN: STATUS_ICON(playerLeft, burn: FALSE); STATUS_ICON(playerRight, burn: FALSE); break; + case STATUS1_PARALYSIS: STATUS_ICON(playerLeft, paralysis: FALSE); STATUS_ICON(playerRight, paralysis: FALSE); break; + case STATUS1_TOXIC_POISON: STATUS_ICON(playerLeft, badPoison: FALSE); STATUS_ICON(playerRight, badPoison: FALSE); break; + case STATUS1_FROSTBITE: STATUS_ICON(playerLeft, frostbite: FALSE); STATUS_ICON(playerRight, frostbite: FALSE); break; + } + } THEN { + for (j = 0; j < PARTY_SIZE; j++) + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_STATUS), STATUS1_NONE); + } +} diff --git a/test/battle/move_effects_combined/triple_arrows.c b/test/battle/move_effects_combined/triple_arrows.c index 4fd040e32a..3a348825b9 100644 --- a/test/battle/move_effects_combined/triple_arrows.c +++ b/test/battle/move_effects_combined/triple_arrows.c @@ -44,11 +44,17 @@ SINGLE_BATTLE_TEST("Triple Arrows makes the foe flinch 30% of the time") } } -SINGLE_BATTLE_TEST("Triple Arrows lands a critical hit") +SINGLE_BATTLE_TEST("Triple Arrows has an increased critical hit ratio") { - PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); + u32 j, genConfig = 0, passes = 0, trials = 0; + + PARAMETRIZE { genConfig = GEN_1; passes = 1; trials = 2; } // 50% with Wobbuffet's base speed + for (j = GEN_2; j <= GEN_9; j++) { + PARAMETRIZE { genConfig = GEN_2; passes = 1; trials = 8; } + } + PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_TRIPLE_ARROWS) == 1); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_flags/critical_hit_stage.c b/test/battle/move_flags/critical_hit_stage.c new file mode 100644 index 0000000000..02999e9a8a --- /dev/null +++ b/test/battle/move_flags/critical_hit_stage.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("criticalHitStage set to 1 increases critical hits occur at a 1/8 rate (Gen 2+) or x8 times more likely (Gen 1)") +{ + u32 j, genConfig = 0, passes = 0, trials = 0; + + PARAMETRIZE { genConfig = GEN_1; passes = 1; trials = 2; } // 50% with Wobbuffet's base speed + for (j = GEN_2; j <= GEN_9; j++) { + PARAMETRIZE { genConfig = GEN_2; passes = 1; trials = 8; } + } + PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); + GIVEN { + WITH_CONFIG(GEN_CONFIG_CRIT_CHANCE, genConfig); + ASSUME(GetMoveCriticalHitStage(MOVE_SLASH) == 1); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].baseSpeed == 33); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLASH); } + } SCENE { + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/move_flags/ignores_target_ability.c b/test/battle/move_flags/ignores_target_ability.c index f4f9ff30a7..25e0f9a20f 100644 --- a/test/battle/move_flags/ignores_target_ability.c +++ b/test/battle/move_flags/ignores_target_ability.c @@ -72,3 +72,23 @@ SINGLE_BATTLE_TEST("ignoresTargetAbility moves do ignore target's abilities", s1 EXPECT_EQ(results[4].damage, results[5].damage); } } + +SINGLE_BATTLE_TEST("ignoresTargetAbility allows Pokémon with Battle Armor and Shell Armor to receive critical hits") +{ + u32 species; + u32 ability; + + PARAMETRIZE { species = SPECIES_KINGLER; ability = ABILITY_SHELL_ARMOR; } + PARAMETRIZE { species = SPECIES_ARMALDO; ability = ABILITY_BATTLE_ARMOR; } + + GIVEN { + ASSUME(MoveIgnoresTargetAbility(MOVE_SUNSTEEL_STRIKE)); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SUNSTEEL_STRIKE, criticalHit: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNSTEEL_STRIKE, player); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/sleep_clause.c b/test/battle/sleep_clause.c index a5f28f4f22..7537fb437a 100644 --- a/test/battle/sleep_clause.c +++ b/test/battle/sleep_clause.c @@ -507,7 +507,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: G-Max Befuddle can only sleep one opposing mon { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_BEFUDDLE) == MAX_EFFECT_EFFECT_SPORE_FOES); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_BEFUDDLE, MOVE_EFFECT_EFFECT_SPORE_SIDE)); PLAYER(SPECIES_BUTTERFREE) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_CATERPIE); OPPONENT(SPECIES_WOBBUFFET); @@ -567,7 +567,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL); ASSUME(GetMoveEffect(MOVE_HEAL_BELL) == EFFECT_HEAL_BELL); - ASSUME(GetMoveEffect(MOVE_SPARKLY_SWIRL) == EFFECT_SPARKLY_SWIRL); + ASSUME(MoveHasAdditionalEffect(MOVE_SPARKLY_SWIRL, MOVE_EFFECT_AROMATHERAPY)); ASSUME(B_SLEEP_TURNS >= GEN_5); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); @@ -1131,7 +1131,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveMaxEffect(MOVE_G_MAX_SWEETNESS) == MAX_EFFECT_AROMATHERAPY); + ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_SWEETNESS, MOVE_EFFECT_AROMATHERAPY)); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); PLAYER(SPECIES_APPLETUN) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_WOBBUFFET); @@ -1147,7 +1147,6 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, playerRight); MESSAGE("Wobbuffet fell asleep!"); MESSAGE("Appletun used G-Max Sweetness!"); - MESSAGE("Wobbuffet's status returned to normal!"); MESSAGE("The opposing Wobbuffet used Spore!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponentRight); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, playerRight); diff --git a/test/battle/status1/paralysis.c b/test/battle/status1/paralysis.c index 85a784764e..4caeb3c509 100644 --- a/test/battle/status1/paralysis.c +++ b/test/battle/status1/paralysis.c @@ -1,14 +1,16 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Paralysis reduces Speed by 50%") +SINGLE_BATTLE_TEST("Paralysis reduces Speed by 50% (Gen 7+) or 75% (Gen 1-6)") { - u16 playerSpeed; + u32 playerSpeed, genConfig; bool32 playerFirst; - PARAMETRIZE { playerSpeed = 98; playerFirst = FALSE; } - PARAMETRIZE { playerSpeed = 102; playerFirst = TRUE; } + PARAMETRIZE { playerSpeed = 196; playerFirst = FALSE; genConfig = GEN_6; } + PARAMETRIZE { playerSpeed = 204; playerFirst = TRUE; genConfig = GEN_6; } + PARAMETRIZE { playerSpeed = 98; playerFirst = FALSE; genConfig = GEN_7; } + PARAMETRIZE { playerSpeed = 102; playerFirst = TRUE; genConfig = GEN_7; } GIVEN { - ASSUME(B_PARALYSIS_SPEED >= GEN_7); + WITH_CONFIG(GEN_CONFIG_PARALYSIS_SPEED, genConfig); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); Speed(playerSpeed); } OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } } WHEN { diff --git a/test/battle/status2/confusion.c b/test/battle/status2/confusion.c index c2ee92dd09..00ea0c2ed1 100644 --- a/test/battle/status2/confusion.c +++ b/test/battle/status2/confusion.c @@ -4,11 +4,14 @@ SINGLE_BATTLE_TEST("Confusion adds a 50/33% chance to hit self with 40 power") { s16 damage[2]; + u32 genConfig, pctChance; - ASSUME(GetMovePower(MOVE_TACKLE) == 40); - - PASSES_RANDOMLY(B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 ? 33 : 50, 100, RNG_CONFUSION); + PARAMETRIZE { genConfig = GEN_6; pctChance = 50; } + PARAMETRIZE { genConfig = GEN_7; pctChance = 33; } + PASSES_RANDOMLY(pctChance, 100, RNG_CONFUSION); GIVEN { + WITH_CONFIG(GEN_CONFIG_CONFUSION_SELF_DMG_CHANCE, genConfig); + ASSUME(GetMovePower(MOVE_TACKLE) == 40); PLAYER(SPECIES_WOBBUFFET) { Speed(1); }; OPPONENT(SPECIES_WOBBUFFET) { Speed(2); }; } WHEN { @@ -29,8 +32,13 @@ SINGLE_BATTLE_TEST("Confusion adds a 50/33% chance to hit self with 40 power") SINGLE_BATTLE_TEST("Confusion self hit does not consume Gems") { - PASSES_RANDOMLY(B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 ? 33 : 50, 100, RNG_CONFUSION); + u32 genConfig, pctChance; + + PARAMETRIZE { genConfig = GEN_6; pctChance = 50; } + PARAMETRIZE { genConfig = GEN_7; pctChance = 33; } + PASSES_RANDOMLY(pctChance, 100, RNG_CONFUSION); GIVEN { + WITH_CONFIG(GEN_CONFIG_CONFUSION_SELF_DMG_CHANCE, genConfig); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/trainer_control.c b/test/battle/trainer_control.c index bbc49c2ed5..89a5c905a9 100644 --- a/test/battle/trainer_control.c +++ b/test/battle/trainer_control.c @@ -6,12 +6,13 @@ #include "malloc.h" #include "random.h" #include "string_util.h" +#include "trainer_pools.h" #include "constants/item.h" #include "constants/abilities.h" #include "constants/trainers.h" #include "constants/battle.h" -#define NUM_TEST_TRAINERS 3 +#define NUM_TEST_TRAINERS 9 static const struct Trainer sTestTrainers[DIFFICULTY_COUNT][NUM_TEST_TRAINERS] = { @@ -33,8 +34,8 @@ enum DifficultyLevel GetTrainerDifficultyLevelTest(u16 trainerId) TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon") { - u32 currTrainer = 0; struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + u32 currTrainer = 0; u8 nickBuffer[20]; CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainers[GetTrainerDifficultyLevelTest(currTrainer)][currTrainer], TRUE, BATTLE_TYPE_TRAINER); EXPECT(IsMonShiny(&testParty[0])); @@ -220,3 +221,64 @@ TEST("Difficulty changes which party if used for NPCs if defined for the difficu EXPECT(GetMonData(&testParty[0], MON_DATA_LEVEL) == 50); Free(testParty); } + +TEST("Trainer Party Pool generates a party from the trainer pool") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + u32 currTrainer = 3; + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainers[GetTrainerDifficultyLevelTest(currTrainer)][currTrainer], TRUE, BATTLE_TYPE_TRAINER); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPECIES) == SPECIES_EEVEE); + Free(testParty); +} + +TEST("Trainer Party Pool picks a random lead and a random ace if tags exist in the pool") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + u32 currTrainer = 4; + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainers[GetTrainerDifficultyLevelTest(currTrainer)][currTrainer], TRUE, BATTLE_TYPE_TRAINER); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPECIES) == SPECIES_ARON); // Lead + EXPECT(GetMonData(&testParty[1], MON_DATA_SPECIES) == SPECIES_WYNAUT); // Not Lead or Ace + EXPECT(GetMonData(&testParty[2], MON_DATA_SPECIES) == SPECIES_EEVEE); // Ace + Free(testParty); +} + +TEST("Trainer Party Pool picks according to custom rules") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + u32 currTrainer = 5; + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainers[GetTrainerDifficultyLevelTest(currTrainer)][currTrainer], TRUE, BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPECIES) == SPECIES_TORKOAL); // Lead + Weather Setter + EXPECT(GetMonData(&testParty[1], MON_DATA_SPECIES) == SPECIES_BULBASAUR); // Lead + Weather Abuser + EXPECT(GetMonData(&testParty[2], MON_DATA_SPECIES) == SPECIES_EEVEE); // Anything else + Free(testParty); +} + +TEST("Trainer Party Pool uses standard party creation if pool is illegal") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + u32 currTrainer = 6; + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainers[GetTrainerDifficultyLevelTest(currTrainer)][currTrainer], TRUE, BATTLE_TYPE_TRAINER); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPECIES) == SPECIES_WYNAUT); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPECIES) == SPECIES_WOBBUFFET); + Free(testParty); +} + +TEST("Trainer Party Pool can be pruned before picking") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + u32 currTrainer = 7; + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainers[GetTrainerDifficultyLevelTest(currTrainer)][currTrainer], TRUE, BATTLE_TYPE_TRAINER); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPECIES) == SPECIES_EEVEE); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPECIES) == SPECIES_WYNAUT); + Free(testParty); +} + +TEST("Trainer Party Pool can choose which functions to use for picking mons") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + u32 currTrainer = 8; + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainers[GetTrainerDifficultyLevelTest(currTrainer)][currTrainer], TRUE, BATTLE_TYPE_TRAINER); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPECIES) == SPECIES_WYNAUT); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPECIES) == SPECIES_WOBBUFFET); + Free(testParty); +} diff --git a/test/battle/trainer_control.h b/test/battle/trainer_control.h index 5b8aa02291..703a436274 100644 --- a/test/battle/trainer_control.h +++ b/test/battle/trainer_control.h @@ -120,7 +120,7 @@ }, #line 45 #line 52 - [DIFFICULTY_HARD][1] = + [DIFFICULTY_NORMAL][2] = { #line 46 .trainerName = _("Test2"), @@ -138,12 +138,12 @@ { { #line 54 - .species = SPECIES_YVELTAL, + .species = SPECIES_MEWTWO, .gender = TRAINER_MON_RANDOM_GENDER, #line 56 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), #line 55 - .lvl = 99, + .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, @@ -151,7 +151,7 @@ }, #line 57 #line 64 - [DIFFICULTY_NORMAL][2] = + [DIFFICULTY_EASY][2] = { #line 58 .trainerName = _("Test2"), @@ -169,12 +169,12 @@ { { #line 66 - .species = SPECIES_MEWTWO, + .species = SPECIES_METAPOD, .gender = TRAINER_MON_RANDOM_GENDER, #line 68 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), #line 67 - .lvl = 50, + .lvl = 1, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, @@ -182,7 +182,7 @@ }, #line 69 #line 76 - [DIFFICULTY_EASY][2] = + [DIFFICULTY_HARD][2] = { #line 70 .trainerName = _("Test2"), @@ -200,23 +200,22 @@ { { #line 78 - .species = SPECIES_METAPOD, + .species = SPECIES_ARCEUS, .gender = TRAINER_MON_RANDOM_GENDER, #line 80 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), #line 79 - .lvl = 1, + .lvl = 99, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 81 -#line 88 - [DIFFICULTY_HARD][2] = + [DIFFICULTY_NORMAL][3] = { #line 82 - .trainerName = _("Test2"), + .trainerName = _("Test3"), #line 83 .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1, #line 84 @@ -226,19 +225,482 @@ TRAINER_ENCOUNTER_MUSIC_MALE, #line 87 .doubleBattle = FALSE, +#line 88 .partySize = 1, + .poolSize = 4, .party = (const struct TrainerMon[]) { { #line 90 - .species = SPECIES_ARCEUS, + .species = SPECIES_WYNAUT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 92 +#line 91 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), #line 91 - .lvl = 99, + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 92 + .species = SPECIES_WOBBUFFET, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 93 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 93 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 94 + .species = SPECIES_EEVEE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 95 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 95 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 96 + .species = SPECIES_MEW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 97 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 97 + .lvl = 100, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, +#line 98 + [DIFFICULTY_NORMAL][4] = + { +#line 99 + .trainerName = _("Test4"), +#line 100 + .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1, +#line 101 + .trainerPic = TRAINER_PIC_RED, + .encounterMusic_gender = +#line 103 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 104 + .doubleBattle = FALSE, +#line 105 + .partySize = 3, + .poolSize = 6, + .party = (const struct TrainerMon[]) + { + { +#line 107 + .species = SPECIES_WYNAUT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 108 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 108 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 109 + .species = SPECIES_WOBBUFFET, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 111 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 111 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 110 + .tags = MON_POOL_TAG_LEAD, + }, + { +#line 112 + .species = SPECIES_EEVEE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 114 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 114 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 113 + .tags = MON_POOL_TAG_ACE, + }, + { +#line 115 + .species = SPECIES_MEW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 116 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 116 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 117 + .species = SPECIES_ODDISH, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 119 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 119 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 118 + .tags = MON_POOL_TAG_ACE, + }, + { +#line 120 + .species = SPECIES_ARON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 122 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 122 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 121 + .tags = MON_POOL_TAG_LEAD, + }, + }, + }, +#line 123 + [DIFFICULTY_NORMAL][5] = + { +#line 124 + .trainerName = _("Test5"), +#line 125 + .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1, +#line 126 + .trainerPic = TRAINER_PIC_RED, + .encounterMusic_gender = +#line 128 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 129 + .doubleBattle = TRUE, +#line 131 + .poolRuleIndex = POOL_RULESET_WEATHER_DOUBLES, +#line 130 + .partySize = 3, + .poolSize = 10, + .party = (const struct TrainerMon[]) + { + { +#line 133 + .species = SPECIES_WYNAUT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 135 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 135 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 134 + .tags = MON_POOL_TAG_LEAD, + }, + { +#line 136 + .species = SPECIES_WOBBUFFET, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 138 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 138 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 137 + .tags = MON_POOL_TAG_LEAD, + }, + { +#line 139 + .species = SPECIES_VULPIX, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 141 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 141 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 140 + .tags = MON_POOL_TAG_LEAD | MON_POOL_TAG_WEATHER_SETTER, + }, + { +#line 142 + .species = SPECIES_BULBASAUR, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 144 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 144 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 143 + .tags = MON_POOL_TAG_LEAD | MON_POOL_TAG_WEATHER_ABUSER, + }, + { +#line 145 + .species = SPECIES_TORKOAL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 147 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 147 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 146 + .tags = MON_POOL_TAG_LEAD | MON_POOL_TAG_WEATHER_SETTER, + }, + { +#line 148 + .species = SPECIES_CHERRIM, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 150 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 150 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 149 + .tags = MON_POOL_TAG_LEAD | MON_POOL_TAG_WEATHER_ABUSER, + }, + { +#line 151 + .species = SPECIES_MEW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 153 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 153 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 152 + .tags = MON_POOL_TAG_LEAD, + }, + { +#line 154 + .species = SPECIES_ARON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 156 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 156 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 155 + .tags = MON_POOL_TAG_LEAD, + }, + { +#line 157 + .species = SPECIES_ODDISH, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 158 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 158 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 159 + .species = SPECIES_EEVEE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 160 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 160 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 161 + [DIFFICULTY_NORMAL][6] = + { +#line 162 + .trainerName = _("Test6"), +#line 163 + .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1, +#line 164 + .trainerPic = TRAINER_PIC_RED, + .encounterMusic_gender = +#line 166 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 167 + .doubleBattle = FALSE, +#line 169 + .poolRuleIndex = POOL_RULESET_BASIC, +#line 168 + .partySize = 2, + .poolSize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 171 + .species = SPECIES_WYNAUT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 173 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 173 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 172 + .tags = MON_POOL_TAG_LEAD, + }, + { +#line 174 + .species = SPECIES_WOBBUFFET, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 176 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 176 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 175 + .tags = MON_POOL_TAG_LEAD, + }, + { +#line 177 + .species = SPECIES_EEVEE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 179 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 179 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 178 + .tags = MON_POOL_TAG_LEAD, + }, + }, + }, +#line 180 + [DIFFICULTY_NORMAL][7] = + { +#line 181 + .trainerName = _("Test1"), +#line 182 + .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1, +#line 183 + .trainerPic = TRAINER_PIC_RED, + .encounterMusic_gender = +#line 185 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 186 + .doubleBattle = FALSE, +#line 188 + .poolRuleIndex = POOL_RULESET_BASIC, +#line 189 + .poolPruneIndex = POOL_PRUNE_TEST, +#line 187 + .partySize = 2, + .poolSize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 191 + .species = SPECIES_WYNAUT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 192 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 192 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 193 + .species = SPECIES_WOBBUFFET, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 195 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 195 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 194 + .tags = MON_POOL_TAG_LEAD, + }, + { +#line 196 + .species = SPECIES_EEVEE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 197 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 197 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 198 + [DIFFICULTY_NORMAL][8] = + { +#line 199 + .trainerName = _("Test1"), +#line 200 + .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1, +#line 201 + .trainerPic = TRAINER_PIC_RED, + .encounterMusic_gender = +#line 203 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 204 + .doubleBattle = FALSE, +#line 206 + .poolRuleIndex = POOL_RULESET_BASIC, +#line 207 + .poolPickIndex = POOL_PICK_LOWEST, +#line 205 + .partySize = 2, + .poolSize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 209 + .species = SPECIES_WYNAUT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 211 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 211 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 210 + .tags = MON_POOL_TAG_ACE, + }, + { +#line 212 + .species = SPECIES_WOBBUFFET, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 213 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 213 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 214 + .species = SPECIES_EEVEE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 216 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 216 + .lvl = 100, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, +#line 215 + .tags = MON_POOL_TAG_LEAD, + }, + }, + }, diff --git a/test/battle/trainer_control.party b/test/battle/trainer_control.party index 3357bb70fe..b4ba68c6b1 100644 --- a/test/battle/trainer_control.party +++ b/test/battle/trainer_control.party @@ -42,18 +42,6 @@ Difficulty: Normal Mewtwo Level: 5 -=== 1 === -Name: Test2 -Class: Pkmn Trainer 1 -Pic: Red -Gender: Male -Music: Male -Double Battle: No -Difficulty: HARD - -Yveltal -Level: 99 - === 2 === Name: Test2 Class: Pkmn Trainer 1 @@ -89,3 +77,139 @@ Difficulty: Hard Arceus Level: 99 + +=== 3 === +Name: Test3 +Class: Pkmn Trainer 1 +Pic: Red +Gender: Male +Music: Male +Double Battle: No +Party Size: 1 + +Wynaut + +Wobbuffet + +Eevee + +Mew + +=== 4 === +Name: Test4 +Class: Pkmn Trainer 1 +Pic: Red +Gender: Male +Music: Male +Double Battle: No +Party Size: 3 + +Wynaut + +Wobbuffet +Tags: Lead + +Eevee +Tags: Ace + +Mew + +Oddish +Tags: Ace + +Aron +Tags: Lead + +=== 5 === +Name: Test5 +Class: Pkmn Trainer 1 +Pic: Red +Gender: Male +Music: Male +Double Battle: Yes +Party Size: 3 +Pool Rules: Weather Doubles + +Wynaut +Tags: Lead + +Wobbuffet +Tags: Lead + +Vulpix +Tags: Lead / Weather Setter + +Bulbasaur +Tags: Lead / Weather Abuser + +Torkoal +Tags: Lead / Weather Setter + +Cherrim +Tags: Lead / Weather Abuser + +Mew +Tags: Lead + +Aron +Tags: Lead + +Oddish + +Eevee + +=== 6 === +Name: Test6 +Class: Pkmn Trainer 1 +Pic: Red +Gender: Male +Music: Male +Double Battle: No +Party Size: 2 +Pool Rules: Basic + +Wynaut +Tags: Lead + +Wobbuffet +Tags: Lead + +Eevee +Tags: Lead + +=== 7 === +Name: Test1 +Class: Pkmn Trainer 1 +Pic: Red +Gender: Male +Music: Male +Double Battle: No +Party Size: 2 +Pool Rules: Basic +Pool Prune: Test + +Wynaut + +Wobbuffet +Tags: Lead + +Eevee + +=== 8 === +Name: Test1 +Class: Pkmn Trainer 1 +Pic: Red +Gender: Male +Music: Male +Double Battle: No +Party Size: 2 +Pool Rules: Basic +Pool Pick Functions: Lowest + +Wynaut +Tags: Ace + +Wobbuffet + +Eevee +Tags: Lead diff --git a/test/battle/trainer_slides.c b/test/battle/trainer_slides.c index b5bb127a0c..3ad0c38248 100644 --- a/test/battle/trainer_slides.c +++ b/test/battle/trainer_slides.c @@ -141,7 +141,7 @@ SINGLE_BATTLE_TEST("Trainer Slide: Last Half Hp") { gBattleTestRunnerState->data.recordedBattle.opponentA = TRAINER_SLIDE_LAST_HALF_HP; GIVEN { - ASSUME(gMovesInfo[MOVE_SUPER_FANG].effect == EFFECT_SUPER_FANG); + ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_SUPER_FANG); ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].baseHP == 190); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/daycare.c b/test/daycare.c new file mode 100644 index 0000000000..1f142f1154 --- /dev/null +++ b/test/daycare.c @@ -0,0 +1,164 @@ +#include "global.h" +#include "daycare.h" +#include "event_data.h" +#include "malloc.h" +#include "party_menu.h" +#include "regions.h" +#include "test/overworld_script.h" +#include "test/test.h" + +// We don't run the StoreSelectedPokemonInDaycare special because it relies on calling the +// party select screen and the GetCursorSelectionMonId function, so we store directly to the struct. +#define STORE_IN_DAYCARE_AND_GET_EGG() \ + StorePokemonInDaycare(&gPlayerParty[0], &gSaveBlock1Ptr->daycare.mons[0]); \ + StorePokemonInDaycare(&gPlayerParty[0], &gSaveBlock1Ptr->daycare.mons[1]); \ + RUN_OVERWORLD_SCRIPT( special GiveEggFromDaycare; ); + +TEST("(Daycare) Pokémon generate Eggs of the lowest member of the evolutionary family") +{ + ASSUME(P_FAMILY_PIKACHU == TRUE); + ASSUME(P_GEN_2_CROSS_EVOS == TRUE); + + ZeroPlayerPartyMons(); + RUN_OVERWORLD_SCRIPT( + givemon SPECIES_PIKACHU, 100, gender=MON_MALE; + givemon SPECIES_PIKACHU, 100, gender=MON_FEMALE; + ); + STORE_IN_DAYCARE_AND_GET_EGG(); + + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_PICHU); +} + +TEST("(Daycare) Pokémon offspring species is based off the mother's species") +{ + u32 offspring = 0; + ASSUME(P_FAMILY_PIKACHU == TRUE); + ASSUME(P_GEN_2_CROSS_EVOS == TRUE); + ASSUME(P_FAMILY_RIOLU == TRUE); + + ZeroPlayerPartyMons(); + PARAMETRIZE { offspring = SPECIES_RIOLU; RUN_OVERWORLD_SCRIPT(givemon SPECIES_PIKACHU, 100, gender=MON_MALE; givemon SPECIES_LUCARIO, 100, gender=MON_FEMALE, item=ITEM_NONE; ); } + PARAMETRIZE { offspring = SPECIES_PICHU; RUN_OVERWORLD_SCRIPT(givemon SPECIES_PIKACHU, 100, gender=MON_FEMALE; givemon SPECIES_LUCARIO, 100, gender=MON_MALE;); } + STORE_IN_DAYCARE_AND_GET_EGG(); + + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), offspring); +} + +TEST("(Daycare) Pokémon can breed with Ditto if they don't belong to the Ditto or No Eggs Discovered group") +{ + u32 j = 0; + u32 parentSpecies = 0; + + ZeroPlayerPartyMons(); + for (j = 1; j < NUM_SPECIES; j++) + PARAMETRIZE { parentSpecies = j; } + VarSet(VAR_TEMP_C, parentSpecies); + RUN_OVERWORLD_SCRIPT( + givemon SPECIES_DITTO, 100; givemon VAR_TEMP_C, 100; + ); + STORE_IN_DAYCARE_AND_GET_EGG(); + + if (gSpeciesInfo[parentSpecies].eggGroups[0] != EGG_GROUP_NO_EGGS_DISCOVERED + && gSpeciesInfo[parentSpecies].eggGroups[0] != EGG_GROUP_DITTO) + EXPECT_NE(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_NONE); + else + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_NONE); +} + +TEST("(Daycare) Shellos' form is always based on the mother's form") +{ + u32 offspring = 0; + ASSUME(P_FAMILY_MEOWTH == TRUE); + ASSUME(P_ALOLAN_FORMS == TRUE); + ASSUME(P_GALARIAN_FORMS == TRUE); + + ZeroPlayerPartyMons(); + PARAMETRIZE { offspring = SPECIES_SHELLOS_WEST; RUN_OVERWORLD_SCRIPT(givemon SPECIES_SHELLOS_EAST, 1, gender=MON_MALE; givemon SPECIES_SHELLOS_WEST, 1, gender=MON_FEMALE, item=ITEM_NONE; ); } + PARAMETRIZE { offspring = SPECIES_SHELLOS_WEST; RUN_OVERWORLD_SCRIPT(givemon SPECIES_SHELLOS_EAST, 1, gender=MON_MALE, item=ITEM_EVERSTONE; givemon SPECIES_SHELLOS_WEST, 1, gender=MON_FEMALE, item=ITEM_NONE; ); } + PARAMETRIZE { offspring = SPECIES_SHELLOS_WEST; RUN_OVERWORLD_SCRIPT(givemon SPECIES_SHELLOS_EAST, 1, gender=MON_MALE; givemon SPECIES_SHELLOS_WEST, 1, gender=MON_FEMALE, item=ITEM_EVERSTONE;); } + PARAMETRIZE { offspring = SPECIES_SHELLOS_EAST; RUN_OVERWORLD_SCRIPT(givemon SPECIES_SHELLOS_WEST, 1, gender=MON_MALE; givemon SPECIES_SHELLOS_EAST, 1, gender=MON_FEMALE, item=ITEM_NONE; ); } + PARAMETRIZE { offspring = SPECIES_SHELLOS_EAST; RUN_OVERWORLD_SCRIPT(givemon SPECIES_SHELLOS_WEST, 1, gender=MON_MALE, item=ITEM_EVERSTONE; givemon SPECIES_SHELLOS_EAST, 1, gender=MON_FEMALE, item=ITEM_NONE; ); } + PARAMETRIZE { offspring = SPECIES_SHELLOS_EAST; RUN_OVERWORLD_SCRIPT(givemon SPECIES_SHELLOS_WEST, 1, gender=MON_MALE; givemon SPECIES_SHELLOS_EAST, 1, gender=MON_FEMALE, item=ITEM_EVERSTONE;); } + STORE_IN_DAYCARE_AND_GET_EGG(); + + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), offspring); +} + +TEST("(Daycare) Pokémon with regional forms give the correct offspring") +{ + u32 region = 0, offspring = 0, species1 = 0, item1 = 0, species2 = 0, item2 = 0; + + ZeroPlayerPartyMons(); + + region = GetCurrentRegion(); + if (region == REGION_ALOLA) { + PARAMETRIZE { offspring=SPECIES_MEOWTH_ALOLA; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_ALOLA; item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_ALOLA; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_ALOLA; item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_ALOLA; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR; item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR; item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_ALOLA; species1=SPECIES_DIGLETT; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR; item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_DIGLETT; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR; item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_PERRSERKER; item1=ITEM_EVERSTONE; species2=SPECIES_PERSIAN; item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH; species1=SPECIES_PERRSERKER; item1=ITEM_EVERSTONE; species2=SPECIES_PERSIAN; item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH; species1=SPECIES_PERSIAN_ALOLA; item1=ITEM_EVERSTONE; species2=SPECIES_PERSIAN; item2=ITEM_EVERSTONE; } + } else if (region == REGION_GALAR) { + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_ALOLA; item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_ALOLA; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_ALOLA; item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR; item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR; item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_DIGLETT; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR; item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_DIGLETT; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR; item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_PERRSERKER; item1=ITEM_EVERSTONE; species2=SPECIES_PERSIAN; item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH; species1=SPECIES_PERRSERKER; item1=ITEM_EVERSTONE; species2=SPECIES_PERSIAN; item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH; species1=SPECIES_PERSIAN_ALOLA; item1=ITEM_EVERSTONE; species2=SPECIES_PERSIAN; item2=ITEM_EVERSTONE; } + } else { + PARAMETRIZE { offspring=SPECIES_MEOWTH; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_ALOLA, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_ALOLA; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_ALOLA, item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_MEOWTH; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR, item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH; species1=SPECIES_DIGLETT; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_DIGLETT; item1=ITEM_NONE; species2=SPECIES_MEOWTH_GALAR, item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH_GALAR; species1=SPECIES_PERRSERKER; item1=ITEM_EVERSTONE; species2=SPECIES_PERSIAN, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH; species1=SPECIES_PERRSERKER; item1=ITEM_EVERSTONE; species2=SPECIES_PERSIAN, item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_MEOWTH; species1=SPECIES_PERSIAN_ALOLA; item1=ITEM_EVERSTONE; species2=SPECIES_PERSIAN, item2=ITEM_EVERSTONE; } + } + + if (region == REGION_HISUI) { + PARAMETRIZE { offspring=SPECIES_SNEASEL_HISUI; species1=SPECIES_SNEASEL; item1=ITEM_NONE; species2=SPECIES_SNEASEL_HISUI, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_SNEASEL; species1=SPECIES_SNEASEL; item1=ITEM_EVERSTONE; species2=SPECIES_SNEASEL_HISUI, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_SNEASEL_HISUI; species1=SPECIES_SNEASEL; item1=ITEM_NONE; species2=SPECIES_SNEASEL_HISUI, item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_SNEASEL; species1=SPECIES_SNEASLER; item1=ITEM_EVERSTONE; species2=SPECIES_WEAVILE, item2=ITEM_EVERSTONE; } + } else { + PARAMETRIZE { offspring=SPECIES_SNEASEL; species1=SPECIES_SNEASEL; item1=ITEM_NONE; species2=SPECIES_SNEASEL_HISUI, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_SNEASEL; species1=SPECIES_SNEASEL; item1=ITEM_EVERSTONE; species2=SPECIES_SNEASEL_HISUI, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_SNEASEL_HISUI; species1=SPECIES_SNEASEL; item1=ITEM_NONE; species2=SPECIES_SNEASEL_HISUI, item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_SNEASEL; species1=SPECIES_SNEASLER; item1=ITEM_EVERSTONE; species2=SPECIES_WEAVILE, item2=ITEM_EVERSTONE; } + } + + if (region == REGION_PALDEA) { + PARAMETRIZE { offspring=SPECIES_WOOPER_PALDEA; species1=SPECIES_WOOPER; item1=ITEM_NONE; species2=SPECIES_WOOPER_PALDEA, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_WOOPER; species1=SPECIES_WOOPER; item1=ITEM_EVERSTONE; species2=SPECIES_WOOPER_PALDEA, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_WOOPER_PALDEA; species1=SPECIES_WOOPER; item1=ITEM_NONE; species2=SPECIES_WOOPER_PALDEA, item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_WOOPER; species1=SPECIES_CLODSIRE; item1=ITEM_EVERSTONE; species2=SPECIES_QUAGSIRE, item2=ITEM_EVERSTONE; } + } else { + PARAMETRIZE { offspring=SPECIES_WOOPER; species1=SPECIES_WOOPER; item1=ITEM_NONE; species2=SPECIES_WOOPER_PALDEA, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_WOOPER; species1=SPECIES_WOOPER; item1=ITEM_EVERSTONE; species2=SPECIES_WOOPER_PALDEA, item2=ITEM_NONE; } + PARAMETRIZE { offspring=SPECIES_WOOPER_PALDEA; species1=SPECIES_WOOPER; item1=ITEM_NONE; species2=SPECIES_WOOPER_PALDEA, item2=ITEM_EVERSTONE; } + PARAMETRIZE { offspring=SPECIES_WOOPER; species1=SPECIES_CLODSIRE; item1=ITEM_EVERSTONE; species2=SPECIES_QUAGSIRE, item2=ITEM_EVERSTONE; } + } + ASSUME(IsSpeciesEnabled(species1) == TRUE); + ASSUME(IsSpeciesEnabled(species2) == TRUE); + ASSUME(IsSpeciesEnabled(offspring) == TRUE); + + VarSet(VAR_0x8000, species1); + VarSet(VAR_0x8001, item1); + VarSet(VAR_0x8002, species2); + VarSet(VAR_0x8003, item2); + + RUN_OVERWORLD_SCRIPT(givemon VAR_0x8000, 1, gender=MON_MALE, item=VAR_0x8001;); + RUN_OVERWORLD_SCRIPT(givemon VAR_0x8002, 1, gender=MON_FEMALE, item=VAR_0x8003;); + + STORE_IN_DAYCARE_AND_GET_EGG(); + + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), offspring); +} diff --git a/test/text.c b/test/text.c index 781aaaed3e..7650c2dd59 100644 --- a/test/text.c +++ b/test/text.c @@ -612,8 +612,8 @@ TEST("Battle strings fit on the battle message window") sBattlerAbilities[j] = longAbilityID; // Set Trainers - gTrainerBattleOpponent_A = 1; - gTrainerBattleOpponent_B = 1; + TRAINER_BATTLE_PARAM.opponentA = 1; + TRAINER_BATTLE_PARAM.opponentB = 1; // Set battler to 1, so "The opposing " is prefixed when refering to battlers. gBattleTypeFlags |= BATTLE_TYPE_TRAINER; diff --git a/tools/trainerproc/main.c b/tools/trainerproc/main.c index db49633ee3..b301ddf552 100644 --- a/tools/trainerproc/main.c +++ b/tools/trainerproc/main.c @@ -16,8 +16,9 @@ #define MAX_TRAINER_AI_FLAGS 32 #define MAX_TRAINER_ITEMS 4 -#define PARTY_SIZE 6 +#define PARTY_SIZE 255 #define MAX_MON_MOVES 4 +#define MAX_MON_TAGS 32 struct String { @@ -82,6 +83,10 @@ struct Pokemon struct String moves[MAX_MON_MOVES]; int moves_n; int move1_line; + + struct String tags[MAX_MON_TAGS]; + int tags_n; + int tags_line; }; struct Trainer @@ -126,6 +131,18 @@ struct Trainer struct String difficulty; int difficulty_line; + + int party_size; + int party_size_line; + + struct String pool_rules; + int pool_rules_line; + + struct String pool_pick_functions; + int pool_pick_functions_line; + + struct String pool_prune; + int pool_prune_line; }; static bool is_empty_string(struct String s) @@ -1205,9 +1222,38 @@ static bool parse_trainer(struct Parser *p, const struct Parsed *parsed, struct trainer->difficulty_line = value.location.line; trainer->difficulty = token_string(&value); } + else if (is_literal_token(&key, "Party Size")) + { + if (trainer->party_size_line) + any_error = !set_show_parse_error(p, key.location, "duplicate 'Party Size'"); + trainer->party_size_line = value.location.line; + if (!token_int(p, &value, &trainer->party_size)) + any_error = !show_parse_error(p); + } + else if (is_literal_token(&key, "Pool Rules")) + { + if (trainer->pool_rules_line) + any_error = !set_show_parse_error(p, key.location, "duplicate 'Pool Rules'"); + trainer->pool_rules_line = value.location.line; + trainer->pool_rules = token_string(&value); + } + else if (is_literal_token(&key, "Pool Pick Functions")) + { + if (trainer->pool_pick_functions_line) + any_error = !set_show_parse_error(p, key.location, "duplicate 'Pool Pick Function'"); + trainer->pool_pick_functions_line = value.location.line; + trainer->pool_pick_functions = token_string(&value); + } + else if (is_literal_token(&key, "Pool Prune")) + { + if (trainer->pool_prune_line) + any_error = !set_show_parse_error(p, key.location, "duplicate 'Pool Prune'"); + trainer->pool_prune_line = value.location.line; + trainer->pool_prune = token_string(&value); + } else { - any_error = !set_show_parse_error(p, key.location, "expected one of 'Name', 'Class', 'Pic', 'Gender', 'Music', 'Items', 'Double Battle', 'Difficulty', or 'AI'"); + any_error = !set_show_parse_error(p, key.location, "expected one of 'Name', 'Class', 'Pic', 'Gender', 'Music', 'Items', 'Double Battle', 'Difficulty', 'Party Size', 'Pool Rules', 'Pool Pick Functions', 'Pool Prune' or 'AI'"); } } if (!trainer->pic_line) @@ -1371,6 +1417,14 @@ static bool parse_trainer(struct Parser *p, const struct Parsed *parsed, struct pokemon->tera_type_line = value.location.line; pokemon->tera_type = token_string(&value); } + else if (is_literal_token(&key, "Tags")) + { + if (pokemon->tags_line) + any_error = !set_show_parse_error(p, key.location, "duplicate 'Tags'"); + pokemon->tags_line = value.location.line; + if (!token_human_identifiers(p, &value, pokemon->tags, &pokemon->tags_n, MAX_MON_TAGS)) + any_error = !show_parse_error(p); + } else { any_error = !set_show_parse_error(p, key.location, "expected one of 'EVs', 'IVs', 'Ability', 'Level', 'Ball', 'Happiness', 'Nature', 'Shiny', 'Dynamax Level', 'Gigantamax', or 'Tera Type'"); @@ -1434,6 +1488,11 @@ static bool parse_trainer(struct Parser *p, const struct Parsed *parsed, struct } } + if (trainer->party_size_line && trainer->party_size > trainer->pokemon_n) + { + set_show_parse_error(p, p->location, "partySize larger than supplied pool"); + } + return !any_error; } @@ -1735,9 +1794,44 @@ static void fprint_trainers(const char *output_path, FILE *f, struct Parsed *par fprintf(f, ",\n"); } - fprintf(f, " .partySize = %d,\n", trainer->pokemon_n); - fprintf(f, " .party = (const struct TrainerMon[])\n"); - fprintf(f, " {\n"); + if (!is_empty_string(trainer->pool_rules)) + { + fprintf(f, "#line %d\n", trainer->pool_rules_line); + fprintf(f, " .poolRuleIndex = "); + fprint_constant(f, "POOL_RULESET", trainer->pool_rules); + fprintf(f, ",\n"); + } + + if (!is_empty_string(trainer->pool_pick_functions)) + { + fprintf(f, "#line %d\n", trainer->pool_pick_functions_line); + fprintf(f, " .poolPickIndex = "); + fprint_constant(f, "POOL_PICK", trainer->pool_pick_functions); + fprintf(f, ",\n"); + } + + if (!is_empty_string(trainer->pool_prune)) + { + fprintf(f, "#line %d\n", trainer->pool_prune_line); + fprintf(f, " .poolPruneIndex = "); + fprint_constant(f, "POOL_PRUNE", trainer->pool_prune); + fprintf(f, ",\n"); + } + + if (trainer->party_size_line) + { + fprintf(f, "#line %d\n", trainer->party_size_line); + fprintf(f, " .partySize = %d,\n", trainer->party_size); + fprintf(f, " .poolSize = %d,\n", trainer->pokemon_n); + fprintf(f, " .party = (const struct TrainerMon[])\n"); + fprintf(f, " {\n"); + } + else + { + fprintf(f, " .partySize = %d,\n", trainer->pokemon_n); + fprintf(f, " .party = (const struct TrainerMon[])\n"); + fprintf(f, " {\n"); + } for (int j = 0; j < trainer->pokemon_n; j++) { struct Pokemon *pokemon = &trainer->pokemon[j]; @@ -1873,6 +1967,19 @@ static void fprint_trainers(const char *output_path, FILE *f, struct Parsed *par fprintf(f, ",\n"); } + if (pokemon->tags_line) + { + fprintf(f, "#line %d\n", pokemon->tags_line); + fprintf(f, " .tags = "); + for (int i = 0; i < pokemon->tags_n; i++) + { + if (i > 0) + fprintf(f, " | "); + fprint_constant(f, "MON_POOL_TAG", pokemon->tags[i]); + } + fprintf(f, ",\n"); + } + if (pokemon->moves_n > 0) { fprintf(f, " .moves = {\n");