diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index c4404a039..e838ba1f8 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,8 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.5.1 (Default) + - 1.5.3 (Default) - upcoming (Edge) + - 1.5.2 + - 1.5.1 - 1.5.0 - 1.4.3 - 1.4.2 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index a24757fc7..d0653094c 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,8 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.5.1 (Default) + - 1.5.3 (Default) - upcoming (Edge) + - 1.5.2 + - 1.5.1 - 1.5.0 - 1.4.3 - 1.4.2 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index e25695c0b..51998d730 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,8 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.5.1 (Default) + - 1.5.3 (Default) - upcoming (Edge) + - 1.5.2 + - 1.5.1 - 1.5.0 - 1.4.3 - 1.4.2 diff --git a/Makefile b/Makefile index f107a09d4..3787bbe5d 100644 --- a/Makefile +++ b/Makefile @@ -450,7 +450,7 @@ $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt # NOTE: Based on C_DEP above, but without NODEP and KEEP_TEMPS handling. define TEST_DEP -$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib -I test $2) +$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) @echo "$$(CC1) -o $$@ $$<" @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - endef diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 275cc40a8..25898a7d8 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1318,7 +1318,7 @@ .2byte \holdEffect .4byte \jumpInstr .endm - + .macro dostockpilestatchangeswearoff, battler:req, statChangeInstr:req callnative BS_DoStockpileStatChangesWearOff .byte \battler @@ -1354,7 +1354,7 @@ .macro setsnow callnative BS_SetSnow .endm - + .macro setzeffect callnative BS_SetZEffect .endm @@ -1364,12 +1364,6 @@ callnative BS_TrySymbiosis .endm - @ returns TRUE or FALSE to gBattleCommunication[0] - .macro canteleport battler:req - callnative BS_CanTeleport - .byte \battler - .endm - @ returns B_SIDE_x to gBattleCommunication[0] .macro getbattlerside battler:req callnative BS_GetBattlerSide @@ -1643,6 +1637,11 @@ .byte \case .endm + .macro handleultraburst battler:req, case:req + various \battler, VARIOUS_HANDLE_ULTRA_BURST + .byte \case + .endm + .macro handleformchange battler:req, case:req various \battler, VARIOUS_HANDLE_FORM_CHANGE .byte \case @@ -2083,7 +2082,7 @@ .macro swapsidestatuses various BS_ATTACKER, VARIOUS_SWAP_SIDE_STATUSES .endm - + .macro swapstats stat:req various BS_ATTACKER, VARIOUS_SWAP_STATS .byte \stat @@ -2184,6 +2183,11 @@ jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpInstr .endm + .macro jumpifside battler:req, side:req, equalJumpInstr:req + getbattlerside \battler + jumpifbyte CMP_EQUAL, gBattleCommunication, \side, \equalJumpInstr + .endm + .macro jumpifbattletype flags:req, jumpInstr:req jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpInstr .endm diff --git a/common_syms/battle_controllers.txt b/common_syms/battle_controllers.txt new file mode 100644 index 000000000..0b3c25266 --- /dev/null +++ b/common_syms/battle_controllers.txt @@ -0,0 +1,3 @@ +gBattlerControllerFuncs +gBattleControllerData +gBattlerControllerEndFuncs diff --git a/common_syms/battle_main.txt b/common_syms/battle_main.txt index f6f02c48d..7a9faa5a1 100644 --- a/common_syms/battle_main.txt +++ b/common_syms/battle_main.txt @@ -2,8 +2,6 @@ gPreBattleCallback1 gBattleMainFunc gBattleResults gLeveledUpInBattle -gBattlerControllerFuncs gHealthboxSpriteIds gMultiUsePlayerCursor gNumberOfMovesToChoose -gBattleControllerData diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index cef036f8b..62772a5c1 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -947,6 +947,7 @@ gBattleAnims_General:: .4byte General_ZMoveActivate @ B_ANIM_ZMOVE_ACTIVATE .4byte General_AffectionHangedOn @ B_ANIM_AFFECTION_HANGED_ON .4byte General_Snow @ B_ANIM_SNOW_CONTINUES + .4byte General_UltraBurst @ B_ANIM_ULTRA_BURST .align 2 gBattleAnims_Special:: @@ -27002,6 +27003,43 @@ General_PrimalReversion_Omega: blendoff end +General_UltraBurst:: + loadspritegfx ANIM_TAG_ULTRA_BURST_SYMBOL + loadspritegfx ANIM_TAG_SPARK_2 @spark + loadspritegfx ANIM_TAG_LEAF @green + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge particles + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @psycho boost + monbg ANIM_ATTACKER + setalpha 12, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ADJACENT), 0x2, 0x0, 0xF, 0x0000 + waitforvisualfinish + createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 60, 2, 12 @ charge particles to attacker + delay 0x1e + loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0xe, 0xa + createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 3, 0x0 + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + delay 20 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA + createvisualtask AnimTask_TransformMon, 2, 1, 0 + createsprite gUltraBurstSymbolSpriteTemplate, ANIM_ATTACKER, 0x0, 0x0, 0x0, 0x0, 0x0 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA + createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 + waitforvisualfinish + createvisualtask SoundTask_PlayNormalCry, 0 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + end + General_AffectionHangedOn:: loadspritegfx ANIM_TAG_RED_HEART loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 12, 3 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 056aaa673..eb5d4c772 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -4023,6 +4023,8 @@ BattleScript_MoveMissedDoDamage:: .if B_CRASH_IF_TARGET_IMMUNE < GEN_4 jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd .endif + moveendcase MOVEEND_PROTECT_LIKE_EFFECT @ Spiky Shield's damage happens before recoil. + jumpifhasnohp BS_ATTACKER, BattleScript_MoveEnd printstring STRINGID_PKMNCRASHED waitmessage B_WAIT_TIME_LONG damagecalc @@ -5048,7 +5050,7 @@ BattleScript_EffectBatonPass:: goto BattleScript_MoveEnd BattleScript_EffectRapidSpin:: -.if B_SPEED_BUFFING_RAPID_SPIN == GEN_8 +.if B_SPEED_BUFFING_RAPID_SPIN >= GEN_8 call BattleScript_EffectHit_Ret jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd setmoveeffect MOVE_EFFECT_RAPIDSPIN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN @@ -5300,15 +5302,14 @@ BattleScript_EffectHurricane: BattleScript_EffectTeleport: attackcanceler attackstring - ppreduce .if B_TELEPORT_BEHAVIOR >= GEN_7 - canteleport BS_ATTACKER - jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_EffectTeleportNew - goto BattleScript_ButItFailed + jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_EffectBatonPass + jumpifside BS_ATTACKER, B_SIDE_PLAYER, BattleScript_EffectBatonPass .else jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_ButItFailed .endif BattleScript_EffectTeleportTryToRunAway: + ppreduce getifcantrunfrombattle BS_ATTACKER jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FORBIDDEN, BattleScript_ButItFailed jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FAILURE, BattleScript_PrintAbilityMadeIneffective @@ -5319,29 +5320,6 @@ BattleScript_EffectTeleportTryToRunAway: setoutcomeonteleport BS_ATTACKER goto BattleScript_MoveEnd -BattleScript_EffectTeleportNew: - getbattlerside BS_ATTACKER - jumpifbyte CMP_EQUAL, gBattleCommunication, B_SIDE_OPPONENT, BattleScript_EffectTeleportTryToRunAway - attackanimation - waitanimation - openpartyscreen BS_ATTACKER, BattleScript_EffectTeleportNewEnd - switchoutabilities BS_ATTACKER - waitstate - switchhandleorder BS_ATTACKER, 2 - returntoball BS_ATTACKER - getswitchedmondata BS_ATTACKER - switchindataupdate BS_ATTACKER - hpthresholds BS_ATTACKER - trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 - printstring STRINGID_SWITCHINMON - switchinanim BS_ATTACKER, TRUE - waitstate - switchineffects BS_ATTACKER -BattleScript_EffectTeleportNewEnd: - goto BattleScript_MoveEnd - BattleScript_EffectBeatUp:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE @@ -7818,6 +7796,21 @@ BattleScript_PrimalReversionRet:: switchinabilities BS_ATTACKER return +BattleScript_UltraBurst:: + printstring STRINGID_EMPTYSTRING3 + trytrainerslidezmovemsg BS_ATTACKER + printstring STRINGID_ULTRABURSTREACTING + waitmessage B_WAIT_TIME_LONG + setbyte gIsCriticalHit, 0 + handleultraburst BS_ATTACKER, 0 + playanimation BS_ATTACKER, B_ANIM_ULTRA_BURST + waitanimation + handleultraburst BS_ATTACKER, 1 + printstring STRINGID_ULTRABURSTCOMPLETED + waitmessage B_WAIT_TIME_LONG + switchinabilities BS_ATTACKER + end3 + BattleScript_AttackerFormChange:: pause 5 copybyte gBattlerAbility, gBattlerAttacker diff --git a/graphics/battle_interface/burst_trigger.png b/graphics/battle_interface/burst_trigger.png new file mode 100644 index 000000000..e3eb6384d Binary files /dev/null and b/graphics/battle_interface/burst_trigger.png differ diff --git a/graphics/battle_interface/last_used_ball_l_cycle.png b/graphics/battle_interface/last_used_ball_l_cycle.png new file mode 100644 index 000000000..58115f5a5 Binary files /dev/null and b/graphics/battle_interface/last_used_ball_l_cycle.png differ diff --git a/graphics/battle_interface/last_used_ball_r_cycle.png b/graphics/battle_interface/last_used_ball_r_cycle.png new file mode 100644 index 000000000..0a73148e1 Binary files /dev/null and b/graphics/battle_interface/last_used_ball_r_cycle.png differ diff --git a/graphics/items/icons/berserk_gene.png b/graphics/items/icons/berserk_gene.png index faac0f676..54007c804 100644 Binary files a/graphics/items/icons/berserk_gene.png and b/graphics/items/icons/berserk_gene.png differ diff --git a/graphics/items/icons/black_augurite.png b/graphics/items/icons/black_augurite.png index 8be2bc188..1d755a905 100644 Binary files a/graphics/items/icons/black_augurite.png and b/graphics/items/icons/black_augurite.png differ diff --git a/graphics/items/icons/clear_amulet.png b/graphics/items/icons/clear_amulet.png index 2e11a0510..a9c2b08c8 100644 Binary files a/graphics/items/icons/clear_amulet.png and b/graphics/items/icons/clear_amulet.png differ diff --git a/graphics/items/icons/linking_cord.png b/graphics/items/icons/linking_cord.png index a3f92da04..079f1d8db 100644 Binary files a/graphics/items/icons/linking_cord.png and b/graphics/items/icons/linking_cord.png differ diff --git a/graphics/items/icons/peat_block.png b/graphics/items/icons/peat_block.png index 9c1065987..25a3c3bc0 100644 Binary files a/graphics/items/icons/peat_block.png and b/graphics/items/icons/peat_block.png differ diff --git a/graphics/pokemon/abomasnow/anim_front.png b/graphics/pokemon/abomasnow/anim_front.png index e998b9a61..3ba7033b8 100644 Binary files a/graphics/pokemon/abomasnow/anim_front.png and b/graphics/pokemon/abomasnow/anim_front.png differ diff --git a/graphics/pokemon/abomasnow/back.png b/graphics/pokemon/abomasnow/back.png index 1cde0f969..589cf397f 100644 Binary files a/graphics/pokemon/abomasnow/back.png and b/graphics/pokemon/abomasnow/back.png differ diff --git a/graphics/pokemon/abomasnow/icon.png b/graphics/pokemon/abomasnow/icon.png index dcd764be9..8a3f86f2c 100644 Binary files a/graphics/pokemon/abomasnow/icon.png and b/graphics/pokemon/abomasnow/icon.png differ diff --git a/graphics/pokemon/abomasnow/mega/back.png b/graphics/pokemon/abomasnow/mega/back.png index 62d6ba6ad..67481bce5 100644 Binary files a/graphics/pokemon/abomasnow/mega/back.png and b/graphics/pokemon/abomasnow/mega/back.png differ diff --git a/graphics/pokemon/abomasnow/mega/front.png b/graphics/pokemon/abomasnow/mega/front.png index 970fd8b07..01ac8dd2b 100644 Binary files a/graphics/pokemon/abomasnow/mega/front.png and b/graphics/pokemon/abomasnow/mega/front.png differ diff --git a/graphics/pokemon/abomasnow/mega/icon.png b/graphics/pokemon/abomasnow/mega/icon.png index 5fea57a2e..7f4af9567 100644 Binary files a/graphics/pokemon/abomasnow/mega/icon.png and b/graphics/pokemon/abomasnow/mega/icon.png differ diff --git a/graphics/pokemon/abra/anim_front.png b/graphics/pokemon/abra/anim_front.png index f7ba7165e..a87da90e0 100644 Binary files a/graphics/pokemon/abra/anim_front.png and b/graphics/pokemon/abra/anim_front.png differ diff --git a/graphics/pokemon/abra/back.png b/graphics/pokemon/abra/back.png index cd8b84dfd..7468d8f80 100644 Binary files a/graphics/pokemon/abra/back.png and b/graphics/pokemon/abra/back.png differ diff --git a/graphics/pokemon/abra/icon.png b/graphics/pokemon/abra/icon.png index fbf4e288c..6b91d3f73 100644 Binary files a/graphics/pokemon/abra/icon.png and b/graphics/pokemon/abra/icon.png differ diff --git a/graphics/pokemon/abra/normal.pal b/graphics/pokemon/abra/normal.pal index 8c4d72e5c..b8ef761d3 100644 --- a/graphics/pokemon/abra/normal.pal +++ b/graphics/pokemon/abra/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 56 8 -120 96 24 -255 230 41 -90 57 8 -205 189 32 -246 246 164 -168 136 24 +255 0 255 +255 0 255 +255 0 255 +213 180 82 172 131 41 -16 16 16 131 98 8 -208 176 80 -176 160 152 -0 0 0 -0 0 0 -0 0 0 +90 57 0 +255 0 255 +246 246 164 +255 230 41 +205 189 32 +172 139 24 +131 90 16 +90 57 8 +16 16 16 diff --git a/graphics/pokemon/abra/shiny.pal b/graphics/pokemon/abra/shiny.pal index e8c79eea1..e72eec2b4 100644 --- a/graphics/pokemon/abra/shiny.pal +++ b/graphics/pokemon/abra/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 80 24 -168 104 40 -248 240 128 -88 48 56 -232 200 48 -248 240 216 -200 152 32 -184 136 144 +255 0 255 +255 0 255 +255 0 255 +222 180 189 +189 139 148 +139 98 106 +90 49 57 +255 0 255 +255 246 222 +255 246 131 +238 205 49 +205 156 32 +172 106 41 +139 82 24 16 16 16 -136 96 104 -208 176 80 -216 176 184 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/absol/back.png b/graphics/pokemon/absol/back.png index 1f2d997e8..029980de2 100644 Binary files a/graphics/pokemon/absol/back.png and b/graphics/pokemon/absol/back.png differ diff --git a/graphics/pokemon/absol/mega/back.png b/graphics/pokemon/absol/mega/back.png index 5a3cf00f6..bc4313f93 100644 Binary files a/graphics/pokemon/absol/mega/back.png and b/graphics/pokemon/absol/mega/back.png differ diff --git a/graphics/pokemon/absol/mega/front.png b/graphics/pokemon/absol/mega/front.png index 4a4636880..e7656154d 100644 Binary files a/graphics/pokemon/absol/mega/front.png and b/graphics/pokemon/absol/mega/front.png differ diff --git a/graphics/pokemon/absol/mega/icon.png b/graphics/pokemon/absol/mega/icon.png index 48318a667..d6f9ce87b 100644 Binary files a/graphics/pokemon/absol/mega/icon.png and b/graphics/pokemon/absol/mega/icon.png differ diff --git a/graphics/pokemon/accelgor/anim_front.png b/graphics/pokemon/accelgor/anim_front.png index beba096b7..353aa67e0 100644 Binary files a/graphics/pokemon/accelgor/anim_front.png and b/graphics/pokemon/accelgor/anim_front.png differ diff --git a/graphics/pokemon/accelgor/back.png b/graphics/pokemon/accelgor/back.png index ef4103256..8dbc18d1e 100644 Binary files a/graphics/pokemon/accelgor/back.png and b/graphics/pokemon/accelgor/back.png differ diff --git a/graphics/pokemon/aegislash/anim_front.png b/graphics/pokemon/aegislash/anim_front.png index a2b46d1d6..0e1377186 100644 Binary files a/graphics/pokemon/aegislash/anim_front.png and b/graphics/pokemon/aegislash/anim_front.png differ diff --git a/graphics/pokemon/aegislash/back.png b/graphics/pokemon/aegislash/back.png index 489fc3182..5a2859418 100644 Binary files a/graphics/pokemon/aegislash/back.png and b/graphics/pokemon/aegislash/back.png differ diff --git a/graphics/pokemon/aegislash/blade/anim_front.png b/graphics/pokemon/aegislash/blade/anim_front.png index 4d4c5754b..90b898ad2 100644 Binary files a/graphics/pokemon/aegislash/blade/anim_front.png and b/graphics/pokemon/aegislash/blade/anim_front.png differ diff --git a/graphics/pokemon/aegislash/blade/back.png b/graphics/pokemon/aegislash/blade/back.png index be5c10b96..631d11348 100644 Binary files a/graphics/pokemon/aegislash/blade/back.png and b/graphics/pokemon/aegislash/blade/back.png differ diff --git a/graphics/pokemon/aegislash/blade/icon.png b/graphics/pokemon/aegislash/blade/icon.png index 0f7dbbf81..c96502c04 100644 Binary files a/graphics/pokemon/aegislash/blade/icon.png and b/graphics/pokemon/aegislash/blade/icon.png differ diff --git a/graphics/pokemon/aegislash/icon.png b/graphics/pokemon/aegislash/icon.png index de98a823a..81b1541f2 100644 Binary files a/graphics/pokemon/aegislash/icon.png and b/graphics/pokemon/aegislash/icon.png differ diff --git a/graphics/pokemon/aerodactyl/back.png b/graphics/pokemon/aerodactyl/back.png index a7b00d491..eb5e2be19 100644 Binary files a/graphics/pokemon/aerodactyl/back.png and b/graphics/pokemon/aerodactyl/back.png differ diff --git a/graphics/pokemon/aerodactyl/mega/back.png b/graphics/pokemon/aerodactyl/mega/back.png index ebc1e7d14..c2da05938 100644 Binary files a/graphics/pokemon/aerodactyl/mega/back.png and b/graphics/pokemon/aerodactyl/mega/back.png differ diff --git a/graphics/pokemon/aerodactyl/mega/front.png b/graphics/pokemon/aerodactyl/mega/front.png index 460bbee05..86d51181f 100644 Binary files a/graphics/pokemon/aerodactyl/mega/front.png and b/graphics/pokemon/aerodactyl/mega/front.png differ diff --git a/graphics/pokemon/aerodactyl/mega/icon.png b/graphics/pokemon/aerodactyl/mega/icon.png index f09109f57..08922ac51 100644 Binary files a/graphics/pokemon/aerodactyl/mega/icon.png and b/graphics/pokemon/aerodactyl/mega/icon.png differ diff --git a/graphics/pokemon/aggron/anim_front.png b/graphics/pokemon/aggron/anim_front.png index e8564de69..08a5913a7 100644 Binary files a/graphics/pokemon/aggron/anim_front.png and b/graphics/pokemon/aggron/anim_front.png differ diff --git a/graphics/pokemon/aggron/back.png b/graphics/pokemon/aggron/back.png index 97b7d632f..bc9564a89 100644 Binary files a/graphics/pokemon/aggron/back.png and b/graphics/pokemon/aggron/back.png differ diff --git a/graphics/pokemon/aggron/mega/back.png b/graphics/pokemon/aggron/mega/back.png index 349aab602..c69f945a5 100644 Binary files a/graphics/pokemon/aggron/mega/back.png and b/graphics/pokemon/aggron/mega/back.png differ diff --git a/graphics/pokemon/aggron/mega/front.png b/graphics/pokemon/aggron/mega/front.png index 9e86f7e22..a019899a8 100644 Binary files a/graphics/pokemon/aggron/mega/front.png and b/graphics/pokemon/aggron/mega/front.png differ diff --git a/graphics/pokemon/aggron/mega/icon.png b/graphics/pokemon/aggron/mega/icon.png index 774d217a0..4ddc4ef0d 100644 Binary files a/graphics/pokemon/aggron/mega/icon.png and b/graphics/pokemon/aggron/mega/icon.png differ diff --git a/graphics/pokemon/aipom/back.png b/graphics/pokemon/aipom/back.png index 4f79de9e1..5eed97359 100644 Binary files a/graphics/pokemon/aipom/back.png and b/graphics/pokemon/aipom/back.png differ diff --git a/graphics/pokemon/alakazam/anim_front.png b/graphics/pokemon/alakazam/anim_front.png index 44322880c..0bbc07a98 100644 Binary files a/graphics/pokemon/alakazam/anim_front.png and b/graphics/pokemon/alakazam/anim_front.png differ diff --git a/graphics/pokemon/alakazam/anim_frontf.png b/graphics/pokemon/alakazam/anim_frontf.png index f7de54051..d89386990 100644 Binary files a/graphics/pokemon/alakazam/anim_frontf.png and b/graphics/pokemon/alakazam/anim_frontf.png differ diff --git a/graphics/pokemon/alakazam/back.png b/graphics/pokemon/alakazam/back.png index 1bc44a4ed..a26d52b3c 100644 Binary files a/graphics/pokemon/alakazam/back.png and b/graphics/pokemon/alakazam/back.png differ diff --git a/graphics/pokemon/alakazam/backf.png b/graphics/pokemon/alakazam/backf.png index c52471aea..9e727e652 100644 Binary files a/graphics/pokemon/alakazam/backf.png and b/graphics/pokemon/alakazam/backf.png differ diff --git a/graphics/pokemon/alakazam/mega/back.png b/graphics/pokemon/alakazam/mega/back.png index 0d6fd70af..3ecc3a5a5 100644 Binary files a/graphics/pokemon/alakazam/mega/back.png and b/graphics/pokemon/alakazam/mega/back.png differ diff --git a/graphics/pokemon/alakazam/mega/front.png b/graphics/pokemon/alakazam/mega/front.png index 911e2ea97..5bca40276 100644 Binary files a/graphics/pokemon/alakazam/mega/front.png and b/graphics/pokemon/alakazam/mega/front.png differ diff --git a/graphics/pokemon/alakazam/mega/icon.png b/graphics/pokemon/alakazam/mega/icon.png index d46399645..2d018ed0d 100644 Binary files a/graphics/pokemon/alakazam/mega/icon.png and b/graphics/pokemon/alakazam/mega/icon.png differ diff --git a/graphics/pokemon/alakazam/normal.pal b/graphics/pokemon/alakazam/normal.pal index de1ad1131..3ec4f421c 100644 --- a/graphics/pokemon/alakazam/normal.pal +++ b/graphics/pokemon/alakazam/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 88 8 -255 238 41 -213 189 16 -16 16 16 -255 246 172 -131 98 8 -82 49 8 +255 255 255 +222 222 222 +180 180 180 +90 90 90 213 180 82 180 131 41 -88 88 88 -248 248 248 -176 176 168 -216 216 216 -96 96 88 -80 48 8 +120 88 8 +82 49 8 +104 80 8 +152 112 0 +255 246 172 +255 238 24 +200 176 16 +112 88 8 +16 16 16 diff --git a/graphics/pokemon/alakazam/shiny.pal b/graphics/pokemon/alakazam/shiny.pal index e6518d116..9fcc9ad86 100644 --- a/graphics/pokemon/alakazam/shiny.pal +++ b/graphics/pokemon/alakazam/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 104 0 -240 208 32 -200 144 24 +255 255 255 +222 222 222 +180 180 180 +90 90 90 +255 148 230 +222 74 172 +172 41 115 +115 16 82 +104 64 8 +152 104 0 +255 238 131 +255 213 0 +213 148 8 +164 106 0 16 16 16 -248 232 128 -152 48 112 -112 16 80 -248 144 224 -200 88 160 -88 88 88 -248 248 248 -176 176 176 -216 216 216 -88 88 88 -112 88 8 diff --git a/graphics/pokemon/alcremie/back.png b/graphics/pokemon/alcremie/back.png index 07c46cf11..056eca0ab 100644 Binary files a/graphics/pokemon/alcremie/back.png and b/graphics/pokemon/alcremie/back.png differ diff --git a/graphics/pokemon/alcremie/caramel_swirl/back.png b/graphics/pokemon/alcremie/caramel_swirl/back.png index ce0b27151..d5a073b54 100644 Binary files a/graphics/pokemon/alcremie/caramel_swirl/back.png and b/graphics/pokemon/alcremie/caramel_swirl/back.png differ diff --git a/graphics/pokemon/alcremie/front.png b/graphics/pokemon/alcremie/front.png index 7093ac250..e1daa350c 100644 Binary files a/graphics/pokemon/alcremie/front.png and b/graphics/pokemon/alcremie/front.png differ diff --git a/graphics/pokemon/alcremie/icon.png b/graphics/pokemon/alcremie/icon.png index 01cc73700..31cf9e47c 100644 Binary files a/graphics/pokemon/alcremie/icon.png and b/graphics/pokemon/alcremie/icon.png differ diff --git a/graphics/pokemon/alcremie/lemon_cream/back.png b/graphics/pokemon/alcremie/lemon_cream/back.png index 60b05d6e1..d5a073b54 100644 Binary files a/graphics/pokemon/alcremie/lemon_cream/back.png and b/graphics/pokemon/alcremie/lemon_cream/back.png differ diff --git a/graphics/pokemon/alcremie/mint_cream/back.png b/graphics/pokemon/alcremie/mint_cream/back.png index 18449134d..481ce9c78 100644 Binary files a/graphics/pokemon/alcremie/mint_cream/back.png and b/graphics/pokemon/alcremie/mint_cream/back.png differ diff --git a/graphics/pokemon/alcremie/rainbow_swirl/front.png b/graphics/pokemon/alcremie/rainbow_swirl/front.png index 291fcb5c4..4337e257a 100644 Binary files a/graphics/pokemon/alcremie/rainbow_swirl/front.png and b/graphics/pokemon/alcremie/rainbow_swirl/front.png differ diff --git a/graphics/pokemon/alcremie/ruby_cream/back.png b/graphics/pokemon/alcremie/ruby_cream/back.png index fd9b9ed17..45fc28a0e 100644 Binary files a/graphics/pokemon/alcremie/ruby_cream/back.png and b/graphics/pokemon/alcremie/ruby_cream/back.png differ diff --git a/graphics/pokemon/alcremie/ruby_swirl/back.png b/graphics/pokemon/alcremie/ruby_swirl/back.png index 4346651e8..ae275b897 100644 Binary files a/graphics/pokemon/alcremie/ruby_swirl/back.png and b/graphics/pokemon/alcremie/ruby_swirl/back.png differ diff --git a/graphics/pokemon/alcremie/ruby_swirl/front.png b/graphics/pokemon/alcremie/ruby_swirl/front.png index 884286459..cb99b49fa 100644 Binary files a/graphics/pokemon/alcremie/ruby_swirl/front.png and b/graphics/pokemon/alcremie/ruby_swirl/front.png differ diff --git a/graphics/pokemon/alcremie/salted_cream/back.png b/graphics/pokemon/alcremie/salted_cream/back.png index c10bcedd1..f32932d95 100644 Binary files a/graphics/pokemon/alcremie/salted_cream/back.png and b/graphics/pokemon/alcremie/salted_cream/back.png differ diff --git a/graphics/pokemon/alomomola/anim_front.png b/graphics/pokemon/alomomola/anim_front.png index 2c467dfe4..641299c3f 100644 Binary files a/graphics/pokemon/alomomola/anim_front.png and b/graphics/pokemon/alomomola/anim_front.png differ diff --git a/graphics/pokemon/alomomola/back.png b/graphics/pokemon/alomomola/back.png index 375753768..4cada4d91 100644 Binary files a/graphics/pokemon/alomomola/back.png and b/graphics/pokemon/alomomola/back.png differ diff --git a/graphics/pokemon/alomomola/icon.png b/graphics/pokemon/alomomola/icon.png index d811d0a9c..91e26aa9e 100644 Binary files a/graphics/pokemon/alomomola/icon.png and b/graphics/pokemon/alomomola/icon.png differ diff --git a/graphics/pokemon/altaria/anim_front.png b/graphics/pokemon/altaria/anim_front.png index 46d54fb13..56ae85998 100644 Binary files a/graphics/pokemon/altaria/anim_front.png and b/graphics/pokemon/altaria/anim_front.png differ diff --git a/graphics/pokemon/altaria/mega/back.png b/graphics/pokemon/altaria/mega/back.png index b86aa129e..b78923ce5 100644 Binary files a/graphics/pokemon/altaria/mega/back.png and b/graphics/pokemon/altaria/mega/back.png differ diff --git a/graphics/pokemon/altaria/mega/front.png b/graphics/pokemon/altaria/mega/front.png index 5a9204c46..0fbffefe2 100644 Binary files a/graphics/pokemon/altaria/mega/front.png and b/graphics/pokemon/altaria/mega/front.png differ diff --git a/graphics/pokemon/altaria/mega/icon.png b/graphics/pokemon/altaria/mega/icon.png index 349cc160f..2464e11c3 100644 Binary files a/graphics/pokemon/altaria/mega/icon.png and b/graphics/pokemon/altaria/mega/icon.png differ diff --git a/graphics/pokemon/amaura/anim_front.png b/graphics/pokemon/amaura/anim_front.png index 71820c186..63c7d94cb 100644 Binary files a/graphics/pokemon/amaura/anim_front.png and b/graphics/pokemon/amaura/anim_front.png differ diff --git a/graphics/pokemon/amaura/back.png b/graphics/pokemon/amaura/back.png index f76e06d7b..5e2e7657f 100644 Binary files a/graphics/pokemon/amaura/back.png and b/graphics/pokemon/amaura/back.png differ diff --git a/graphics/pokemon/amaura/icon.png b/graphics/pokemon/amaura/icon.png index 5e8a25164..fb247611f 100644 Binary files a/graphics/pokemon/amaura/icon.png and b/graphics/pokemon/amaura/icon.png differ diff --git a/graphics/pokemon/ambipom/icon.png b/graphics/pokemon/ambipom/icon.png index 5b5d14eb6..d50434578 100644 Binary files a/graphics/pokemon/ambipom/icon.png and b/graphics/pokemon/ambipom/icon.png differ diff --git a/graphics/pokemon/amoonguss/anim_front.png b/graphics/pokemon/amoonguss/anim_front.png index 21d1de947..e959d5ce5 100644 Binary files a/graphics/pokemon/amoonguss/anim_front.png and b/graphics/pokemon/amoonguss/anim_front.png differ diff --git a/graphics/pokemon/amoonguss/back.png b/graphics/pokemon/amoonguss/back.png index 571ec554d..3da7b169c 100644 Binary files a/graphics/pokemon/amoonguss/back.png and b/graphics/pokemon/amoonguss/back.png differ diff --git a/graphics/pokemon/ampharos/icon.png b/graphics/pokemon/ampharos/icon.png index a4c787bee..20cdae532 100644 Binary files a/graphics/pokemon/ampharos/icon.png and b/graphics/pokemon/ampharos/icon.png differ diff --git a/graphics/pokemon/ampharos/mega/back.png b/graphics/pokemon/ampharos/mega/back.png index 54b1e97ca..c3f458c9b 100644 Binary files a/graphics/pokemon/ampharos/mega/back.png and b/graphics/pokemon/ampharos/mega/back.png differ diff --git a/graphics/pokemon/ampharos/mega/front.png b/graphics/pokemon/ampharos/mega/front.png index 566535be8..31db2d70a 100644 Binary files a/graphics/pokemon/ampharos/mega/front.png and b/graphics/pokemon/ampharos/mega/front.png differ diff --git a/graphics/pokemon/ampharos/mega/icon.png b/graphics/pokemon/ampharos/mega/icon.png index b8e03cefb..8d1e0e5a3 100644 Binary files a/graphics/pokemon/ampharos/mega/icon.png and b/graphics/pokemon/ampharos/mega/icon.png differ diff --git a/graphics/pokemon/anorith/anim_front.png b/graphics/pokemon/anorith/anim_front.png index 029f399fd..914970850 100644 Binary files a/graphics/pokemon/anorith/anim_front.png and b/graphics/pokemon/anorith/anim_front.png differ diff --git a/graphics/pokemon/anorith/back.png b/graphics/pokemon/anorith/back.png index 896cf9eae..4f7ad4536 100644 Binary files a/graphics/pokemon/anorith/back.png and b/graphics/pokemon/anorith/back.png differ diff --git a/graphics/pokemon/anorith/icon.png b/graphics/pokemon/anorith/icon.png index 37100445a..24b1202e6 100644 Binary files a/graphics/pokemon/anorith/icon.png and b/graphics/pokemon/anorith/icon.png differ diff --git a/graphics/pokemon/appletun/back.png b/graphics/pokemon/appletun/back.png index 00c0f15dd..fb7f5b63e 100644 Binary files a/graphics/pokemon/appletun/back.png and b/graphics/pokemon/appletun/back.png differ diff --git a/graphics/pokemon/appletun/icon.png b/graphics/pokemon/appletun/icon.png index 5056210df..3b474c0f0 100644 Binary files a/graphics/pokemon/appletun/icon.png and b/graphics/pokemon/appletun/icon.png differ diff --git a/graphics/pokemon/applin/back.png b/graphics/pokemon/applin/back.png index e43bc8141..ed4f461cd 100644 Binary files a/graphics/pokemon/applin/back.png and b/graphics/pokemon/applin/back.png differ diff --git a/graphics/pokemon/applin/icon.png b/graphics/pokemon/applin/icon.png index 5253b9754..ce9fee4a9 100644 Binary files a/graphics/pokemon/applin/icon.png and b/graphics/pokemon/applin/icon.png differ diff --git a/graphics/pokemon/araquanid/back.png b/graphics/pokemon/araquanid/back.png index 37a01a681..c1bb29ef1 100644 Binary files a/graphics/pokemon/araquanid/back.png and b/graphics/pokemon/araquanid/back.png differ diff --git a/graphics/pokemon/araquanid/icon.png b/graphics/pokemon/araquanid/icon.png index d8dc00c53..fa13eba83 100644 Binary files a/graphics/pokemon/araquanid/icon.png and b/graphics/pokemon/araquanid/icon.png differ diff --git a/graphics/pokemon/arbok/anim_front.png b/graphics/pokemon/arbok/anim_front.png index e52d48016..ba158f864 100644 Binary files a/graphics/pokemon/arbok/anim_front.png and b/graphics/pokemon/arbok/anim_front.png differ diff --git a/graphics/pokemon/arbok/back.png b/graphics/pokemon/arbok/back.png index 6d53b683f..b0da328c6 100644 Binary files a/graphics/pokemon/arbok/back.png and b/graphics/pokemon/arbok/back.png differ diff --git a/graphics/pokemon/arbok/icon.png b/graphics/pokemon/arbok/icon.png index 14c4df3fc..4e49d6cc6 100644 Binary files a/graphics/pokemon/arbok/icon.png and b/graphics/pokemon/arbok/icon.png differ diff --git a/graphics/pokemon/arbok/normal.pal b/graphics/pokemon/arbok/normal.pal index 8ef9ad315..6a516dc3d 100644 --- a/graphics/pokemon/arbok/normal.pal +++ b/graphics/pokemon/arbok/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -164 131 197 -197 164 238 -123 98 172 -82 57 123 -197 197 197 -255 255 255 -156 16 0 -197 65 24 -156 16 0 +255 172 131 +197 180 0 +246 115 74 197 65 24 246 115 74 -197 180 0 -120 96 168 -0 0 0 +197 65 24 +156 16 0 +16 16 16 +197 164 238 +164 131 197 +123 98 172 +82 57 123 +156 16 0 +197 197 197 +255 255 255 diff --git a/graphics/pokemon/arbok/shiny.pal b/graphics/pokemon/arbok/shiny.pal index 7498bf4b2..df9c4848a 100644 --- a/graphics/pokemon/arbok/shiny.pal +++ b/graphics/pokemon/arbok/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +255 172 131 +238 222 24 +240 112 72 +192 64 24 +90 164 255 +24 98 197 +0 49 148 16 16 16 -208 184 56 -224 224 144 -160 120 56 -104 80 24 -192 192 192 -248 248 248 -56 104 160 -120 160 208 -32 64 128 -48 112 184 -152 184 224 -232 216 56 -160 120 48 -0 0 0 +222 222 90 +213 180 32 +164 123 32 +131 90 0 +152 16 0 +197 197 197 +255 255 255 diff --git a/graphics/pokemon/arcanine/anim_front.png b/graphics/pokemon/arcanine/anim_front.png index 9bdc7826d..b1643339d 100644 Binary files a/graphics/pokemon/arcanine/anim_front.png and b/graphics/pokemon/arcanine/anim_front.png differ diff --git a/graphics/pokemon/arcanine/back.png b/graphics/pokemon/arcanine/back.png index 9578cd4a1..98291f404 100644 Binary files a/graphics/pokemon/arcanine/back.png and b/graphics/pokemon/arcanine/back.png differ diff --git a/graphics/pokemon/arcanine/hisuian/icon.png b/graphics/pokemon/arcanine/hisuian/icon.png index d34fe9f80..9fe900792 100644 Binary files a/graphics/pokemon/arcanine/hisuian/icon.png and b/graphics/pokemon/arcanine/hisuian/icon.png differ diff --git a/graphics/pokemon/arcanine/icon.png b/graphics/pokemon/arcanine/icon.png index 3d259e398..acd5a4ff8 100644 Binary files a/graphics/pokemon/arcanine/icon.png and b/graphics/pokemon/arcanine/icon.png differ diff --git a/graphics/pokemon/arcanine/normal.pal b/graphics/pokemon/arcanine/normal.pal index 0d552ffc3..621362d93 100644 --- a/graphics/pokemon/arcanine/normal.pal +++ b/graphics/pokemon/arcanine/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -148 98 32 -16 16 16 +255 255 246 +222 222 213 +131 106 98 +255 98 65 +197 49 32 +193 147 73 +255 255 197 255 246 148 238 197 115 -98 16 0 +148 98 32 +255 156 106 238 115 49 197 82 90 -216 216 208 -248 248 240 -88 104 112 -255 156 106 -168 48 16 -148 98 32 -0 0 0 -0 0 0 +98 16 0 +16 16 16 diff --git a/graphics/pokemon/arcanine/shiny.pal b/graphics/pokemon/arcanine/shiny.pal index e6ce73d7f..b557f4e96 100644 --- a/graphics/pokemon/arcanine/shiny.pal +++ b/graphics/pokemon/arcanine/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 112 56 +255 255 246 +222 222 213 +131 106 98 +255 98 65 +197 49 32 +160 136 112 +255 238 230 +246 230 189 +213 189 148 +104 88 80 +246 255 123 +230 213 41 +180 156 0 +88 72 16 16 16 16 -240 240 176 -208 192 120 -88 72 32 -216 200 56 -168 152 32 -216 216 208 -248 248 240 -128 104 96 -240 240 144 -181 78 66 -176 144 64 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/arceus/anim_front.png b/graphics/pokemon/arceus/anim_front.png index 3f483ff97..867c4730c 100644 Binary files a/graphics/pokemon/arceus/anim_front.png and b/graphics/pokemon/arceus/anim_front.png differ diff --git a/graphics/pokemon/arceus/back.png b/graphics/pokemon/arceus/back.png index 04f46bcf0..5ab63eb07 100644 Binary files a/graphics/pokemon/arceus/back.png and b/graphics/pokemon/arceus/back.png differ diff --git a/graphics/pokemon/archen/anim_front.png b/graphics/pokemon/archen/anim_front.png index a97bd9a36..128c3cf07 100644 Binary files a/graphics/pokemon/archen/anim_front.png and b/graphics/pokemon/archen/anim_front.png differ diff --git a/graphics/pokemon/archen/back.png b/graphics/pokemon/archen/back.png index afa79ac13..1be08203b 100644 Binary files a/graphics/pokemon/archen/back.png and b/graphics/pokemon/archen/back.png differ diff --git a/graphics/pokemon/archen/icon.png b/graphics/pokemon/archen/icon.png index 8a81f10a4..a172713de 100644 Binary files a/graphics/pokemon/archen/icon.png and b/graphics/pokemon/archen/icon.png differ diff --git a/graphics/pokemon/archeops/anim_front.png b/graphics/pokemon/archeops/anim_front.png index cf427e100..12b90b0fc 100644 Binary files a/graphics/pokemon/archeops/anim_front.png and b/graphics/pokemon/archeops/anim_front.png differ diff --git a/graphics/pokemon/archeops/back.png b/graphics/pokemon/archeops/back.png index c7ffc7071..e8422e584 100644 Binary files a/graphics/pokemon/archeops/back.png and b/graphics/pokemon/archeops/back.png differ diff --git a/graphics/pokemon/archeops/icon.png b/graphics/pokemon/archeops/icon.png index 21c6d51eb..03e51ffe1 100644 Binary files a/graphics/pokemon/archeops/icon.png and b/graphics/pokemon/archeops/icon.png differ diff --git a/graphics/pokemon/arctovish/back.png b/graphics/pokemon/arctovish/back.png index 586e57308..b85782888 100644 Binary files a/graphics/pokemon/arctovish/back.png and b/graphics/pokemon/arctovish/back.png differ diff --git a/graphics/pokemon/arctovish/front.png b/graphics/pokemon/arctovish/front.png index 0eb85a1c1..3da6fa90d 100644 Binary files a/graphics/pokemon/arctovish/front.png and b/graphics/pokemon/arctovish/front.png differ diff --git a/graphics/pokemon/arctovish/icon.png b/graphics/pokemon/arctovish/icon.png index 24275aa64..216061229 100644 Binary files a/graphics/pokemon/arctovish/icon.png and b/graphics/pokemon/arctovish/icon.png differ diff --git a/graphics/pokemon/arctozolt/back.png b/graphics/pokemon/arctozolt/back.png index e61731138..941f900e1 100644 Binary files a/graphics/pokemon/arctozolt/back.png and b/graphics/pokemon/arctozolt/back.png differ diff --git a/graphics/pokemon/arctozolt/front.png b/graphics/pokemon/arctozolt/front.png index 05f52b175..65e2ab74c 100644 Binary files a/graphics/pokemon/arctozolt/front.png and b/graphics/pokemon/arctozolt/front.png differ diff --git a/graphics/pokemon/arctozolt/icon.png b/graphics/pokemon/arctozolt/icon.png index 913ca5413..73dbd1e67 100644 Binary files a/graphics/pokemon/arctozolt/icon.png and b/graphics/pokemon/arctozolt/icon.png differ diff --git a/graphics/pokemon/ariados/back.png b/graphics/pokemon/ariados/back.png index 1882af2a9..38df60102 100644 Binary files a/graphics/pokemon/ariados/back.png and b/graphics/pokemon/ariados/back.png differ diff --git a/graphics/pokemon/armaldo/anim_front.png b/graphics/pokemon/armaldo/anim_front.png index cbf305ed4..372cd2cfe 100644 Binary files a/graphics/pokemon/armaldo/anim_front.png and b/graphics/pokemon/armaldo/anim_front.png differ diff --git a/graphics/pokemon/armaldo/back.png b/graphics/pokemon/armaldo/back.png index 9ac78de2a..aa060407c 100644 Binary files a/graphics/pokemon/armaldo/back.png and b/graphics/pokemon/armaldo/back.png differ diff --git a/graphics/pokemon/aromatisse/anim_front.png b/graphics/pokemon/aromatisse/anim_front.png index 1371d970c..c6d3c9b95 100644 Binary files a/graphics/pokemon/aromatisse/anim_front.png and b/graphics/pokemon/aromatisse/anim_front.png differ diff --git a/graphics/pokemon/aromatisse/back.png b/graphics/pokemon/aromatisse/back.png index fd0183219..8feaf5c8f 100644 Binary files a/graphics/pokemon/aromatisse/back.png and b/graphics/pokemon/aromatisse/back.png differ diff --git a/graphics/pokemon/aromatisse/icon.png b/graphics/pokemon/aromatisse/icon.png index 870ace9df..4dfa1df75 100644 Binary files a/graphics/pokemon/aromatisse/icon.png and b/graphics/pokemon/aromatisse/icon.png differ diff --git a/graphics/pokemon/aron/anim_front.png b/graphics/pokemon/aron/anim_front.png index 09740c03a..06cd54cf8 100644 Binary files a/graphics/pokemon/aron/anim_front.png and b/graphics/pokemon/aron/anim_front.png differ diff --git a/graphics/pokemon/aron/back.png b/graphics/pokemon/aron/back.png index d4499a5dd..3cce41266 100644 Binary files a/graphics/pokemon/aron/back.png and b/graphics/pokemon/aron/back.png differ diff --git a/graphics/pokemon/aron/icon.png b/graphics/pokemon/aron/icon.png index e288beefa..a1522f972 100644 Binary files a/graphics/pokemon/aron/icon.png and b/graphics/pokemon/aron/icon.png differ diff --git a/graphics/pokemon/arrokuda/back.png b/graphics/pokemon/arrokuda/back.png index e7054b295..13c424031 100644 Binary files a/graphics/pokemon/arrokuda/back.png and b/graphics/pokemon/arrokuda/back.png differ diff --git a/graphics/pokemon/arrokuda/front.png b/graphics/pokemon/arrokuda/front.png index d81549197..4dd2f477b 100644 Binary files a/graphics/pokemon/arrokuda/front.png and b/graphics/pokemon/arrokuda/front.png differ diff --git a/graphics/pokemon/arrokuda/icon.png b/graphics/pokemon/arrokuda/icon.png index 12f20e0b9..f724cc357 100644 Binary files a/graphics/pokemon/arrokuda/icon.png and b/graphics/pokemon/arrokuda/icon.png differ diff --git a/graphics/pokemon/articuno/back.png b/graphics/pokemon/articuno/back.png index 0a2760e37..d476cbcca 100644 Binary files a/graphics/pokemon/articuno/back.png and b/graphics/pokemon/articuno/back.png differ diff --git a/graphics/pokemon/articuno/galarian/back.png b/graphics/pokemon/articuno/galarian/back.png index 3f83c687f..829e189e0 100644 Binary files a/graphics/pokemon/articuno/galarian/back.png and b/graphics/pokemon/articuno/galarian/back.png differ diff --git a/graphics/pokemon/articuno/galarian/front.png b/graphics/pokemon/articuno/galarian/front.png index b6a10ff4f..b92c5a501 100644 Binary files a/graphics/pokemon/articuno/galarian/front.png and b/graphics/pokemon/articuno/galarian/front.png differ diff --git a/graphics/pokemon/articuno/galarian/icon.png b/graphics/pokemon/articuno/galarian/icon.png index a563c83a1..556bd42b4 100644 Binary files a/graphics/pokemon/articuno/galarian/icon.png and b/graphics/pokemon/articuno/galarian/icon.png differ diff --git a/graphics/pokemon/audino/anim_front.png b/graphics/pokemon/audino/anim_front.png index c01afc4ee..cbdbde042 100644 Binary files a/graphics/pokemon/audino/anim_front.png and b/graphics/pokemon/audino/anim_front.png differ diff --git a/graphics/pokemon/audino/back.png b/graphics/pokemon/audino/back.png index 736ade441..050a7069a 100644 Binary files a/graphics/pokemon/audino/back.png and b/graphics/pokemon/audino/back.png differ diff --git a/graphics/pokemon/audino/icon.png b/graphics/pokemon/audino/icon.png index 36ac0f287..63fc81972 100644 Binary files a/graphics/pokemon/audino/icon.png and b/graphics/pokemon/audino/icon.png differ diff --git a/graphics/pokemon/audino/mega/back.png b/graphics/pokemon/audino/mega/back.png index 394b57fe9..7bf36501f 100644 Binary files a/graphics/pokemon/audino/mega/back.png and b/graphics/pokemon/audino/mega/back.png differ diff --git a/graphics/pokemon/audino/mega/front.png b/graphics/pokemon/audino/mega/front.png index e36621dda..72c762854 100644 Binary files a/graphics/pokemon/audino/mega/front.png and b/graphics/pokemon/audino/mega/front.png differ diff --git a/graphics/pokemon/audino/mega/icon.png b/graphics/pokemon/audino/mega/icon.png index c2f26aa78..8747ca0ca 100644 Binary files a/graphics/pokemon/audino/mega/icon.png and b/graphics/pokemon/audino/mega/icon.png differ diff --git a/graphics/pokemon/aurorus/anim_front.png b/graphics/pokemon/aurorus/anim_front.png index 3fb5ece8f..a43877822 100644 Binary files a/graphics/pokemon/aurorus/anim_front.png and b/graphics/pokemon/aurorus/anim_front.png differ diff --git a/graphics/pokemon/aurorus/back.png b/graphics/pokemon/aurorus/back.png index a7df00047..f8318b73b 100644 Binary files a/graphics/pokemon/aurorus/back.png and b/graphics/pokemon/aurorus/back.png differ diff --git a/graphics/pokemon/aurorus/icon.png b/graphics/pokemon/aurorus/icon.png index 0b944d684..bce06dfe3 100644 Binary files a/graphics/pokemon/aurorus/icon.png and b/graphics/pokemon/aurorus/icon.png differ diff --git a/graphics/pokemon/avalugg/anim_front.png b/graphics/pokemon/avalugg/anim_front.png index 01364604b..2dd6c74f9 100644 Binary files a/graphics/pokemon/avalugg/anim_front.png and b/graphics/pokemon/avalugg/anim_front.png differ diff --git a/graphics/pokemon/avalugg/back.png b/graphics/pokemon/avalugg/back.png index 6f1f55f73..787bc2d60 100644 Binary files a/graphics/pokemon/avalugg/back.png and b/graphics/pokemon/avalugg/back.png differ diff --git a/graphics/pokemon/avalugg/hisuian/icon.png b/graphics/pokemon/avalugg/hisuian/icon.png index 3ef7df011..5b2b3f347 100644 Binary files a/graphics/pokemon/avalugg/hisuian/icon.png and b/graphics/pokemon/avalugg/hisuian/icon.png differ diff --git a/graphics/pokemon/avalugg/icon.png b/graphics/pokemon/avalugg/icon.png index f53549f5d..9419873b7 100644 Binary files a/graphics/pokemon/avalugg/icon.png and b/graphics/pokemon/avalugg/icon.png differ diff --git a/graphics/pokemon/axew/anim_front.png b/graphics/pokemon/axew/anim_front.png index 8c2e76040..43d4825ee 100644 Binary files a/graphics/pokemon/axew/anim_front.png and b/graphics/pokemon/axew/anim_front.png differ diff --git a/graphics/pokemon/axew/back.png b/graphics/pokemon/axew/back.png index 70dc40912..e40b726e3 100644 Binary files a/graphics/pokemon/axew/back.png and b/graphics/pokemon/axew/back.png differ diff --git a/graphics/pokemon/axew/icon.png b/graphics/pokemon/axew/icon.png index 342562045..263c9cddf 100644 Binary files a/graphics/pokemon/axew/icon.png and b/graphics/pokemon/axew/icon.png differ diff --git a/graphics/pokemon/azelf/anim_front.png b/graphics/pokemon/azelf/anim_front.png index de1f8ba73..36dc5a992 100644 Binary files a/graphics/pokemon/azelf/anim_front.png and b/graphics/pokemon/azelf/anim_front.png differ diff --git a/graphics/pokemon/azelf/back.png b/graphics/pokemon/azelf/back.png index e52f6cd81..bc9c23cf7 100644 Binary files a/graphics/pokemon/azelf/back.png and b/graphics/pokemon/azelf/back.png differ diff --git a/graphics/pokemon/azumarill/anim_front.png b/graphics/pokemon/azumarill/anim_front.png index 5df131afd..eaeaf0c8e 100644 Binary files a/graphics/pokemon/azumarill/anim_front.png and b/graphics/pokemon/azumarill/anim_front.png differ diff --git a/graphics/pokemon/azumarill/back.png b/graphics/pokemon/azumarill/back.png index 1edcc21d8..edc24c66c 100644 Binary files a/graphics/pokemon/azumarill/back.png and b/graphics/pokemon/azumarill/back.png differ diff --git a/graphics/pokemon/azurill/anim_front.png b/graphics/pokemon/azurill/anim_front.png index dcc08227f..3c6b62c47 100644 Binary files a/graphics/pokemon/azurill/anim_front.png and b/graphics/pokemon/azurill/anim_front.png differ diff --git a/graphics/pokemon/azurill/back.png b/graphics/pokemon/azurill/back.png index 57e30c9d7..2463e13fd 100644 Binary files a/graphics/pokemon/azurill/back.png and b/graphics/pokemon/azurill/back.png differ diff --git a/graphics/pokemon/azurill/icon.png b/graphics/pokemon/azurill/icon.png index d0ba71ee8..d015c2868 100644 Binary files a/graphics/pokemon/azurill/icon.png and b/graphics/pokemon/azurill/icon.png differ diff --git a/graphics/pokemon/bagon/anim_front.png b/graphics/pokemon/bagon/anim_front.png index a333691b7..fd6e28672 100644 Binary files a/graphics/pokemon/bagon/anim_front.png and b/graphics/pokemon/bagon/anim_front.png differ diff --git a/graphics/pokemon/bagon/icon.png b/graphics/pokemon/bagon/icon.png index 1830f043f..7fcf0b9d7 100644 Binary files a/graphics/pokemon/bagon/icon.png and b/graphics/pokemon/bagon/icon.png differ diff --git a/graphics/pokemon/baltoy/anim_front.png b/graphics/pokemon/baltoy/anim_front.png index dcd532457..0227496d0 100644 Binary files a/graphics/pokemon/baltoy/anim_front.png and b/graphics/pokemon/baltoy/anim_front.png differ diff --git a/graphics/pokemon/baltoy/back.png b/graphics/pokemon/baltoy/back.png index dc02a997c..abe4e4a2a 100644 Binary files a/graphics/pokemon/baltoy/back.png and b/graphics/pokemon/baltoy/back.png differ diff --git a/graphics/pokemon/baltoy/icon.png b/graphics/pokemon/baltoy/icon.png index 95d879f80..2c0747b63 100644 Binary files a/graphics/pokemon/baltoy/icon.png and b/graphics/pokemon/baltoy/icon.png differ diff --git a/graphics/pokemon/banette/anim_front.png b/graphics/pokemon/banette/anim_front.png index ae19dcc64..8a7618396 100644 Binary files a/graphics/pokemon/banette/anim_front.png and b/graphics/pokemon/banette/anim_front.png differ diff --git a/graphics/pokemon/banette/back.png b/graphics/pokemon/banette/back.png index 9f79b832c..966f01fa5 100644 Binary files a/graphics/pokemon/banette/back.png and b/graphics/pokemon/banette/back.png differ diff --git a/graphics/pokemon/banette/icon.png b/graphics/pokemon/banette/icon.png index 8df7dd260..62a0cee04 100644 Binary files a/graphics/pokemon/banette/icon.png and b/graphics/pokemon/banette/icon.png differ diff --git a/graphics/pokemon/banette/mega/back.png b/graphics/pokemon/banette/mega/back.png index a470abc44..35bfff01a 100644 Binary files a/graphics/pokemon/banette/mega/back.png and b/graphics/pokemon/banette/mega/back.png differ diff --git a/graphics/pokemon/banette/mega/front.png b/graphics/pokemon/banette/mega/front.png index c4992cb17..919b9d6fd 100644 Binary files a/graphics/pokemon/banette/mega/front.png and b/graphics/pokemon/banette/mega/front.png differ diff --git a/graphics/pokemon/banette/mega/icon.png b/graphics/pokemon/banette/mega/icon.png index f4e086723..9f2c4f3b1 100644 Binary files a/graphics/pokemon/banette/mega/icon.png and b/graphics/pokemon/banette/mega/icon.png differ diff --git a/graphics/pokemon/barbaracle/anim_front.png b/graphics/pokemon/barbaracle/anim_front.png index d8b85a130..b4febab31 100644 Binary files a/graphics/pokemon/barbaracle/anim_front.png and b/graphics/pokemon/barbaracle/anim_front.png differ diff --git a/graphics/pokemon/barbaracle/back.png b/graphics/pokemon/barbaracle/back.png index 08a414804..e29e04a89 100644 Binary files a/graphics/pokemon/barbaracle/back.png and b/graphics/pokemon/barbaracle/back.png differ diff --git a/graphics/pokemon/barbaracle/icon.png b/graphics/pokemon/barbaracle/icon.png index 7b8943347..761e9ec5f 100644 Binary files a/graphics/pokemon/barbaracle/icon.png and b/graphics/pokemon/barbaracle/icon.png differ diff --git a/graphics/pokemon/barboach/anim_front.png b/graphics/pokemon/barboach/anim_front.png index 0d2a22823..a1805b0a8 100644 Binary files a/graphics/pokemon/barboach/anim_front.png and b/graphics/pokemon/barboach/anim_front.png differ diff --git a/graphics/pokemon/barboach/back.png b/graphics/pokemon/barboach/back.png index 4adbf753d..e10a270d3 100644 Binary files a/graphics/pokemon/barboach/back.png and b/graphics/pokemon/barboach/back.png differ diff --git a/graphics/pokemon/barboach/icon.png b/graphics/pokemon/barboach/icon.png index e794b9d5a..23226d1e1 100644 Binary files a/graphics/pokemon/barboach/icon.png and b/graphics/pokemon/barboach/icon.png differ diff --git a/graphics/pokemon/barraskewda/back.png b/graphics/pokemon/barraskewda/back.png index f052c6435..439a7c803 100644 Binary files a/graphics/pokemon/barraskewda/back.png and b/graphics/pokemon/barraskewda/back.png differ diff --git a/graphics/pokemon/barraskewda/front.png b/graphics/pokemon/barraskewda/front.png index 88c58b84e..1269d220b 100644 Binary files a/graphics/pokemon/barraskewda/front.png and b/graphics/pokemon/barraskewda/front.png differ diff --git a/graphics/pokemon/barraskewda/icon.png b/graphics/pokemon/barraskewda/icon.png index bb9cf14fc..c0aed5b3d 100644 Binary files a/graphics/pokemon/barraskewda/icon.png and b/graphics/pokemon/barraskewda/icon.png differ diff --git a/graphics/pokemon/basculegion/female/icon.png b/graphics/pokemon/basculegion/female/icon.png index f26e4cc25..fb85ca6c0 100644 Binary files a/graphics/pokemon/basculegion/female/icon.png and b/graphics/pokemon/basculegion/female/icon.png differ diff --git a/graphics/pokemon/basculegion/icon.png b/graphics/pokemon/basculegion/icon.png index f7cf0fea0..579a83d55 100644 Binary files a/graphics/pokemon/basculegion/icon.png and b/graphics/pokemon/basculegion/icon.png differ diff --git a/graphics/pokemon/basculin/anim_front.png b/graphics/pokemon/basculin/anim_front.png index 91b5bca4b..2981cdbdc 100644 Binary files a/graphics/pokemon/basculin/anim_front.png and b/graphics/pokemon/basculin/anim_front.png differ diff --git a/graphics/pokemon/basculin/back.png b/graphics/pokemon/basculin/back.png index ea607355e..d77fc4185 100644 Binary files a/graphics/pokemon/basculin/back.png and b/graphics/pokemon/basculin/back.png differ diff --git a/graphics/pokemon/basculin/blue_striped/front.png b/graphics/pokemon/basculin/blue_striped/front.png index 2ccb745ec..cd6e6cda1 100644 Binary files a/graphics/pokemon/basculin/blue_striped/front.png and b/graphics/pokemon/basculin/blue_striped/front.png differ diff --git a/graphics/pokemon/basculin/icon.png b/graphics/pokemon/basculin/icon.png index bf0b5ec9d..5ad173c5d 100644 Binary files a/graphics/pokemon/basculin/icon.png and b/graphics/pokemon/basculin/icon.png differ diff --git a/graphics/pokemon/basculin/white_striped/back.png b/graphics/pokemon/basculin/white_striped/back.png index b6fb2e3d6..d8faa1575 100644 Binary files a/graphics/pokemon/basculin/white_striped/back.png and b/graphics/pokemon/basculin/white_striped/back.png differ diff --git a/graphics/pokemon/basculin/white_striped/front.png b/graphics/pokemon/basculin/white_striped/front.png index 76233ed90..f16202e14 100644 Binary files a/graphics/pokemon/basculin/white_striped/front.png and b/graphics/pokemon/basculin/white_striped/front.png differ diff --git a/graphics/pokemon/basculin/white_striped/icon.png b/graphics/pokemon/basculin/white_striped/icon.png index ed1ab8a1e..a69c4e51a 100644 Binary files a/graphics/pokemon/basculin/white_striped/icon.png and b/graphics/pokemon/basculin/white_striped/icon.png differ diff --git a/graphics/pokemon/bastiodon/anim_front.png b/graphics/pokemon/bastiodon/anim_front.png index 404f3f83f..3a36e62a3 100644 Binary files a/graphics/pokemon/bastiodon/anim_front.png and b/graphics/pokemon/bastiodon/anim_front.png differ diff --git a/graphics/pokemon/bastiodon/back.png b/graphics/pokemon/bastiodon/back.png index 33e641c18..138321042 100644 Binary files a/graphics/pokemon/bastiodon/back.png and b/graphics/pokemon/bastiodon/back.png differ diff --git a/graphics/pokemon/bastiodon/icon.png b/graphics/pokemon/bastiodon/icon.png index 2e00c8903..f44b73587 100644 Binary files a/graphics/pokemon/bastiodon/icon.png and b/graphics/pokemon/bastiodon/icon.png differ diff --git a/graphics/pokemon/bayleef/back.png b/graphics/pokemon/bayleef/back.png index a1889b606..060726f6b 100644 Binary files a/graphics/pokemon/bayleef/back.png and b/graphics/pokemon/bayleef/back.png differ diff --git a/graphics/pokemon/bayleef/icon.png b/graphics/pokemon/bayleef/icon.png index e97d4d017..7e803a70f 100644 Binary files a/graphics/pokemon/bayleef/icon.png and b/graphics/pokemon/bayleef/icon.png differ diff --git a/graphics/pokemon/beartic/anim_front.png b/graphics/pokemon/beartic/anim_front.png index d7a3efa96..136ca5ec0 100644 Binary files a/graphics/pokemon/beartic/anim_front.png and b/graphics/pokemon/beartic/anim_front.png differ diff --git a/graphics/pokemon/beautifly/icon.png b/graphics/pokemon/beautifly/icon.png index b7161f04d..84b1f7b8c 100644 Binary files a/graphics/pokemon/beautifly/icon.png and b/graphics/pokemon/beautifly/icon.png differ diff --git a/graphics/pokemon/beedrill/anim_front.png b/graphics/pokemon/beedrill/anim_front.png index 3927c4e84..b8b8eacbe 100644 Binary files a/graphics/pokemon/beedrill/anim_front.png and b/graphics/pokemon/beedrill/anim_front.png differ diff --git a/graphics/pokemon/beedrill/back.png b/graphics/pokemon/beedrill/back.png index e00dc9144..e3ef11dce 100644 Binary files a/graphics/pokemon/beedrill/back.png and b/graphics/pokemon/beedrill/back.png differ diff --git a/graphics/pokemon/beedrill/icon.png b/graphics/pokemon/beedrill/icon.png index fedf53d7f..f6c91c86c 100644 Binary files a/graphics/pokemon/beedrill/icon.png and b/graphics/pokemon/beedrill/icon.png differ diff --git a/graphics/pokemon/beedrill/mega/back.png b/graphics/pokemon/beedrill/mega/back.png index ad4d79a5c..74cc60603 100644 Binary files a/graphics/pokemon/beedrill/mega/back.png and b/graphics/pokemon/beedrill/mega/back.png differ diff --git a/graphics/pokemon/beedrill/mega/front.png b/graphics/pokemon/beedrill/mega/front.png index 1f310bd95..963c10fd9 100644 Binary files a/graphics/pokemon/beedrill/mega/front.png and b/graphics/pokemon/beedrill/mega/front.png differ diff --git a/graphics/pokemon/beedrill/mega/icon.png b/graphics/pokemon/beedrill/mega/icon.png index 324362162..9a1788b7e 100644 Binary files a/graphics/pokemon/beedrill/mega/icon.png and b/graphics/pokemon/beedrill/mega/icon.png differ diff --git a/graphics/pokemon/beedrill/normal.pal b/graphics/pokemon/beedrill/normal.pal index 5dcebed76..c04b1878f 100644 --- a/graphics/pokemon/beedrill/normal.pal +++ b/graphics/pokemon/beedrill/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -139 123 148 -189 172 197 255 255 255 -24 24 24 -222 205 246 -82 90 123 -131 74 0 -230 148 32 255 246 164 255 205 74 -156 0 8 -213 24 49 -255 148 106 +230 148 32 180 98 16 -232 224 248 +131 74 0 +238 230 255 +222 205 246 +189 172 197 +139 123 148 +255 148 106 +213 24 49 +156 0 8 +82 90 123 +24 24 24 diff --git a/graphics/pokemon/beedrill/shiny.pal b/graphics/pokemon/beedrill/shiny.pal index 01f97d385..7d03a33c1 100644 --- a/graphics/pokemon/beedrill/shiny.pal +++ b/graphics/pokemon/beedrill/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -136 128 144 -184 176 192 -248 248 248 +208 152 160 +255 255 255 +230 255 189 +189 238 0 +131 197 41 +90 164 0 +57 115 0 +238 238 255 +222 213 246 +189 180 197 +139 131 148 +123 148 255 +49 98 213 +16 32 164 +82 90 123 24 24 24 -216 208 240 -80 88 120 -56 112 0 -128 192 40 -224 248 184 -184 232 0 -16 32 160 -48 96 208 -120 144 248 -88 160 0 -232 224 248 diff --git a/graphics/pokemon/beheeyem/anim_front.png b/graphics/pokemon/beheeyem/anim_front.png index 4d67e46e0..f61201cbb 100644 Binary files a/graphics/pokemon/beheeyem/anim_front.png and b/graphics/pokemon/beheeyem/anim_front.png differ diff --git a/graphics/pokemon/beheeyem/back.png b/graphics/pokemon/beheeyem/back.png index 6e70bdba7..4050e2fc9 100644 Binary files a/graphics/pokemon/beheeyem/back.png and b/graphics/pokemon/beheeyem/back.png differ diff --git a/graphics/pokemon/beheeyem/icon.png b/graphics/pokemon/beheeyem/icon.png index e881b8c4b..2c76e7aa4 100644 Binary files a/graphics/pokemon/beheeyem/icon.png and b/graphics/pokemon/beheeyem/icon.png differ diff --git a/graphics/pokemon/beldum/anim_front.png b/graphics/pokemon/beldum/anim_front.png index 44a88a0c4..e8437e440 100644 Binary files a/graphics/pokemon/beldum/anim_front.png and b/graphics/pokemon/beldum/anim_front.png differ diff --git a/graphics/pokemon/beldum/back.png b/graphics/pokemon/beldum/back.png index 8ec87862e..d605b0b24 100644 Binary files a/graphics/pokemon/beldum/back.png and b/graphics/pokemon/beldum/back.png differ diff --git a/graphics/pokemon/bellossom/anim_front.png b/graphics/pokemon/bellossom/anim_front.png index c2e9b6cee..e46c11c0d 100644 Binary files a/graphics/pokemon/bellossom/anim_front.png and b/graphics/pokemon/bellossom/anim_front.png differ diff --git a/graphics/pokemon/bellossom/back.png b/graphics/pokemon/bellossom/back.png index e7835a9ad..443ea1b76 100644 Binary files a/graphics/pokemon/bellossom/back.png and b/graphics/pokemon/bellossom/back.png differ diff --git a/graphics/pokemon/bellossom/icon.png b/graphics/pokemon/bellossom/icon.png index 138ff9c1e..15704ab54 100644 Binary files a/graphics/pokemon/bellossom/icon.png and b/graphics/pokemon/bellossom/icon.png differ diff --git a/graphics/pokemon/bellsprout/anim_front.png b/graphics/pokemon/bellsprout/anim_front.png index 09a48b67e..b6309f008 100644 Binary files a/graphics/pokemon/bellsprout/anim_front.png and b/graphics/pokemon/bellsprout/anim_front.png differ diff --git a/graphics/pokemon/bellsprout/back.png b/graphics/pokemon/bellsprout/back.png index 3357a68a8..8385882c2 100644 Binary files a/graphics/pokemon/bellsprout/back.png and b/graphics/pokemon/bellsprout/back.png differ diff --git a/graphics/pokemon/bellsprout/normal.pal b/graphics/pokemon/bellsprout/normal.pal index 3a2a60032..cb766b2a0 100644 --- a/graphics/pokemon/bellsprout/normal.pal +++ b/graphics/pokemon/bellsprout/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -148 106 65 -255 255 255 -255 238 164 +152 160 208 +0 0 0 90 57 0 -230 189 131 -248 248 248 -16 16 16 -144 104 64 +148 106 65 +172 123 65 115 32 0 +180 65 49 +213 98 106 230 139 148 65 106 16 -213 98 106 -123 197 82 -180 65 49 98 164 65 +123 197 82 +172 238 148 +208 189 96 +240 224 112 +255 255 255 diff --git a/graphics/pokemon/bellsprout/shiny.pal b/graphics/pokemon/bellsprout/shiny.pal index 89668940d..366527e0c 100644 --- a/graphics/pokemon/bellsprout/shiny.pal +++ b/graphics/pokemon/bellsprout/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -168 120 64 -248 248 216 -248 240 136 -88 56 0 -216 200 88 -248 248 248 -16 16 16 -144 104 64 -128 88 112 -240 192 224 -152 112 40 -208 168 192 -216 208 72 -168 128 160 -192 168 48 +0 0 0 +90 57 0 +148 106 65 +172 123 65 +131 90 115 +172 131 164 +213 172 197 +246 197 230 +156 106 8 +197 164 8 +222 213 57 +246 255 82 +222 197 24 +255 246 139 +255 255 255 diff --git a/graphics/pokemon/bergmite/anim_front.png b/graphics/pokemon/bergmite/anim_front.png index 2a9f28ad1..503e7ea25 100644 Binary files a/graphics/pokemon/bergmite/anim_front.png and b/graphics/pokemon/bergmite/anim_front.png differ diff --git a/graphics/pokemon/bergmite/back.png b/graphics/pokemon/bergmite/back.png index 673b0499e..5158de96b 100644 Binary files a/graphics/pokemon/bergmite/back.png and b/graphics/pokemon/bergmite/back.png differ diff --git a/graphics/pokemon/bergmite/icon.png b/graphics/pokemon/bergmite/icon.png index c1836a158..dd6d93b8e 100644 Binary files a/graphics/pokemon/bergmite/icon.png and b/graphics/pokemon/bergmite/icon.png differ diff --git a/graphics/pokemon/bewear/back.png b/graphics/pokemon/bewear/back.png index e8846cb8f..a670226c2 100644 Binary files a/graphics/pokemon/bewear/back.png and b/graphics/pokemon/bewear/back.png differ diff --git a/graphics/pokemon/bewear/icon.png b/graphics/pokemon/bewear/icon.png index 1130bf676..5ceb073fb 100644 Binary files a/graphics/pokemon/bewear/icon.png and b/graphics/pokemon/bewear/icon.png differ diff --git a/graphics/pokemon/bibarel/back.png b/graphics/pokemon/bibarel/back.png index 83968a522..ea91d1167 100644 Binary files a/graphics/pokemon/bibarel/back.png and b/graphics/pokemon/bibarel/back.png differ diff --git a/graphics/pokemon/bibarel/icon.png b/graphics/pokemon/bibarel/icon.png index a7e553ed7..5c5fe6372 100644 Binary files a/graphics/pokemon/bibarel/icon.png and b/graphics/pokemon/bibarel/icon.png differ diff --git a/graphics/pokemon/bidoof/anim_front.png b/graphics/pokemon/bidoof/anim_front.png index cc3747110..23c318781 100644 Binary files a/graphics/pokemon/bidoof/anim_front.png and b/graphics/pokemon/bidoof/anim_front.png differ diff --git a/graphics/pokemon/bidoof/back.png b/graphics/pokemon/bidoof/back.png index 7ae5445b6..ec312d544 100644 Binary files a/graphics/pokemon/bidoof/back.png and b/graphics/pokemon/bidoof/back.png differ diff --git a/graphics/pokemon/bidoof/icon.png b/graphics/pokemon/bidoof/icon.png index 042015c6c..bff68b534 100644 Binary files a/graphics/pokemon/bidoof/icon.png and b/graphics/pokemon/bidoof/icon.png differ diff --git a/graphics/pokemon/binacle/anim_front.png b/graphics/pokemon/binacle/anim_front.png index 5a4065cac..589857217 100644 Binary files a/graphics/pokemon/binacle/anim_front.png and b/graphics/pokemon/binacle/anim_front.png differ diff --git a/graphics/pokemon/binacle/back.png b/graphics/pokemon/binacle/back.png index 63477f9ed..51fa2d761 100644 Binary files a/graphics/pokemon/binacle/back.png and b/graphics/pokemon/binacle/back.png differ diff --git a/graphics/pokemon/binacle/icon.png b/graphics/pokemon/binacle/icon.png index e70297878..c534783cc 100644 Binary files a/graphics/pokemon/binacle/icon.png and b/graphics/pokemon/binacle/icon.png differ diff --git a/graphics/pokemon/bisharp/anim_front.png b/graphics/pokemon/bisharp/anim_front.png index 5c2adc90a..d75b02373 100644 Binary files a/graphics/pokemon/bisharp/anim_front.png and b/graphics/pokemon/bisharp/anim_front.png differ diff --git a/graphics/pokemon/bisharp/back.png b/graphics/pokemon/bisharp/back.png index 80628c5fa..ece475973 100644 Binary files a/graphics/pokemon/bisharp/back.png and b/graphics/pokemon/bisharp/back.png differ diff --git a/graphics/pokemon/bisharp/icon.png b/graphics/pokemon/bisharp/icon.png index 2690e0eb1..8110a7291 100644 Binary files a/graphics/pokemon/bisharp/icon.png and b/graphics/pokemon/bisharp/icon.png differ diff --git a/graphics/pokemon/blacephalon/back.png b/graphics/pokemon/blacephalon/back.png index 21417542a..679b13cfc 100644 Binary files a/graphics/pokemon/blacephalon/back.png and b/graphics/pokemon/blacephalon/back.png differ diff --git a/graphics/pokemon/blacephalon/front.png b/graphics/pokemon/blacephalon/front.png index 346d48196..95bbf1c45 100644 Binary files a/graphics/pokemon/blacephalon/front.png and b/graphics/pokemon/blacephalon/front.png differ diff --git a/graphics/pokemon/blacephalon/icon.png b/graphics/pokemon/blacephalon/icon.png index a2799f187..bb1f9cdc3 100644 Binary files a/graphics/pokemon/blacephalon/icon.png and b/graphics/pokemon/blacephalon/icon.png differ diff --git a/graphics/pokemon/blastoise/anim_front.png b/graphics/pokemon/blastoise/anim_front.png index a5ba90e18..7b5d21f78 100644 Binary files a/graphics/pokemon/blastoise/anim_front.png and b/graphics/pokemon/blastoise/anim_front.png differ diff --git a/graphics/pokemon/blastoise/back.png b/graphics/pokemon/blastoise/back.png index 18275be68..02b52f3db 100644 Binary files a/graphics/pokemon/blastoise/back.png and b/graphics/pokemon/blastoise/back.png differ diff --git a/graphics/pokemon/blastoise/icon.png b/graphics/pokemon/blastoise/icon.png index 14de7f145..5b1c1eb9b 100644 Binary files a/graphics/pokemon/blastoise/icon.png and b/graphics/pokemon/blastoise/icon.png differ diff --git a/graphics/pokemon/blastoise/mega/back.png b/graphics/pokemon/blastoise/mega/back.png index 94bfea384..0aa5d66e7 100644 Binary files a/graphics/pokemon/blastoise/mega/back.png and b/graphics/pokemon/blastoise/mega/back.png differ diff --git a/graphics/pokemon/blastoise/mega/front.png b/graphics/pokemon/blastoise/mega/front.png index 0f3514e95..30fe7b073 100644 Binary files a/graphics/pokemon/blastoise/mega/front.png and b/graphics/pokemon/blastoise/mega/front.png differ diff --git a/graphics/pokemon/blastoise/mega/icon.png b/graphics/pokemon/blastoise/mega/icon.png index f96fba00f..5abfe44ab 100644 Binary files a/graphics/pokemon/blastoise/mega/icon.png and b/graphics/pokemon/blastoise/mega/icon.png differ diff --git a/graphics/pokemon/blastoise/normal.pal b/graphics/pokemon/blastoise/normal.pal index 08c199736..b8bd08939 100644 --- a/graphics/pokemon/blastoise/normal.pal +++ b/graphics/pokemon/blastoise/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -248 192 248 -32 98 172 -8 57 98 +152 208 160 +16 16 16 +255 255 255 +205 205 213 +148 148 148 +74 74 74 148 172 230 90 139 205 -74 74 74 -0 0 0 -205 205 213 -90 57 24 -148 148 148 -139 98 65 -255 255 255 -213 172 74 +32 98 172 +8 57 98 +152 48 40 246 213 156 +224 192 112 213 172 74 -156 136 80 +139 98 65 +90 57 24 diff --git a/graphics/pokemon/blastoise/shiny.pal b/graphics/pokemon/blastoise/shiny.pal index ff27dbbdc..07c6360f4 100644 --- a/graphics/pokemon/blastoise/shiny.pal +++ b/graphics/pokemon/blastoise/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -160 120 184 -112 72 144 -232 216 248 -208 176 240 -72 72 72 -16 16 16 -200 200 208 -40 88 32 -144 144 144 -112 144 72 -248 248 248 -184 176 96 -240 224 192 -189 180 90 -112 144 72 +208 160 152 +0 0 0 +255 255 255 +205 205 213 +148 148 148 +74 74 74 +238 222 255 +213 180 246 +164 123 189 +115 82 148 +152 48 40 +240 208 152 +224 192 112 +184 176 88 +112 144 64 +32 90 24 diff --git a/graphics/pokemon/blaziken/anim_front.png b/graphics/pokemon/blaziken/anim_front.png index 046a0b5a4..7e2077423 100644 Binary files a/graphics/pokemon/blaziken/anim_front.png and b/graphics/pokemon/blaziken/anim_front.png differ diff --git a/graphics/pokemon/blaziken/back.png b/graphics/pokemon/blaziken/back.png index b427a2baf..c01c4bf7e 100644 Binary files a/graphics/pokemon/blaziken/back.png and b/graphics/pokemon/blaziken/back.png differ diff --git a/graphics/pokemon/blaziken/icon.png b/graphics/pokemon/blaziken/icon.png index e731b5745..c3eba0ef6 100644 Binary files a/graphics/pokemon/blaziken/icon.png and b/graphics/pokemon/blaziken/icon.png differ diff --git a/graphics/pokemon/blaziken/mega/back.png b/graphics/pokemon/blaziken/mega/back.png index 1b5d945f5..cad0d2c42 100644 Binary files a/graphics/pokemon/blaziken/mega/back.png and b/graphics/pokemon/blaziken/mega/back.png differ diff --git a/graphics/pokemon/blaziken/mega/front.png b/graphics/pokemon/blaziken/mega/front.png index b08af4bc6..b41d5ae14 100644 Binary files a/graphics/pokemon/blaziken/mega/front.png and b/graphics/pokemon/blaziken/mega/front.png differ diff --git a/graphics/pokemon/blaziken/mega/icon.png b/graphics/pokemon/blaziken/mega/icon.png index 601be6deb..a77758cb7 100644 Binary files a/graphics/pokemon/blaziken/mega/icon.png and b/graphics/pokemon/blaziken/mega/icon.png differ diff --git a/graphics/pokemon/blipbug/back.png b/graphics/pokemon/blipbug/back.png index 49d733541..e630f39b9 100644 Binary files a/graphics/pokemon/blipbug/back.png and b/graphics/pokemon/blipbug/back.png differ diff --git a/graphics/pokemon/blipbug/front.png b/graphics/pokemon/blipbug/front.png index 0ce868eff..03dc7d6ff 100644 Binary files a/graphics/pokemon/blipbug/front.png and b/graphics/pokemon/blipbug/front.png differ diff --git a/graphics/pokemon/blipbug/icon.png b/graphics/pokemon/blipbug/icon.png index fc7e5d4b1..b3cf1cf79 100644 Binary files a/graphics/pokemon/blipbug/icon.png and b/graphics/pokemon/blipbug/icon.png differ diff --git a/graphics/pokemon/blissey/anim_front.png b/graphics/pokemon/blissey/anim_front.png index c7c98ae39..81bbd243c 100644 Binary files a/graphics/pokemon/blissey/anim_front.png and b/graphics/pokemon/blissey/anim_front.png differ diff --git a/graphics/pokemon/blissey/back.png b/graphics/pokemon/blissey/back.png index 80d818498..34da0fbcc 100644 Binary files a/graphics/pokemon/blissey/back.png and b/graphics/pokemon/blissey/back.png differ diff --git a/graphics/pokemon/blissey/icon.png b/graphics/pokemon/blissey/icon.png index 4c92f8082..69e19ff5b 100644 Binary files a/graphics/pokemon/blissey/icon.png and b/graphics/pokemon/blissey/icon.png differ diff --git a/graphics/pokemon/blitzle/anim_front.png b/graphics/pokemon/blitzle/anim_front.png index 58fc91d19..73f4dcc8b 100644 Binary files a/graphics/pokemon/blitzle/anim_front.png and b/graphics/pokemon/blitzle/anim_front.png differ diff --git a/graphics/pokemon/blitzle/back.png b/graphics/pokemon/blitzle/back.png index 23812b327..285a06815 100644 Binary files a/graphics/pokemon/blitzle/back.png and b/graphics/pokemon/blitzle/back.png differ diff --git a/graphics/pokemon/blitzle/icon.png b/graphics/pokemon/blitzle/icon.png index 011f5ffcf..5df34f26c 100644 Binary files a/graphics/pokemon/blitzle/icon.png and b/graphics/pokemon/blitzle/icon.png differ diff --git a/graphics/pokemon/boldore/anim_front.png b/graphics/pokemon/boldore/anim_front.png index 51fba613b..c0d5ec5e2 100644 Binary files a/graphics/pokemon/boldore/anim_front.png and b/graphics/pokemon/boldore/anim_front.png differ diff --git a/graphics/pokemon/boldore/back.png b/graphics/pokemon/boldore/back.png index b576908db..1e01bc5eb 100644 Binary files a/graphics/pokemon/boldore/back.png and b/graphics/pokemon/boldore/back.png differ diff --git a/graphics/pokemon/boldore/icon.png b/graphics/pokemon/boldore/icon.png index 0f7af594c..9eb09c7f2 100644 Binary files a/graphics/pokemon/boldore/icon.png and b/graphics/pokemon/boldore/icon.png differ diff --git a/graphics/pokemon/boltund/back.png b/graphics/pokemon/boltund/back.png index 88caa4a97..b1f44db7f 100644 Binary files a/graphics/pokemon/boltund/back.png and b/graphics/pokemon/boltund/back.png differ diff --git a/graphics/pokemon/boltund/front.png b/graphics/pokemon/boltund/front.png index 777a134fc..4254bb91d 100644 Binary files a/graphics/pokemon/boltund/front.png and b/graphics/pokemon/boltund/front.png differ diff --git a/graphics/pokemon/boltund/icon.png b/graphics/pokemon/boltund/icon.png index 1f0f993c4..344ab587e 100644 Binary files a/graphics/pokemon/boltund/icon.png and b/graphics/pokemon/boltund/icon.png differ diff --git a/graphics/pokemon/bonsly/anim_front.png b/graphics/pokemon/bonsly/anim_front.png index 879010449..074473680 100644 Binary files a/graphics/pokemon/bonsly/anim_front.png and b/graphics/pokemon/bonsly/anim_front.png differ diff --git a/graphics/pokemon/bonsly/back.png b/graphics/pokemon/bonsly/back.png index f436a7df0..53e14e886 100644 Binary files a/graphics/pokemon/bonsly/back.png and b/graphics/pokemon/bonsly/back.png differ diff --git a/graphics/pokemon/bonsly/icon.png b/graphics/pokemon/bonsly/icon.png index 82b8ee194..c68beb140 100644 Binary files a/graphics/pokemon/bonsly/icon.png and b/graphics/pokemon/bonsly/icon.png differ diff --git a/graphics/pokemon/bouffalant/back.png b/graphics/pokemon/bouffalant/back.png index d496278f7..6bfd1cafc 100644 Binary files a/graphics/pokemon/bouffalant/back.png and b/graphics/pokemon/bouffalant/back.png differ diff --git a/graphics/pokemon/bouffalant/icon.png b/graphics/pokemon/bouffalant/icon.png index 20273fcd3..d68affca9 100644 Binary files a/graphics/pokemon/bouffalant/icon.png and b/graphics/pokemon/bouffalant/icon.png differ diff --git a/graphics/pokemon/bounsweet/back.png b/graphics/pokemon/bounsweet/back.png index a806daf1b..cd2a5401b 100644 Binary files a/graphics/pokemon/bounsweet/back.png and b/graphics/pokemon/bounsweet/back.png differ diff --git a/graphics/pokemon/bounsweet/front.png b/graphics/pokemon/bounsweet/front.png index a9c3344a8..a31220dcf 100644 Binary files a/graphics/pokemon/bounsweet/front.png and b/graphics/pokemon/bounsweet/front.png differ diff --git a/graphics/pokemon/bounsweet/icon.png b/graphics/pokemon/bounsweet/icon.png index 4dd9d7666..80df38b9a 100644 Binary files a/graphics/pokemon/bounsweet/icon.png and b/graphics/pokemon/bounsweet/icon.png differ diff --git a/graphics/pokemon/braixen/anim_front.png b/graphics/pokemon/braixen/anim_front.png index 92a782fa2..2d8ba7ee1 100644 Binary files a/graphics/pokemon/braixen/anim_front.png and b/graphics/pokemon/braixen/anim_front.png differ diff --git a/graphics/pokemon/braixen/back.png b/graphics/pokemon/braixen/back.png index a864d6cc3..828c63183 100644 Binary files a/graphics/pokemon/braixen/back.png and b/graphics/pokemon/braixen/back.png differ diff --git a/graphics/pokemon/braixen/icon.png b/graphics/pokemon/braixen/icon.png index 03bc68535..0b2f087f2 100644 Binary files a/graphics/pokemon/braixen/icon.png and b/graphics/pokemon/braixen/icon.png differ diff --git a/graphics/pokemon/braviary/anim_front.png b/graphics/pokemon/braviary/anim_front.png index 11b7c31e9..7cfc167a5 100644 Binary files a/graphics/pokemon/braviary/anim_front.png and b/graphics/pokemon/braviary/anim_front.png differ diff --git a/graphics/pokemon/braviary/back.png b/graphics/pokemon/braviary/back.png index 02de0b608..bbca13796 100644 Binary files a/graphics/pokemon/braviary/back.png and b/graphics/pokemon/braviary/back.png differ diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisuian/back.png index 275ec9bce..947bc46ae 100755 Binary files a/graphics/pokemon/braviary/hisuian/back.png and b/graphics/pokemon/braviary/hisuian/back.png differ diff --git a/graphics/pokemon/braviary/hisuian/front.png b/graphics/pokemon/braviary/hisuian/front.png index 70c8eb166..61a5457a5 100755 Binary files a/graphics/pokemon/braviary/hisuian/front.png and b/graphics/pokemon/braviary/hisuian/front.png differ diff --git a/graphics/pokemon/braviary/hisuian/icon.png b/graphics/pokemon/braviary/hisuian/icon.png index ce1c3571b..c2aa449d9 100755 Binary files a/graphics/pokemon/braviary/hisuian/icon.png and b/graphics/pokemon/braviary/hisuian/icon.png differ diff --git a/graphics/pokemon/braviary/icon.png b/graphics/pokemon/braviary/icon.png index c8db4e522..51bf4b044 100644 Binary files a/graphics/pokemon/braviary/icon.png and b/graphics/pokemon/braviary/icon.png differ diff --git a/graphics/pokemon/breloom/anim_front.png b/graphics/pokemon/breloom/anim_front.png index b00c2d4ee..7dd5f4869 100644 Binary files a/graphics/pokemon/breloom/anim_front.png and b/graphics/pokemon/breloom/anim_front.png differ diff --git a/graphics/pokemon/breloom/icon.png b/graphics/pokemon/breloom/icon.png index 0c8d2a8eb..03a99944a 100644 Binary files a/graphics/pokemon/breloom/icon.png and b/graphics/pokemon/breloom/icon.png differ diff --git a/graphics/pokemon/brionne/back.png b/graphics/pokemon/brionne/back.png index 72c2ec4f7..df7eb9d33 100644 Binary files a/graphics/pokemon/brionne/back.png and b/graphics/pokemon/brionne/back.png differ diff --git a/graphics/pokemon/brionne/front.png b/graphics/pokemon/brionne/front.png index c08ed7554..d592b4aa1 100644 Binary files a/graphics/pokemon/brionne/front.png and b/graphics/pokemon/brionne/front.png differ diff --git a/graphics/pokemon/brionne/icon.png b/graphics/pokemon/brionne/icon.png index 83a250b08..da33e8ee0 100644 Binary files a/graphics/pokemon/brionne/icon.png and b/graphics/pokemon/brionne/icon.png differ diff --git a/graphics/pokemon/bronzong/anim_front.png b/graphics/pokemon/bronzong/anim_front.png index 0b55949cc..6ac7575ed 100644 Binary files a/graphics/pokemon/bronzong/anim_front.png and b/graphics/pokemon/bronzong/anim_front.png differ diff --git a/graphics/pokemon/bronzong/back.png b/graphics/pokemon/bronzong/back.png index bc4dc9874..29a199463 100644 Binary files a/graphics/pokemon/bronzong/back.png and b/graphics/pokemon/bronzong/back.png differ diff --git a/graphics/pokemon/bronzong/icon.png b/graphics/pokemon/bronzong/icon.png index 67787ff7f..92fafe5f0 100644 Binary files a/graphics/pokemon/bronzong/icon.png and b/graphics/pokemon/bronzong/icon.png differ diff --git a/graphics/pokemon/bronzor/anim_front.png b/graphics/pokemon/bronzor/anim_front.png index 821857369..e9d219a38 100644 Binary files a/graphics/pokemon/bronzor/anim_front.png and b/graphics/pokemon/bronzor/anim_front.png differ diff --git a/graphics/pokemon/bronzor/back.png b/graphics/pokemon/bronzor/back.png index ec7c5d1bf..300257498 100644 Binary files a/graphics/pokemon/bronzor/back.png and b/graphics/pokemon/bronzor/back.png differ diff --git a/graphics/pokemon/bronzor/icon.png b/graphics/pokemon/bronzor/icon.png index 055842d3f..8eaa3f83c 100644 Binary files a/graphics/pokemon/bronzor/icon.png and b/graphics/pokemon/bronzor/icon.png differ diff --git a/graphics/pokemon/bruxish/back.png b/graphics/pokemon/bruxish/back.png index 590d2d739..32aeed0b5 100644 Binary files a/graphics/pokemon/bruxish/back.png and b/graphics/pokemon/bruxish/back.png differ diff --git a/graphics/pokemon/bruxish/front.png b/graphics/pokemon/bruxish/front.png index 61c437bf2..4447621e5 100644 Binary files a/graphics/pokemon/bruxish/front.png and b/graphics/pokemon/bruxish/front.png differ diff --git a/graphics/pokemon/bruxish/icon.png b/graphics/pokemon/bruxish/icon.png index c31b54860..00d049a5c 100644 Binary files a/graphics/pokemon/bruxish/icon.png and b/graphics/pokemon/bruxish/icon.png differ diff --git a/graphics/pokemon/budew/anim_front.png b/graphics/pokemon/budew/anim_front.png index f9573204f..1c8e447f5 100644 Binary files a/graphics/pokemon/budew/anim_front.png and b/graphics/pokemon/budew/anim_front.png differ diff --git a/graphics/pokemon/budew/icon.png b/graphics/pokemon/budew/icon.png index 523aa383f..a6ffcc160 100644 Binary files a/graphics/pokemon/budew/icon.png and b/graphics/pokemon/budew/icon.png differ diff --git a/graphics/pokemon/buizel/anim_front.png b/graphics/pokemon/buizel/anim_front.png index 60f0d0c60..3cdc6e327 100644 Binary files a/graphics/pokemon/buizel/anim_front.png and b/graphics/pokemon/buizel/anim_front.png differ diff --git a/graphics/pokemon/buizel/back.png b/graphics/pokemon/buizel/back.png index f5d587af7..85debb53e 100644 Binary files a/graphics/pokemon/buizel/back.png and b/graphics/pokemon/buizel/back.png differ diff --git a/graphics/pokemon/buizel/icon.png b/graphics/pokemon/buizel/icon.png index 438ae63cd..d22181078 100644 Binary files a/graphics/pokemon/buizel/icon.png and b/graphics/pokemon/buizel/icon.png differ diff --git a/graphics/pokemon/bulbasaur/anim_front.png b/graphics/pokemon/bulbasaur/anim_front.png index 07fb0509d..3ab471ea6 100644 Binary files a/graphics/pokemon/bulbasaur/anim_front.png and b/graphics/pokemon/bulbasaur/anim_front.png differ diff --git a/graphics/pokemon/bulbasaur/back.png b/graphics/pokemon/bulbasaur/back.png index 73cf623a8..bbca57fea 100644 Binary files a/graphics/pokemon/bulbasaur/back.png and b/graphics/pokemon/bulbasaur/back.png differ diff --git a/graphics/pokemon/bulbasaur/icon.png b/graphics/pokemon/bulbasaur/icon.png index 9c8677a66..7738836b9 100644 Binary files a/graphics/pokemon/bulbasaur/icon.png and b/graphics/pokemon/bulbasaur/icon.png differ diff --git a/graphics/pokemon/bulbasaur/normal.pal b/graphics/pokemon/bulbasaur/normal.pal index 2df2358d9..f18ccb705 100644 --- a/graphics/pokemon/bulbasaur/normal.pal +++ b/graphics/pokemon/bulbasaur/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -248 192 248 -40 96 48 -96 192 112 -16 16 16 -56 144 72 -144 216 144 -24 72 72 -56 144 144 -128 232 192 -48 112 112 -96 208 176 +152 160 208 +255 255 255 +131 238 197 +98 213 180 +57 148 148 +24 74 74 +255 106 98 +232 32 56 168 0 48 -248 248 248 -248 104 96 -160 48 16 -200 200 200 +205 205 205 +16 16 16 +189 255 115 +164 213 65 +115 172 49 +82 98 41 +48 112 112 diff --git a/graphics/pokemon/bulbasaur/shiny.pal b/graphics/pokemon/bulbasaur/shiny.pal index 30895158b..696f091f4 100644 --- a/graphics/pokemon/bulbasaur/shiny.pal +++ b/graphics/pokemon/bulbasaur/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -208 248 184 -8 88 8 -56 168 32 +152 160 208 +255 255 255 +197 246 82 +156 213 74 +115 164 49 +49 98 32 +255 106 98 +222 74 65 +189 41 32 +205 205 205 16 16 16 -8 128 40 -112 216 72 -56 96 40 -120 160 64 -200 240 104 +98 222 57 +41 172 16 +0 131 32 +0 90 0 80 128 40 -160 208 88 -184 56 48 -248 248 248 -248 128 120 -184 56 48 -200 200 200 diff --git a/graphics/pokemon/buneary/anim_front.png b/graphics/pokemon/buneary/anim_front.png index 20887cb4b..5d6bb799d 100644 Binary files a/graphics/pokemon/buneary/anim_front.png and b/graphics/pokemon/buneary/anim_front.png differ diff --git a/graphics/pokemon/buneary/back.png b/graphics/pokemon/buneary/back.png index ccd0d0ed9..163023905 100644 Binary files a/graphics/pokemon/buneary/back.png and b/graphics/pokemon/buneary/back.png differ diff --git a/graphics/pokemon/buneary/icon.png b/graphics/pokemon/buneary/icon.png index 1abbb8ebc..e628ddb4a 100644 Binary files a/graphics/pokemon/buneary/icon.png and b/graphics/pokemon/buneary/icon.png differ diff --git a/graphics/pokemon/bunnelby/anim_front.png b/graphics/pokemon/bunnelby/anim_front.png index 349741e2d..128653b68 100644 Binary files a/graphics/pokemon/bunnelby/anim_front.png and b/graphics/pokemon/bunnelby/anim_front.png differ diff --git a/graphics/pokemon/bunnelby/back.png b/graphics/pokemon/bunnelby/back.png index 2e6b7a706..2b7cc3b85 100644 Binary files a/graphics/pokemon/bunnelby/back.png and b/graphics/pokemon/bunnelby/back.png differ diff --git a/graphics/pokemon/bunnelby/icon.png b/graphics/pokemon/bunnelby/icon.png index 1e2cad333..3f16d65a1 100644 Binary files a/graphics/pokemon/bunnelby/icon.png and b/graphics/pokemon/bunnelby/icon.png differ diff --git a/graphics/pokemon/burmy/back.png b/graphics/pokemon/burmy/back.png index 0e393f5ae..f60f2d792 100644 Binary files a/graphics/pokemon/burmy/back.png and b/graphics/pokemon/burmy/back.png differ diff --git a/graphics/pokemon/burmy/icon.png b/graphics/pokemon/burmy/icon.png index 564fa7f7d..38cebb1d4 100644 Binary files a/graphics/pokemon/burmy/icon.png and b/graphics/pokemon/burmy/icon.png differ diff --git a/graphics/pokemon/burmy/sandy_cloak/back.png b/graphics/pokemon/burmy/sandy_cloak/back.png index 19a90bdbf..494ef5447 100644 Binary files a/graphics/pokemon/burmy/sandy_cloak/back.png and b/graphics/pokemon/burmy/sandy_cloak/back.png differ diff --git a/graphics/pokemon/burmy/sandy_cloak/icon.png b/graphics/pokemon/burmy/sandy_cloak/icon.png index 0001e534f..bb9c68d90 100644 Binary files a/graphics/pokemon/burmy/sandy_cloak/icon.png and b/graphics/pokemon/burmy/sandy_cloak/icon.png differ diff --git a/graphics/pokemon/burmy/trash_cloak/anim_front.png b/graphics/pokemon/burmy/trash_cloak/anim_front.png index 698a81c75..ec25c45f3 100644 Binary files a/graphics/pokemon/burmy/trash_cloak/anim_front.png and b/graphics/pokemon/burmy/trash_cloak/anim_front.png differ diff --git a/graphics/pokemon/burmy/trash_cloak/back.png b/graphics/pokemon/burmy/trash_cloak/back.png index 9f77e8fea..9725be4fa 100644 Binary files a/graphics/pokemon/burmy/trash_cloak/back.png and b/graphics/pokemon/burmy/trash_cloak/back.png differ diff --git a/graphics/pokemon/burmy/trash_cloak/icon.png b/graphics/pokemon/burmy/trash_cloak/icon.png index 2fa678027..2b212f8b7 100644 Binary files a/graphics/pokemon/burmy/trash_cloak/icon.png and b/graphics/pokemon/burmy/trash_cloak/icon.png differ diff --git a/graphics/pokemon/butterfree/anim_front.png b/graphics/pokemon/butterfree/anim_front.png index 991249f0f..3b4e35d61 100644 Binary files a/graphics/pokemon/butterfree/anim_front.png and b/graphics/pokemon/butterfree/anim_front.png differ diff --git a/graphics/pokemon/butterfree/anim_frontf.png b/graphics/pokemon/butterfree/anim_frontf.png index 94768a4e6..4421e6bf2 100644 Binary files a/graphics/pokemon/butterfree/anim_frontf.png and b/graphics/pokemon/butterfree/anim_frontf.png differ diff --git a/graphics/pokemon/butterfree/back.png b/graphics/pokemon/butterfree/back.png index f543025db..96fbf7300 100644 Binary files a/graphics/pokemon/butterfree/back.png and b/graphics/pokemon/butterfree/back.png differ diff --git a/graphics/pokemon/butterfree/backf.png b/graphics/pokemon/butterfree/backf.png index 5d5236cd4..a68e2c039 100644 Binary files a/graphics/pokemon/butterfree/backf.png and b/graphics/pokemon/butterfree/backf.png differ diff --git a/graphics/pokemon/butterfree/normal.pal b/graphics/pokemon/butterfree/normal.pal index ab84ea009..bb638bf60 100644 --- a/graphics/pokemon/butterfree/normal.pal +++ b/graphics/pokemon/butterfree/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -0 0 0 49 49 82 90 74 115 -131 131 189 -238 238 255 115 98 172 -189 189 230 -230 98 131 -98 49 57 -255 156 180 -48 48 80 -222 49 49 +131 131 189 82 123 197 106 189 205 -240 248 248 +98 49 57 +222 49 49 +230 98 131 +255 156 180 +139 131 172 +156 156 180 +189 189 230 +238 238 255 +0 0 0 diff --git a/graphics/pokemon/butterfree/shiny.pal b/graphics/pokemon/butterfree/shiny.pal index 32264265b..0c9ae12cc 100644 --- a/graphics/pokemon/butterfree/shiny.pal +++ b/graphics/pokemon/butterfree/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -16 16 16 -48 48 80 -88 72 112 -128 128 184 -232 232 248 -112 96 168 -224 184 192 -112 232 112 -48 96 56 -176 248 176 -48 48 80 -32 208 24 -216 80 96 -240 136 128 -240 248 248 +208 208 160 +49 49 82 +90 74 115 +115 98 172 +131 131 189 +222 82 98 +246 139 131 +49 98 57 +32 213 24 +115 238 115 +156 255 156 +180 123 131 +189 139 148 +230 180 189 +255 238 238 +0 0 0 diff --git a/graphics/pokemon/buzzwole/back.png b/graphics/pokemon/buzzwole/back.png index 6ccefcb1c..1a4d4678f 100644 Binary files a/graphics/pokemon/buzzwole/back.png and b/graphics/pokemon/buzzwole/back.png differ diff --git a/graphics/pokemon/buzzwole/front.png b/graphics/pokemon/buzzwole/front.png index fd1ef0d86..afc823085 100644 Binary files a/graphics/pokemon/buzzwole/front.png and b/graphics/pokemon/buzzwole/front.png differ diff --git a/graphics/pokemon/buzzwole/icon.png b/graphics/pokemon/buzzwole/icon.png index 62034e92a..72e3270da 100644 Binary files a/graphics/pokemon/buzzwole/icon.png and b/graphics/pokemon/buzzwole/icon.png differ diff --git a/graphics/pokemon/cacnea/anim_front.png b/graphics/pokemon/cacnea/anim_front.png index 3f544a702..5d0969d8f 100644 Binary files a/graphics/pokemon/cacnea/anim_front.png and b/graphics/pokemon/cacnea/anim_front.png differ diff --git a/graphics/pokemon/cacnea/back.png b/graphics/pokemon/cacnea/back.png index 6eee06da7..5b5c31deb 100644 Binary files a/graphics/pokemon/cacnea/back.png and b/graphics/pokemon/cacnea/back.png differ diff --git a/graphics/pokemon/cacnea/icon.png b/graphics/pokemon/cacnea/icon.png index 9f01850d2..6e4f89055 100644 Binary files a/graphics/pokemon/cacnea/icon.png and b/graphics/pokemon/cacnea/icon.png differ diff --git a/graphics/pokemon/cacturne/back.png b/graphics/pokemon/cacturne/back.png index 106f7e7c1..7769b4775 100644 Binary files a/graphics/pokemon/cacturne/back.png and b/graphics/pokemon/cacturne/back.png differ diff --git a/graphics/pokemon/calyrex/back.png b/graphics/pokemon/calyrex/back.png index dc1645080..331ebe7e5 100644 Binary files a/graphics/pokemon/calyrex/back.png and b/graphics/pokemon/calyrex/back.png differ diff --git a/graphics/pokemon/calyrex/front.png b/graphics/pokemon/calyrex/front.png index e523c02e9..6439045eb 100644 Binary files a/graphics/pokemon/calyrex/front.png and b/graphics/pokemon/calyrex/front.png differ diff --git a/graphics/pokemon/calyrex/ice_rider/back.png b/graphics/pokemon/calyrex/ice_rider/back.png index dbd8af0a1..bcd7fed09 100644 Binary files a/graphics/pokemon/calyrex/ice_rider/back.png and b/graphics/pokemon/calyrex/ice_rider/back.png differ diff --git a/graphics/pokemon/calyrex/ice_rider/front.png b/graphics/pokemon/calyrex/ice_rider/front.png index 7bd20293d..d885a9c8e 100644 Binary files a/graphics/pokemon/calyrex/ice_rider/front.png and b/graphics/pokemon/calyrex/ice_rider/front.png differ diff --git a/graphics/pokemon/calyrex/ice_rider/icon.png b/graphics/pokemon/calyrex/ice_rider/icon.png index 043388227..33a987920 100644 Binary files a/graphics/pokemon/calyrex/ice_rider/icon.png and b/graphics/pokemon/calyrex/ice_rider/icon.png differ diff --git a/graphics/pokemon/calyrex/icon.png b/graphics/pokemon/calyrex/icon.png index d4e9228f1..d0a835fe0 100644 Binary files a/graphics/pokemon/calyrex/icon.png and b/graphics/pokemon/calyrex/icon.png differ diff --git a/graphics/pokemon/calyrex/shadow_rider/back.png b/graphics/pokemon/calyrex/shadow_rider/back.png index 671f9c6f4..81d136ba3 100644 Binary files a/graphics/pokemon/calyrex/shadow_rider/back.png and b/graphics/pokemon/calyrex/shadow_rider/back.png differ diff --git a/graphics/pokemon/calyrex/shadow_rider/front.png b/graphics/pokemon/calyrex/shadow_rider/front.png index 36099d42e..c33a38fbe 100644 Binary files a/graphics/pokemon/calyrex/shadow_rider/front.png and b/graphics/pokemon/calyrex/shadow_rider/front.png differ diff --git a/graphics/pokemon/calyrex/shadow_rider/icon.png b/graphics/pokemon/calyrex/shadow_rider/icon.png index 0157a181f..e1747ccc6 100644 Binary files a/graphics/pokemon/calyrex/shadow_rider/icon.png and b/graphics/pokemon/calyrex/shadow_rider/icon.png differ diff --git a/graphics/pokemon/camerupt/icon.png b/graphics/pokemon/camerupt/icon.png index 64797b64d..e79a080fd 100644 Binary files a/graphics/pokemon/camerupt/icon.png and b/graphics/pokemon/camerupt/icon.png differ diff --git a/graphics/pokemon/camerupt/mega/back.png b/graphics/pokemon/camerupt/mega/back.png index 5891aa143..36192211a 100644 Binary files a/graphics/pokemon/camerupt/mega/back.png and b/graphics/pokemon/camerupt/mega/back.png differ diff --git a/graphics/pokemon/camerupt/mega/front.png b/graphics/pokemon/camerupt/mega/front.png index 8e0a907f8..f0fb5a29e 100644 Binary files a/graphics/pokemon/camerupt/mega/front.png and b/graphics/pokemon/camerupt/mega/front.png differ diff --git a/graphics/pokemon/camerupt/mega/icon.png b/graphics/pokemon/camerupt/mega/icon.png index 88c96b1e3..d1f434517 100644 Binary files a/graphics/pokemon/camerupt/mega/icon.png and b/graphics/pokemon/camerupt/mega/icon.png differ diff --git a/graphics/pokemon/carbink/anim_front.png b/graphics/pokemon/carbink/anim_front.png index aa0e66a9d..7d641afab 100644 Binary files a/graphics/pokemon/carbink/anim_front.png and b/graphics/pokemon/carbink/anim_front.png differ diff --git a/graphics/pokemon/carbink/back.png b/graphics/pokemon/carbink/back.png index 0ee514b8a..b6ad2aac9 100644 Binary files a/graphics/pokemon/carbink/back.png and b/graphics/pokemon/carbink/back.png differ diff --git a/graphics/pokemon/carbink/icon.png b/graphics/pokemon/carbink/icon.png index 6c4a0b214..60ac4ed42 100644 Binary files a/graphics/pokemon/carbink/icon.png and b/graphics/pokemon/carbink/icon.png differ diff --git a/graphics/pokemon/carkol/back.png b/graphics/pokemon/carkol/back.png index d44970f73..21c5eabc5 100644 Binary files a/graphics/pokemon/carkol/back.png and b/graphics/pokemon/carkol/back.png differ diff --git a/graphics/pokemon/carkol/icon.png b/graphics/pokemon/carkol/icon.png index 5e896998d..4469388d6 100644 Binary files a/graphics/pokemon/carkol/icon.png and b/graphics/pokemon/carkol/icon.png differ diff --git a/graphics/pokemon/carnivine/anim_front.png b/graphics/pokemon/carnivine/anim_front.png index 3ddfb464f..ef9f5a154 100644 Binary files a/graphics/pokemon/carnivine/anim_front.png and b/graphics/pokemon/carnivine/anim_front.png differ diff --git a/graphics/pokemon/carnivine/back.png b/graphics/pokemon/carnivine/back.png index b4caff4d2..a53780d2e 100644 Binary files a/graphics/pokemon/carnivine/back.png and b/graphics/pokemon/carnivine/back.png differ diff --git a/graphics/pokemon/carnivine/icon.png b/graphics/pokemon/carnivine/icon.png index ac686d689..c28777e71 100644 Binary files a/graphics/pokemon/carnivine/icon.png and b/graphics/pokemon/carnivine/icon.png differ diff --git a/graphics/pokemon/carracosta/anim_front.png b/graphics/pokemon/carracosta/anim_front.png index 64bf2a4f1..e93c3cb39 100644 Binary files a/graphics/pokemon/carracosta/anim_front.png and b/graphics/pokemon/carracosta/anim_front.png differ diff --git a/graphics/pokemon/carracosta/back.png b/graphics/pokemon/carracosta/back.png index c56c6da96..b76657cb2 100644 Binary files a/graphics/pokemon/carracosta/back.png and b/graphics/pokemon/carracosta/back.png differ diff --git a/graphics/pokemon/carracosta/icon.png b/graphics/pokemon/carracosta/icon.png index ce9d7056d..6e81eca1b 100644 Binary files a/graphics/pokemon/carracosta/icon.png and b/graphics/pokemon/carracosta/icon.png differ diff --git a/graphics/pokemon/carvanha/anim_front.png b/graphics/pokemon/carvanha/anim_front.png index 0141b57db..d2383d127 100644 Binary files a/graphics/pokemon/carvanha/anim_front.png and b/graphics/pokemon/carvanha/anim_front.png differ diff --git a/graphics/pokemon/carvanha/icon.png b/graphics/pokemon/carvanha/icon.png index 573236cb3..c6bd0f23b 100644 Binary files a/graphics/pokemon/carvanha/icon.png and b/graphics/pokemon/carvanha/icon.png differ diff --git a/graphics/pokemon/cascoon/anim_front.png b/graphics/pokemon/cascoon/anim_front.png index 9065450f5..c1eb0e0d8 100644 Binary files a/graphics/pokemon/cascoon/anim_front.png and b/graphics/pokemon/cascoon/anim_front.png differ diff --git a/graphics/pokemon/cascoon/back.png b/graphics/pokemon/cascoon/back.png index 94253e325..3ad87665a 100644 Binary files a/graphics/pokemon/cascoon/back.png and b/graphics/pokemon/cascoon/back.png differ diff --git a/graphics/pokemon/cascoon/icon.png b/graphics/pokemon/cascoon/icon.png index bd6d54428..1aab02095 100644 Binary files a/graphics/pokemon/cascoon/icon.png and b/graphics/pokemon/cascoon/icon.png differ diff --git a/graphics/pokemon/caterpie/anim_front.png b/graphics/pokemon/caterpie/anim_front.png index 73939253f..eab11dc99 100644 Binary files a/graphics/pokemon/caterpie/anim_front.png and b/graphics/pokemon/caterpie/anim_front.png differ diff --git a/graphics/pokemon/caterpie/back.png b/graphics/pokemon/caterpie/back.png index aca0c0e98..8160f3cac 100644 Binary files a/graphics/pokemon/caterpie/back.png and b/graphics/pokemon/caterpie/back.png differ diff --git a/graphics/pokemon/caterpie/icon.png b/graphics/pokemon/caterpie/icon.png index 99d285034..60f8c55b4 100644 Binary files a/graphics/pokemon/caterpie/icon.png and b/graphics/pokemon/caterpie/icon.png differ diff --git a/graphics/pokemon/caterpie/normal.pal b/graphics/pokemon/caterpie/normal.pal index 76bf98f54..1caf753e7 100644 --- a/graphics/pokemon/caterpie/normal.pal +++ b/graphics/pokemon/caterpie/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 +152 160 208 +24 90 65 +32 123 74 +49 172 65 +74 197 41 +106 213 49 +172 246 65 +82 98 74 +123 131 74 +213 189 131 +246 238 139 123 57 74 +255 65 65 255 123 65 255 180 57 -255 65 65 -32 123 74 -172 246 65 0 0 0 -24 90 65 -106 213 49 -49 172 65 -246 238 139 -213 189 131 -123 131 74 -72 200 40 -240 232 136 diff --git a/graphics/pokemon/caterpie/shiny.pal b/graphics/pokemon/caterpie/shiny.pal index 3a5ff2866..0b489c968 100644 --- a/graphics/pokemon/caterpie/shiny.pal +++ b/graphics/pokemon/caterpie/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 40 24 -240 80 16 -248 152 40 -224 32 16 -176 120 16 -248 248 112 -16 16 16 -144 80 32 -248 224 32 -232 168 40 -240 232 168 -232 208 128 -168 128 56 -240 192 24 -240 232 120 +148 82 32 +180 123 16 +238 172 41 +246 197 24 +255 230 32 +255 255 65 +123 98 57 +172 131 57 +238 213 131 +246 238 123 +123 41 24 +230 16 0 +246 82 16 +255 156 41 +0 0 0 diff --git a/graphics/pokemon/celebi/anim_front.png b/graphics/pokemon/celebi/anim_front.png index 1ab0f8990..e6b312384 100644 Binary files a/graphics/pokemon/celebi/anim_front.png and b/graphics/pokemon/celebi/anim_front.png differ diff --git a/graphics/pokemon/celebi/icon.png b/graphics/pokemon/celebi/icon.png index 800de48f7..2834b278e 100644 Binary files a/graphics/pokemon/celebi/icon.png and b/graphics/pokemon/celebi/icon.png differ diff --git a/graphics/pokemon/celesteela/back.png b/graphics/pokemon/celesteela/back.png index ee683652e..fe7cc4ca4 100644 Binary files a/graphics/pokemon/celesteela/back.png and b/graphics/pokemon/celesteela/back.png differ diff --git a/graphics/pokemon/celesteela/front.png b/graphics/pokemon/celesteela/front.png index 37bb71b4d..f41009173 100644 Binary files a/graphics/pokemon/celesteela/front.png and b/graphics/pokemon/celesteela/front.png differ diff --git a/graphics/pokemon/celesteela/icon.png b/graphics/pokemon/celesteela/icon.png index 94cb03264..854c36851 100644 Binary files a/graphics/pokemon/celesteela/icon.png and b/graphics/pokemon/celesteela/icon.png differ diff --git a/graphics/pokemon/centiskorch/back.png b/graphics/pokemon/centiskorch/back.png index 24595a7d3..7a6263898 100644 Binary files a/graphics/pokemon/centiskorch/back.png and b/graphics/pokemon/centiskorch/back.png differ diff --git a/graphics/pokemon/centiskorch/icon.png b/graphics/pokemon/centiskorch/icon.png index ce0226c3c..6c52063bf 100644 Binary files a/graphics/pokemon/centiskorch/icon.png and b/graphics/pokemon/centiskorch/icon.png differ diff --git a/graphics/pokemon/chandelure/anim_front.png b/graphics/pokemon/chandelure/anim_front.png index 30444980c..847bc7815 100644 Binary files a/graphics/pokemon/chandelure/anim_front.png and b/graphics/pokemon/chandelure/anim_front.png differ diff --git a/graphics/pokemon/chandelure/back.png b/graphics/pokemon/chandelure/back.png index e26c26834..30f715ceb 100644 Binary files a/graphics/pokemon/chandelure/back.png and b/graphics/pokemon/chandelure/back.png differ diff --git a/graphics/pokemon/chandelure/icon.png b/graphics/pokemon/chandelure/icon.png index 2b1a4580b..c6a736851 100644 Binary files a/graphics/pokemon/chandelure/icon.png and b/graphics/pokemon/chandelure/icon.png differ diff --git a/graphics/pokemon/chansey/back.png b/graphics/pokemon/chansey/back.png index 0b461ad8f..87e70c9a2 100644 Binary files a/graphics/pokemon/chansey/back.png and b/graphics/pokemon/chansey/back.png differ diff --git a/graphics/pokemon/chansey/icon.png b/graphics/pokemon/chansey/icon.png index 9a36259a2..965edba8f 100644 Binary files a/graphics/pokemon/chansey/icon.png and b/graphics/pokemon/chansey/icon.png differ diff --git a/graphics/pokemon/charizard/anim_front.png b/graphics/pokemon/charizard/anim_front.png index 561564618..9e9efadea 100644 Binary files a/graphics/pokemon/charizard/anim_front.png and b/graphics/pokemon/charizard/anim_front.png differ diff --git a/graphics/pokemon/charizard/back.png b/graphics/pokemon/charizard/back.png index 9f60ee638..dac2fa87c 100644 Binary files a/graphics/pokemon/charizard/back.png and b/graphics/pokemon/charizard/back.png differ diff --git a/graphics/pokemon/charizard/icon.png b/graphics/pokemon/charizard/icon.png index e9c622be0..1edf27cd4 100644 Binary files a/graphics/pokemon/charizard/icon.png and b/graphics/pokemon/charizard/icon.png differ diff --git a/graphics/pokemon/charizard/mega_x/back.png b/graphics/pokemon/charizard/mega_x/back.png index 5dd0f4152..ad7413536 100644 Binary files a/graphics/pokemon/charizard/mega_x/back.png and b/graphics/pokemon/charizard/mega_x/back.png differ diff --git a/graphics/pokemon/charizard/mega_x/front.png b/graphics/pokemon/charizard/mega_x/front.png index b0db5b4ec..5c83b554a 100644 Binary files a/graphics/pokemon/charizard/mega_x/front.png and b/graphics/pokemon/charizard/mega_x/front.png differ diff --git a/graphics/pokemon/charizard/mega_x/icon.png b/graphics/pokemon/charizard/mega_x/icon.png index 7a516761a..6fdfe06bb 100644 Binary files a/graphics/pokemon/charizard/mega_x/icon.png and b/graphics/pokemon/charizard/mega_x/icon.png differ diff --git a/graphics/pokemon/charizard/mega_y/back.png b/graphics/pokemon/charizard/mega_y/back.png index 4ca04ff1d..b1d3bcf6b 100644 Binary files a/graphics/pokemon/charizard/mega_y/back.png and b/graphics/pokemon/charizard/mega_y/back.png differ diff --git a/graphics/pokemon/charizard/mega_y/front.png b/graphics/pokemon/charizard/mega_y/front.png index d1915e4d5..c7ebf7cc8 100644 Binary files a/graphics/pokemon/charizard/mega_y/front.png and b/graphics/pokemon/charizard/mega_y/front.png differ diff --git a/graphics/pokemon/charizard/mega_y/icon.png b/graphics/pokemon/charizard/mega_y/icon.png index 28ac3648c..eec03b4f9 100644 Binary files a/graphics/pokemon/charizard/mega_y/icon.png and b/graphics/pokemon/charizard/mega_y/icon.png differ diff --git a/graphics/pokemon/charizard/normal.pal b/graphics/pokemon/charizard/normal.pal index db32d4324..45a645d2d 100644 --- a/graphics/pokemon/charizard/normal.pal +++ b/graphics/pokemon/charizard/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -232 64 32 -128 48 24 -240 160 16 -232 176 88 -248 224 104 -205 82 65 -16 16 16 -238 131 41 -8 64 80 -32 112 144 -200 200 200 -248 248 248 -0 128 248 +0 0 0 +255 255 255 +205 205 205 +98 98 98 238 222 123 238 180 90 +238 131 41 +205 82 65 +131 49 24 +32 156 197 +32 115 148 +8 65 82 +255 213 16 +246 164 16 +230 65 16 diff --git a/graphics/pokemon/charizard/shiny.pal b/graphics/pokemon/charizard/shiny.pal index dce3f7832..a5c9dfcac 100644 --- a/graphics/pokemon/charizard/shiny.pal +++ b/graphics/pokemon/charizard/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -208 80 16 -32 40 48 -224 176 16 -168 160 176 -224 224 80 -80 80 96 0 0 0 -128 120 144 -128 16 40 -184 32 64 -200 200 200 -248 248 248 -192 0 0 -216 216 184 -184 184 168 +255 255 255 +205 205 205 +98 98 98 +222 222 172 +189 189 172 +131 123 148 +90 90 106 +49 57 65 +246 65 74 +189 32 65 +131 16 41 +230 230 16 +230 180 16 +213 82 16 diff --git a/graphics/pokemon/charjabug/back.png b/graphics/pokemon/charjabug/back.png index e0e1eb74d..010d6496a 100644 Binary files a/graphics/pokemon/charjabug/back.png and b/graphics/pokemon/charjabug/back.png differ diff --git a/graphics/pokemon/charjabug/icon.png b/graphics/pokemon/charjabug/icon.png index dc726514e..eb2f9206e 100644 Binary files a/graphics/pokemon/charjabug/icon.png and b/graphics/pokemon/charjabug/icon.png differ diff --git a/graphics/pokemon/charmander/anim_front.png b/graphics/pokemon/charmander/anim_front.png index ded552567..2126c56dc 100644 Binary files a/graphics/pokemon/charmander/anim_front.png and b/graphics/pokemon/charmander/anim_front.png differ diff --git a/graphics/pokemon/charmander/back.png b/graphics/pokemon/charmander/back.png index 347c5e821..5415e18ed 100644 Binary files a/graphics/pokemon/charmander/back.png and b/graphics/pokemon/charmander/back.png differ diff --git a/graphics/pokemon/charmander/icon.png b/graphics/pokemon/charmander/icon.png index e1419bd1b..cad7a49bc 100644 Binary files a/graphics/pokemon/charmander/icon.png and b/graphics/pokemon/charmander/icon.png differ diff --git a/graphics/pokemon/charmander/normal.pal b/graphics/pokemon/charmander/normal.pal index d365db830..9a006c855 100644 --- a/graphics/pokemon/charmander/normal.pal +++ b/graphics/pokemon/charmander/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -216 80 56 -136 40 0 -248 144 64 -248 192 96 16 16 16 -16 64 136 +180 180 180 +255 255 255 +255 213 123 +230 172 90 +255 197 98 +255 148 65 +222 82 57 +139 41 0 48 168 232 -248 248 248 -248 208 80 -232 56 24 -240 160 0 -192 96 104 -224 200 136 -248 232 200 -176 176 176 +24 136 176 +8 56 136 +255 213 8 +246 164 0 +230 57 0 diff --git a/graphics/pokemon/charmander/shiny.pal b/graphics/pokemon/charmander/shiny.pal index 934438a04..40ce4eb57 100644 --- a/graphics/pokemon/charmander/shiny.pal +++ b/graphics/pokemon/charmander/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -232 160 16 -144 80 8 -248 216 64 -248 248 184 16 16 16 -56 120 128 -128 168 200 -248 248 248 -248 216 16 -248 88 32 -248 176 16 -248 88 32 -224 200 104 -248 240 136 -176 176 176 +180 180 180 +255 255 255 +255 246 115 +230 205 82 +255 246 164 +255 222 41 +238 156 0 +148 74 0 +148 197 230 +65 139 148 +24 49 74 +255 222 16 +255 180 16 +255 90 32 diff --git a/graphics/pokemon/charmeleon/anim_front.png b/graphics/pokemon/charmeleon/anim_front.png index eda3059df..7432ebfda 100644 Binary files a/graphics/pokemon/charmeleon/anim_front.png and b/graphics/pokemon/charmeleon/anim_front.png differ diff --git a/graphics/pokemon/charmeleon/back.png b/graphics/pokemon/charmeleon/back.png index ab21e518c..0eddbd1cf 100644 Binary files a/graphics/pokemon/charmeleon/back.png and b/graphics/pokemon/charmeleon/back.png differ diff --git a/graphics/pokemon/charmeleon/icon.png b/graphics/pokemon/charmeleon/icon.png index 79bfdebac..6ae1cba07 100644 Binary files a/graphics/pokemon/charmeleon/icon.png and b/graphics/pokemon/charmeleon/icon.png differ diff --git a/graphics/pokemon/charmeleon/normal.pal b/graphics/pokemon/charmeleon/normal.pal index c72de3517..c0a7a8bfe 100644 --- a/graphics/pokemon/charmeleon/normal.pal +++ b/graphics/pokemon/charmeleon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -248 208 80 -248 160 0 -232 56 24 -144 32 16 -208 56 56 -248 80 72 -16 16 16 -104 104 104 -248 248 248 -176 176 176 -0 88 248 +255 255 255 +180 180 180 +106 106 106 248 128 104 -232 200 176 -200 168 120 -184 152 104 +255 82 74 +200 56 56 +148 32 16 +224 200 168 +192 160 112 +16 16 16 +0 88 248 +208 176 136 +255 222 41 +255 164 0 +255 65 0 diff --git a/graphics/pokemon/charmeleon/shiny.pal b/graphics/pokemon/charmeleon/shiny.pal index ba180ab6d..bbeaa1bf6 100644 --- a/graphics/pokemon/charmeleon/shiny.pal +++ b/graphics/pokemon/charmeleon/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -248 224 48 -248 176 16 -248 96 32 -144 88 8 -216 160 40 -248 232 48 +255 255 255 +180 180 180 +106 106 106 +255 238 139 +255 230 0 +222 164 41 +148 82 0 +255 246 172 +238 222 90 16 16 16 -104 104 104 -248 248 248 -176 176 176 -72 136 72 -248 240 184 -248 248 192 -240 232 152 -232 216 112 +40 112 40 +240 232 128 +255 230 49 +255 180 16 +255 98 32 diff --git a/graphics/pokemon/chatot/anim_front.png b/graphics/pokemon/chatot/anim_front.png index 4a4868c63..a7b9fa5bc 100644 Binary files a/graphics/pokemon/chatot/anim_front.png and b/graphics/pokemon/chatot/anim_front.png differ diff --git a/graphics/pokemon/chatot/back.png b/graphics/pokemon/chatot/back.png index 2228e7dab..20acd609c 100644 Binary files a/graphics/pokemon/chatot/back.png and b/graphics/pokemon/chatot/back.png differ diff --git a/graphics/pokemon/cherrim/normal/anim_front.png b/graphics/pokemon/cherrim/normal/anim_front.png index beac83f20..591396454 100644 Binary files a/graphics/pokemon/cherrim/normal/anim_front.png and b/graphics/pokemon/cherrim/normal/anim_front.png differ diff --git a/graphics/pokemon/cherrim/normal/back.png b/graphics/pokemon/cherrim/normal/back.png index 31cc9ae2c..5819f4dd9 100644 Binary files a/graphics/pokemon/cherrim/normal/back.png and b/graphics/pokemon/cherrim/normal/back.png differ diff --git a/graphics/pokemon/cherrim/sunshine/back.png b/graphics/pokemon/cherrim/sunshine/back.png index e2c14955e..5df400429 100644 Binary files a/graphics/pokemon/cherrim/sunshine/back.png and b/graphics/pokemon/cherrim/sunshine/back.png differ diff --git a/graphics/pokemon/cherubi/back.png b/graphics/pokemon/cherubi/back.png index 6ce42e42b..4e6ab6858 100644 Binary files a/graphics/pokemon/cherubi/back.png and b/graphics/pokemon/cherubi/back.png differ diff --git a/graphics/pokemon/cherubi/icon.png b/graphics/pokemon/cherubi/icon.png index 9a6ec0319..380f4d351 100644 Binary files a/graphics/pokemon/cherubi/icon.png and b/graphics/pokemon/cherubi/icon.png differ diff --git a/graphics/pokemon/chesnaught/anim_front.png b/graphics/pokemon/chesnaught/anim_front.png index f8de83cc6..db9466c88 100644 Binary files a/graphics/pokemon/chesnaught/anim_front.png and b/graphics/pokemon/chesnaught/anim_front.png differ diff --git a/graphics/pokemon/chesnaught/back.png b/graphics/pokemon/chesnaught/back.png index 741fc66b7..13917931e 100644 Binary files a/graphics/pokemon/chesnaught/back.png and b/graphics/pokemon/chesnaught/back.png differ diff --git a/graphics/pokemon/chesnaught/icon.png b/graphics/pokemon/chesnaught/icon.png index 15e1237cc..0b0cd8c5a 100644 Binary files a/graphics/pokemon/chesnaught/icon.png and b/graphics/pokemon/chesnaught/icon.png differ diff --git a/graphics/pokemon/chespin/back.png b/graphics/pokemon/chespin/back.png index aa10f57c7..1cf511302 100644 Binary files a/graphics/pokemon/chespin/back.png and b/graphics/pokemon/chespin/back.png differ diff --git a/graphics/pokemon/chespin/icon.png b/graphics/pokemon/chespin/icon.png index adefc6f99..6bacd750e 100644 Binary files a/graphics/pokemon/chespin/icon.png and b/graphics/pokemon/chespin/icon.png differ diff --git a/graphics/pokemon/chewtle/back.png b/graphics/pokemon/chewtle/back.png index a3df512d0..0b3c93960 100644 Binary files a/graphics/pokemon/chewtle/back.png and b/graphics/pokemon/chewtle/back.png differ diff --git a/graphics/pokemon/chewtle/icon.png b/graphics/pokemon/chewtle/icon.png index 17d850922..1bcbc9784 100644 Binary files a/graphics/pokemon/chewtle/icon.png and b/graphics/pokemon/chewtle/icon.png differ diff --git a/graphics/pokemon/chikorita/back.png b/graphics/pokemon/chikorita/back.png index d7219205b..f6adb9273 100644 Binary files a/graphics/pokemon/chikorita/back.png and b/graphics/pokemon/chikorita/back.png differ diff --git a/graphics/pokemon/chimchar/anim_front.png b/graphics/pokemon/chimchar/anim_front.png index a8471b873..4e6879f52 100644 Binary files a/graphics/pokemon/chimchar/anim_front.png and b/graphics/pokemon/chimchar/anim_front.png differ diff --git a/graphics/pokemon/chimchar/back.png b/graphics/pokemon/chimchar/back.png index fb7c9a77b..e206e9182 100644 Binary files a/graphics/pokemon/chimchar/back.png and b/graphics/pokemon/chimchar/back.png differ diff --git a/graphics/pokemon/chimchar/icon.png b/graphics/pokemon/chimchar/icon.png index 68d27a196..056ec698b 100644 Binary files a/graphics/pokemon/chimchar/icon.png and b/graphics/pokemon/chimchar/icon.png differ diff --git a/graphics/pokemon/chimecho/anim_front.png b/graphics/pokemon/chimecho/anim_front.png index f6d41a383..991130d1b 100644 Binary files a/graphics/pokemon/chimecho/anim_front.png and b/graphics/pokemon/chimecho/anim_front.png differ diff --git a/graphics/pokemon/chimecho/back.png b/graphics/pokemon/chimecho/back.png index a5c6367b9..189a8528a 100644 Binary files a/graphics/pokemon/chimecho/back.png and b/graphics/pokemon/chimecho/back.png differ diff --git a/graphics/pokemon/chinchou/back.png b/graphics/pokemon/chinchou/back.png index 89b17aa2d..03a6870db 100644 Binary files a/graphics/pokemon/chinchou/back.png and b/graphics/pokemon/chinchou/back.png differ diff --git a/graphics/pokemon/chinchou/icon.png b/graphics/pokemon/chinchou/icon.png index 4daad9780..ba57ada02 100644 Binary files a/graphics/pokemon/chinchou/icon.png and b/graphics/pokemon/chinchou/icon.png differ diff --git a/graphics/pokemon/chingling/back.png b/graphics/pokemon/chingling/back.png index b8aa5f37e..a89d846aa 100644 Binary files a/graphics/pokemon/chingling/back.png and b/graphics/pokemon/chingling/back.png differ diff --git a/graphics/pokemon/chingling/icon.png b/graphics/pokemon/chingling/icon.png index 4413b2323..51a0b595e 100644 Binary files a/graphics/pokemon/chingling/icon.png and b/graphics/pokemon/chingling/icon.png differ diff --git a/graphics/pokemon/cinccino/anim_front.png b/graphics/pokemon/cinccino/anim_front.png index b13d0c626..013385d78 100644 Binary files a/graphics/pokemon/cinccino/anim_front.png and b/graphics/pokemon/cinccino/anim_front.png differ diff --git a/graphics/pokemon/cinccino/icon.png b/graphics/pokemon/cinccino/icon.png index 9d25dd28f..a0409bff6 100644 Binary files a/graphics/pokemon/cinccino/icon.png and b/graphics/pokemon/cinccino/icon.png differ diff --git a/graphics/pokemon/cinderace/icon.png b/graphics/pokemon/cinderace/icon.png index c54da0871..f5112ef2c 100644 Binary files a/graphics/pokemon/cinderace/icon.png and b/graphics/pokemon/cinderace/icon.png differ diff --git a/graphics/pokemon/clamperl/anim_front.png b/graphics/pokemon/clamperl/anim_front.png index bf808af50..d857bf65d 100644 Binary files a/graphics/pokemon/clamperl/anim_front.png and b/graphics/pokemon/clamperl/anim_front.png differ diff --git a/graphics/pokemon/clamperl/back.png b/graphics/pokemon/clamperl/back.png index db30e2faa..e00a350ba 100644 Binary files a/graphics/pokemon/clamperl/back.png and b/graphics/pokemon/clamperl/back.png differ diff --git a/graphics/pokemon/clamperl/icon.png b/graphics/pokemon/clamperl/icon.png index d6bc62d89..def997ad2 100644 Binary files a/graphics/pokemon/clamperl/icon.png and b/graphics/pokemon/clamperl/icon.png differ diff --git a/graphics/pokemon/clauncher/anim_front.png b/graphics/pokemon/clauncher/anim_front.png index 5920cf81a..af2da8cc7 100644 Binary files a/graphics/pokemon/clauncher/anim_front.png and b/graphics/pokemon/clauncher/anim_front.png differ diff --git a/graphics/pokemon/clauncher/back.png b/graphics/pokemon/clauncher/back.png index 7bf2f1f11..6edb2554a 100644 Binary files a/graphics/pokemon/clauncher/back.png and b/graphics/pokemon/clauncher/back.png differ diff --git a/graphics/pokemon/clauncher/icon.png b/graphics/pokemon/clauncher/icon.png index 656019638..cb328ce9a 100644 Binary files a/graphics/pokemon/clauncher/icon.png and b/graphics/pokemon/clauncher/icon.png differ diff --git a/graphics/pokemon/clawitzer/anim_front.png b/graphics/pokemon/clawitzer/anim_front.png index 4a70c1d36..1b8a276a7 100644 Binary files a/graphics/pokemon/clawitzer/anim_front.png and b/graphics/pokemon/clawitzer/anim_front.png differ diff --git a/graphics/pokemon/clawitzer/back.png b/graphics/pokemon/clawitzer/back.png index 2f1c5d34c..a4eb21a52 100644 Binary files a/graphics/pokemon/clawitzer/back.png and b/graphics/pokemon/clawitzer/back.png differ diff --git a/graphics/pokemon/clawitzer/icon.png b/graphics/pokemon/clawitzer/icon.png index 6948edeb0..a74fcb9f3 100644 Binary files a/graphics/pokemon/clawitzer/icon.png and b/graphics/pokemon/clawitzer/icon.png differ diff --git a/graphics/pokemon/claydol/anim_front.png b/graphics/pokemon/claydol/anim_front.png index 7687ea5f4..bada994ff 100644 Binary files a/graphics/pokemon/claydol/anim_front.png and b/graphics/pokemon/claydol/anim_front.png differ diff --git a/graphics/pokemon/claydol/back.png b/graphics/pokemon/claydol/back.png index aea3bc9ec..6a231d36b 100644 Binary files a/graphics/pokemon/claydol/back.png and b/graphics/pokemon/claydol/back.png differ diff --git a/graphics/pokemon/claydol/icon.png b/graphics/pokemon/claydol/icon.png index 92fe1abaf..40342dad5 100644 Binary files a/graphics/pokemon/claydol/icon.png and b/graphics/pokemon/claydol/icon.png differ diff --git a/graphics/pokemon/clefable/anim_front.png b/graphics/pokemon/clefable/anim_front.png index 29bf9d45b..4c550c575 100644 Binary files a/graphics/pokemon/clefable/anim_front.png and b/graphics/pokemon/clefable/anim_front.png differ diff --git a/graphics/pokemon/clefable/back.png b/graphics/pokemon/clefable/back.png index 48b83f313..3363cf0c1 100644 Binary files a/graphics/pokemon/clefable/back.png and b/graphics/pokemon/clefable/back.png differ diff --git a/graphics/pokemon/clefable/icon.png b/graphics/pokemon/clefable/icon.png index ccfcd187b..b868a4228 100644 Binary files a/graphics/pokemon/clefable/icon.png and b/graphics/pokemon/clefable/icon.png differ diff --git a/graphics/pokemon/clefable/normal.pal b/graphics/pokemon/clefable/normal.pal index 242352f05..5787db59f 100644 --- a/graphics/pokemon/clefable/normal.pal +++ b/graphics/pokemon/clefable/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -82 65 57 -16 16 16 -123 106 98 -139 74 82 -222 98 98 -255 197 180 -238 148 148 -189 90 123 -82 49 74 -213 123 164 -248 248 248 +255 255 255 +197 197 197 131 131 131 -213 123 139 +255 197 180 +208 120 160 +238 148 148 +222 98 98 +139 74 82 +80 48 72 +184 88 120 222 57 90 -104 72 80 +123 106 98 +82 65 57 +208 120 136 +16 16 16 diff --git a/graphics/pokemon/clefable/shiny.pal b/graphics/pokemon/clefable/shiny.pal index 0ab423cdc..dab1b12e7 100644 --- a/graphics/pokemon/clefable/shiny.pal +++ b/graphics/pokemon/clefable/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -32 120 72 +152 160 208 +255 255 255 +197 197 197 +131 131 131 +255 222 222 +238 156 156 +246 181 181 +222 123 123 +205 90 90 16 16 16 -80 184 112 -184 96 96 -216 120 120 -248 216 216 -232 184 184 216 120 120 +216 112 144 +57 189 98 +8 131 65 +216 136 136 16 16 16 -232 152 152 -248 248 248 -128 128 128 -208 136 152 -222 57 90 -80 48 72 diff --git a/graphics/pokemon/clefairy/anim_front.png b/graphics/pokemon/clefairy/anim_front.png index 81a77b9ff..97d36a186 100644 Binary files a/graphics/pokemon/clefairy/anim_front.png and b/graphics/pokemon/clefairy/anim_front.png differ diff --git a/graphics/pokemon/clefairy/back.png b/graphics/pokemon/clefairy/back.png index f27aa6d92..f02582cd8 100644 Binary files a/graphics/pokemon/clefairy/back.png and b/graphics/pokemon/clefairy/back.png differ diff --git a/graphics/pokemon/clefairy/icon.png b/graphics/pokemon/clefairy/icon.png index 4941cbfe1..9e91a9192 100644 Binary files a/graphics/pokemon/clefairy/icon.png and b/graphics/pokemon/clefairy/icon.png differ diff --git a/graphics/pokemon/clefairy/normal.pal b/graphics/pokemon/clefairy/normal.pal index ac2d66f74..43177b7d1 100644 --- a/graphics/pokemon/clefairy/normal.pal +++ b/graphics/pokemon/clefairy/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -156 82 82 -230 123 123 -255 213 189 -115 74 57 -90 49 32 -156 131 115 -16 16 16 -255 172 172 -148 148 148 255 255 255 -238 65 57 +197 197 197 148 148 148 -176 56 40 -0 0 0 -0 0 0 +238 65 57 +180 57 41 +152 128 112 +112 72 56 +88 48 32 +112 40 8 +255 0 255 +248 208 184 +248 168 168 +230 123 123 +156 82 82 +16 16 16 diff --git a/graphics/pokemon/clefairy/shiny.pal b/graphics/pokemon/clefairy/shiny.pal index b6d39c3bc..ef617d1ca 100644 --- a/graphics/pokemon/clefairy/shiny.pal +++ b/graphics/pokemon/clefairy/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -136 64 64 -216 136 136 -248 216 216 -96 184 80 -56 128 32 -128 224 96 +152 160 208 +255 255 255 +197 197 197 +148 148 148 +238 65 57 +180 57 41 +96 224 56 +64 184 48 +41 131 8 +0 82 0 +255 0 255 +255 222 222 +246 172 172 +216 112 112 +160 64 64 16 16 16 -240 176 176 -144 144 144 -248 248 248 -216 120 112 -144 144 144 -176 80 72 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/cleffa/back.png b/graphics/pokemon/cleffa/back.png index 0ce2aa23a..3f86a222f 100644 Binary files a/graphics/pokemon/cleffa/back.png and b/graphics/pokemon/cleffa/back.png differ diff --git a/graphics/pokemon/cleffa/icon.png b/graphics/pokemon/cleffa/icon.png index 66f130352..6c85eb405 100644 Binary files a/graphics/pokemon/cleffa/icon.png and b/graphics/pokemon/cleffa/icon.png differ diff --git a/graphics/pokemon/clobbopus/back.png b/graphics/pokemon/clobbopus/back.png index b7b688e14..af53690bd 100644 Binary files a/graphics/pokemon/clobbopus/back.png and b/graphics/pokemon/clobbopus/back.png differ diff --git a/graphics/pokemon/clobbopus/front.png b/graphics/pokemon/clobbopus/front.png index cdfb1f993..829de5c20 100644 Binary files a/graphics/pokemon/clobbopus/front.png and b/graphics/pokemon/clobbopus/front.png differ diff --git a/graphics/pokemon/clobbopus/icon.png b/graphics/pokemon/clobbopus/icon.png index 54ea19bf5..695c42cf7 100644 Binary files a/graphics/pokemon/clobbopus/icon.png and b/graphics/pokemon/clobbopus/icon.png differ diff --git a/graphics/pokemon/cloyster/anim_front.png b/graphics/pokemon/cloyster/anim_front.png index c060f7373..bce084388 100644 Binary files a/graphics/pokemon/cloyster/anim_front.png and b/graphics/pokemon/cloyster/anim_front.png differ diff --git a/graphics/pokemon/cloyster/back.png b/graphics/pokemon/cloyster/back.png index bd91f892b..8c038d83c 100644 Binary files a/graphics/pokemon/cloyster/back.png and b/graphics/pokemon/cloyster/back.png differ diff --git a/graphics/pokemon/coalossal/back.png b/graphics/pokemon/coalossal/back.png index c22a71cbb..87c4bf024 100644 Binary files a/graphics/pokemon/coalossal/back.png and b/graphics/pokemon/coalossal/back.png differ diff --git a/graphics/pokemon/coalossal/icon.png b/graphics/pokemon/coalossal/icon.png index 09661934a..781259a2c 100644 Binary files a/graphics/pokemon/coalossal/icon.png and b/graphics/pokemon/coalossal/icon.png differ diff --git a/graphics/pokemon/cobalion/anim_front.png b/graphics/pokemon/cobalion/anim_front.png index 0ffaa5d6e..556761a0d 100644 Binary files a/graphics/pokemon/cobalion/anim_front.png and b/graphics/pokemon/cobalion/anim_front.png differ diff --git a/graphics/pokemon/cobalion/back.png b/graphics/pokemon/cobalion/back.png index b2852bf90..72a14d078 100644 Binary files a/graphics/pokemon/cobalion/back.png and b/graphics/pokemon/cobalion/back.png differ diff --git a/graphics/pokemon/cofagrigus/anim_front.png b/graphics/pokemon/cofagrigus/anim_front.png index ce28c6326..5724f0e22 100644 Binary files a/graphics/pokemon/cofagrigus/anim_front.png and b/graphics/pokemon/cofagrigus/anim_front.png differ diff --git a/graphics/pokemon/cofagrigus/back.png b/graphics/pokemon/cofagrigus/back.png index 9f4d31b86..1ddf5f020 100644 Binary files a/graphics/pokemon/cofagrigus/back.png and b/graphics/pokemon/cofagrigus/back.png differ diff --git a/graphics/pokemon/combee/anim_front.png b/graphics/pokemon/combee/anim_front.png index 8f49eeee9..cc85ef4c9 100644 Binary files a/graphics/pokemon/combee/anim_front.png and b/graphics/pokemon/combee/anim_front.png differ diff --git a/graphics/pokemon/combee/back.png b/graphics/pokemon/combee/back.png index 2d7eaad61..89dfa4f0c 100644 Binary files a/graphics/pokemon/combee/back.png and b/graphics/pokemon/combee/back.png differ diff --git a/graphics/pokemon/combee/icon.png b/graphics/pokemon/combee/icon.png index c5adc4fda..26ae9967d 100644 Binary files a/graphics/pokemon/combee/icon.png and b/graphics/pokemon/combee/icon.png differ diff --git a/graphics/pokemon/combusken/anim_front.png b/graphics/pokemon/combusken/anim_front.png index 72ae83d92..96cdd9d79 100644 Binary files a/graphics/pokemon/combusken/anim_front.png and b/graphics/pokemon/combusken/anim_front.png differ diff --git a/graphics/pokemon/combusken/back.png b/graphics/pokemon/combusken/back.png index 9774aa173..138588153 100644 Binary files a/graphics/pokemon/combusken/back.png and b/graphics/pokemon/combusken/back.png differ diff --git a/graphics/pokemon/comfey/back.png b/graphics/pokemon/comfey/back.png index 9d201e718..143a34e72 100644 Binary files a/graphics/pokemon/comfey/back.png and b/graphics/pokemon/comfey/back.png differ diff --git a/graphics/pokemon/comfey/front.png b/graphics/pokemon/comfey/front.png index 35d801bba..d2e870965 100644 Binary files a/graphics/pokemon/comfey/front.png and b/graphics/pokemon/comfey/front.png differ diff --git a/graphics/pokemon/comfey/icon.png b/graphics/pokemon/comfey/icon.png index 1a444890d..916ac5c18 100644 Binary files a/graphics/pokemon/comfey/icon.png and b/graphics/pokemon/comfey/icon.png differ diff --git a/graphics/pokemon/conkeldurr/anim_front.png b/graphics/pokemon/conkeldurr/anim_front.png index baf2ae909..1e15ffd29 100644 Binary files a/graphics/pokemon/conkeldurr/anim_front.png and b/graphics/pokemon/conkeldurr/anim_front.png differ diff --git a/graphics/pokemon/conkeldurr/back.png b/graphics/pokemon/conkeldurr/back.png index 3a38a686f..a1ec2764d 100644 Binary files a/graphics/pokemon/conkeldurr/back.png and b/graphics/pokemon/conkeldurr/back.png differ diff --git a/graphics/pokemon/conkeldurr/icon.png b/graphics/pokemon/conkeldurr/icon.png index 55fb119cc..7e5892cc3 100644 Binary files a/graphics/pokemon/conkeldurr/icon.png and b/graphics/pokemon/conkeldurr/icon.png differ diff --git a/graphics/pokemon/copperajah/back.png b/graphics/pokemon/copperajah/back.png index 02729b4b6..fbe4cc0eb 100644 Binary files a/graphics/pokemon/copperajah/back.png and b/graphics/pokemon/copperajah/back.png differ diff --git a/graphics/pokemon/copperajah/front.png b/graphics/pokemon/copperajah/front.png index 41702ef91..9bdbdf175 100644 Binary files a/graphics/pokemon/copperajah/front.png and b/graphics/pokemon/copperajah/front.png differ diff --git a/graphics/pokemon/copperajah/icon.png b/graphics/pokemon/copperajah/icon.png index 8d3507c18..917f6173b 100644 Binary files a/graphics/pokemon/copperajah/icon.png and b/graphics/pokemon/copperajah/icon.png differ diff --git a/graphics/pokemon/corphish/anim_front.png b/graphics/pokemon/corphish/anim_front.png index bdecd6bb8..7cd114961 100644 Binary files a/graphics/pokemon/corphish/anim_front.png and b/graphics/pokemon/corphish/anim_front.png differ diff --git a/graphics/pokemon/corphish/back.png b/graphics/pokemon/corphish/back.png index 71bc7e593..0afcedc71 100644 Binary files a/graphics/pokemon/corphish/back.png and b/graphics/pokemon/corphish/back.png differ diff --git a/graphics/pokemon/corphish/icon.png b/graphics/pokemon/corphish/icon.png index c3abeb874..af63d81cd 100644 Binary files a/graphics/pokemon/corphish/icon.png and b/graphics/pokemon/corphish/icon.png differ diff --git a/graphics/pokemon/corsola/anim_front.png b/graphics/pokemon/corsola/anim_front.png index ccc79af26..b3b460e69 100644 Binary files a/graphics/pokemon/corsola/anim_front.png and b/graphics/pokemon/corsola/anim_front.png differ diff --git a/graphics/pokemon/corsola/back.png b/graphics/pokemon/corsola/back.png index 8de7373ab..f8fa9fd4b 100644 Binary files a/graphics/pokemon/corsola/back.png and b/graphics/pokemon/corsola/back.png differ diff --git a/graphics/pokemon/corsola/galarian/back.png b/graphics/pokemon/corsola/galarian/back.png index a46741616..790ff60b4 100644 Binary files a/graphics/pokemon/corsola/galarian/back.png and b/graphics/pokemon/corsola/galarian/back.png differ diff --git a/graphics/pokemon/corsola/galarian/icon.png b/graphics/pokemon/corsola/galarian/icon.png index f1b8f232a..96ef4da04 100644 Binary files a/graphics/pokemon/corsola/galarian/icon.png and b/graphics/pokemon/corsola/galarian/icon.png differ diff --git a/graphics/pokemon/corviknight/back.png b/graphics/pokemon/corviknight/back.png index 5d223f9f3..aeb636b0b 100644 Binary files a/graphics/pokemon/corviknight/back.png and b/graphics/pokemon/corviknight/back.png differ diff --git a/graphics/pokemon/corviknight/icon.png b/graphics/pokemon/corviknight/icon.png index d6701b228..dc865a044 100644 Binary files a/graphics/pokemon/corviknight/icon.png and b/graphics/pokemon/corviknight/icon.png differ diff --git a/graphics/pokemon/corvisquire/back.png b/graphics/pokemon/corvisquire/back.png index 31ca827ef..0fb6941a9 100644 Binary files a/graphics/pokemon/corvisquire/back.png and b/graphics/pokemon/corvisquire/back.png differ diff --git a/graphics/pokemon/corvisquire/icon.png b/graphics/pokemon/corvisquire/icon.png index 89583145b..408a46a85 100644 Binary files a/graphics/pokemon/corvisquire/icon.png and b/graphics/pokemon/corvisquire/icon.png differ diff --git a/graphics/pokemon/cosmoem/back.png b/graphics/pokemon/cosmoem/back.png index 5e7b00e7b..f1a8c6e3e 100644 Binary files a/graphics/pokemon/cosmoem/back.png and b/graphics/pokemon/cosmoem/back.png differ diff --git a/graphics/pokemon/cosmoem/front.png b/graphics/pokemon/cosmoem/front.png index ef4123f7c..b2979101c 100644 Binary files a/graphics/pokemon/cosmoem/front.png and b/graphics/pokemon/cosmoem/front.png differ diff --git a/graphics/pokemon/cosmoem/icon.png b/graphics/pokemon/cosmoem/icon.png index 22dbd6432..ab4c13b8f 100644 Binary files a/graphics/pokemon/cosmoem/icon.png and b/graphics/pokemon/cosmoem/icon.png differ diff --git a/graphics/pokemon/cosmog/back.png b/graphics/pokemon/cosmog/back.png index 29a131038..f1a1c218d 100644 Binary files a/graphics/pokemon/cosmog/back.png and b/graphics/pokemon/cosmog/back.png differ diff --git a/graphics/pokemon/cosmog/front.png b/graphics/pokemon/cosmog/front.png index edc2550c2..c1c2cba84 100644 Binary files a/graphics/pokemon/cosmog/front.png and b/graphics/pokemon/cosmog/front.png differ diff --git a/graphics/pokemon/cosmog/icon.png b/graphics/pokemon/cosmog/icon.png index 4a9ea5968..6057034a9 100644 Binary files a/graphics/pokemon/cosmog/icon.png and b/graphics/pokemon/cosmog/icon.png differ diff --git a/graphics/pokemon/cottonee/back.png b/graphics/pokemon/cottonee/back.png index 7778e31b3..bf44f4e08 100644 Binary files a/graphics/pokemon/cottonee/back.png and b/graphics/pokemon/cottonee/back.png differ diff --git a/graphics/pokemon/cottonee/icon.png b/graphics/pokemon/cottonee/icon.png index 62bf749e0..807b65150 100644 Binary files a/graphics/pokemon/cottonee/icon.png and b/graphics/pokemon/cottonee/icon.png differ diff --git a/graphics/pokemon/crabominable/back.png b/graphics/pokemon/crabominable/back.png index c94bbb7af..fef48f103 100644 Binary files a/graphics/pokemon/crabominable/back.png and b/graphics/pokemon/crabominable/back.png differ diff --git a/graphics/pokemon/crabominable/front.png b/graphics/pokemon/crabominable/front.png index 261534bda..3d28832e0 100644 Binary files a/graphics/pokemon/crabominable/front.png and b/graphics/pokemon/crabominable/front.png differ diff --git a/graphics/pokemon/crabominable/icon.png b/graphics/pokemon/crabominable/icon.png index 07069c951..e3f32d504 100644 Binary files a/graphics/pokemon/crabominable/icon.png and b/graphics/pokemon/crabominable/icon.png differ diff --git a/graphics/pokemon/crabrawler/back.png b/graphics/pokemon/crabrawler/back.png index 34190cd07..951e5a4a2 100644 Binary files a/graphics/pokemon/crabrawler/back.png and b/graphics/pokemon/crabrawler/back.png differ diff --git a/graphics/pokemon/crabrawler/front.png b/graphics/pokemon/crabrawler/front.png index de27ebb23..0eb32cca5 100644 Binary files a/graphics/pokemon/crabrawler/front.png and b/graphics/pokemon/crabrawler/front.png differ diff --git a/graphics/pokemon/crabrawler/icon.png b/graphics/pokemon/crabrawler/icon.png index c09015a97..d28b81b6b 100644 Binary files a/graphics/pokemon/crabrawler/icon.png and b/graphics/pokemon/crabrawler/icon.png differ diff --git a/graphics/pokemon/cradily/anim_front.png b/graphics/pokemon/cradily/anim_front.png index e44e4c21b..b12899e3e 100644 Binary files a/graphics/pokemon/cradily/anim_front.png and b/graphics/pokemon/cradily/anim_front.png differ diff --git a/graphics/pokemon/cradily/back.png b/graphics/pokemon/cradily/back.png index ea5e29d4b..448077f27 100644 Binary files a/graphics/pokemon/cradily/back.png and b/graphics/pokemon/cradily/back.png differ diff --git a/graphics/pokemon/cradily/icon.png b/graphics/pokemon/cradily/icon.png index 74bf767a8..0b3f8de2e 100644 Binary files a/graphics/pokemon/cradily/icon.png and b/graphics/pokemon/cradily/icon.png differ diff --git a/graphics/pokemon/cramorant/back.png b/graphics/pokemon/cramorant/back.png index 329f6cce9..f8ee0569f 100644 Binary files a/graphics/pokemon/cramorant/back.png and b/graphics/pokemon/cramorant/back.png differ diff --git a/graphics/pokemon/cramorant/front.png b/graphics/pokemon/cramorant/front.png index 0fcd30452..296ab5364 100644 Binary files a/graphics/pokemon/cramorant/front.png and b/graphics/pokemon/cramorant/front.png differ diff --git a/graphics/pokemon/cramorant/gorging/back.png b/graphics/pokemon/cramorant/gorging/back.png index aa84bc4be..823b4fd8b 100644 Binary files a/graphics/pokemon/cramorant/gorging/back.png and b/graphics/pokemon/cramorant/gorging/back.png differ diff --git a/graphics/pokemon/cramorant/gorging/front.png b/graphics/pokemon/cramorant/gorging/front.png index 36be31061..2a4f9ddaf 100644 Binary files a/graphics/pokemon/cramorant/gorging/front.png and b/graphics/pokemon/cramorant/gorging/front.png differ diff --git a/graphics/pokemon/cramorant/gorging/icon.png b/graphics/pokemon/cramorant/gorging/icon.png index 037125f4a..8c9830913 100644 Binary files a/graphics/pokemon/cramorant/gorging/icon.png and b/graphics/pokemon/cramorant/gorging/icon.png differ diff --git a/graphics/pokemon/cramorant/gulping/back.png b/graphics/pokemon/cramorant/gulping/back.png index 950ddd8d0..3cf3283b6 100644 Binary files a/graphics/pokemon/cramorant/gulping/back.png and b/graphics/pokemon/cramorant/gulping/back.png differ diff --git a/graphics/pokemon/cramorant/gulping/front.png b/graphics/pokemon/cramorant/gulping/front.png index 1df32a67b..b6b64f037 100644 Binary files a/graphics/pokemon/cramorant/gulping/front.png and b/graphics/pokemon/cramorant/gulping/front.png differ diff --git a/graphics/pokemon/cramorant/gulping/icon.png b/graphics/pokemon/cramorant/gulping/icon.png index 06b0d61eb..0d22d7f1d 100644 Binary files a/graphics/pokemon/cramorant/gulping/icon.png and b/graphics/pokemon/cramorant/gulping/icon.png differ diff --git a/graphics/pokemon/cramorant/icon.png b/graphics/pokemon/cramorant/icon.png index fb93e834f..e8c1ce511 100644 Binary files a/graphics/pokemon/cramorant/icon.png and b/graphics/pokemon/cramorant/icon.png differ diff --git a/graphics/pokemon/cranidos/anim_front.png b/graphics/pokemon/cranidos/anim_front.png index cfb0fd3dc..4cfea0dd4 100644 Binary files a/graphics/pokemon/cranidos/anim_front.png and b/graphics/pokemon/cranidos/anim_front.png differ diff --git a/graphics/pokemon/cranidos/icon.png b/graphics/pokemon/cranidos/icon.png index 0eb1721c6..49b6fcc4b 100644 Binary files a/graphics/pokemon/cranidos/icon.png and b/graphics/pokemon/cranidos/icon.png differ diff --git a/graphics/pokemon/crawdaunt/anim_front.png b/graphics/pokemon/crawdaunt/anim_front.png index f018da2ad..a9a6ce7fb 100644 Binary files a/graphics/pokemon/crawdaunt/anim_front.png and b/graphics/pokemon/crawdaunt/anim_front.png differ diff --git a/graphics/pokemon/crawdaunt/back.png b/graphics/pokemon/crawdaunt/back.png index b8449589d..23575eb62 100644 Binary files a/graphics/pokemon/crawdaunt/back.png and b/graphics/pokemon/crawdaunt/back.png differ diff --git a/graphics/pokemon/crawdaunt/icon.png b/graphics/pokemon/crawdaunt/icon.png index e3f408bfa..3a300defe 100644 Binary files a/graphics/pokemon/crawdaunt/icon.png and b/graphics/pokemon/crawdaunt/icon.png differ diff --git a/graphics/pokemon/cresselia/anim_front.png b/graphics/pokemon/cresselia/anim_front.png index 992481ce5..23e1a2ab9 100644 Binary files a/graphics/pokemon/cresselia/anim_front.png and b/graphics/pokemon/cresselia/anim_front.png differ diff --git a/graphics/pokemon/cresselia/back.png b/graphics/pokemon/cresselia/back.png index 582fc4868..2d086a65f 100644 Binary files a/graphics/pokemon/cresselia/back.png and b/graphics/pokemon/cresselia/back.png differ diff --git a/graphics/pokemon/croagunk/anim_front.png b/graphics/pokemon/croagunk/anim_front.png index bc9287ca5..84c7edb09 100644 Binary files a/graphics/pokemon/croagunk/anim_front.png and b/graphics/pokemon/croagunk/anim_front.png differ diff --git a/graphics/pokemon/croagunk/back.png b/graphics/pokemon/croagunk/back.png index 42f1f1998..c37d56984 100644 Binary files a/graphics/pokemon/croagunk/back.png and b/graphics/pokemon/croagunk/back.png differ diff --git a/graphics/pokemon/croagunk/icon.png b/graphics/pokemon/croagunk/icon.png index ff938f9b8..448ba7e42 100644 Binary files a/graphics/pokemon/croagunk/icon.png and b/graphics/pokemon/croagunk/icon.png differ diff --git a/graphics/pokemon/crobat/back.png b/graphics/pokemon/crobat/back.png index 6e2438b75..94bed55fd 100644 Binary files a/graphics/pokemon/crobat/back.png and b/graphics/pokemon/crobat/back.png differ diff --git a/graphics/pokemon/croconaw/back.png b/graphics/pokemon/croconaw/back.png index 04010d15c..a4ade532d 100644 Binary files a/graphics/pokemon/croconaw/back.png and b/graphics/pokemon/croconaw/back.png differ diff --git a/graphics/pokemon/croconaw/icon.png b/graphics/pokemon/croconaw/icon.png index 29e71d9ec..29cd1f450 100644 Binary files a/graphics/pokemon/croconaw/icon.png and b/graphics/pokemon/croconaw/icon.png differ diff --git a/graphics/pokemon/crustle/anim_front.png b/graphics/pokemon/crustle/anim_front.png index d75ef5f66..8ff103bcf 100644 Binary files a/graphics/pokemon/crustle/anim_front.png and b/graphics/pokemon/crustle/anim_front.png differ diff --git a/graphics/pokemon/crustle/back.png b/graphics/pokemon/crustle/back.png index 0b5eba586..ae0f23184 100644 Binary files a/graphics/pokemon/crustle/back.png and b/graphics/pokemon/crustle/back.png differ diff --git a/graphics/pokemon/cryogonal/anim_front.png b/graphics/pokemon/cryogonal/anim_front.png index 17a69e3a4..523611731 100644 Binary files a/graphics/pokemon/cryogonal/anim_front.png and b/graphics/pokemon/cryogonal/anim_front.png differ diff --git a/graphics/pokemon/cryogonal/back.png b/graphics/pokemon/cryogonal/back.png index 4e3f5fc15..8797e491a 100644 Binary files a/graphics/pokemon/cryogonal/back.png and b/graphics/pokemon/cryogonal/back.png differ diff --git a/graphics/pokemon/cryogonal/icon.png b/graphics/pokemon/cryogonal/icon.png index 3ed62143d..f17857803 100644 Binary files a/graphics/pokemon/cryogonal/icon.png and b/graphics/pokemon/cryogonal/icon.png differ diff --git a/graphics/pokemon/cubchoo/anim_front.png b/graphics/pokemon/cubchoo/anim_front.png index d45fee6ad..3350209b8 100644 Binary files a/graphics/pokemon/cubchoo/anim_front.png and b/graphics/pokemon/cubchoo/anim_front.png differ diff --git a/graphics/pokemon/cubchoo/back.png b/graphics/pokemon/cubchoo/back.png index b11d75930..8ead2059c 100644 Binary files a/graphics/pokemon/cubchoo/back.png and b/graphics/pokemon/cubchoo/back.png differ diff --git a/graphics/pokemon/cubchoo/icon.png b/graphics/pokemon/cubchoo/icon.png index 33fbe0166..df3b0a682 100644 Binary files a/graphics/pokemon/cubchoo/icon.png and b/graphics/pokemon/cubchoo/icon.png differ diff --git a/graphics/pokemon/cubone/back.png b/graphics/pokemon/cubone/back.png index 0cbc961a0..0d867ae9d 100644 Binary files a/graphics/pokemon/cubone/back.png and b/graphics/pokemon/cubone/back.png differ diff --git a/graphics/pokemon/cubone/icon.png b/graphics/pokemon/cubone/icon.png index 45e2a153a..f5c262a41 100644 Binary files a/graphics/pokemon/cubone/icon.png and b/graphics/pokemon/cubone/icon.png differ diff --git a/graphics/pokemon/cufant/back.png b/graphics/pokemon/cufant/back.png index 30c0530d7..0c49ddaa7 100644 Binary files a/graphics/pokemon/cufant/back.png and b/graphics/pokemon/cufant/back.png differ diff --git a/graphics/pokemon/cufant/front.png b/graphics/pokemon/cufant/front.png index 23baf2114..d7b267f52 100644 Binary files a/graphics/pokemon/cufant/front.png and b/graphics/pokemon/cufant/front.png differ diff --git a/graphics/pokemon/cufant/icon.png b/graphics/pokemon/cufant/icon.png index cda13aff9..bcdcad88e 100644 Binary files a/graphics/pokemon/cufant/icon.png and b/graphics/pokemon/cufant/icon.png differ diff --git a/graphics/pokemon/cursola/back.png b/graphics/pokemon/cursola/back.png index cbc2eb517..28d3cdf08 100644 Binary files a/graphics/pokemon/cursola/back.png and b/graphics/pokemon/cursola/back.png differ diff --git a/graphics/pokemon/cursola/icon.png b/graphics/pokemon/cursola/icon.png index f6a84302f..8bfc49817 100644 Binary files a/graphics/pokemon/cursola/icon.png and b/graphics/pokemon/cursola/icon.png differ diff --git a/graphics/pokemon/cutiefly/back.png b/graphics/pokemon/cutiefly/back.png index a40fe3a56..c1635aa6e 100644 Binary files a/graphics/pokemon/cutiefly/back.png and b/graphics/pokemon/cutiefly/back.png differ diff --git a/graphics/pokemon/cutiefly/front.png b/graphics/pokemon/cutiefly/front.png index 72ad572fb..9e5756522 100644 Binary files a/graphics/pokemon/cutiefly/front.png and b/graphics/pokemon/cutiefly/front.png differ diff --git a/graphics/pokemon/cutiefly/icon.png b/graphics/pokemon/cutiefly/icon.png index 1914da3eb..5e25a942d 100644 Binary files a/graphics/pokemon/cutiefly/icon.png and b/graphics/pokemon/cutiefly/icon.png differ diff --git a/graphics/pokemon/cyndaquil/back.png b/graphics/pokemon/cyndaquil/back.png index f7d14a07e..2b3f8f3da 100644 Binary files a/graphics/pokemon/cyndaquil/back.png and b/graphics/pokemon/cyndaquil/back.png differ diff --git a/graphics/pokemon/cyndaquil/icon.png b/graphics/pokemon/cyndaquil/icon.png index 37c1b2361..27ed10be5 100644 Binary files a/graphics/pokemon/cyndaquil/icon.png and b/graphics/pokemon/cyndaquil/icon.png differ diff --git a/graphics/pokemon/darkrai/anim_front.png b/graphics/pokemon/darkrai/anim_front.png index eb13505e7..741c69af0 100644 Binary files a/graphics/pokemon/darkrai/anim_front.png and b/graphics/pokemon/darkrai/anim_front.png differ diff --git a/graphics/pokemon/darkrai/back.png b/graphics/pokemon/darkrai/back.png index eebad7c15..941709daf 100644 Binary files a/graphics/pokemon/darkrai/back.png and b/graphics/pokemon/darkrai/back.png differ diff --git a/graphics/pokemon/darmanitan/anim_front.png b/graphics/pokemon/darmanitan/anim_front.png index 6602e1914..7fa8675a3 100644 Binary files a/graphics/pokemon/darmanitan/anim_front.png and b/graphics/pokemon/darmanitan/anim_front.png differ diff --git a/graphics/pokemon/darmanitan/back.png b/graphics/pokemon/darmanitan/back.png index 58278d0ec..e137393f1 100644 Binary files a/graphics/pokemon/darmanitan/back.png and b/graphics/pokemon/darmanitan/back.png differ diff --git a/graphics/pokemon/darmanitan/galarian/back.png b/graphics/pokemon/darmanitan/galarian/back.png index 4ca043a05..c89df7855 100644 Binary files a/graphics/pokemon/darmanitan/galarian/back.png and b/graphics/pokemon/darmanitan/galarian/back.png differ diff --git a/graphics/pokemon/darmanitan/galarian/front.png b/graphics/pokemon/darmanitan/galarian/front.png index 522d5a2c7..a317c8ccf 100644 Binary files a/graphics/pokemon/darmanitan/galarian/front.png and b/graphics/pokemon/darmanitan/galarian/front.png differ diff --git a/graphics/pokemon/darmanitan/galarian/icon.png b/graphics/pokemon/darmanitan/galarian/icon.png index 2a7b753ea..f09c2ea4d 100644 Binary files a/graphics/pokemon/darmanitan/galarian/icon.png and b/graphics/pokemon/darmanitan/galarian/icon.png differ diff --git a/graphics/pokemon/darmanitan/icon.png b/graphics/pokemon/darmanitan/icon.png index 5cc61af46..a1de7deff 100644 Binary files a/graphics/pokemon/darmanitan/icon.png and b/graphics/pokemon/darmanitan/icon.png differ diff --git a/graphics/pokemon/darmanitan/zen_mode/galarian/back.png b/graphics/pokemon/darmanitan/zen_mode/galarian/back.png index 6f75b28a6..509894563 100644 Binary files a/graphics/pokemon/darmanitan/zen_mode/galarian/back.png and b/graphics/pokemon/darmanitan/zen_mode/galarian/back.png differ diff --git a/graphics/pokemon/darmanitan/zen_mode/galarian/front.png b/graphics/pokemon/darmanitan/zen_mode/galarian/front.png index 1d4c95591..773d7db83 100644 Binary files a/graphics/pokemon/darmanitan/zen_mode/galarian/front.png and b/graphics/pokemon/darmanitan/zen_mode/galarian/front.png differ diff --git a/graphics/pokemon/darmanitan/zen_mode/galarian/icon.png b/graphics/pokemon/darmanitan/zen_mode/galarian/icon.png index bc5912064..f09b978ea 100644 Binary files a/graphics/pokemon/darmanitan/zen_mode/galarian/icon.png and b/graphics/pokemon/darmanitan/zen_mode/galarian/icon.png differ diff --git a/graphics/pokemon/darmanitan/zen_mode/icon.png b/graphics/pokemon/darmanitan/zen_mode/icon.png index e02ccf670..b563d4f2a 100644 Binary files a/graphics/pokemon/darmanitan/zen_mode/icon.png and b/graphics/pokemon/darmanitan/zen_mode/icon.png differ diff --git a/graphics/pokemon/dartrix/back.png b/graphics/pokemon/dartrix/back.png index 7f7cea95b..0be588c43 100644 Binary files a/graphics/pokemon/dartrix/back.png and b/graphics/pokemon/dartrix/back.png differ diff --git a/graphics/pokemon/dartrix/front.png b/graphics/pokemon/dartrix/front.png index f6ade48b7..004fa43bd 100644 Binary files a/graphics/pokemon/dartrix/front.png and b/graphics/pokemon/dartrix/front.png differ diff --git a/graphics/pokemon/dartrix/icon.png b/graphics/pokemon/dartrix/icon.png index 0b09eda9b..39fb8fddd 100644 Binary files a/graphics/pokemon/dartrix/icon.png and b/graphics/pokemon/dartrix/icon.png differ diff --git a/graphics/pokemon/darumaka/anim_front.png b/graphics/pokemon/darumaka/anim_front.png index 8b675ef2b..7d0b10c8c 100644 Binary files a/graphics/pokemon/darumaka/anim_front.png and b/graphics/pokemon/darumaka/anim_front.png differ diff --git a/graphics/pokemon/darumaka/back.png b/graphics/pokemon/darumaka/back.png index 0b9cc445b..2e4f6461c 100644 Binary files a/graphics/pokemon/darumaka/back.png and b/graphics/pokemon/darumaka/back.png differ diff --git a/graphics/pokemon/darumaka/galarian/back.png b/graphics/pokemon/darumaka/galarian/back.png index ecb309478..94115f536 100644 Binary files a/graphics/pokemon/darumaka/galarian/back.png and b/graphics/pokemon/darumaka/galarian/back.png differ diff --git a/graphics/pokemon/darumaka/galarian/front.png b/graphics/pokemon/darumaka/galarian/front.png index d57abeee9..729797422 100644 Binary files a/graphics/pokemon/darumaka/galarian/front.png and b/graphics/pokemon/darumaka/galarian/front.png differ diff --git a/graphics/pokemon/darumaka/galarian/icon.png b/graphics/pokemon/darumaka/galarian/icon.png index 7901d0984..88db35713 100644 Binary files a/graphics/pokemon/darumaka/galarian/icon.png and b/graphics/pokemon/darumaka/galarian/icon.png differ diff --git a/graphics/pokemon/darumaka/icon.png b/graphics/pokemon/darumaka/icon.png index 908670af4..2ea12745a 100644 Binary files a/graphics/pokemon/darumaka/icon.png and b/graphics/pokemon/darumaka/icon.png differ diff --git a/graphics/pokemon/decidueye/back.png b/graphics/pokemon/decidueye/back.png index b6bc74f9a..4562c6a52 100644 Binary files a/graphics/pokemon/decidueye/back.png and b/graphics/pokemon/decidueye/back.png differ diff --git a/graphics/pokemon/decidueye/front.png b/graphics/pokemon/decidueye/front.png index da070ec71..a13a33a2a 100644 Binary files a/graphics/pokemon/decidueye/front.png and b/graphics/pokemon/decidueye/front.png differ diff --git a/graphics/pokemon/decidueye/hisuian/back.png b/graphics/pokemon/decidueye/hisuian/back.png index b3a7e5507..e977f88e2 100755 Binary files a/graphics/pokemon/decidueye/hisuian/back.png and b/graphics/pokemon/decidueye/hisuian/back.png differ diff --git a/graphics/pokemon/decidueye/hisuian/front.png b/graphics/pokemon/decidueye/hisuian/front.png index bae823c91..f3c4d93af 100755 Binary files a/graphics/pokemon/decidueye/hisuian/front.png and b/graphics/pokemon/decidueye/hisuian/front.png differ diff --git a/graphics/pokemon/decidueye/hisuian/icon.png b/graphics/pokemon/decidueye/hisuian/icon.png index 02b4a3c67..997071396 100755 Binary files a/graphics/pokemon/decidueye/hisuian/icon.png and b/graphics/pokemon/decidueye/hisuian/icon.png differ diff --git a/graphics/pokemon/decidueye/icon.png b/graphics/pokemon/decidueye/icon.png index 7ee9312aa..6078f20b8 100644 Binary files a/graphics/pokemon/decidueye/icon.png and b/graphics/pokemon/decidueye/icon.png differ diff --git a/graphics/pokemon/dedenne/anim_front.png b/graphics/pokemon/dedenne/anim_front.png index 76283721e..b31e4382b 100644 Binary files a/graphics/pokemon/dedenne/anim_front.png and b/graphics/pokemon/dedenne/anim_front.png differ diff --git a/graphics/pokemon/dedenne/back.png b/graphics/pokemon/dedenne/back.png index 7ea69819b..7d86019f5 100644 Binary files a/graphics/pokemon/dedenne/back.png and b/graphics/pokemon/dedenne/back.png differ diff --git a/graphics/pokemon/dedenne/icon.png b/graphics/pokemon/dedenne/icon.png index 3a6618245..a768d7131 100644 Binary files a/graphics/pokemon/dedenne/icon.png and b/graphics/pokemon/dedenne/icon.png differ diff --git a/graphics/pokemon/deerling/anim_front.png b/graphics/pokemon/deerling/anim_front.png index ab6e3ec9d..2bf2f1b29 100644 Binary files a/graphics/pokemon/deerling/anim_front.png and b/graphics/pokemon/deerling/anim_front.png differ diff --git a/graphics/pokemon/deerling/back.png b/graphics/pokemon/deerling/back.png index c41ce592d..3792e79f2 100644 Binary files a/graphics/pokemon/deerling/back.png and b/graphics/pokemon/deerling/back.png differ diff --git a/graphics/pokemon/deerling/icon.png b/graphics/pokemon/deerling/icon.png index 843650e46..666cce123 100644 Binary files a/graphics/pokemon/deerling/icon.png and b/graphics/pokemon/deerling/icon.png differ diff --git a/graphics/pokemon/deino/anim_front.png b/graphics/pokemon/deino/anim_front.png index 22c9fa50c..d0a21c0a2 100644 Binary files a/graphics/pokemon/deino/anim_front.png and b/graphics/pokemon/deino/anim_front.png differ diff --git a/graphics/pokemon/deino/back.png b/graphics/pokemon/deino/back.png index 2585fe29a..d203356cd 100644 Binary files a/graphics/pokemon/deino/back.png and b/graphics/pokemon/deino/back.png differ diff --git a/graphics/pokemon/delcatty/anim_front.png b/graphics/pokemon/delcatty/anim_front.png index 03636b72c..01ccb1292 100644 Binary files a/graphics/pokemon/delcatty/anim_front.png and b/graphics/pokemon/delcatty/anim_front.png differ diff --git a/graphics/pokemon/delcatty/back.png b/graphics/pokemon/delcatty/back.png index 95f9c1099..09cd09992 100644 Binary files a/graphics/pokemon/delcatty/back.png and b/graphics/pokemon/delcatty/back.png differ diff --git a/graphics/pokemon/delibird/anim_front.png b/graphics/pokemon/delibird/anim_front.png index c0abc2c57..c093ee531 100644 Binary files a/graphics/pokemon/delibird/anim_front.png and b/graphics/pokemon/delibird/anim_front.png differ diff --git a/graphics/pokemon/delibird/back.png b/graphics/pokemon/delibird/back.png index 0b5ca88df..644526995 100644 Binary files a/graphics/pokemon/delibird/back.png and b/graphics/pokemon/delibird/back.png differ diff --git a/graphics/pokemon/delibird/icon.png b/graphics/pokemon/delibird/icon.png index 2dc09c98f..e0f804a78 100644 Binary files a/graphics/pokemon/delibird/icon.png and b/graphics/pokemon/delibird/icon.png differ diff --git a/graphics/pokemon/delphox/anim_front.png b/graphics/pokemon/delphox/anim_front.png index a6a144210..498086742 100644 Binary files a/graphics/pokemon/delphox/anim_front.png and b/graphics/pokemon/delphox/anim_front.png differ diff --git a/graphics/pokemon/delphox/back.png b/graphics/pokemon/delphox/back.png index 28ecb60d2..548c21287 100644 Binary files a/graphics/pokemon/delphox/back.png and b/graphics/pokemon/delphox/back.png differ diff --git a/graphics/pokemon/delphox/icon.png b/graphics/pokemon/delphox/icon.png index 53ccf86a6..fdb83b6dd 100644 Binary files a/graphics/pokemon/delphox/icon.png and b/graphics/pokemon/delphox/icon.png differ diff --git a/graphics/pokemon/deoxys/anim_front.png b/graphics/pokemon/deoxys/anim_front.png index 26511c8ec..d2f3e9938 100644 Binary files a/graphics/pokemon/deoxys/anim_front.png and b/graphics/pokemon/deoxys/anim_front.png differ diff --git a/graphics/pokemon/deoxys/attack/anim_front.png b/graphics/pokemon/deoxys/attack/anim_front.png index 6f4e960f3..0b43a9fe1 100644 Binary files a/graphics/pokemon/deoxys/attack/anim_front.png and b/graphics/pokemon/deoxys/attack/anim_front.png differ diff --git a/graphics/pokemon/deoxys/attack/back.png b/graphics/pokemon/deoxys/attack/back.png index e2c02e1ae..14da9a37f 100644 Binary files a/graphics/pokemon/deoxys/attack/back.png and b/graphics/pokemon/deoxys/attack/back.png differ diff --git a/graphics/pokemon/deoxys/attack/icon.png b/graphics/pokemon/deoxys/attack/icon.png index b75df8ce8..ae34130ee 100644 Binary files a/graphics/pokemon/deoxys/attack/icon.png and b/graphics/pokemon/deoxys/attack/icon.png differ diff --git a/graphics/pokemon/deoxys/back.png b/graphics/pokemon/deoxys/back.png index 79b70d929..e20f53b67 100644 Binary files a/graphics/pokemon/deoxys/back.png and b/graphics/pokemon/deoxys/back.png differ diff --git a/graphics/pokemon/deoxys/defense/anim_front.png b/graphics/pokemon/deoxys/defense/anim_front.png index f326190e0..2ee6e0c52 100644 Binary files a/graphics/pokemon/deoxys/defense/anim_front.png and b/graphics/pokemon/deoxys/defense/anim_front.png differ diff --git a/graphics/pokemon/deoxys/defense/back.png b/graphics/pokemon/deoxys/defense/back.png index f1bd0699f..3dbba1a7a 100644 Binary files a/graphics/pokemon/deoxys/defense/back.png and b/graphics/pokemon/deoxys/defense/back.png differ diff --git a/graphics/pokemon/deoxys/defense/icon.png b/graphics/pokemon/deoxys/defense/icon.png index 9e5448959..8c423d14b 100644 Binary files a/graphics/pokemon/deoxys/defense/icon.png and b/graphics/pokemon/deoxys/defense/icon.png differ diff --git a/graphics/pokemon/deoxys/icon.png b/graphics/pokemon/deoxys/icon.png index 38a3542b9..c71aefd3a 100644 Binary files a/graphics/pokemon/deoxys/icon.png and b/graphics/pokemon/deoxys/icon.png differ diff --git a/graphics/pokemon/deoxys/icon_speed_wide.png b/graphics/pokemon/deoxys/icon_speed_wide.png index e345651b8..ccfba4b24 100644 Binary files a/graphics/pokemon/deoxys/icon_speed_wide.png and b/graphics/pokemon/deoxys/icon_speed_wide.png differ diff --git a/graphics/pokemon/deoxys/speed/anim_front.png b/graphics/pokemon/deoxys/speed/anim_front.png index bad27cd1f..947052f81 100644 Binary files a/graphics/pokemon/deoxys/speed/anim_front.png and b/graphics/pokemon/deoxys/speed/anim_front.png differ diff --git a/graphics/pokemon/deoxys/speed/back.png b/graphics/pokemon/deoxys/speed/back.png index e587ac46c..80ccd4f99 100644 Binary files a/graphics/pokemon/deoxys/speed/back.png and b/graphics/pokemon/deoxys/speed/back.png differ diff --git a/graphics/pokemon/deoxys/speed/icon.png b/graphics/pokemon/deoxys/speed/icon.png index bed9911fb..674b93a9c 100644 Binary files a/graphics/pokemon/deoxys/speed/icon.png and b/graphics/pokemon/deoxys/speed/icon.png differ diff --git a/graphics/pokemon/dewgong/icon.png b/graphics/pokemon/dewgong/icon.png index 782215883..b39e99b0c 100644 Binary files a/graphics/pokemon/dewgong/icon.png and b/graphics/pokemon/dewgong/icon.png differ diff --git a/graphics/pokemon/dewott/back.png b/graphics/pokemon/dewott/back.png index de7039ace..8130cb25e 100644 Binary files a/graphics/pokemon/dewott/back.png and b/graphics/pokemon/dewott/back.png differ diff --git a/graphics/pokemon/dewott/icon.png b/graphics/pokemon/dewott/icon.png index 23a0aef19..2925b254c 100644 Binary files a/graphics/pokemon/dewott/icon.png and b/graphics/pokemon/dewott/icon.png differ diff --git a/graphics/pokemon/dewpider/back.png b/graphics/pokemon/dewpider/back.png index 24382d74b..c992e69d2 100644 Binary files a/graphics/pokemon/dewpider/back.png and b/graphics/pokemon/dewpider/back.png differ diff --git a/graphics/pokemon/dewpider/icon.png b/graphics/pokemon/dewpider/icon.png index 64fac10bf..bcf5707d3 100644 Binary files a/graphics/pokemon/dewpider/icon.png and b/graphics/pokemon/dewpider/icon.png differ diff --git a/graphics/pokemon/dhelmise/back.png b/graphics/pokemon/dhelmise/back.png index 0c9c112c4..fa076e9df 100644 Binary files a/graphics/pokemon/dhelmise/back.png and b/graphics/pokemon/dhelmise/back.png differ diff --git a/graphics/pokemon/dhelmise/front.png b/graphics/pokemon/dhelmise/front.png index 1d388f83e..1181df89b 100644 Binary files a/graphics/pokemon/dhelmise/front.png and b/graphics/pokemon/dhelmise/front.png differ diff --git a/graphics/pokemon/dhelmise/icon.png b/graphics/pokemon/dhelmise/icon.png index aa9a2fe75..07b0c4d18 100644 Binary files a/graphics/pokemon/dhelmise/icon.png and b/graphics/pokemon/dhelmise/icon.png differ diff --git a/graphics/pokemon/dialga/anim_front.png b/graphics/pokemon/dialga/anim_front.png index 0668bf934..c4234913b 100644 Binary files a/graphics/pokemon/dialga/anim_front.png and b/graphics/pokemon/dialga/anim_front.png differ diff --git a/graphics/pokemon/dialga/back.png b/graphics/pokemon/dialga/back.png index 58a634f5a..f6b84f346 100644 Binary files a/graphics/pokemon/dialga/back.png and b/graphics/pokemon/dialga/back.png differ diff --git a/graphics/pokemon/dialga/origin/back.png b/graphics/pokemon/dialga/origin/back.png index 6331247df..a9867f0bd 100644 Binary files a/graphics/pokemon/dialga/origin/back.png and b/graphics/pokemon/dialga/origin/back.png differ diff --git a/graphics/pokemon/dialga/origin/front.png b/graphics/pokemon/dialga/origin/front.png index ae474ad61..7e7c7aabb 100644 Binary files a/graphics/pokemon/dialga/origin/front.png and b/graphics/pokemon/dialga/origin/front.png differ diff --git a/graphics/pokemon/dialga/origin/icon.png b/graphics/pokemon/dialga/origin/icon.png index 7f7b40ff9..aa6c0c3af 100644 Binary files a/graphics/pokemon/dialga/origin/icon.png and b/graphics/pokemon/dialga/origin/icon.png differ diff --git a/graphics/pokemon/diancie/anim_front.png b/graphics/pokemon/diancie/anim_front.png index 2739870ce..e5d0f9792 100644 Binary files a/graphics/pokemon/diancie/anim_front.png and b/graphics/pokemon/diancie/anim_front.png differ diff --git a/graphics/pokemon/diancie/back.png b/graphics/pokemon/diancie/back.png index c663434ff..b5984ab4a 100644 Binary files a/graphics/pokemon/diancie/back.png and b/graphics/pokemon/diancie/back.png differ diff --git a/graphics/pokemon/diancie/icon.png b/graphics/pokemon/diancie/icon.png index 25121ae4e..39d8f90cb 100644 Binary files a/graphics/pokemon/diancie/icon.png and b/graphics/pokemon/diancie/icon.png differ diff --git a/graphics/pokemon/diancie/mega/back.png b/graphics/pokemon/diancie/mega/back.png index af883beb0..cb9a177a0 100644 Binary files a/graphics/pokemon/diancie/mega/back.png and b/graphics/pokemon/diancie/mega/back.png differ diff --git a/graphics/pokemon/diancie/mega/front.png b/graphics/pokemon/diancie/mega/front.png index 2bd44603e..ef48adeeb 100644 Binary files a/graphics/pokemon/diancie/mega/front.png and b/graphics/pokemon/diancie/mega/front.png differ diff --git a/graphics/pokemon/diancie/mega/icon.png b/graphics/pokemon/diancie/mega/icon.png index 09e8e4efc..a38f39de6 100644 Binary files a/graphics/pokemon/diancie/mega/icon.png and b/graphics/pokemon/diancie/mega/icon.png differ diff --git a/graphics/pokemon/diggersby/anim_front.png b/graphics/pokemon/diggersby/anim_front.png index 9a58be420..f2a0998e8 100644 Binary files a/graphics/pokemon/diggersby/anim_front.png and b/graphics/pokemon/diggersby/anim_front.png differ diff --git a/graphics/pokemon/diggersby/back.png b/graphics/pokemon/diggersby/back.png index c7bd8abac..36a437381 100644 Binary files a/graphics/pokemon/diggersby/back.png and b/graphics/pokemon/diggersby/back.png differ diff --git a/graphics/pokemon/diggersby/icon.png b/graphics/pokemon/diggersby/icon.png index 90c4ee504..317bd4071 100644 Binary files a/graphics/pokemon/diggersby/icon.png and b/graphics/pokemon/diggersby/icon.png differ diff --git a/graphics/pokemon/diglett/alolan/back.png b/graphics/pokemon/diglett/alolan/back.png index e1bdc439b..26e060dc3 100644 Binary files a/graphics/pokemon/diglett/alolan/back.png and b/graphics/pokemon/diglett/alolan/back.png differ diff --git a/graphics/pokemon/diglett/alolan/front.png b/graphics/pokemon/diglett/alolan/front.png index 5f23a5d45..a99506bf3 100644 Binary files a/graphics/pokemon/diglett/alolan/front.png and b/graphics/pokemon/diglett/alolan/front.png differ diff --git a/graphics/pokemon/diglett/alolan/icon.png b/graphics/pokemon/diglett/alolan/icon.png index 34c40ea8b..1b575078a 100644 Binary files a/graphics/pokemon/diglett/alolan/icon.png and b/graphics/pokemon/diglett/alolan/icon.png differ diff --git a/graphics/pokemon/diglett/anim_front.png b/graphics/pokemon/diglett/anim_front.png index f7a8edcde..202a2a178 100644 Binary files a/graphics/pokemon/diglett/anim_front.png and b/graphics/pokemon/diglett/anim_front.png differ diff --git a/graphics/pokemon/diglett/back.png b/graphics/pokemon/diglett/back.png index 558892d45..b4f98c8d8 100644 Binary files a/graphics/pokemon/diglett/back.png and b/graphics/pokemon/diglett/back.png differ diff --git a/graphics/pokemon/diglett/icon.png b/graphics/pokemon/diglett/icon.png index e5db3ce02..3c7bf8e1f 100644 Binary files a/graphics/pokemon/diglett/icon.png and b/graphics/pokemon/diglett/icon.png differ diff --git a/graphics/pokemon/diglett/normal.pal b/graphics/pokemon/diglett/normal.pal index 0e0e4694c..1eff24bb3 100644 --- a/graphics/pokemon/diglett/normal.pal +++ b/graphics/pokemon/diglett/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -164 90 90 -222 156 90 -197 115 65 -90 49 24 255 255 255 -16 16 16 -213 57 74 -115 0 24 255 172 148 255 106 90 -131 123 74 -180 172 115 -90 82 32 +213 57 74 +115 0 24 230 230 180 -0 0 0 +180 172 115 +131 123 74 +90 82 32 +123 123 123 +16 16 16 +222 156 90 +197 115 65 +164 90 90 +90 49 24 diff --git a/graphics/pokemon/diglett/shiny.pal b/graphics/pokemon/diglett/shiny.pal index b86a59ff4..8fef662bb 100644 --- a/graphics/pokemon/diglett/shiny.pal +++ b/graphics/pokemon/diglett/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 88 104 -208 152 104 -184 112 80 -88 48 24 -248 248 248 +255 255 255 +131 148 246 +90 106 205 +49 82 164 +8 41 123 +230 230 180 +180 172 115 +131 123 74 +90 82 32 +123 123 123 16 16 16 -48 80 160 -8 40 120 -128 144 240 -88 104 200 -128 120 72 -176 168 112 -88 80 32 -224 224 176 -0 0 0 +213 156 106 +189 115 82 +156 90 106 +82 49 41 diff --git a/graphics/pokemon/ditto/anim_front.png b/graphics/pokemon/ditto/anim_front.png index dd4d48c7f..f93a8adc4 100644 Binary files a/graphics/pokemon/ditto/anim_front.png and b/graphics/pokemon/ditto/anim_front.png differ diff --git a/graphics/pokemon/ditto/icon.png b/graphics/pokemon/ditto/icon.png index 130379cdc..da48a53fb 100644 Binary files a/graphics/pokemon/ditto/icon.png and b/graphics/pokemon/ditto/icon.png differ diff --git a/graphics/pokemon/doduo/anim_front.png b/graphics/pokemon/doduo/anim_front.png index 5d9387b43..bda88f3de 100644 Binary files a/graphics/pokemon/doduo/anim_front.png and b/graphics/pokemon/doduo/anim_front.png differ diff --git a/graphics/pokemon/doduo/icon.png b/graphics/pokemon/doduo/icon.png index 295d560f6..a226588bf 100644 Binary files a/graphics/pokemon/doduo/icon.png and b/graphics/pokemon/doduo/icon.png differ diff --git a/graphics/pokemon/donphan/anim_front.png b/graphics/pokemon/donphan/anim_front.png index 91239a271..a051ebc2b 100644 Binary files a/graphics/pokemon/donphan/anim_front.png and b/graphics/pokemon/donphan/anim_front.png differ diff --git a/graphics/pokemon/donphan/back.png b/graphics/pokemon/donphan/back.png index 6977063a7..6146f18a3 100644 Binary files a/graphics/pokemon/donphan/back.png and b/graphics/pokemon/donphan/back.png differ diff --git a/graphics/pokemon/dottler/back.png b/graphics/pokemon/dottler/back.png index 72b66eb1b..5420f771f 100644 Binary files a/graphics/pokemon/dottler/back.png and b/graphics/pokemon/dottler/back.png differ diff --git a/graphics/pokemon/dottler/front.png b/graphics/pokemon/dottler/front.png index ac957a9bf..1582c0a06 100644 Binary files a/graphics/pokemon/dottler/front.png and b/graphics/pokemon/dottler/front.png differ diff --git a/graphics/pokemon/dottler/icon.png b/graphics/pokemon/dottler/icon.png index 525d0af82..1274c130f 100644 Binary files a/graphics/pokemon/dottler/icon.png and b/graphics/pokemon/dottler/icon.png differ diff --git a/graphics/pokemon/doublade/anim_front.png b/graphics/pokemon/doublade/anim_front.png index 6f6d8fb49..e5eac3925 100644 Binary files a/graphics/pokemon/doublade/anim_front.png and b/graphics/pokemon/doublade/anim_front.png differ diff --git a/graphics/pokemon/doublade/back.png b/graphics/pokemon/doublade/back.png index cf93c30cb..dd991d0d0 100644 Binary files a/graphics/pokemon/doublade/back.png and b/graphics/pokemon/doublade/back.png differ diff --git a/graphics/pokemon/doublade/icon.png b/graphics/pokemon/doublade/icon.png index 5df0b7623..2f8d04859 100644 Binary files a/graphics/pokemon/doublade/icon.png and b/graphics/pokemon/doublade/icon.png differ diff --git a/graphics/pokemon/dracovish/back.png b/graphics/pokemon/dracovish/back.png index 85528cb6f..8a71558f5 100644 Binary files a/graphics/pokemon/dracovish/back.png and b/graphics/pokemon/dracovish/back.png differ diff --git a/graphics/pokemon/dracovish/front.png b/graphics/pokemon/dracovish/front.png index c0dc771ae..1d07a436a 100644 Binary files a/graphics/pokemon/dracovish/front.png and b/graphics/pokemon/dracovish/front.png differ diff --git a/graphics/pokemon/dracovish/icon.png b/graphics/pokemon/dracovish/icon.png index a9da17759..f998dea50 100644 Binary files a/graphics/pokemon/dracovish/icon.png and b/graphics/pokemon/dracovish/icon.png differ diff --git a/graphics/pokemon/dracozolt/back.png b/graphics/pokemon/dracozolt/back.png index cb0511e0c..dc20418ee 100644 Binary files a/graphics/pokemon/dracozolt/back.png and b/graphics/pokemon/dracozolt/back.png differ diff --git a/graphics/pokemon/dracozolt/front.png b/graphics/pokemon/dracozolt/front.png index 6355badf0..c82163727 100644 Binary files a/graphics/pokemon/dracozolt/front.png and b/graphics/pokemon/dracozolt/front.png differ diff --git a/graphics/pokemon/dracozolt/icon.png b/graphics/pokemon/dracozolt/icon.png index 33f9b2ad5..68c3fe780 100644 Binary files a/graphics/pokemon/dracozolt/icon.png and b/graphics/pokemon/dracozolt/icon.png differ diff --git a/graphics/pokemon/dragalge/anim_front.png b/graphics/pokemon/dragalge/anim_front.png index b71d8603d..c5305dffb 100644 Binary files a/graphics/pokemon/dragalge/anim_front.png and b/graphics/pokemon/dragalge/anim_front.png differ diff --git a/graphics/pokemon/dragalge/back.png b/graphics/pokemon/dragalge/back.png index 1dbc7ff45..c713a4075 100644 Binary files a/graphics/pokemon/dragalge/back.png and b/graphics/pokemon/dragalge/back.png differ diff --git a/graphics/pokemon/dragalge/icon.png b/graphics/pokemon/dragalge/icon.png index 3cdf843a7..0e88b2bb6 100644 Binary files a/graphics/pokemon/dragalge/icon.png and b/graphics/pokemon/dragalge/icon.png differ diff --git a/graphics/pokemon/dragapult/back.png b/graphics/pokemon/dragapult/back.png index fa0053da6..507a8fa1a 100644 Binary files a/graphics/pokemon/dragapult/back.png and b/graphics/pokemon/dragapult/back.png differ diff --git a/graphics/pokemon/dragapult/front.png b/graphics/pokemon/dragapult/front.png index f8718211a..efef89bba 100644 Binary files a/graphics/pokemon/dragapult/front.png and b/graphics/pokemon/dragapult/front.png differ diff --git a/graphics/pokemon/dragapult/icon.png b/graphics/pokemon/dragapult/icon.png index 799558171..7e49f9ada 100644 Binary files a/graphics/pokemon/dragapult/icon.png and b/graphics/pokemon/dragapult/icon.png differ diff --git a/graphics/pokemon/dragonair/anim_front.png b/graphics/pokemon/dragonair/anim_front.png index 864c00974..0868dd485 100644 Binary files a/graphics/pokemon/dragonair/anim_front.png and b/graphics/pokemon/dragonair/anim_front.png differ diff --git a/graphics/pokemon/dragonair/back.png b/graphics/pokemon/dragonair/back.png index 58a9bb674..edaa3ad18 100644 Binary files a/graphics/pokemon/dragonair/back.png and b/graphics/pokemon/dragonair/back.png differ diff --git a/graphics/pokemon/dragonair/icon.png b/graphics/pokemon/dragonair/icon.png index bdd7bb3bf..8d646cc10 100644 Binary files a/graphics/pokemon/dragonair/icon.png and b/graphics/pokemon/dragonair/icon.png differ diff --git a/graphics/pokemon/dragonite/back.png b/graphics/pokemon/dragonite/back.png index 97e783fac..a2133d209 100644 Binary files a/graphics/pokemon/dragonite/back.png and b/graphics/pokemon/dragonite/back.png differ diff --git a/graphics/pokemon/drakloak/back.png b/graphics/pokemon/drakloak/back.png index ac34f32f4..c37b6303c 100644 Binary files a/graphics/pokemon/drakloak/back.png and b/graphics/pokemon/drakloak/back.png differ diff --git a/graphics/pokemon/drakloak/front.png b/graphics/pokemon/drakloak/front.png index 6bfe098b3..e8ddbbeba 100644 Binary files a/graphics/pokemon/drakloak/front.png and b/graphics/pokemon/drakloak/front.png differ diff --git a/graphics/pokemon/drakloak/icon.png b/graphics/pokemon/drakloak/icon.png index 0a5ed8ba4..4e06a768b 100644 Binary files a/graphics/pokemon/drakloak/icon.png and b/graphics/pokemon/drakloak/icon.png differ diff --git a/graphics/pokemon/drampa/back.png b/graphics/pokemon/drampa/back.png index 8bebbcccd..b3460057e 100644 Binary files a/graphics/pokemon/drampa/back.png and b/graphics/pokemon/drampa/back.png differ diff --git a/graphics/pokemon/drampa/front.png b/graphics/pokemon/drampa/front.png index 039303e2a..6aecba694 100644 Binary files a/graphics/pokemon/drampa/front.png and b/graphics/pokemon/drampa/front.png differ diff --git a/graphics/pokemon/drampa/icon.png b/graphics/pokemon/drampa/icon.png index 660fb8a7b..5550dcb74 100644 Binary files a/graphics/pokemon/drampa/icon.png and b/graphics/pokemon/drampa/icon.png differ diff --git a/graphics/pokemon/drapion/back.png b/graphics/pokemon/drapion/back.png index f01218978..c1481186f 100644 Binary files a/graphics/pokemon/drapion/back.png and b/graphics/pokemon/drapion/back.png differ diff --git a/graphics/pokemon/drapion/icon.png b/graphics/pokemon/drapion/icon.png index 3348a18fc..95642bb7b 100644 Binary files a/graphics/pokemon/drapion/icon.png and b/graphics/pokemon/drapion/icon.png differ diff --git a/graphics/pokemon/dratini/anim_front.png b/graphics/pokemon/dratini/anim_front.png index 8142d1a4d..4b3f1a6c0 100644 Binary files a/graphics/pokemon/dratini/anim_front.png and b/graphics/pokemon/dratini/anim_front.png differ diff --git a/graphics/pokemon/dratini/back.png b/graphics/pokemon/dratini/back.png index 1981025f5..f67fe0510 100644 Binary files a/graphics/pokemon/dratini/back.png and b/graphics/pokemon/dratini/back.png differ diff --git a/graphics/pokemon/dratini/icon.png b/graphics/pokemon/dratini/icon.png index 22b6b65a1..e20410757 100644 Binary files a/graphics/pokemon/dratini/icon.png and b/graphics/pokemon/dratini/icon.png differ diff --git a/graphics/pokemon/drednaw/back.png b/graphics/pokemon/drednaw/back.png index 0cf21324c..e7939c5c7 100644 Binary files a/graphics/pokemon/drednaw/back.png and b/graphics/pokemon/drednaw/back.png differ diff --git a/graphics/pokemon/drednaw/icon.png b/graphics/pokemon/drednaw/icon.png index d506abf4f..9d0e42c01 100644 Binary files a/graphics/pokemon/drednaw/icon.png and b/graphics/pokemon/drednaw/icon.png differ diff --git a/graphics/pokemon/dreepy/back.png b/graphics/pokemon/dreepy/back.png index debc68c5a..eaddbb54a 100644 Binary files a/graphics/pokemon/dreepy/back.png and b/graphics/pokemon/dreepy/back.png differ diff --git a/graphics/pokemon/dreepy/front.png b/graphics/pokemon/dreepy/front.png index bcd47f6ed..23b231d1a 100644 Binary files a/graphics/pokemon/dreepy/front.png and b/graphics/pokemon/dreepy/front.png differ diff --git a/graphics/pokemon/dreepy/icon.png b/graphics/pokemon/dreepy/icon.png index 26ac52a65..27261fd31 100644 Binary files a/graphics/pokemon/dreepy/icon.png and b/graphics/pokemon/dreepy/icon.png differ diff --git a/graphics/pokemon/drifblim/anim_front.png b/graphics/pokemon/drifblim/anim_front.png index 3c027b664..9ed62c859 100644 Binary files a/graphics/pokemon/drifblim/anim_front.png and b/graphics/pokemon/drifblim/anim_front.png differ diff --git a/graphics/pokemon/drifblim/back.png b/graphics/pokemon/drifblim/back.png index 4099d199b..66c4fea7d 100644 Binary files a/graphics/pokemon/drifblim/back.png and b/graphics/pokemon/drifblim/back.png differ diff --git a/graphics/pokemon/drifloon/anim_front.png b/graphics/pokemon/drifloon/anim_front.png index c175e21ac..feb7b51fa 100644 Binary files a/graphics/pokemon/drifloon/anim_front.png and b/graphics/pokemon/drifloon/anim_front.png differ diff --git a/graphics/pokemon/drifloon/back.png b/graphics/pokemon/drifloon/back.png index 677a7c03a..08b46ccce 100644 Binary files a/graphics/pokemon/drifloon/back.png and b/graphics/pokemon/drifloon/back.png differ diff --git a/graphics/pokemon/drifloon/icon.png b/graphics/pokemon/drifloon/icon.png index ffb363d64..eead3fcaa 100644 Binary files a/graphics/pokemon/drifloon/icon.png and b/graphics/pokemon/drifloon/icon.png differ diff --git a/graphics/pokemon/drilbur/anim_front.png b/graphics/pokemon/drilbur/anim_front.png index e718a1cb2..f6073ae88 100644 Binary files a/graphics/pokemon/drilbur/anim_front.png and b/graphics/pokemon/drilbur/anim_front.png differ diff --git a/graphics/pokemon/drilbur/back.png b/graphics/pokemon/drilbur/back.png index d548bfdea..31bd4a056 100644 Binary files a/graphics/pokemon/drilbur/back.png and b/graphics/pokemon/drilbur/back.png differ diff --git a/graphics/pokemon/drilbur/icon.png b/graphics/pokemon/drilbur/icon.png index 2c27e2ab9..1bc4c7a15 100644 Binary files a/graphics/pokemon/drilbur/icon.png and b/graphics/pokemon/drilbur/icon.png differ diff --git a/graphics/pokemon/drizzile/back.png b/graphics/pokemon/drizzile/back.png index 13c899e83..e9a94afb5 100644 Binary files a/graphics/pokemon/drizzile/back.png and b/graphics/pokemon/drizzile/back.png differ diff --git a/graphics/pokemon/drizzile/front.png b/graphics/pokemon/drizzile/front.png index d50508c58..543bcf822 100644 Binary files a/graphics/pokemon/drizzile/front.png and b/graphics/pokemon/drizzile/front.png differ diff --git a/graphics/pokemon/drizzile/icon.png b/graphics/pokemon/drizzile/icon.png index 373b453d7..f02ce10e2 100644 Binary files a/graphics/pokemon/drizzile/icon.png and b/graphics/pokemon/drizzile/icon.png differ diff --git a/graphics/pokemon/drowzee/anim_front.png b/graphics/pokemon/drowzee/anim_front.png index 206679900..3bab74224 100644 Binary files a/graphics/pokemon/drowzee/anim_front.png and b/graphics/pokemon/drowzee/anim_front.png differ diff --git a/graphics/pokemon/drowzee/back.png b/graphics/pokemon/drowzee/back.png index 123192b81..3489ea9c3 100644 Binary files a/graphics/pokemon/drowzee/back.png and b/graphics/pokemon/drowzee/back.png differ diff --git a/graphics/pokemon/drowzee/icon.png b/graphics/pokemon/drowzee/icon.png index a35ddb567..c5fa46316 100644 Binary files a/graphics/pokemon/drowzee/icon.png and b/graphics/pokemon/drowzee/icon.png differ diff --git a/graphics/pokemon/druddigon/anim_front.png b/graphics/pokemon/druddigon/anim_front.png index 61a43193d..25fffae7f 100644 Binary files a/graphics/pokemon/druddigon/anim_front.png and b/graphics/pokemon/druddigon/anim_front.png differ diff --git a/graphics/pokemon/druddigon/back.png b/graphics/pokemon/druddigon/back.png index 698e322f7..d8897e2db 100644 Binary files a/graphics/pokemon/druddigon/back.png and b/graphics/pokemon/druddigon/back.png differ diff --git a/graphics/pokemon/druddigon/icon.png b/graphics/pokemon/druddigon/icon.png index 528d55247..77011932e 100644 Binary files a/graphics/pokemon/druddigon/icon.png and b/graphics/pokemon/druddigon/icon.png differ diff --git a/graphics/pokemon/dubwool/back.png b/graphics/pokemon/dubwool/back.png index 14d69aab7..5981dee2f 100644 Binary files a/graphics/pokemon/dubwool/back.png and b/graphics/pokemon/dubwool/back.png differ diff --git a/graphics/pokemon/dubwool/front.png b/graphics/pokemon/dubwool/front.png index da4955c5b..781d23721 100644 Binary files a/graphics/pokemon/dubwool/front.png and b/graphics/pokemon/dubwool/front.png differ diff --git a/graphics/pokemon/dubwool/icon.png b/graphics/pokemon/dubwool/icon.png index 0dd5954b7..d22fed234 100644 Binary files a/graphics/pokemon/dubwool/icon.png and b/graphics/pokemon/dubwool/icon.png differ diff --git a/graphics/pokemon/ducklett/anim_front.png b/graphics/pokemon/ducklett/anim_front.png index 4aa45f894..59d600e5e 100644 Binary files a/graphics/pokemon/ducklett/anim_front.png and b/graphics/pokemon/ducklett/anim_front.png differ diff --git a/graphics/pokemon/ducklett/back.png b/graphics/pokemon/ducklett/back.png index 382a122d0..77ff044b9 100644 Binary files a/graphics/pokemon/ducklett/back.png and b/graphics/pokemon/ducklett/back.png differ diff --git a/graphics/pokemon/ducklett/icon.png b/graphics/pokemon/ducklett/icon.png index 6255a6b58..7689062fe 100644 Binary files a/graphics/pokemon/ducklett/icon.png and b/graphics/pokemon/ducklett/icon.png differ diff --git a/graphics/pokemon/dugtrio/alolan/back.png b/graphics/pokemon/dugtrio/alolan/back.png index b12f5da99..e11428481 100644 Binary files a/graphics/pokemon/dugtrio/alolan/back.png and b/graphics/pokemon/dugtrio/alolan/back.png differ diff --git a/graphics/pokemon/dugtrio/alolan/front.png b/graphics/pokemon/dugtrio/alolan/front.png index 01c69c581..313605dc3 100644 Binary files a/graphics/pokemon/dugtrio/alolan/front.png and b/graphics/pokemon/dugtrio/alolan/front.png differ diff --git a/graphics/pokemon/dugtrio/alolan/icon.png b/graphics/pokemon/dugtrio/alolan/icon.png index 3927d5175..2a409cb8d 100644 Binary files a/graphics/pokemon/dugtrio/alolan/icon.png and b/graphics/pokemon/dugtrio/alolan/icon.png differ diff --git a/graphics/pokemon/dugtrio/anim_front.png b/graphics/pokemon/dugtrio/anim_front.png index 55129fa47..0119b370c 100644 Binary files a/graphics/pokemon/dugtrio/anim_front.png and b/graphics/pokemon/dugtrio/anim_front.png differ diff --git a/graphics/pokemon/dugtrio/back.png b/graphics/pokemon/dugtrio/back.png index 5beb1643f..bc74c0c97 100644 Binary files a/graphics/pokemon/dugtrio/back.png and b/graphics/pokemon/dugtrio/back.png differ diff --git a/graphics/pokemon/dugtrio/icon.png b/graphics/pokemon/dugtrio/icon.png index 0a4daf892..40a15521a 100644 Binary files a/graphics/pokemon/dugtrio/icon.png and b/graphics/pokemon/dugtrio/icon.png differ diff --git a/graphics/pokemon/dugtrio/normal.pal b/graphics/pokemon/dugtrio/normal.pal index 834d6d4db..1eff24bb3 100644 --- a/graphics/pokemon/dugtrio/normal.pal +++ b/graphics/pokemon/dugtrio/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -164 90 90 -222 156 90 -90 49 24 -197 115 65 255 255 255 -16 16 16 -115 0 24 255 172 148 255 106 90 213 57 74 -131 123 74 -180 172 115 -90 82 32 +115 0 24 230 230 180 -0 0 0 +180 172 115 +131 123 74 +90 82 32 +123 123 123 +16 16 16 +222 156 90 +197 115 65 +164 90 90 +90 49 24 diff --git a/graphics/pokemon/dugtrio/shiny.pal b/graphics/pokemon/dugtrio/shiny.pal index eeda85d9a..8fef662bb 100644 --- a/graphics/pokemon/dugtrio/shiny.pal +++ b/graphics/pokemon/dugtrio/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 88 104 -208 152 104 -80 48 40 -184 112 80 -248 248 248 +255 255 255 +131 148 246 +90 106 205 +49 82 164 +8 41 123 +230 230 180 +180 172 115 +131 123 74 +90 82 32 +123 123 123 16 16 16 -8 40 120 -128 144 240 -88 104 200 -48 80 160 -128 120 72 -176 168 112 -88 80 32 -224 224 176 -0 0 0 +213 156 106 +189 115 82 +156 90 106 +82 49 41 diff --git a/graphics/pokemon/dunsparce/anim_front.png b/graphics/pokemon/dunsparce/anim_front.png index 45cb297fe..b2216c6e2 100644 Binary files a/graphics/pokemon/dunsparce/anim_front.png and b/graphics/pokemon/dunsparce/anim_front.png differ diff --git a/graphics/pokemon/dunsparce/icon.png b/graphics/pokemon/dunsparce/icon.png index 014a79107..fa91e0c48 100644 Binary files a/graphics/pokemon/dunsparce/icon.png and b/graphics/pokemon/dunsparce/icon.png differ diff --git a/graphics/pokemon/duosion/back.png b/graphics/pokemon/duosion/back.png index 7527c440a..1512b0392 100644 Binary files a/graphics/pokemon/duosion/back.png and b/graphics/pokemon/duosion/back.png differ diff --git a/graphics/pokemon/duraludon/back.png b/graphics/pokemon/duraludon/back.png index 437ead510..051482fb1 100644 Binary files a/graphics/pokemon/duraludon/back.png and b/graphics/pokemon/duraludon/back.png differ diff --git a/graphics/pokemon/duraludon/front.png b/graphics/pokemon/duraludon/front.png index 3727bb9ec..99ef63bd7 100644 Binary files a/graphics/pokemon/duraludon/front.png and b/graphics/pokemon/duraludon/front.png differ diff --git a/graphics/pokemon/duraludon/icon.png b/graphics/pokemon/duraludon/icon.png index 5c3059bcf..6025a5c25 100644 Binary files a/graphics/pokemon/duraludon/icon.png and b/graphics/pokemon/duraludon/icon.png differ diff --git a/graphics/pokemon/durant/anim_front.png b/graphics/pokemon/durant/anim_front.png index a7a0ccc58..46e975814 100644 Binary files a/graphics/pokemon/durant/anim_front.png and b/graphics/pokemon/durant/anim_front.png differ diff --git a/graphics/pokemon/durant/back.png b/graphics/pokemon/durant/back.png index 55c9c081e..46cee4f0c 100644 Binary files a/graphics/pokemon/durant/back.png and b/graphics/pokemon/durant/back.png differ diff --git a/graphics/pokemon/durant/icon.png b/graphics/pokemon/durant/icon.png index 64a18114f..7eb3aae42 100644 Binary files a/graphics/pokemon/durant/icon.png and b/graphics/pokemon/durant/icon.png differ diff --git a/graphics/pokemon/dusclops/anim_front.png b/graphics/pokemon/dusclops/anim_front.png index fec0d0771..fee45d14a 100644 Binary files a/graphics/pokemon/dusclops/anim_front.png and b/graphics/pokemon/dusclops/anim_front.png differ diff --git a/graphics/pokemon/dusclops/back.png b/graphics/pokemon/dusclops/back.png index 012251641..cf2b1c434 100644 Binary files a/graphics/pokemon/dusclops/back.png and b/graphics/pokemon/dusclops/back.png differ diff --git a/graphics/pokemon/dusclops/icon.png b/graphics/pokemon/dusclops/icon.png index eb04ba495..6a0cf7f70 100644 Binary files a/graphics/pokemon/dusclops/icon.png and b/graphics/pokemon/dusclops/icon.png differ diff --git a/graphics/pokemon/dusknoir/anim_front.png b/graphics/pokemon/dusknoir/anim_front.png index 2ef9ae11f..abbef6aac 100644 Binary files a/graphics/pokemon/dusknoir/anim_front.png and b/graphics/pokemon/dusknoir/anim_front.png differ diff --git a/graphics/pokemon/dusknoir/back.png b/graphics/pokemon/dusknoir/back.png index f07961c89..e06c863fb 100644 Binary files a/graphics/pokemon/dusknoir/back.png and b/graphics/pokemon/dusknoir/back.png differ diff --git a/graphics/pokemon/dusknoir/icon.png b/graphics/pokemon/dusknoir/icon.png index 08a938180..9d4c3367c 100644 Binary files a/graphics/pokemon/dusknoir/icon.png and b/graphics/pokemon/dusknoir/icon.png differ diff --git a/graphics/pokemon/duskull/icon.png b/graphics/pokemon/duskull/icon.png index 01248bc66..7296b0dde 100644 Binary files a/graphics/pokemon/duskull/icon.png and b/graphics/pokemon/duskull/icon.png differ diff --git a/graphics/pokemon/dustox/anim_front.png b/graphics/pokemon/dustox/anim_front.png index c964005cf..3a47c01e7 100644 Binary files a/graphics/pokemon/dustox/anim_front.png and b/graphics/pokemon/dustox/anim_front.png differ diff --git a/graphics/pokemon/dustox/back.png b/graphics/pokemon/dustox/back.png index 5b59e4be0..b096c87cf 100644 Binary files a/graphics/pokemon/dustox/back.png and b/graphics/pokemon/dustox/back.png differ diff --git a/graphics/pokemon/dustox/icon.png b/graphics/pokemon/dustox/icon.png index ca4ca7e1a..5a8df5c8b 100644 Binary files a/graphics/pokemon/dustox/icon.png and b/graphics/pokemon/dustox/icon.png differ diff --git a/graphics/pokemon/dwebble/anim_front.png b/graphics/pokemon/dwebble/anim_front.png index eee85a425..087dc3ff7 100644 Binary files a/graphics/pokemon/dwebble/anim_front.png and b/graphics/pokemon/dwebble/anim_front.png differ diff --git a/graphics/pokemon/dwebble/back.png b/graphics/pokemon/dwebble/back.png index 731057b0b..23a4fac6b 100644 Binary files a/graphics/pokemon/dwebble/back.png and b/graphics/pokemon/dwebble/back.png differ diff --git a/graphics/pokemon/eelektrik/anim_front.png b/graphics/pokemon/eelektrik/anim_front.png index 52b4759c1..567a58c2b 100644 Binary files a/graphics/pokemon/eelektrik/anim_front.png and b/graphics/pokemon/eelektrik/anim_front.png differ diff --git a/graphics/pokemon/eelektrik/back.png b/graphics/pokemon/eelektrik/back.png index e0ca25aea..4516b4173 100644 Binary files a/graphics/pokemon/eelektrik/back.png and b/graphics/pokemon/eelektrik/back.png differ diff --git a/graphics/pokemon/eelektrik/icon.png b/graphics/pokemon/eelektrik/icon.png index 54a6f8b2a..f4eb658a6 100644 Binary files a/graphics/pokemon/eelektrik/icon.png and b/graphics/pokemon/eelektrik/icon.png differ diff --git a/graphics/pokemon/eelektross/anim_front.png b/graphics/pokemon/eelektross/anim_front.png index 55d2fe8a7..938f781a5 100644 Binary files a/graphics/pokemon/eelektross/anim_front.png and b/graphics/pokemon/eelektross/anim_front.png differ diff --git a/graphics/pokemon/eelektross/back.png b/graphics/pokemon/eelektross/back.png index aac4553eb..448fcac15 100644 Binary files a/graphics/pokemon/eelektross/back.png and b/graphics/pokemon/eelektross/back.png differ diff --git a/graphics/pokemon/eelektross/icon.png b/graphics/pokemon/eelektross/icon.png index 8a2f1f9dd..92574be27 100644 Binary files a/graphics/pokemon/eelektross/icon.png and b/graphics/pokemon/eelektross/icon.png differ diff --git a/graphics/pokemon/eevee/frontf.png b/graphics/pokemon/eevee/frontf.png index dc50214bb..3eb2e2c96 100644 Binary files a/graphics/pokemon/eevee/frontf.png and b/graphics/pokemon/eevee/frontf.png differ diff --git a/graphics/pokemon/eevee/icon.png b/graphics/pokemon/eevee/icon.png index 2b66afc4a..e7385ed6c 100644 Binary files a/graphics/pokemon/eevee/icon.png and b/graphics/pokemon/eevee/icon.png differ diff --git a/graphics/pokemon/egg/anim_front.png b/graphics/pokemon/egg/anim_front.png index 705ea4af1..5451b34a2 100644 Binary files a/graphics/pokemon/egg/anim_front.png and b/graphics/pokemon/egg/anim_front.png differ diff --git a/graphics/pokemon/egg/hatch.png b/graphics/pokemon/egg/hatch.png index 792c0c029..abea3122f 100644 Binary files a/graphics/pokemon/egg/hatch.png and b/graphics/pokemon/egg/hatch.png differ diff --git a/graphics/pokemon/egg/icon.png b/graphics/pokemon/egg/icon.png index 5e7ee181e..3c9b0e3e6 100644 Binary files a/graphics/pokemon/egg/icon.png and b/graphics/pokemon/egg/icon.png differ diff --git a/graphics/pokemon/egg/shard.png b/graphics/pokemon/egg/shard.png index 26d9b8b3a..d404445b8 100644 Binary files a/graphics/pokemon/egg/shard.png and b/graphics/pokemon/egg/shard.png differ diff --git a/graphics/pokemon/eiscue/back.png b/graphics/pokemon/eiscue/back.png index 499674793..6f8c1beae 100644 Binary files a/graphics/pokemon/eiscue/back.png and b/graphics/pokemon/eiscue/back.png differ diff --git a/graphics/pokemon/eiscue/front.png b/graphics/pokemon/eiscue/front.png index 6e41d3714..6f3884ad3 100644 Binary files a/graphics/pokemon/eiscue/front.png and b/graphics/pokemon/eiscue/front.png differ diff --git a/graphics/pokemon/eiscue/icon.png b/graphics/pokemon/eiscue/icon.png index 8345bafaf..800e244f5 100644 Binary files a/graphics/pokemon/eiscue/icon.png and b/graphics/pokemon/eiscue/icon.png differ diff --git a/graphics/pokemon/eiscue/noice_face/back.png b/graphics/pokemon/eiscue/noice_face/back.png index 5aa8c54d2..30c10eea3 100644 Binary files a/graphics/pokemon/eiscue/noice_face/back.png and b/graphics/pokemon/eiscue/noice_face/back.png differ diff --git a/graphics/pokemon/eiscue/noice_face/front.png b/graphics/pokemon/eiscue/noice_face/front.png index 527b26b26..967e2818f 100644 Binary files a/graphics/pokemon/eiscue/noice_face/front.png and b/graphics/pokemon/eiscue/noice_face/front.png differ diff --git a/graphics/pokemon/eiscue/noice_face/icon.png b/graphics/pokemon/eiscue/noice_face/icon.png index 2ede32680..b0822bc01 100644 Binary files a/graphics/pokemon/eiscue/noice_face/icon.png and b/graphics/pokemon/eiscue/noice_face/icon.png differ diff --git a/graphics/pokemon/ekans/anim_front.png b/graphics/pokemon/ekans/anim_front.png index bcd520eb0..15ad69a16 100644 Binary files a/graphics/pokemon/ekans/anim_front.png and b/graphics/pokemon/ekans/anim_front.png differ diff --git a/graphics/pokemon/ekans/back.png b/graphics/pokemon/ekans/back.png index 7792edd9f..9b2c3b9de 100644 Binary files a/graphics/pokemon/ekans/back.png and b/graphics/pokemon/ekans/back.png differ diff --git a/graphics/pokemon/ekans/icon.png b/graphics/pokemon/ekans/icon.png index d34448d84..ed27e0c3d 100644 Binary files a/graphics/pokemon/ekans/icon.png and b/graphics/pokemon/ekans/icon.png differ diff --git a/graphics/pokemon/ekans/normal.pal b/graphics/pokemon/ekans/normal.pal index 54db617b6..ecc9977f6 100644 --- a/graphics/pokemon/ekans/normal.pal +++ b/graphics/pokemon/ekans/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -90 16 74 -164 74 139 +255 255 255 +246 115 74 +197 65 24 +156 16 0 +255 230 156 +255 213 106 +230 172 90 +180 123 49 +131 82 16 +16 16 16 238 164 213 205 98 180 +164 74 139 123 49 106 -180 123 49 -255 213 106 -16 16 16 -230 172 90 -156 16 0 -88 72 48 -197 65 24 -246 115 74 -248 224 152 -0 0 0 +90 16 74 diff --git a/graphics/pokemon/ekans/shiny.pal b/graphics/pokemon/ekans/shiny.pal index d094cd0b8..b3e1a7e96 100644 --- a/graphics/pokemon/ekans/shiny.pal +++ b/graphics/pokemon/ekans/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -56 56 8 -128 136 56 -216 216 144 -176 176 88 -88 96 24 -176 120 48 -240 216 136 +152 160 208 +255 255 255 +246 115 74 +197 65 24 +156 16 0 +255 230 156 +255 213 106 +230 172 90 +180 123 49 +131 82 16 16 16 16 -208 160 80 -152 24 16 -128 80 16 -192 80 40 -240 144 120 -248 224 152 -0 0 0 +238 238 156 +172 172 57 +131 139 32 +106 115 16 +90 90 0 diff --git a/graphics/pokemon/eldegoss/back.png b/graphics/pokemon/eldegoss/back.png index dc56e7dd8..73f8b0082 100644 Binary files a/graphics/pokemon/eldegoss/back.png and b/graphics/pokemon/eldegoss/back.png differ diff --git a/graphics/pokemon/eldegoss/front.png b/graphics/pokemon/eldegoss/front.png index 52cdb6d30..b47d8f4a7 100644 Binary files a/graphics/pokemon/eldegoss/front.png and b/graphics/pokemon/eldegoss/front.png differ diff --git a/graphics/pokemon/eldegoss/icon.png b/graphics/pokemon/eldegoss/icon.png index 578bd2a8c..bb22f1b6c 100644 Binary files a/graphics/pokemon/eldegoss/icon.png and b/graphics/pokemon/eldegoss/icon.png differ diff --git a/graphics/pokemon/electabuzz/anim_front.png b/graphics/pokemon/electabuzz/anim_front.png index bc17b2392..a1f470a0a 100644 Binary files a/graphics/pokemon/electabuzz/anim_front.png and b/graphics/pokemon/electabuzz/anim_front.png differ diff --git a/graphics/pokemon/electabuzz/back.png b/graphics/pokemon/electabuzz/back.png index 39a26b92b..1b742d4d7 100644 Binary files a/graphics/pokemon/electabuzz/back.png and b/graphics/pokemon/electabuzz/back.png differ diff --git a/graphics/pokemon/electabuzz/icon.png b/graphics/pokemon/electabuzz/icon.png index 7c6882782..dc7be92f8 100644 Binary files a/graphics/pokemon/electabuzz/icon.png and b/graphics/pokemon/electabuzz/icon.png differ diff --git a/graphics/pokemon/electivire/back.png b/graphics/pokemon/electivire/back.png index 5373532bd..08208af4b 100644 Binary files a/graphics/pokemon/electivire/back.png and b/graphics/pokemon/electivire/back.png differ diff --git a/graphics/pokemon/electivire/icon.png b/graphics/pokemon/electivire/icon.png index c3df434db..b13af4f10 100644 Binary files a/graphics/pokemon/electivire/icon.png and b/graphics/pokemon/electivire/icon.png differ diff --git a/graphics/pokemon/electrike/anim_front.png b/graphics/pokemon/electrike/anim_front.png index 26c0cdd12..b1acce4c9 100644 Binary files a/graphics/pokemon/electrike/anim_front.png and b/graphics/pokemon/electrike/anim_front.png differ diff --git a/graphics/pokemon/electrike/back.png b/graphics/pokemon/electrike/back.png index 72b78d2b3..4336d8697 100644 Binary files a/graphics/pokemon/electrike/back.png and b/graphics/pokemon/electrike/back.png differ diff --git a/graphics/pokemon/electrike/icon.png b/graphics/pokemon/electrike/icon.png index 7c3215fab..43235804f 100644 Binary files a/graphics/pokemon/electrike/icon.png and b/graphics/pokemon/electrike/icon.png differ diff --git a/graphics/pokemon/electrode/back.png b/graphics/pokemon/electrode/back.png index 01d4bc1df..86d20c029 100644 Binary files a/graphics/pokemon/electrode/back.png and b/graphics/pokemon/electrode/back.png differ diff --git a/graphics/pokemon/electrode/hisuian/back.png b/graphics/pokemon/electrode/hisuian/back.png index 803bf4792..51e6686d2 100644 Binary files a/graphics/pokemon/electrode/hisuian/back.png and b/graphics/pokemon/electrode/hisuian/back.png differ diff --git a/graphics/pokemon/electrode/hisuian/front.png b/graphics/pokemon/electrode/hisuian/front.png index 457deed2a..1e568d376 100644 Binary files a/graphics/pokemon/electrode/hisuian/front.png and b/graphics/pokemon/electrode/hisuian/front.png differ diff --git a/graphics/pokemon/electrode/hisuian/icon.png b/graphics/pokemon/electrode/hisuian/icon.png index 83861b290..d624e246c 100644 Binary files a/graphics/pokemon/electrode/hisuian/icon.png and b/graphics/pokemon/electrode/hisuian/icon.png differ diff --git a/graphics/pokemon/electrode/icon.png b/graphics/pokemon/electrode/icon.png index b85873593..6f14a09dd 100644 Binary files a/graphics/pokemon/electrode/icon.png and b/graphics/pokemon/electrode/icon.png differ diff --git a/graphics/pokemon/elekid/anim_front.png b/graphics/pokemon/elekid/anim_front.png index 8cf48c7eb..3b38ebfa2 100644 Binary files a/graphics/pokemon/elekid/anim_front.png and b/graphics/pokemon/elekid/anim_front.png differ diff --git a/graphics/pokemon/elekid/icon.png b/graphics/pokemon/elekid/icon.png index ed9bb84f7..9b6976510 100644 Binary files a/graphics/pokemon/elekid/icon.png and b/graphics/pokemon/elekid/icon.png differ diff --git a/graphics/pokemon/elgyem/back.png b/graphics/pokemon/elgyem/back.png index 43a9661b0..06e67465f 100644 Binary files a/graphics/pokemon/elgyem/back.png and b/graphics/pokemon/elgyem/back.png differ diff --git a/graphics/pokemon/elgyem/icon.png b/graphics/pokemon/elgyem/icon.png index 897e0706c..cee271077 100644 Binary files a/graphics/pokemon/elgyem/icon.png and b/graphics/pokemon/elgyem/icon.png differ diff --git a/graphics/pokemon/emboar/anim_front.png b/graphics/pokemon/emboar/anim_front.png index 24c9b7dc4..ad36ed955 100644 Binary files a/graphics/pokemon/emboar/anim_front.png and b/graphics/pokemon/emboar/anim_front.png differ diff --git a/graphics/pokemon/emboar/back.png b/graphics/pokemon/emboar/back.png index 86cb5e1cc..a61bb4de1 100644 Binary files a/graphics/pokemon/emboar/back.png and b/graphics/pokemon/emboar/back.png differ diff --git a/graphics/pokemon/emolga/anim_front.png b/graphics/pokemon/emolga/anim_front.png index 6eb0e5017..97b86d00b 100644 Binary files a/graphics/pokemon/emolga/anim_front.png and b/graphics/pokemon/emolga/anim_front.png differ diff --git a/graphics/pokemon/emolga/back.png b/graphics/pokemon/emolga/back.png index 46df6bf2a..7a8ae68c0 100644 Binary files a/graphics/pokemon/emolga/back.png and b/graphics/pokemon/emolga/back.png differ diff --git a/graphics/pokemon/emolga/icon.png b/graphics/pokemon/emolga/icon.png index e2e61c3de..653e4bbae 100644 Binary files a/graphics/pokemon/emolga/icon.png and b/graphics/pokemon/emolga/icon.png differ diff --git a/graphics/pokemon/empoleon/anim_front.png b/graphics/pokemon/empoleon/anim_front.png index 44032d2a3..697609916 100644 Binary files a/graphics/pokemon/empoleon/anim_front.png and b/graphics/pokemon/empoleon/anim_front.png differ diff --git a/graphics/pokemon/empoleon/back.png b/graphics/pokemon/empoleon/back.png index 96a83dd79..b4a538666 100644 Binary files a/graphics/pokemon/empoleon/back.png and b/graphics/pokemon/empoleon/back.png differ diff --git a/graphics/pokemon/enamorus/back.png b/graphics/pokemon/enamorus/back.png index 1643bfba4..1b2b00e21 100755 Binary files a/graphics/pokemon/enamorus/back.png and b/graphics/pokemon/enamorus/back.png differ diff --git a/graphics/pokemon/enamorus/icon.png b/graphics/pokemon/enamorus/icon.png index 5f2705f01..c127c0734 100644 Binary files a/graphics/pokemon/enamorus/icon.png and b/graphics/pokemon/enamorus/icon.png differ diff --git a/graphics/pokemon/enamorus/therian/back.png b/graphics/pokemon/enamorus/therian/back.png index 8351a2d3c..a563156e4 100644 Binary files a/graphics/pokemon/enamorus/therian/back.png and b/graphics/pokemon/enamorus/therian/back.png differ diff --git a/graphics/pokemon/enamorus/therian/front.png b/graphics/pokemon/enamorus/therian/front.png index 4c452f7eb..8ac7c93f0 100644 Binary files a/graphics/pokemon/enamorus/therian/front.png and b/graphics/pokemon/enamorus/therian/front.png differ diff --git a/graphics/pokemon/enamorus/therian/icon.png b/graphics/pokemon/enamorus/therian/icon.png index 0e0ca29ad..dfca5087f 100644 Binary files a/graphics/pokemon/enamorus/therian/icon.png and b/graphics/pokemon/enamorus/therian/icon.png differ diff --git a/graphics/pokemon/entei/anim_front.png b/graphics/pokemon/entei/anim_front.png index 850b65679..267cc4cb6 100644 Binary files a/graphics/pokemon/entei/anim_front.png and b/graphics/pokemon/entei/anim_front.png differ diff --git a/graphics/pokemon/entei/back.png b/graphics/pokemon/entei/back.png index 8656baa9a..dd3087bc0 100644 Binary files a/graphics/pokemon/entei/back.png and b/graphics/pokemon/entei/back.png differ diff --git a/graphics/pokemon/escavalier/anim_front.png b/graphics/pokemon/escavalier/anim_front.png index 126e47bea..78d215a42 100644 Binary files a/graphics/pokemon/escavalier/anim_front.png and b/graphics/pokemon/escavalier/anim_front.png differ diff --git a/graphics/pokemon/escavalier/back.png b/graphics/pokemon/escavalier/back.png index eeca99d27..52f63a6b9 100644 Binary files a/graphics/pokemon/escavalier/back.png and b/graphics/pokemon/escavalier/back.png differ diff --git a/graphics/pokemon/espeon/anim_front.png b/graphics/pokemon/espeon/anim_front.png index a86a7d112..1010130c1 100644 Binary files a/graphics/pokemon/espeon/anim_front.png and b/graphics/pokemon/espeon/anim_front.png differ diff --git a/graphics/pokemon/espurr/anim_front.png b/graphics/pokemon/espurr/anim_front.png index 2cd729003..5aa7b028c 100644 Binary files a/graphics/pokemon/espurr/anim_front.png and b/graphics/pokemon/espurr/anim_front.png differ diff --git a/graphics/pokemon/espurr/back.png b/graphics/pokemon/espurr/back.png index f6ee5fae6..d291dc0e6 100644 Binary files a/graphics/pokemon/espurr/back.png and b/graphics/pokemon/espurr/back.png differ diff --git a/graphics/pokemon/espurr/icon.png b/graphics/pokemon/espurr/icon.png index e10fd6a8e..8711d3025 100644 Binary files a/graphics/pokemon/espurr/icon.png and b/graphics/pokemon/espurr/icon.png differ diff --git a/graphics/pokemon/eternatus/back.png b/graphics/pokemon/eternatus/back.png index e1b9bc38a..c7acc2311 100644 Binary files a/graphics/pokemon/eternatus/back.png and b/graphics/pokemon/eternatus/back.png differ diff --git a/graphics/pokemon/eternatus/eternamax/back.png b/graphics/pokemon/eternatus/eternamax/back.png index a7c291e0a..7d6f7f484 100644 Binary files a/graphics/pokemon/eternatus/eternamax/back.png and b/graphics/pokemon/eternatus/eternamax/back.png differ diff --git a/graphics/pokemon/eternatus/eternamax/front.png b/graphics/pokemon/eternatus/eternamax/front.png index 71d4e22f2..60d41e258 100644 Binary files a/graphics/pokemon/eternatus/eternamax/front.png and b/graphics/pokemon/eternatus/eternamax/front.png differ diff --git a/graphics/pokemon/eternatus/eternamax/icon.png b/graphics/pokemon/eternatus/eternamax/icon.png index 7e1cf8102..32f5548b7 100644 Binary files a/graphics/pokemon/eternatus/eternamax/icon.png and b/graphics/pokemon/eternatus/eternamax/icon.png differ diff --git a/graphics/pokemon/eternatus/front.png b/graphics/pokemon/eternatus/front.png index 8ab775192..df533f593 100644 Binary files a/graphics/pokemon/eternatus/front.png and b/graphics/pokemon/eternatus/front.png differ diff --git a/graphics/pokemon/eternatus/icon.png b/graphics/pokemon/eternatus/icon.png index 84cce895c..60797c604 100644 Binary files a/graphics/pokemon/eternatus/icon.png and b/graphics/pokemon/eternatus/icon.png differ diff --git a/graphics/pokemon/excadrill/anim_front.png b/graphics/pokemon/excadrill/anim_front.png index c8f998dcd..4a07a4d87 100644 Binary files a/graphics/pokemon/excadrill/anim_front.png and b/graphics/pokemon/excadrill/anim_front.png differ diff --git a/graphics/pokemon/excadrill/back.png b/graphics/pokemon/excadrill/back.png index aa979e178..e63f5d761 100644 Binary files a/graphics/pokemon/excadrill/back.png and b/graphics/pokemon/excadrill/back.png differ diff --git a/graphics/pokemon/excadrill/icon.png b/graphics/pokemon/excadrill/icon.png index d7a003e51..072719d72 100644 Binary files a/graphics/pokemon/excadrill/icon.png and b/graphics/pokemon/excadrill/icon.png differ diff --git a/graphics/pokemon/exeggcute/back.png b/graphics/pokemon/exeggcute/back.png index d44fe1089..8ae6d8f21 100644 Binary files a/graphics/pokemon/exeggcute/back.png and b/graphics/pokemon/exeggcute/back.png differ diff --git a/graphics/pokemon/exeggcute/icon.png b/graphics/pokemon/exeggcute/icon.png index 098f0f93a..7feb51f58 100644 Binary files a/graphics/pokemon/exeggcute/icon.png and b/graphics/pokemon/exeggcute/icon.png differ diff --git a/graphics/pokemon/exeggutor/alolan/icon.png b/graphics/pokemon/exeggutor/alolan/icon.png index 1e2884602..723d0a4ea 100644 Binary files a/graphics/pokemon/exeggutor/alolan/icon.png and b/graphics/pokemon/exeggutor/alolan/icon.png differ diff --git a/graphics/pokemon/exeggutor/back.png b/graphics/pokemon/exeggutor/back.png index 4c871004c..8bf010656 100644 Binary files a/graphics/pokemon/exeggutor/back.png and b/graphics/pokemon/exeggutor/back.png differ diff --git a/graphics/pokemon/exploud/anim_front.png b/graphics/pokemon/exploud/anim_front.png index f6c8cbed7..c46727542 100644 Binary files a/graphics/pokemon/exploud/anim_front.png and b/graphics/pokemon/exploud/anim_front.png differ diff --git a/graphics/pokemon/exploud/back.png b/graphics/pokemon/exploud/back.png index 98d7d5b60..68aacbe37 100644 Binary files a/graphics/pokemon/exploud/back.png and b/graphics/pokemon/exploud/back.png differ diff --git a/graphics/pokemon/falinks/back.png b/graphics/pokemon/falinks/back.png index 07fa248b1..925cb3497 100644 Binary files a/graphics/pokemon/falinks/back.png and b/graphics/pokemon/falinks/back.png differ diff --git a/graphics/pokemon/falinks/front.png b/graphics/pokemon/falinks/front.png index b0c99a957..5aad0360b 100644 Binary files a/graphics/pokemon/falinks/front.png and b/graphics/pokemon/falinks/front.png differ diff --git a/graphics/pokemon/falinks/icon.png b/graphics/pokemon/falinks/icon.png index 13ddf7733..e8b750bd5 100644 Binary files a/graphics/pokemon/falinks/icon.png and b/graphics/pokemon/falinks/icon.png differ diff --git a/graphics/pokemon/farfetchd/back.png b/graphics/pokemon/farfetchd/back.png index b51749f52..50978b424 100644 Binary files a/graphics/pokemon/farfetchd/back.png and b/graphics/pokemon/farfetchd/back.png differ diff --git a/graphics/pokemon/farfetchd/galarian/back.png b/graphics/pokemon/farfetchd/galarian/back.png index 6f2f54db4..a526545c9 100644 Binary files a/graphics/pokemon/farfetchd/galarian/back.png and b/graphics/pokemon/farfetchd/galarian/back.png differ diff --git a/graphics/pokemon/farfetchd/galarian/front.png b/graphics/pokemon/farfetchd/galarian/front.png index dd20437d6..11100f7b1 100644 Binary files a/graphics/pokemon/farfetchd/galarian/front.png and b/graphics/pokemon/farfetchd/galarian/front.png differ diff --git a/graphics/pokemon/farfetchd/galarian/icon.png b/graphics/pokemon/farfetchd/galarian/icon.png index a7ac6fc1b..2dda2cd26 100644 Binary files a/graphics/pokemon/farfetchd/galarian/icon.png and b/graphics/pokemon/farfetchd/galarian/icon.png differ diff --git a/graphics/pokemon/farfetchd/icon.png b/graphics/pokemon/farfetchd/icon.png index 49bd4eec1..d848b1590 100644 Binary files a/graphics/pokemon/farfetchd/icon.png and b/graphics/pokemon/farfetchd/icon.png differ diff --git a/graphics/pokemon/fearow/anim_front.png b/graphics/pokemon/fearow/anim_front.png index e891c121b..036efc242 100644 Binary files a/graphics/pokemon/fearow/anim_front.png and b/graphics/pokemon/fearow/anim_front.png differ diff --git a/graphics/pokemon/fearow/back.png b/graphics/pokemon/fearow/back.png index 6c0f29e86..a9c5d7d07 100644 Binary files a/graphics/pokemon/fearow/back.png and b/graphics/pokemon/fearow/back.png differ diff --git a/graphics/pokemon/fearow/icon.png b/graphics/pokemon/fearow/icon.png index 37e32c784..a6f077bd3 100644 Binary files a/graphics/pokemon/fearow/icon.png and b/graphics/pokemon/fearow/icon.png differ diff --git a/graphics/pokemon/fearow/normal.pal b/graphics/pokemon/fearow/normal.pal index 43c311727..b183d5153 100644 --- a/graphics/pokemon/fearow/normal.pal +++ b/graphics/pokemon/fearow/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +0 0 0 +238 213 180 +213 164 90 +180 115 32 139 82 49 98 57 32 -213 164 90 -0 0 0 -180 115 32 -123 32 32 +255 213 189 +255 131 106 230 65 65 180 32 32 -255 131 106 -98 90 57 -230 213 180 +123 32 32 255 255 255 -238 213 180 +230 213 180 172 164 106 -208 128 128 +98 90 57 diff --git a/graphics/pokemon/fearow/shiny.pal b/graphics/pokemon/fearow/shiny.pal index 7b60073d7..c60a6e80d 100644 --- a/graphics/pokemon/fearow/shiny.pal +++ b/graphics/pokemon/fearow/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 +152 160 208 +0 0 0 +238 246 197 +213 222 90 +180 189 32 139 139 49 98 57 32 -213 222 90 -0 0 0 -180 189 32 -139 49 0 +255 255 164 +255 238 65 255 164 0 213 123 0 -255 238 65 -98 98 57 -230 222 180 +139 49 0 255 255 255 -238 246 197 +230 222 180 172 172 106 -208 128 128 +98 98 57 diff --git a/graphics/pokemon/feebas/anim_front.png b/graphics/pokemon/feebas/anim_front.png index b7482f45a..f08426d73 100644 Binary files a/graphics/pokemon/feebas/anim_front.png and b/graphics/pokemon/feebas/anim_front.png differ diff --git a/graphics/pokemon/feebas/back.png b/graphics/pokemon/feebas/back.png index 9ad529f90..fb3f8ab31 100644 Binary files a/graphics/pokemon/feebas/back.png and b/graphics/pokemon/feebas/back.png differ diff --git a/graphics/pokemon/feebas/icon.png b/graphics/pokemon/feebas/icon.png index 40a1b4e57..e7087c8dc 100644 Binary files a/graphics/pokemon/feebas/icon.png and b/graphics/pokemon/feebas/icon.png differ diff --git a/graphics/pokemon/fennekin/anim_front.png b/graphics/pokemon/fennekin/anim_front.png index 290fd4609..55e828868 100644 Binary files a/graphics/pokemon/fennekin/anim_front.png and b/graphics/pokemon/fennekin/anim_front.png differ diff --git a/graphics/pokemon/fennekin/back.png b/graphics/pokemon/fennekin/back.png index 154df2400..36269d18b 100644 Binary files a/graphics/pokemon/fennekin/back.png and b/graphics/pokemon/fennekin/back.png differ diff --git a/graphics/pokemon/fennekin/icon.png b/graphics/pokemon/fennekin/icon.png index 8d2ded26d..65bd1ee7d 100644 Binary files a/graphics/pokemon/fennekin/icon.png and b/graphics/pokemon/fennekin/icon.png differ diff --git a/graphics/pokemon/feraligatr/back.png b/graphics/pokemon/feraligatr/back.png index d2d9c46e4..a4f025518 100644 Binary files a/graphics/pokemon/feraligatr/back.png and b/graphics/pokemon/feraligatr/back.png differ diff --git a/graphics/pokemon/ferroseed/anim_front.png b/graphics/pokemon/ferroseed/anim_front.png index f792004aa..4c5275b5c 100644 Binary files a/graphics/pokemon/ferroseed/anim_front.png and b/graphics/pokemon/ferroseed/anim_front.png differ diff --git a/graphics/pokemon/ferroseed/back.png b/graphics/pokemon/ferroseed/back.png index f0153293d..bb16f1aa1 100644 Binary files a/graphics/pokemon/ferroseed/back.png and b/graphics/pokemon/ferroseed/back.png differ diff --git a/graphics/pokemon/ferroseed/icon.png b/graphics/pokemon/ferroseed/icon.png index 700920c5d..7baa4a45c 100644 Binary files a/graphics/pokemon/ferroseed/icon.png and b/graphics/pokemon/ferroseed/icon.png differ diff --git a/graphics/pokemon/ferrothorn/anim_front.png b/graphics/pokemon/ferrothorn/anim_front.png index 89bfa3a57..ccec2bda8 100644 Binary files a/graphics/pokemon/ferrothorn/anim_front.png and b/graphics/pokemon/ferrothorn/anim_front.png differ diff --git a/graphics/pokemon/ferrothorn/back.png b/graphics/pokemon/ferrothorn/back.png index 5c17099d2..f48d4e31b 100644 Binary files a/graphics/pokemon/ferrothorn/back.png and b/graphics/pokemon/ferrothorn/back.png differ diff --git a/graphics/pokemon/ferrothorn/icon.png b/graphics/pokemon/ferrothorn/icon.png index 58f005be2..e634841b3 100644 Binary files a/graphics/pokemon/ferrothorn/icon.png and b/graphics/pokemon/ferrothorn/icon.png differ diff --git a/graphics/pokemon/finneon/anim_front.png b/graphics/pokemon/finneon/anim_front.png index df063037d..c18dd41cf 100644 Binary files a/graphics/pokemon/finneon/anim_front.png and b/graphics/pokemon/finneon/anim_front.png differ diff --git a/graphics/pokemon/finneon/back.png b/graphics/pokemon/finneon/back.png index f81cff261..15213fa11 100644 Binary files a/graphics/pokemon/finneon/back.png and b/graphics/pokemon/finneon/back.png differ diff --git a/graphics/pokemon/finneon/icon.png b/graphics/pokemon/finneon/icon.png index d6bd13379..3aa990893 100644 Binary files a/graphics/pokemon/finneon/icon.png and b/graphics/pokemon/finneon/icon.png differ diff --git a/graphics/pokemon/flaaffy/back.png b/graphics/pokemon/flaaffy/back.png index f93622ed3..2ab4b4d77 100644 Binary files a/graphics/pokemon/flaaffy/back.png and b/graphics/pokemon/flaaffy/back.png differ diff --git a/graphics/pokemon/flaaffy/icon.png b/graphics/pokemon/flaaffy/icon.png index 1efd13040..2bfa0c1f2 100644 Binary files a/graphics/pokemon/flaaffy/icon.png and b/graphics/pokemon/flaaffy/icon.png differ diff --git a/graphics/pokemon/flabebe/anim_front.png b/graphics/pokemon/flabebe/anim_front.png index 82b666f6e..6677d4137 100644 Binary files a/graphics/pokemon/flabebe/anim_front.png and b/graphics/pokemon/flabebe/anim_front.png differ diff --git a/graphics/pokemon/flabebe/icon.png b/graphics/pokemon/flabebe/icon.png index 26184efbc..68c10aab1 100644 Binary files a/graphics/pokemon/flabebe/icon.png and b/graphics/pokemon/flabebe/icon.png differ diff --git a/graphics/pokemon/flapple/back.png b/graphics/pokemon/flapple/back.png index 5d177a9ca..9f8eca0fa 100644 Binary files a/graphics/pokemon/flapple/back.png and b/graphics/pokemon/flapple/back.png differ diff --git a/graphics/pokemon/flapple/icon.png b/graphics/pokemon/flapple/icon.png index be7866e7a..e8d8660fe 100644 Binary files a/graphics/pokemon/flapple/icon.png and b/graphics/pokemon/flapple/icon.png differ diff --git a/graphics/pokemon/flareon/back.png b/graphics/pokemon/flareon/back.png index dd95d31b4..a047bcc4e 100644 Binary files a/graphics/pokemon/flareon/back.png and b/graphics/pokemon/flareon/back.png differ diff --git a/graphics/pokemon/fletchinder/anim_front.png b/graphics/pokemon/fletchinder/anim_front.png index 800ee6097..cb7d9c7b5 100644 Binary files a/graphics/pokemon/fletchinder/anim_front.png and b/graphics/pokemon/fletchinder/anim_front.png differ diff --git a/graphics/pokemon/fletchinder/back.png b/graphics/pokemon/fletchinder/back.png index 0726953db..7eeb59bd0 100644 Binary files a/graphics/pokemon/fletchinder/back.png and b/graphics/pokemon/fletchinder/back.png differ diff --git a/graphics/pokemon/fletchinder/icon.png b/graphics/pokemon/fletchinder/icon.png index 872c7bf33..c4f244008 100644 Binary files a/graphics/pokemon/fletchinder/icon.png and b/graphics/pokemon/fletchinder/icon.png differ diff --git a/graphics/pokemon/fletchling/anim_front.png b/graphics/pokemon/fletchling/anim_front.png index 0f591058a..87f110df9 100644 Binary files a/graphics/pokemon/fletchling/anim_front.png and b/graphics/pokemon/fletchling/anim_front.png differ diff --git a/graphics/pokemon/fletchling/back.png b/graphics/pokemon/fletchling/back.png index a2b7e7c42..880ec9548 100644 Binary files a/graphics/pokemon/fletchling/back.png and b/graphics/pokemon/fletchling/back.png differ diff --git a/graphics/pokemon/fletchling/icon.png b/graphics/pokemon/fletchling/icon.png index 08fd25b8e..fa79db784 100644 Binary files a/graphics/pokemon/fletchling/icon.png and b/graphics/pokemon/fletchling/icon.png differ diff --git a/graphics/pokemon/floatzel/back.png b/graphics/pokemon/floatzel/back.png index 31b250fc5..50fa290c3 100644 Binary files a/graphics/pokemon/floatzel/back.png and b/graphics/pokemon/floatzel/back.png differ diff --git a/graphics/pokemon/floatzel/icon.png b/graphics/pokemon/floatzel/icon.png index 3a91190d5..3be21fb77 100644 Binary files a/graphics/pokemon/floatzel/icon.png and b/graphics/pokemon/floatzel/icon.png differ diff --git a/graphics/pokemon/floette/anim_front.png b/graphics/pokemon/floette/anim_front.png index c18dab54e..43eae1911 100644 Binary files a/graphics/pokemon/floette/anim_front.png and b/graphics/pokemon/floette/anim_front.png differ diff --git a/graphics/pokemon/floette/back.png b/graphics/pokemon/floette/back.png index 2623bacad..4f76af315 100644 Binary files a/graphics/pokemon/floette/back.png and b/graphics/pokemon/floette/back.png differ diff --git a/graphics/pokemon/floette/icon.png b/graphics/pokemon/floette/icon.png index b68fe2108..732558461 100644 Binary files a/graphics/pokemon/floette/icon.png and b/graphics/pokemon/floette/icon.png differ diff --git a/graphics/pokemon/florges/anim_front.png b/graphics/pokemon/florges/anim_front.png index 0a87ddf7b..667f0a6d4 100644 Binary files a/graphics/pokemon/florges/anim_front.png and b/graphics/pokemon/florges/anim_front.png differ diff --git a/graphics/pokemon/florges/icon.png b/graphics/pokemon/florges/icon.png index 1644213ba..81d8b4428 100644 Binary files a/graphics/pokemon/florges/icon.png and b/graphics/pokemon/florges/icon.png differ diff --git a/graphics/pokemon/flygon/anim_front.png b/graphics/pokemon/flygon/anim_front.png index 3b652d364..dcc03a1c5 100644 Binary files a/graphics/pokemon/flygon/anim_front.png and b/graphics/pokemon/flygon/anim_front.png differ diff --git a/graphics/pokemon/flygon/back.png b/graphics/pokemon/flygon/back.png index 3ca4369be..73b2ebafa 100644 Binary files a/graphics/pokemon/flygon/back.png and b/graphics/pokemon/flygon/back.png differ diff --git a/graphics/pokemon/fomantis/back.png b/graphics/pokemon/fomantis/back.png index 8d76216f1..fe31f43c4 100644 Binary files a/graphics/pokemon/fomantis/back.png and b/graphics/pokemon/fomantis/back.png differ diff --git a/graphics/pokemon/fomantis/front.png b/graphics/pokemon/fomantis/front.png index 4ee5652e8..116850706 100644 Binary files a/graphics/pokemon/fomantis/front.png and b/graphics/pokemon/fomantis/front.png differ diff --git a/graphics/pokemon/fomantis/icon.png b/graphics/pokemon/fomantis/icon.png index d15e66ffa..2604f517d 100644 Binary files a/graphics/pokemon/fomantis/icon.png and b/graphics/pokemon/fomantis/icon.png differ diff --git a/graphics/pokemon/foongus/anim_front.png b/graphics/pokemon/foongus/anim_front.png index 09eb48154..8c7b13ecf 100644 Binary files a/graphics/pokemon/foongus/anim_front.png and b/graphics/pokemon/foongus/anim_front.png differ diff --git a/graphics/pokemon/foongus/back.png b/graphics/pokemon/foongus/back.png index 9bf9e611b..ff0eab1f9 100644 Binary files a/graphics/pokemon/foongus/back.png and b/graphics/pokemon/foongus/back.png differ diff --git a/graphics/pokemon/forretress/anim_front.png b/graphics/pokemon/forretress/anim_front.png index cefbecd68..3ddc37f38 100644 Binary files a/graphics/pokemon/forretress/anim_front.png and b/graphics/pokemon/forretress/anim_front.png differ diff --git a/graphics/pokemon/forretress/back.png b/graphics/pokemon/forretress/back.png index 851a6c24b..2eaf8358b 100644 Binary files a/graphics/pokemon/forretress/back.png and b/graphics/pokemon/forretress/back.png differ diff --git a/graphics/pokemon/forretress/icon.png b/graphics/pokemon/forretress/icon.png index 9ebe2dc70..b530cd30b 100644 Binary files a/graphics/pokemon/forretress/icon.png and b/graphics/pokemon/forretress/icon.png differ diff --git a/graphics/pokemon/fraxure/anim_front.png b/graphics/pokemon/fraxure/anim_front.png index 306c364af..de1d6b8da 100644 Binary files a/graphics/pokemon/fraxure/anim_front.png and b/graphics/pokemon/fraxure/anim_front.png differ diff --git a/graphics/pokemon/fraxure/back.png b/graphics/pokemon/fraxure/back.png index fe907a586..670c99a0e 100644 Binary files a/graphics/pokemon/fraxure/back.png and b/graphics/pokemon/fraxure/back.png differ diff --git a/graphics/pokemon/fraxure/icon.png b/graphics/pokemon/fraxure/icon.png index a84ac1882..f236df74e 100644 Binary files a/graphics/pokemon/fraxure/icon.png and b/graphics/pokemon/fraxure/icon.png differ diff --git a/graphics/pokemon/frillish/anim_front.png b/graphics/pokemon/frillish/anim_front.png index c0b2f7b65..161c4bfb1 100644 Binary files a/graphics/pokemon/frillish/anim_front.png and b/graphics/pokemon/frillish/anim_front.png differ diff --git a/graphics/pokemon/frillish/anim_frontf.png b/graphics/pokemon/frillish/anim_frontf.png index 08b6f534b..b3fa9621b 100644 Binary files a/graphics/pokemon/frillish/anim_frontf.png and b/graphics/pokemon/frillish/anim_frontf.png differ diff --git a/graphics/pokemon/frillish/back.png b/graphics/pokemon/frillish/back.png index 9649fcee2..ee17f90cd 100644 Binary files a/graphics/pokemon/frillish/back.png and b/graphics/pokemon/frillish/back.png differ diff --git a/graphics/pokemon/frillish/backf.png b/graphics/pokemon/frillish/backf.png index 17dd67954..fcfd88dce 100644 Binary files a/graphics/pokemon/frillish/backf.png and b/graphics/pokemon/frillish/backf.png differ diff --git a/graphics/pokemon/frillish/frontf.png b/graphics/pokemon/frillish/frontf.png index dd4c7bf78..88713ea3a 100644 Binary files a/graphics/pokemon/frillish/frontf.png and b/graphics/pokemon/frillish/frontf.png differ diff --git a/graphics/pokemon/frillish/icon.png b/graphics/pokemon/frillish/icon.png index 8e5f55c25..bc39a2ecd 100644 Binary files a/graphics/pokemon/frillish/icon.png and b/graphics/pokemon/frillish/icon.png differ diff --git a/graphics/pokemon/frillish/iconf.png b/graphics/pokemon/frillish/iconf.png index 2f98eb701..a0e102316 100644 Binary files a/graphics/pokemon/frillish/iconf.png and b/graphics/pokemon/frillish/iconf.png differ diff --git a/graphics/pokemon/froakie/anim_front.png b/graphics/pokemon/froakie/anim_front.png index a36793952..a47a62f1a 100644 Binary files a/graphics/pokemon/froakie/anim_front.png and b/graphics/pokemon/froakie/anim_front.png differ diff --git a/graphics/pokemon/froakie/back.png b/graphics/pokemon/froakie/back.png index daf4e1c4d..2bde92b01 100644 Binary files a/graphics/pokemon/froakie/back.png and b/graphics/pokemon/froakie/back.png differ diff --git a/graphics/pokemon/froakie/icon.png b/graphics/pokemon/froakie/icon.png index dcd77b253..620a02263 100644 Binary files a/graphics/pokemon/froakie/icon.png and b/graphics/pokemon/froakie/icon.png differ diff --git a/graphics/pokemon/frogadier/anim_front.png b/graphics/pokemon/frogadier/anim_front.png index 0c16f43f3..bf0d8a9a5 100644 Binary files a/graphics/pokemon/frogadier/anim_front.png and b/graphics/pokemon/frogadier/anim_front.png differ diff --git a/graphics/pokemon/frogadier/back.png b/graphics/pokemon/frogadier/back.png index 76ed262f0..a3bbaf380 100644 Binary files a/graphics/pokemon/frogadier/back.png and b/graphics/pokemon/frogadier/back.png differ diff --git a/graphics/pokemon/frogadier/icon.png b/graphics/pokemon/frogadier/icon.png index e9d47cb95..8c11e4625 100644 Binary files a/graphics/pokemon/frogadier/icon.png and b/graphics/pokemon/frogadier/icon.png differ diff --git a/graphics/pokemon/froslass/anim_front.png b/graphics/pokemon/froslass/anim_front.png index 27d7fe9ea..b6ef59fd4 100644 Binary files a/graphics/pokemon/froslass/anim_front.png and b/graphics/pokemon/froslass/anim_front.png differ diff --git a/graphics/pokemon/froslass/back.png b/graphics/pokemon/froslass/back.png index 4e2358e8b..b099da31d 100644 Binary files a/graphics/pokemon/froslass/back.png and b/graphics/pokemon/froslass/back.png differ diff --git a/graphics/pokemon/frosmoth/back.png b/graphics/pokemon/frosmoth/back.png index 9c474c549..5fed28bc8 100644 Binary files a/graphics/pokemon/frosmoth/back.png and b/graphics/pokemon/frosmoth/back.png differ diff --git a/graphics/pokemon/frosmoth/front.png b/graphics/pokemon/frosmoth/front.png index c74a4e108..b7c51781b 100644 Binary files a/graphics/pokemon/frosmoth/front.png and b/graphics/pokemon/frosmoth/front.png differ diff --git a/graphics/pokemon/frosmoth/icon.png b/graphics/pokemon/frosmoth/icon.png index cbf722057..3e71a143e 100644 Binary files a/graphics/pokemon/frosmoth/icon.png and b/graphics/pokemon/frosmoth/icon.png differ diff --git a/graphics/pokemon/furfrou/anim_front.png b/graphics/pokemon/furfrou/anim_front.png index fc7d27684..0cd320c89 100644 Binary files a/graphics/pokemon/furfrou/anim_front.png and b/graphics/pokemon/furfrou/anim_front.png differ diff --git a/graphics/pokemon/furfrou/back.png b/graphics/pokemon/furfrou/back.png index 11a41d92b..8ee8e13cd 100644 Binary files a/graphics/pokemon/furfrou/back.png and b/graphics/pokemon/furfrou/back.png differ diff --git a/graphics/pokemon/furfrou/dandy_trim/anim_front.png b/graphics/pokemon/furfrou/dandy_trim/anim_front.png index b8be74ead..a8395c443 100644 Binary files a/graphics/pokemon/furfrou/dandy_trim/anim_front.png and b/graphics/pokemon/furfrou/dandy_trim/anim_front.png differ diff --git a/graphics/pokemon/furfrou/dandy_trim/back.png b/graphics/pokemon/furfrou/dandy_trim/back.png index 9b6f592a4..7feb3479d 100644 Binary files a/graphics/pokemon/furfrou/dandy_trim/back.png and b/graphics/pokemon/furfrou/dandy_trim/back.png differ diff --git a/graphics/pokemon/furfrou/debutante_trim/anim_front.png b/graphics/pokemon/furfrou/debutante_trim/anim_front.png index 5c7060126..aa3a5489e 100644 Binary files a/graphics/pokemon/furfrou/debutante_trim/anim_front.png and b/graphics/pokemon/furfrou/debutante_trim/anim_front.png differ diff --git a/graphics/pokemon/furfrou/debutante_trim/back.png b/graphics/pokemon/furfrou/debutante_trim/back.png index 196f8fb59..ec2567514 100644 Binary files a/graphics/pokemon/furfrou/debutante_trim/back.png and b/graphics/pokemon/furfrou/debutante_trim/back.png differ diff --git a/graphics/pokemon/furfrou/diamond_trim/anim_front.png b/graphics/pokemon/furfrou/diamond_trim/anim_front.png index 87e277ac4..5db380075 100644 Binary files a/graphics/pokemon/furfrou/diamond_trim/anim_front.png and b/graphics/pokemon/furfrou/diamond_trim/anim_front.png differ diff --git a/graphics/pokemon/furfrou/diamond_trim/back.png b/graphics/pokemon/furfrou/diamond_trim/back.png index 5e0703088..f3f8ae713 100644 Binary files a/graphics/pokemon/furfrou/diamond_trim/back.png and b/graphics/pokemon/furfrou/diamond_trim/back.png differ diff --git a/graphics/pokemon/furfrou/heart_trim/anim_front.png b/graphics/pokemon/furfrou/heart_trim/anim_front.png index 6d2ad2ce3..5cbba5a5c 100644 Binary files a/graphics/pokemon/furfrou/heart_trim/anim_front.png and b/graphics/pokemon/furfrou/heart_trim/anim_front.png differ diff --git a/graphics/pokemon/furfrou/heart_trim/back.png b/graphics/pokemon/furfrou/heart_trim/back.png index 90a822eee..de6a03902 100644 Binary files a/graphics/pokemon/furfrou/heart_trim/back.png and b/graphics/pokemon/furfrou/heart_trim/back.png differ diff --git a/graphics/pokemon/furfrou/icon.png b/graphics/pokemon/furfrou/icon.png index 881ecdd6c..b192fe64d 100644 Binary files a/graphics/pokemon/furfrou/icon.png and b/graphics/pokemon/furfrou/icon.png differ diff --git a/graphics/pokemon/furfrou/kabuki_trim/anim_front.png b/graphics/pokemon/furfrou/kabuki_trim/anim_front.png index 7a547d926..9bcc9ea28 100644 Binary files a/graphics/pokemon/furfrou/kabuki_trim/anim_front.png and b/graphics/pokemon/furfrou/kabuki_trim/anim_front.png differ diff --git a/graphics/pokemon/furfrou/kabuki_trim/back.png b/graphics/pokemon/furfrou/kabuki_trim/back.png index 7a1e9738d..5904d6e41 100644 Binary files a/graphics/pokemon/furfrou/kabuki_trim/back.png and b/graphics/pokemon/furfrou/kabuki_trim/back.png differ diff --git a/graphics/pokemon/furfrou/la_reine_trim/anim_front.png b/graphics/pokemon/furfrou/la_reine_trim/anim_front.png index 927ff7220..441e12750 100644 Binary files a/graphics/pokemon/furfrou/la_reine_trim/anim_front.png and b/graphics/pokemon/furfrou/la_reine_trim/anim_front.png differ diff --git a/graphics/pokemon/furfrou/la_reine_trim/back.png b/graphics/pokemon/furfrou/la_reine_trim/back.png index e7b274f33..66c970346 100644 Binary files a/graphics/pokemon/furfrou/la_reine_trim/back.png and b/graphics/pokemon/furfrou/la_reine_trim/back.png differ diff --git a/graphics/pokemon/furfrou/matron_trim/anim_front.png b/graphics/pokemon/furfrou/matron_trim/anim_front.png index 43f66360b..8c3fb4149 100644 Binary files a/graphics/pokemon/furfrou/matron_trim/anim_front.png and b/graphics/pokemon/furfrou/matron_trim/anim_front.png differ diff --git a/graphics/pokemon/furfrou/matron_trim/back.png b/graphics/pokemon/furfrou/matron_trim/back.png index b942acd6c..c4d7eb117 100644 Binary files a/graphics/pokemon/furfrou/matron_trim/back.png and b/graphics/pokemon/furfrou/matron_trim/back.png differ diff --git a/graphics/pokemon/furfrou/pharaoh_trim/anim_front.png b/graphics/pokemon/furfrou/pharaoh_trim/anim_front.png index ede23cf38..a929542a8 100644 Binary files a/graphics/pokemon/furfrou/pharaoh_trim/anim_front.png and b/graphics/pokemon/furfrou/pharaoh_trim/anim_front.png differ diff --git a/graphics/pokemon/furfrou/pharaoh_trim/back.png b/graphics/pokemon/furfrou/pharaoh_trim/back.png index 2df3bc621..f0bfdcce3 100644 Binary files a/graphics/pokemon/furfrou/pharaoh_trim/back.png and b/graphics/pokemon/furfrou/pharaoh_trim/back.png differ diff --git a/graphics/pokemon/furfrou/star_trim/anim_front.png b/graphics/pokemon/furfrou/star_trim/anim_front.png index 2dea3113e..117946c45 100644 Binary files a/graphics/pokemon/furfrou/star_trim/anim_front.png and b/graphics/pokemon/furfrou/star_trim/anim_front.png differ diff --git a/graphics/pokemon/furfrou/star_trim/back.png b/graphics/pokemon/furfrou/star_trim/back.png index 8ae51bcee..1e4dd296f 100644 Binary files a/graphics/pokemon/furfrou/star_trim/back.png and b/graphics/pokemon/furfrou/star_trim/back.png differ diff --git a/graphics/pokemon/furret/back.png b/graphics/pokemon/furret/back.png index a559e340e..1f93600ab 100644 Binary files a/graphics/pokemon/furret/back.png and b/graphics/pokemon/furret/back.png differ diff --git a/graphics/pokemon/furret/icon.png b/graphics/pokemon/furret/icon.png index 0c3ff9a0d..64c93323a 100644 Binary files a/graphics/pokemon/furret/icon.png and b/graphics/pokemon/furret/icon.png differ diff --git a/graphics/pokemon/gabite/anim_front.png b/graphics/pokemon/gabite/anim_front.png index e919d96c9..da2701ab0 100644 Binary files a/graphics/pokemon/gabite/anim_front.png and b/graphics/pokemon/gabite/anim_front.png differ diff --git a/graphics/pokemon/gabite/back.png b/graphics/pokemon/gabite/back.png index 6e2acce52..9ee042e87 100644 Binary files a/graphics/pokemon/gabite/back.png and b/graphics/pokemon/gabite/back.png differ diff --git a/graphics/pokemon/gabite/icon.png b/graphics/pokemon/gabite/icon.png index 60f761019..8dc797008 100644 Binary files a/graphics/pokemon/gabite/icon.png and b/graphics/pokemon/gabite/icon.png differ diff --git a/graphics/pokemon/gallade/anim_front.png b/graphics/pokemon/gallade/anim_front.png index f0cc12f75..b2da036ff 100644 Binary files a/graphics/pokemon/gallade/anim_front.png and b/graphics/pokemon/gallade/anim_front.png differ diff --git a/graphics/pokemon/gallade/back.png b/graphics/pokemon/gallade/back.png index 83bf19775..4f7dfd542 100644 Binary files a/graphics/pokemon/gallade/back.png and b/graphics/pokemon/gallade/back.png differ diff --git a/graphics/pokemon/gallade/mega/back.png b/graphics/pokemon/gallade/mega/back.png index 5c19fd4a6..3e7e58a93 100644 Binary files a/graphics/pokemon/gallade/mega/back.png and b/graphics/pokemon/gallade/mega/back.png differ diff --git a/graphics/pokemon/gallade/mega/front.png b/graphics/pokemon/gallade/mega/front.png index 9ec7aef41..23b3bfc07 100644 Binary files a/graphics/pokemon/gallade/mega/front.png and b/graphics/pokemon/gallade/mega/front.png differ diff --git a/graphics/pokemon/gallade/mega/icon.png b/graphics/pokemon/gallade/mega/icon.png index 96673286b..65589b4a3 100644 Binary files a/graphics/pokemon/gallade/mega/icon.png and b/graphics/pokemon/gallade/mega/icon.png differ diff --git a/graphics/pokemon/galvantula/anim_front.png b/graphics/pokemon/galvantula/anim_front.png index 7369ad855..20b458676 100644 Binary files a/graphics/pokemon/galvantula/anim_front.png and b/graphics/pokemon/galvantula/anim_front.png differ diff --git a/graphics/pokemon/galvantula/icon.png b/graphics/pokemon/galvantula/icon.png index dabf742e9..81e82230a 100644 Binary files a/graphics/pokemon/galvantula/icon.png and b/graphics/pokemon/galvantula/icon.png differ diff --git a/graphics/pokemon/garbodor/anim_front.png b/graphics/pokemon/garbodor/anim_front.png index 81f91a5c1..b211c33cb 100644 Binary files a/graphics/pokemon/garbodor/anim_front.png and b/graphics/pokemon/garbodor/anim_front.png differ diff --git a/graphics/pokemon/garbodor/back.png b/graphics/pokemon/garbodor/back.png index c7ef6703f..d98c0f4c5 100644 Binary files a/graphics/pokemon/garbodor/back.png and b/graphics/pokemon/garbodor/back.png differ diff --git a/graphics/pokemon/garbodor/icon.png b/graphics/pokemon/garbodor/icon.png index ac39adb47..9b7124f7b 100644 Binary files a/graphics/pokemon/garbodor/icon.png and b/graphics/pokemon/garbodor/icon.png differ diff --git a/graphics/pokemon/garchomp/anim_front.png b/graphics/pokemon/garchomp/anim_front.png index 3edb7cfda..de7f101ea 100644 Binary files a/graphics/pokemon/garchomp/anim_front.png and b/graphics/pokemon/garchomp/anim_front.png differ diff --git a/graphics/pokemon/garchomp/back.png b/graphics/pokemon/garchomp/back.png index 00c123b4c..a44cf7c05 100644 Binary files a/graphics/pokemon/garchomp/back.png and b/graphics/pokemon/garchomp/back.png differ diff --git a/graphics/pokemon/garchomp/icon.png b/graphics/pokemon/garchomp/icon.png index 6ac4a936e..79303059c 100644 Binary files a/graphics/pokemon/garchomp/icon.png and b/graphics/pokemon/garchomp/icon.png differ diff --git a/graphics/pokemon/garchomp/mega/back.png b/graphics/pokemon/garchomp/mega/back.png index b79822363..e17e411a6 100644 Binary files a/graphics/pokemon/garchomp/mega/back.png and b/graphics/pokemon/garchomp/mega/back.png differ diff --git a/graphics/pokemon/garchomp/mega/front.png b/graphics/pokemon/garchomp/mega/front.png index a53092114..de618bc23 100644 Binary files a/graphics/pokemon/garchomp/mega/front.png and b/graphics/pokemon/garchomp/mega/front.png differ diff --git a/graphics/pokemon/garchomp/mega/icon.png b/graphics/pokemon/garchomp/mega/icon.png index 6bd5b44ed..4e37e0813 100644 Binary files a/graphics/pokemon/garchomp/mega/icon.png and b/graphics/pokemon/garchomp/mega/icon.png differ diff --git a/graphics/pokemon/gardevoir/anim_front.png b/graphics/pokemon/gardevoir/anim_front.png index c7593e9bb..2b539caee 100644 Binary files a/graphics/pokemon/gardevoir/anim_front.png and b/graphics/pokemon/gardevoir/anim_front.png differ diff --git a/graphics/pokemon/gardevoir/back.png b/graphics/pokemon/gardevoir/back.png index 1c3630757..04fbe3d3d 100644 Binary files a/graphics/pokemon/gardevoir/back.png and b/graphics/pokemon/gardevoir/back.png differ diff --git a/graphics/pokemon/gardevoir/icon.png b/graphics/pokemon/gardevoir/icon.png index 102b95035..4b8a20d4c 100644 Binary files a/graphics/pokemon/gardevoir/icon.png and b/graphics/pokemon/gardevoir/icon.png differ diff --git a/graphics/pokemon/gardevoir/mega/back.png b/graphics/pokemon/gardevoir/mega/back.png index a0d4895db..be02d9f08 100644 Binary files a/graphics/pokemon/gardevoir/mega/back.png and b/graphics/pokemon/gardevoir/mega/back.png differ diff --git a/graphics/pokemon/gardevoir/mega/front.png b/graphics/pokemon/gardevoir/mega/front.png index 76579f496..c4edbffb7 100644 Binary files a/graphics/pokemon/gardevoir/mega/front.png and b/graphics/pokemon/gardevoir/mega/front.png differ diff --git a/graphics/pokemon/gardevoir/mega/icon.png b/graphics/pokemon/gardevoir/mega/icon.png index 8bb9edb83..0483a2012 100644 Binary files a/graphics/pokemon/gardevoir/mega/icon.png and b/graphics/pokemon/gardevoir/mega/icon.png differ diff --git a/graphics/pokemon/gastly/back.png b/graphics/pokemon/gastly/back.png index c0a3f90db..07971e3c4 100644 Binary files a/graphics/pokemon/gastly/back.png and b/graphics/pokemon/gastly/back.png differ diff --git a/graphics/pokemon/gastrodon/anim_front.png b/graphics/pokemon/gastrodon/anim_front.png index da180d70d..c47a0e86b 100644 Binary files a/graphics/pokemon/gastrodon/anim_front.png and b/graphics/pokemon/gastrodon/anim_front.png differ diff --git a/graphics/pokemon/gastrodon/back.png b/graphics/pokemon/gastrodon/back.png index df96289d5..a20c30c77 100644 Binary files a/graphics/pokemon/gastrodon/back.png and b/graphics/pokemon/gastrodon/back.png differ diff --git a/graphics/pokemon/gastrodon/east_sea/anim_front.png b/graphics/pokemon/gastrodon/east_sea/anim_front.png index e0c842553..6e8ab451b 100644 Binary files a/graphics/pokemon/gastrodon/east_sea/anim_front.png and b/graphics/pokemon/gastrodon/east_sea/anim_front.png differ diff --git a/graphics/pokemon/gastrodon/east_sea/back.png b/graphics/pokemon/gastrodon/east_sea/back.png index fdad65c07..f200a3997 100644 Binary files a/graphics/pokemon/gastrodon/east_sea/back.png and b/graphics/pokemon/gastrodon/east_sea/back.png differ diff --git a/graphics/pokemon/gastrodon/icon.png b/graphics/pokemon/gastrodon/icon.png index a79ebcc7b..9f439b608 100644 Binary files a/graphics/pokemon/gastrodon/icon.png and b/graphics/pokemon/gastrodon/icon.png differ diff --git a/graphics/pokemon/genesect/anim_front.png b/graphics/pokemon/genesect/anim_front.png index c07c0369d..b83f0d786 100644 Binary files a/graphics/pokemon/genesect/anim_front.png and b/graphics/pokemon/genesect/anim_front.png differ diff --git a/graphics/pokemon/genesect/back.png b/graphics/pokemon/genesect/back.png index c1284527e..f92294faf 100644 Binary files a/graphics/pokemon/genesect/back.png and b/graphics/pokemon/genesect/back.png differ diff --git a/graphics/pokemon/gengar/back.png b/graphics/pokemon/gengar/back.png index 3b4b09063..de0fa6599 100644 Binary files a/graphics/pokemon/gengar/back.png and b/graphics/pokemon/gengar/back.png differ diff --git a/graphics/pokemon/gengar/icon.png b/graphics/pokemon/gengar/icon.png index 49f1694ca..8787922a2 100644 Binary files a/graphics/pokemon/gengar/icon.png and b/graphics/pokemon/gengar/icon.png differ diff --git a/graphics/pokemon/gengar/mega/back.png b/graphics/pokemon/gengar/mega/back.png index 70c320f5f..6cf90ad66 100644 Binary files a/graphics/pokemon/gengar/mega/back.png and b/graphics/pokemon/gengar/mega/back.png differ diff --git a/graphics/pokemon/gengar/mega/front.png b/graphics/pokemon/gengar/mega/front.png index ff33ead96..f7aa3c2db 100644 Binary files a/graphics/pokemon/gengar/mega/front.png and b/graphics/pokemon/gengar/mega/front.png differ diff --git a/graphics/pokemon/gengar/mega/icon.png b/graphics/pokemon/gengar/mega/icon.png index 67744b611..b81c2a976 100644 Binary files a/graphics/pokemon/gengar/mega/icon.png and b/graphics/pokemon/gengar/mega/icon.png differ diff --git a/graphics/pokemon/geodude/alolan/back.png b/graphics/pokemon/geodude/alolan/back.png index 188a3d184..b82b575e9 100644 Binary files a/graphics/pokemon/geodude/alolan/back.png and b/graphics/pokemon/geodude/alolan/back.png differ diff --git a/graphics/pokemon/geodude/alolan/front.png b/graphics/pokemon/geodude/alolan/front.png index 3b7000c8b..2b038e329 100644 Binary files a/graphics/pokemon/geodude/alolan/front.png and b/graphics/pokemon/geodude/alolan/front.png differ diff --git a/graphics/pokemon/geodude/alolan/icon.png b/graphics/pokemon/geodude/alolan/icon.png index f52d114ba..1a5f96997 100644 Binary files a/graphics/pokemon/geodude/alolan/icon.png and b/graphics/pokemon/geodude/alolan/icon.png differ diff --git a/graphics/pokemon/geodude/anim_front.png b/graphics/pokemon/geodude/anim_front.png index 233ace81d..bec411d1e 100644 Binary files a/graphics/pokemon/geodude/anim_front.png and b/graphics/pokemon/geodude/anim_front.png differ diff --git a/graphics/pokemon/geodude/back.png b/graphics/pokemon/geodude/back.png index d24ae825c..6aba658f6 100644 Binary files a/graphics/pokemon/geodude/back.png and b/graphics/pokemon/geodude/back.png differ diff --git a/graphics/pokemon/geodude/icon.png b/graphics/pokemon/geodude/icon.png index ea8728d69..2e762a118 100644 Binary files a/graphics/pokemon/geodude/icon.png and b/graphics/pokemon/geodude/icon.png differ diff --git a/graphics/pokemon/geodude/normal.pal b/graphics/pokemon/geodude/normal.pal index 29e9e7409..e484e9695 100644 --- a/graphics/pokemon/geodude/normal.pal +++ b/graphics/pokemon/geodude/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -106 106 82 -65 57 49 -197 213 172 -180 180 156 -156 148 131 +152 160 208 16 16 16 -205 222 205 +65 57 49 +106 106 82 +156 148 131 +180 180 156 +197 213 172 +123 24 32 +197 49 49 +230 74 65 255 255 255 -56 40 56 -136 16 16 -232 128 120 -0 0 0 +205 222 205 +148 156 156 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/geodude/shiny.pal b/graphics/pokemon/geodude/shiny.pal index be09a9dc1..0e259715a 100644 --- a/graphics/pokemon/geodude/shiny.pal +++ b/graphics/pokemon/geodude/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 120 32 -136 72 24 -248 240 96 -240 200 56 -208 152 40 16 16 16 -200 216 200 -248 248 248 -56 40 56 -122 36 43 -229 96 89 -0 0 0 +156 65 0 +189 115 0 +213 148 0 +246 197 8 +255 238 49 +123 24 32 +197 49 49 +230 74 65 +255 255 255 +205 222 205 +148 156 156 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/gible/back.png b/graphics/pokemon/gible/back.png index 26e709660..6f17dd4eb 100644 Binary files a/graphics/pokemon/gible/back.png and b/graphics/pokemon/gible/back.png differ diff --git a/graphics/pokemon/gible/icon.png b/graphics/pokemon/gible/icon.png index f3b544694..3303792f5 100644 Binary files a/graphics/pokemon/gible/icon.png and b/graphics/pokemon/gible/icon.png differ diff --git a/graphics/pokemon/gigalith/anim_front.png b/graphics/pokemon/gigalith/anim_front.png index f336271a4..67f9a51f2 100644 Binary files a/graphics/pokemon/gigalith/anim_front.png and b/graphics/pokemon/gigalith/anim_front.png differ diff --git a/graphics/pokemon/gigalith/back.png b/graphics/pokemon/gigalith/back.png index 9d02388fd..286840851 100644 Binary files a/graphics/pokemon/gigalith/back.png and b/graphics/pokemon/gigalith/back.png differ diff --git a/graphics/pokemon/gigalith/icon.png b/graphics/pokemon/gigalith/icon.png index ebaf96ac4..f7f0efb6c 100644 Binary files a/graphics/pokemon/gigalith/icon.png and b/graphics/pokemon/gigalith/icon.png differ diff --git a/graphics/pokemon/girafarig/anim_front.png b/graphics/pokemon/girafarig/anim_front.png index 6f3bf1c69..d39510467 100644 Binary files a/graphics/pokemon/girafarig/anim_front.png and b/graphics/pokemon/girafarig/anim_front.png differ diff --git a/graphics/pokemon/girafarig/icon.png b/graphics/pokemon/girafarig/icon.png index 664866b3b..b41227536 100644 Binary files a/graphics/pokemon/girafarig/icon.png and b/graphics/pokemon/girafarig/icon.png differ diff --git a/graphics/pokemon/giratina/anim_front.png b/graphics/pokemon/giratina/anim_front.png index 03f038984..af1332ed5 100644 Binary files a/graphics/pokemon/giratina/anim_front.png and b/graphics/pokemon/giratina/anim_front.png differ diff --git a/graphics/pokemon/giratina/back.png b/graphics/pokemon/giratina/back.png index 19d95ae65..32a960d16 100644 Binary files a/graphics/pokemon/giratina/back.png and b/graphics/pokemon/giratina/back.png differ diff --git a/graphics/pokemon/giratina/origin/anim_front.png b/graphics/pokemon/giratina/origin/anim_front.png index 1a8dbcf5c..8dd5d89a0 100644 Binary files a/graphics/pokemon/giratina/origin/anim_front.png and b/graphics/pokemon/giratina/origin/anim_front.png differ diff --git a/graphics/pokemon/giratina/origin/back.png b/graphics/pokemon/giratina/origin/back.png index 5871665df..528ef6fbe 100644 Binary files a/graphics/pokemon/giratina/origin/back.png and b/graphics/pokemon/giratina/origin/back.png differ diff --git a/graphics/pokemon/giratina/origin/icon.png b/graphics/pokemon/giratina/origin/icon.png index 721fbd0a0..e6f4c03f3 100644 Binary files a/graphics/pokemon/giratina/origin/icon.png and b/graphics/pokemon/giratina/origin/icon.png differ diff --git a/graphics/pokemon/glaceon/anim_front.png b/graphics/pokemon/glaceon/anim_front.png index c0e5a13c3..a175e8a43 100644 Binary files a/graphics/pokemon/glaceon/anim_front.png and b/graphics/pokemon/glaceon/anim_front.png differ diff --git a/graphics/pokemon/glaceon/icon.png b/graphics/pokemon/glaceon/icon.png index bfb410eca..32f8504be 100644 Binary files a/graphics/pokemon/glaceon/icon.png and b/graphics/pokemon/glaceon/icon.png differ diff --git a/graphics/pokemon/glalie/anim_front.png b/graphics/pokemon/glalie/anim_front.png index b2a9b9a3c..4b05ec51d 100644 Binary files a/graphics/pokemon/glalie/anim_front.png and b/graphics/pokemon/glalie/anim_front.png differ diff --git a/graphics/pokemon/glalie/back.png b/graphics/pokemon/glalie/back.png index 253d76ec8..51fe32488 100644 Binary files a/graphics/pokemon/glalie/back.png and b/graphics/pokemon/glalie/back.png differ diff --git a/graphics/pokemon/glalie/icon.png b/graphics/pokemon/glalie/icon.png index e45f0ffee..9d2426c92 100644 Binary files a/graphics/pokemon/glalie/icon.png and b/graphics/pokemon/glalie/icon.png differ diff --git a/graphics/pokemon/glalie/mega/back.png b/graphics/pokemon/glalie/mega/back.png index f074b39f7..9b8681397 100644 Binary files a/graphics/pokemon/glalie/mega/back.png and b/graphics/pokemon/glalie/mega/back.png differ diff --git a/graphics/pokemon/glalie/mega/front.png b/graphics/pokemon/glalie/mega/front.png index d9572f11a..9e7e9a73c 100644 Binary files a/graphics/pokemon/glalie/mega/front.png and b/graphics/pokemon/glalie/mega/front.png differ diff --git a/graphics/pokemon/glalie/mega/icon.png b/graphics/pokemon/glalie/mega/icon.png index df4e3a7f4..d563426c4 100644 Binary files a/graphics/pokemon/glalie/mega/icon.png and b/graphics/pokemon/glalie/mega/icon.png differ diff --git a/graphics/pokemon/glameow/anim_front.png b/graphics/pokemon/glameow/anim_front.png index b912978b2..d03df5738 100644 Binary files a/graphics/pokemon/glameow/anim_front.png and b/graphics/pokemon/glameow/anim_front.png differ diff --git a/graphics/pokemon/glameow/back.png b/graphics/pokemon/glameow/back.png index e3cb32ea1..eea86135e 100644 Binary files a/graphics/pokemon/glameow/back.png and b/graphics/pokemon/glameow/back.png differ diff --git a/graphics/pokemon/glameow/icon.png b/graphics/pokemon/glameow/icon.png index 628dfdbaa..ba3844f56 100644 Binary files a/graphics/pokemon/glameow/icon.png and b/graphics/pokemon/glameow/icon.png differ diff --git a/graphics/pokemon/glastrier/back.png b/graphics/pokemon/glastrier/back.png index a68b81d74..2b1055d00 100644 Binary files a/graphics/pokemon/glastrier/back.png and b/graphics/pokemon/glastrier/back.png differ diff --git a/graphics/pokemon/glastrier/front.png b/graphics/pokemon/glastrier/front.png index 7466704aa..0822a4940 100644 Binary files a/graphics/pokemon/glastrier/front.png and b/graphics/pokemon/glastrier/front.png differ diff --git a/graphics/pokemon/glastrier/icon.png b/graphics/pokemon/glastrier/icon.png index c0c826c35..98bfdc8b4 100644 Binary files a/graphics/pokemon/glastrier/icon.png and b/graphics/pokemon/glastrier/icon.png differ diff --git a/graphics/pokemon/gligar/back.png b/graphics/pokemon/gligar/back.png index 49b0f06da..c9eba6622 100644 Binary files a/graphics/pokemon/gligar/back.png and b/graphics/pokemon/gligar/back.png differ diff --git a/graphics/pokemon/gligar/icon.png b/graphics/pokemon/gligar/icon.png index 3e7a4b5d6..6b371184e 100644 Binary files a/graphics/pokemon/gligar/icon.png and b/graphics/pokemon/gligar/icon.png differ diff --git a/graphics/pokemon/gliscor/anim_front.png b/graphics/pokemon/gliscor/anim_front.png index 7c7be3dfb..8c12ed4ef 100644 Binary files a/graphics/pokemon/gliscor/anim_front.png and b/graphics/pokemon/gliscor/anim_front.png differ diff --git a/graphics/pokemon/gliscor/back.png b/graphics/pokemon/gliscor/back.png index d674dc876..f98708773 100644 Binary files a/graphics/pokemon/gliscor/back.png and b/graphics/pokemon/gliscor/back.png differ diff --git a/graphics/pokemon/gloom/anim_front.png b/graphics/pokemon/gloom/anim_front.png index eae8b8e89..4ad5cb643 100644 Binary files a/graphics/pokemon/gloom/anim_front.png and b/graphics/pokemon/gloom/anim_front.png differ diff --git a/graphics/pokemon/gloom/anim_frontf.png b/graphics/pokemon/gloom/anim_frontf.png index 00203a392..c2cfc5551 100644 Binary files a/graphics/pokemon/gloom/anim_frontf.png and b/graphics/pokemon/gloom/anim_frontf.png differ diff --git a/graphics/pokemon/gloom/back.png b/graphics/pokemon/gloom/back.png index 52d9ccf99..e1d47e9b1 100644 Binary files a/graphics/pokemon/gloom/back.png and b/graphics/pokemon/gloom/back.png differ diff --git a/graphics/pokemon/gloom/backf.png b/graphics/pokemon/gloom/backf.png index 6f6bb3bcf..8b57986c9 100644 Binary files a/graphics/pokemon/gloom/backf.png and b/graphics/pokemon/gloom/backf.png differ diff --git a/graphics/pokemon/gloom/icon.png b/graphics/pokemon/gloom/icon.png index ceb8e1684..2602bf2d5 100644 Binary files a/graphics/pokemon/gloom/icon.png and b/graphics/pokemon/gloom/icon.png differ diff --git a/graphics/pokemon/gloom/normal.pal b/graphics/pokemon/gloom/normal.pal index 6d66df35c..0400114f3 100644 --- a/graphics/pokemon/gloom/normal.pal +++ b/graphics/pokemon/gloom/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 40 0 -131 57 24 -205 115 74 -172 82 57 -16 16 16 +246 238 189 255 189 65 255 115 0 -240 232 184 197 115 41 139 57 24 -74 106 123 -16 49 74 -123 131 164 +205 115 74 +172 82 57 +131 57 24 +90 41 0 180 90 197 156 164 205 +123 131 164 +74 106 123 +16 49 74 +16 16 16 diff --git a/graphics/pokemon/gloom/shiny.pal b/graphics/pokemon/gloom/shiny.pal index d9714b7ba..50af6341d 100644 --- a/graphics/pokemon/gloom/shiny.pal +++ b/graphics/pokemon/gloom/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -112 64 0 -136 104 32 -240 216 128 -184 136 64 +152 160 208 +246 238 189 +246 213 106 +230 172 65 +164 123 24 +123 74 0 +230 180 106 +189 139 65 +139 106 24 +115 65 0 +222 123 32 +180 222 139 +148 180 82 +82 123 32 +41 82 8 16 16 16 -240 216 128 -216 168 80 -240 232 184 -160 120 40 -120 72 0 -80 112 40 -48 80 24 -144 168 88 -216 136 64 -176 216 136 diff --git a/graphics/pokemon/gogoat/anim_front.png b/graphics/pokemon/gogoat/anim_front.png index 88a5a742b..8ab08d5fd 100644 Binary files a/graphics/pokemon/gogoat/anim_front.png and b/graphics/pokemon/gogoat/anim_front.png differ diff --git a/graphics/pokemon/gogoat/back.png b/graphics/pokemon/gogoat/back.png index de3025022..47240bf6a 100644 Binary files a/graphics/pokemon/gogoat/back.png and b/graphics/pokemon/gogoat/back.png differ diff --git a/graphics/pokemon/gogoat/icon.png b/graphics/pokemon/gogoat/icon.png index a335ebb25..d42596a3f 100644 Binary files a/graphics/pokemon/gogoat/icon.png and b/graphics/pokemon/gogoat/icon.png differ diff --git a/graphics/pokemon/golbat/anim_front.png b/graphics/pokemon/golbat/anim_front.png index 411cafc61..73d663e82 100644 Binary files a/graphics/pokemon/golbat/anim_front.png and b/graphics/pokemon/golbat/anim_front.png differ diff --git a/graphics/pokemon/golbat/anim_frontf.png b/graphics/pokemon/golbat/anim_frontf.png index b90cc8e7c..a4e223a12 100644 Binary files a/graphics/pokemon/golbat/anim_frontf.png and b/graphics/pokemon/golbat/anim_frontf.png differ diff --git a/graphics/pokemon/golbat/back.png b/graphics/pokemon/golbat/back.png index 192fc0409..78275bb27 100644 Binary files a/graphics/pokemon/golbat/back.png and b/graphics/pokemon/golbat/back.png differ diff --git a/graphics/pokemon/golbat/backf.png b/graphics/pokemon/golbat/backf.png index 2518aca81..56b0d7a9f 100644 Binary files a/graphics/pokemon/golbat/backf.png and b/graphics/pokemon/golbat/backf.png differ diff --git a/graphics/pokemon/golbat/icon.png b/graphics/pokemon/golbat/icon.png index 9fdcf04ac..531b5bf78 100644 Binary files a/graphics/pokemon/golbat/icon.png and b/graphics/pokemon/golbat/icon.png differ diff --git a/graphics/pokemon/golbat/normal.pal b/graphics/pokemon/golbat/normal.pal index 048e118a7..d10763584 100644 --- a/graphics/pokemon/golbat/normal.pal +++ b/graphics/pokemon/golbat/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -98 131 205 -57 57 123 +255 255 255 +213 213 213 +98 98 98 0 0 0 172 205 255 90 172 238 +98 131 205 +57 57 123 +205 106 180 172 82 172 148 57 123 98 16 82 -205 106 180 -98 98 98 -213 213 213 -255 255 255 -0 0 0 -0 0 0 -0 0 0 +255 0 255 +255 0 255 +255 0 255 diff --git a/graphics/pokemon/golbat/shiny.pal b/graphics/pokemon/golbat/shiny.pal index 78263a17a..8260295cf 100644 --- a/graphics/pokemon/golbat/shiny.pal +++ b/graphics/pokemon/golbat/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -56 112 16 -16 72 8 -16 16 16 -136 208 88 -112 152 56 -200 120 128 -184 88 96 -168 48 56 -224 176 168 -96 96 96 -208 208 208 -248 248 248 -96 96 96 -0 0 0 +152 160 208 +255 255 255 +213 213 213 +98 98 98 0 0 0 +131 213 74 +106 156 41 +49 115 0 +8 74 0 +255 172 164 +230 115 123 +213 82 90 +197 41 49 +255 0 255 +255 0 255 +255 0 255 diff --git a/graphics/pokemon/goldeen/anim_front.png b/graphics/pokemon/goldeen/anim_front.png index 68ac8d608..327ab59c3 100644 Binary files a/graphics/pokemon/goldeen/anim_front.png and b/graphics/pokemon/goldeen/anim_front.png differ diff --git a/graphics/pokemon/goldeen/back.png b/graphics/pokemon/goldeen/back.png index 5f24eaf3d..1ebf065d8 100644 Binary files a/graphics/pokemon/goldeen/back.png and b/graphics/pokemon/goldeen/back.png differ diff --git a/graphics/pokemon/goldeen/icon.png b/graphics/pokemon/goldeen/icon.png index b4dd2b0f1..705e8265d 100644 Binary files a/graphics/pokemon/goldeen/icon.png and b/graphics/pokemon/goldeen/icon.png differ diff --git a/graphics/pokemon/golduck/anim_front.png b/graphics/pokemon/golduck/anim_front.png index 9274e4ff6..4490ae184 100644 Binary files a/graphics/pokemon/golduck/anim_front.png and b/graphics/pokemon/golduck/anim_front.png differ diff --git a/graphics/pokemon/golduck/back.png b/graphics/pokemon/golduck/back.png index 1e1b774cb..79c8b611b 100644 Binary files a/graphics/pokemon/golduck/back.png and b/graphics/pokemon/golduck/back.png differ diff --git a/graphics/pokemon/golduck/icon.png b/graphics/pokemon/golduck/icon.png index c143344eb..af822e3f0 100644 Binary files a/graphics/pokemon/golduck/icon.png and b/graphics/pokemon/golduck/icon.png differ diff --git a/graphics/pokemon/golduck/normal.pal b/graphics/pokemon/golduck/normal.pal index 9caf6c3b4..63a96f8cf 100644 --- a/graphics/pokemon/golduck/normal.pal +++ b/graphics/pokemon/golduck/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -49 82 106 -139 172 213 -16 16 16 -123 123 180 -222 24 24 255 255 255 -139 0 0 -255 172 172 213 213 213 -115 106 16 -255 255 164 -164 164 57 -213 213 106 +240 104 104 +222 24 24 139 0 0 -160 216 248 +255 255 164 +213 213 106 +164 164 57 +115 106 16 +255 0 255 +164 197 255 +139 172 213 +123 123 180 +49 82 106 +16 16 16 diff --git a/graphics/pokemon/golduck/shiny.pal b/graphics/pokemon/golduck/shiny.pal index 34873747f..ee2de391e 100644 --- a/graphics/pokemon/golduck/shiny.pal +++ b/graphics/pokemon/golduck/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 80 136 -112 184 248 +255 255 255 +213 213 213 +255 172 172 +222 24 24 +139 0 0 +255 197 197 +246 148 148 +230 115 123 +152 64 64 +255 0 255 +148 222 255 +106 180 255 +98 123 213 +56 80 104 16 16 16 -96 120 200 -216 64 64 -248 248 248 -136 40 24 -248 168 168 -208 208 208 -184 104 104 -248 200 200 -216 112 120 -232 152 152 -136 40 24 -144 216 248 diff --git a/graphics/pokemon/golem/alolan/back.png b/graphics/pokemon/golem/alolan/back.png index 546ccea26..bda1dfaa6 100644 Binary files a/graphics/pokemon/golem/alolan/back.png and b/graphics/pokemon/golem/alolan/back.png differ diff --git a/graphics/pokemon/golem/alolan/front.png b/graphics/pokemon/golem/alolan/front.png index 8f351ae28..7d9b99749 100644 Binary files a/graphics/pokemon/golem/alolan/front.png and b/graphics/pokemon/golem/alolan/front.png differ diff --git a/graphics/pokemon/golem/alolan/icon.png b/graphics/pokemon/golem/alolan/icon.png index 55b065b91..e796f8884 100644 Binary files a/graphics/pokemon/golem/alolan/icon.png and b/graphics/pokemon/golem/alolan/icon.png differ diff --git a/graphics/pokemon/golem/anim_front.png b/graphics/pokemon/golem/anim_front.png index d9aebe612..b40b3edff 100644 Binary files a/graphics/pokemon/golem/anim_front.png and b/graphics/pokemon/golem/anim_front.png differ diff --git a/graphics/pokemon/golem/back.png b/graphics/pokemon/golem/back.png index 0dadea5aa..febc2ab3d 100644 Binary files a/graphics/pokemon/golem/back.png and b/graphics/pokemon/golem/back.png differ diff --git a/graphics/pokemon/golem/icon.png b/graphics/pokemon/golem/icon.png index 946ced50c..f5be79e19 100644 Binary files a/graphics/pokemon/golem/icon.png and b/graphics/pokemon/golem/icon.png differ diff --git a/graphics/pokemon/golem/normal.pal b/graphics/pokemon/golem/normal.pal index 0006a7dca..afe12d63b 100644 --- a/graphics/pokemon/golem/normal.pal +++ b/graphics/pokemon/golem/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -65 74 16 +152 160 208 +255 255 255 +205 205 205 +115 115 115 +255 82 82 +180 0 0 +180 189 98 139 148 65 98 106 32 -180 189 98 -16 16 16 -115 115 115 -255 255 255 -90 74 16 -205 205 205 +65 74 16 +246 222 139 213 180 90 156 139 82 -246 222 139 -180 0 0 -255 82 82 -168 32 0 +90 74 16 +255 0 255 +16 16 16 diff --git a/graphics/pokemon/golem/shiny.pal b/graphics/pokemon/golem/shiny.pal index f9556290d..ebc6e44a2 100644 --- a/graphics/pokemon/golem/shiny.pal +++ b/graphics/pokemon/golem/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 56 8 -176 136 48 -144 96 16 -208 168 80 +255 255 255 +205 205 205 +115 115 115 +255 82 82 +180 0 0 +213 172 82 +180 139 49 +148 98 8 +115 57 0 +238 222 197 +230 205 164 +197 156 123 +139 98 74 +255 0 255 16 16 16 -112 112 112 -248 248 248 -136 96 72 -200 200 200 -224 200 160 -192 152 120 -232 216 192 -176 32 32 -248 104 104 -176 32 32 diff --git a/graphics/pokemon/golett/anim_front.png b/graphics/pokemon/golett/anim_front.png index fdefe4a81..3f096e4a4 100644 Binary files a/graphics/pokemon/golett/anim_front.png and b/graphics/pokemon/golett/anim_front.png differ diff --git a/graphics/pokemon/golisopod/back.png b/graphics/pokemon/golisopod/back.png index 646fc3ac8..2099224d8 100644 Binary files a/graphics/pokemon/golisopod/back.png and b/graphics/pokemon/golisopod/back.png differ diff --git a/graphics/pokemon/golisopod/icon.png b/graphics/pokemon/golisopod/icon.png index 97affc58d..37ee08049 100644 Binary files a/graphics/pokemon/golisopod/icon.png and b/graphics/pokemon/golisopod/icon.png differ diff --git a/graphics/pokemon/golurk/anim_front.png b/graphics/pokemon/golurk/anim_front.png index f47f52681..fe862d33f 100644 Binary files a/graphics/pokemon/golurk/anim_front.png and b/graphics/pokemon/golurk/anim_front.png differ diff --git a/graphics/pokemon/golurk/back.png b/graphics/pokemon/golurk/back.png index bbf389881..f93e3816b 100644 Binary files a/graphics/pokemon/golurk/back.png and b/graphics/pokemon/golurk/back.png differ diff --git a/graphics/pokemon/golurk/icon.png b/graphics/pokemon/golurk/icon.png index 1ac0ca0c9..58f72088d 100644 Binary files a/graphics/pokemon/golurk/icon.png and b/graphics/pokemon/golurk/icon.png differ diff --git a/graphics/pokemon/goodra/anim_front.png b/graphics/pokemon/goodra/anim_front.png index 253eb0597..80a42871a 100644 Binary files a/graphics/pokemon/goodra/anim_front.png and b/graphics/pokemon/goodra/anim_front.png differ diff --git a/graphics/pokemon/goodra/back.png b/graphics/pokemon/goodra/back.png index 128e1a088..7d1069bfd 100644 Binary files a/graphics/pokemon/goodra/back.png and b/graphics/pokemon/goodra/back.png differ diff --git a/graphics/pokemon/goodra/hisuian/icon.png b/graphics/pokemon/goodra/hisuian/icon.png index 194f5d252..321685434 100644 Binary files a/graphics/pokemon/goodra/hisuian/icon.png and b/graphics/pokemon/goodra/hisuian/icon.png differ diff --git a/graphics/pokemon/goodra/icon.png b/graphics/pokemon/goodra/icon.png index 1085a8d6b..56271cfd8 100644 Binary files a/graphics/pokemon/goodra/icon.png and b/graphics/pokemon/goodra/icon.png differ diff --git a/graphics/pokemon/goomy/anim_front.png b/graphics/pokemon/goomy/anim_front.png index 7228a81f9..eb1e29d61 100644 Binary files a/graphics/pokemon/goomy/anim_front.png and b/graphics/pokemon/goomy/anim_front.png differ diff --git a/graphics/pokemon/goomy/back.png b/graphics/pokemon/goomy/back.png index bc8d71ac2..33ea4fb84 100644 Binary files a/graphics/pokemon/goomy/back.png and b/graphics/pokemon/goomy/back.png differ diff --git a/graphics/pokemon/goomy/icon.png b/graphics/pokemon/goomy/icon.png index b10236973..ba91dea29 100644 Binary files a/graphics/pokemon/goomy/icon.png and b/graphics/pokemon/goomy/icon.png differ diff --git a/graphics/pokemon/gorebyss/anim_front.png b/graphics/pokemon/gorebyss/anim_front.png index f0a928967..b5a4ffcfe 100644 Binary files a/graphics/pokemon/gorebyss/anim_front.png and b/graphics/pokemon/gorebyss/anim_front.png differ diff --git a/graphics/pokemon/gorebyss/back.png b/graphics/pokemon/gorebyss/back.png index 98fc436fd..c723ca667 100644 Binary files a/graphics/pokemon/gorebyss/back.png and b/graphics/pokemon/gorebyss/back.png differ diff --git a/graphics/pokemon/gorebyss/icon.png b/graphics/pokemon/gorebyss/icon.png index e43f42c6d..5b4fd157e 100644 Binary files a/graphics/pokemon/gorebyss/icon.png and b/graphics/pokemon/gorebyss/icon.png differ diff --git a/graphics/pokemon/gossifleur/back.png b/graphics/pokemon/gossifleur/back.png index f6e92ceed..7fb572176 100644 Binary files a/graphics/pokemon/gossifleur/back.png and b/graphics/pokemon/gossifleur/back.png differ diff --git a/graphics/pokemon/gossifleur/front.png b/graphics/pokemon/gossifleur/front.png index e0a58bcd5..a9d84f1c9 100644 Binary files a/graphics/pokemon/gossifleur/front.png and b/graphics/pokemon/gossifleur/front.png differ diff --git a/graphics/pokemon/gossifleur/icon.png b/graphics/pokemon/gossifleur/icon.png index 37e57fd69..74446ed5d 100644 Binary files a/graphics/pokemon/gossifleur/icon.png and b/graphics/pokemon/gossifleur/icon.png differ diff --git a/graphics/pokemon/gothita/anim_front.png b/graphics/pokemon/gothita/anim_front.png index 0e70c4e2e..32e68ddf4 100644 Binary files a/graphics/pokemon/gothita/anim_front.png and b/graphics/pokemon/gothita/anim_front.png differ diff --git a/graphics/pokemon/gothita/back.png b/graphics/pokemon/gothita/back.png index f1fca9d20..dc44067ea 100644 Binary files a/graphics/pokemon/gothita/back.png and b/graphics/pokemon/gothita/back.png differ diff --git a/graphics/pokemon/gothitelle/anim_front.png b/graphics/pokemon/gothitelle/anim_front.png index c227db141..e4ae46937 100644 Binary files a/graphics/pokemon/gothitelle/anim_front.png and b/graphics/pokemon/gothitelle/anim_front.png differ diff --git a/graphics/pokemon/gothitelle/back.png b/graphics/pokemon/gothitelle/back.png index 45e22841b..bcc8ebdba 100644 Binary files a/graphics/pokemon/gothitelle/back.png and b/graphics/pokemon/gothitelle/back.png differ diff --git a/graphics/pokemon/gothitelle/icon.png b/graphics/pokemon/gothitelle/icon.png index 6c619ae62..bc96d2720 100644 Binary files a/graphics/pokemon/gothitelle/icon.png and b/graphics/pokemon/gothitelle/icon.png differ diff --git a/graphics/pokemon/gothorita/anim_front.png b/graphics/pokemon/gothorita/anim_front.png index c2b5524f0..c58ba1a19 100644 Binary files a/graphics/pokemon/gothorita/anim_front.png and b/graphics/pokemon/gothorita/anim_front.png differ diff --git a/graphics/pokemon/gothorita/back.png b/graphics/pokemon/gothorita/back.png index 1d58fc7d4..979dc7eb5 100644 Binary files a/graphics/pokemon/gothorita/back.png and b/graphics/pokemon/gothorita/back.png differ diff --git a/graphics/pokemon/gourgeist/anim_front.png b/graphics/pokemon/gourgeist/anim_front.png index af7e4c95c..2e2cf4fc3 100644 Binary files a/graphics/pokemon/gourgeist/anim_front.png and b/graphics/pokemon/gourgeist/anim_front.png differ diff --git a/graphics/pokemon/gourgeist/icon.png b/graphics/pokemon/gourgeist/icon.png index f4a0c5cb2..534856b3a 100644 Binary files a/graphics/pokemon/gourgeist/icon.png and b/graphics/pokemon/gourgeist/icon.png differ diff --git a/graphics/pokemon/gourgeist/large/anim_front.png b/graphics/pokemon/gourgeist/large/anim_front.png index b3a84718a..88008d298 100644 Binary files a/graphics/pokemon/gourgeist/large/anim_front.png and b/graphics/pokemon/gourgeist/large/anim_front.png differ diff --git a/graphics/pokemon/gourgeist/small/anim_front.png b/graphics/pokemon/gourgeist/small/anim_front.png index 01cd8a5aa..f7c997cca 100644 Binary files a/graphics/pokemon/gourgeist/small/anim_front.png and b/graphics/pokemon/gourgeist/small/anim_front.png differ diff --git a/graphics/pokemon/gourgeist/super/anim_front.png b/graphics/pokemon/gourgeist/super/anim_front.png index d69fa530e..cf10d2447 100644 Binary files a/graphics/pokemon/gourgeist/super/anim_front.png and b/graphics/pokemon/gourgeist/super/anim_front.png differ diff --git a/graphics/pokemon/granbull/anim_front.png b/graphics/pokemon/granbull/anim_front.png index 5f1cd3fcd..492e0031a 100644 Binary files a/graphics/pokemon/granbull/anim_front.png and b/graphics/pokemon/granbull/anim_front.png differ diff --git a/graphics/pokemon/granbull/back.png b/graphics/pokemon/granbull/back.png index fd5ad606f..eecb45ba7 100644 Binary files a/graphics/pokemon/granbull/back.png and b/graphics/pokemon/granbull/back.png differ diff --git a/graphics/pokemon/granbull/icon.png b/graphics/pokemon/granbull/icon.png index 0ded88416..19f3e8771 100644 Binary files a/graphics/pokemon/granbull/icon.png and b/graphics/pokemon/granbull/icon.png differ diff --git a/graphics/pokemon/grapploct/back.png b/graphics/pokemon/grapploct/back.png index 824b27c64..83261f858 100644 Binary files a/graphics/pokemon/grapploct/back.png and b/graphics/pokemon/grapploct/back.png differ diff --git a/graphics/pokemon/grapploct/front.png b/graphics/pokemon/grapploct/front.png index 4d81c70ee..3dfb91195 100644 Binary files a/graphics/pokemon/grapploct/front.png and b/graphics/pokemon/grapploct/front.png differ diff --git a/graphics/pokemon/grapploct/icon.png b/graphics/pokemon/grapploct/icon.png index ef4198b57..dda18023e 100644 Binary files a/graphics/pokemon/grapploct/icon.png and b/graphics/pokemon/grapploct/icon.png differ diff --git a/graphics/pokemon/graveler/alolan/back.png b/graphics/pokemon/graveler/alolan/back.png index dfff56265..038e7d37b 100644 Binary files a/graphics/pokemon/graveler/alolan/back.png and b/graphics/pokemon/graveler/alolan/back.png differ diff --git a/graphics/pokemon/graveler/alolan/front.png b/graphics/pokemon/graveler/alolan/front.png index 712516238..d2454334b 100644 Binary files a/graphics/pokemon/graveler/alolan/front.png and b/graphics/pokemon/graveler/alolan/front.png differ diff --git a/graphics/pokemon/graveler/alolan/icon.png b/graphics/pokemon/graveler/alolan/icon.png index 469e1d76e..c0a7557ca 100644 Binary files a/graphics/pokemon/graveler/alolan/icon.png and b/graphics/pokemon/graveler/alolan/icon.png differ diff --git a/graphics/pokemon/graveler/anim_front.png b/graphics/pokemon/graveler/anim_front.png index 8a1d432f7..d00a52949 100644 Binary files a/graphics/pokemon/graveler/anim_front.png and b/graphics/pokemon/graveler/anim_front.png differ diff --git a/graphics/pokemon/graveler/back.png b/graphics/pokemon/graveler/back.png index 9154bfe38..b6cfed49a 100644 Binary files a/graphics/pokemon/graveler/back.png and b/graphics/pokemon/graveler/back.png differ diff --git a/graphics/pokemon/graveler/icon.png b/graphics/pokemon/graveler/icon.png index 2aab81411..c6aa12480 100644 Binary files a/graphics/pokemon/graveler/icon.png and b/graphics/pokemon/graveler/icon.png differ diff --git a/graphics/pokemon/graveler/normal.pal b/graphics/pokemon/graveler/normal.pal index 7a0929c16..c8a0885b4 100644 --- a/graphics/pokemon/graveler/normal.pal +++ b/graphics/pokemon/graveler/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -74 65 49 -213 213 172 -180 180 156 -148 139 123 -106 106 82 +152 160 208 0 0 0 +74 65 49 +106 106 82 +148 139 123 +180 180 156 +213 213 172 +131 123 131 +222 213 222 255 255 255 +0 0 0 +0 0 0 189 74 57 0 0 0 0 0 0 0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/graveler/shiny.pal b/graphics/pokemon/graveler/shiny.pal index b00659cb7..ee926f517 100644 --- a/graphics/pokemon/graveler/shiny.pal +++ b/graphics/pokemon/graveler/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 24 16 -200 176 64 -184 136 32 -152 96 24 -112 56 16 -16 16 16 -248 248 248 -184 72 56 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +0 0 0 +90 16 0 +123 57 0 +156 90 0 +189 131 0 +197 172 32 +131 123 131 +222 213 222 +255 255 255 +0 0 0 +0 0 0 +189 74 57 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/greedent/back.png b/graphics/pokemon/greedent/back.png index 330a65b8e..543d241bb 100644 Binary files a/graphics/pokemon/greedent/back.png and b/graphics/pokemon/greedent/back.png differ diff --git a/graphics/pokemon/greedent/front.png b/graphics/pokemon/greedent/front.png index ed198bf50..e954cb064 100644 Binary files a/graphics/pokemon/greedent/front.png and b/graphics/pokemon/greedent/front.png differ diff --git a/graphics/pokemon/greedent/icon.png b/graphics/pokemon/greedent/icon.png index b372d9120..8e37b0467 100644 Binary files a/graphics/pokemon/greedent/icon.png and b/graphics/pokemon/greedent/icon.png differ diff --git a/graphics/pokemon/greninja/anim_front.png b/graphics/pokemon/greninja/anim_front.png index d75ba5a03..6ba8ec1b1 100644 Binary files a/graphics/pokemon/greninja/anim_front.png and b/graphics/pokemon/greninja/anim_front.png differ diff --git a/graphics/pokemon/greninja/ash/anim_front.png b/graphics/pokemon/greninja/ash/anim_front.png index 8e166305c..477f26c19 100644 Binary files a/graphics/pokemon/greninja/ash/anim_front.png and b/graphics/pokemon/greninja/ash/anim_front.png differ diff --git a/graphics/pokemon/greninja/ash/back.png b/graphics/pokemon/greninja/ash/back.png index fe28a409a..1c6eee588 100644 Binary files a/graphics/pokemon/greninja/ash/back.png and b/graphics/pokemon/greninja/ash/back.png differ diff --git a/graphics/pokemon/greninja/back.png b/graphics/pokemon/greninja/back.png index 7efb0d075..36d3aed4d 100644 Binary files a/graphics/pokemon/greninja/back.png and b/graphics/pokemon/greninja/back.png differ diff --git a/graphics/pokemon/greninja/icon.png b/graphics/pokemon/greninja/icon.png index 4b5ac7e33..20ede9207 100644 Binary files a/graphics/pokemon/greninja/icon.png and b/graphics/pokemon/greninja/icon.png differ diff --git a/graphics/pokemon/grimer/alolan/back.png b/graphics/pokemon/grimer/alolan/back.png index d8a100a50..41165aaa8 100644 Binary files a/graphics/pokemon/grimer/alolan/back.png and b/graphics/pokemon/grimer/alolan/back.png differ diff --git a/graphics/pokemon/grimer/alolan/front.png b/graphics/pokemon/grimer/alolan/front.png index 9e9a32183..42e4660fa 100644 Binary files a/graphics/pokemon/grimer/alolan/front.png and b/graphics/pokemon/grimer/alolan/front.png differ diff --git a/graphics/pokemon/grimer/alolan/icon.png b/graphics/pokemon/grimer/alolan/icon.png index c7996c398..09d83cb95 100644 Binary files a/graphics/pokemon/grimer/alolan/icon.png and b/graphics/pokemon/grimer/alolan/icon.png differ diff --git a/graphics/pokemon/grimer/back.png b/graphics/pokemon/grimer/back.png index a5a552c45..280c733fc 100644 Binary files a/graphics/pokemon/grimer/back.png and b/graphics/pokemon/grimer/back.png differ diff --git a/graphics/pokemon/grimer/icon.png b/graphics/pokemon/grimer/icon.png index f75ea948b..8d39cfc8a 100644 Binary files a/graphics/pokemon/grimer/icon.png and b/graphics/pokemon/grimer/icon.png differ diff --git a/graphics/pokemon/grimmsnarl/back.png b/graphics/pokemon/grimmsnarl/back.png index 12b6a19e9..e483028a0 100644 Binary files a/graphics/pokemon/grimmsnarl/back.png and b/graphics/pokemon/grimmsnarl/back.png differ diff --git a/graphics/pokemon/grimmsnarl/front.png b/graphics/pokemon/grimmsnarl/front.png index 6e652396e..6aa68d771 100644 Binary files a/graphics/pokemon/grimmsnarl/front.png and b/graphics/pokemon/grimmsnarl/front.png differ diff --git a/graphics/pokemon/grimmsnarl/icon.png b/graphics/pokemon/grimmsnarl/icon.png index 0c96ebea9..d6f921cf0 100644 Binary files a/graphics/pokemon/grimmsnarl/icon.png and b/graphics/pokemon/grimmsnarl/icon.png differ diff --git a/graphics/pokemon/grookey/back.png b/graphics/pokemon/grookey/back.png index 83ff2d869..b7f6c6076 100644 Binary files a/graphics/pokemon/grookey/back.png and b/graphics/pokemon/grookey/back.png differ diff --git a/graphics/pokemon/grookey/front.png b/graphics/pokemon/grookey/front.png index 80e69ff69..d2b721745 100644 Binary files a/graphics/pokemon/grookey/front.png and b/graphics/pokemon/grookey/front.png differ diff --git a/graphics/pokemon/grookey/icon.png b/graphics/pokemon/grookey/icon.png index 774378ce1..f25d1f115 100644 Binary files a/graphics/pokemon/grookey/icon.png and b/graphics/pokemon/grookey/icon.png differ diff --git a/graphics/pokemon/grotle/anim_front.png b/graphics/pokemon/grotle/anim_front.png index 346593f2c..6a740b732 100644 Binary files a/graphics/pokemon/grotle/anim_front.png and b/graphics/pokemon/grotle/anim_front.png differ diff --git a/graphics/pokemon/grotle/back.png b/graphics/pokemon/grotle/back.png index fc50b939c..320f570aa 100644 Binary files a/graphics/pokemon/grotle/back.png and b/graphics/pokemon/grotle/back.png differ diff --git a/graphics/pokemon/grotle/icon.png b/graphics/pokemon/grotle/icon.png index c6933d1a3..b91e96157 100644 Binary files a/graphics/pokemon/grotle/icon.png and b/graphics/pokemon/grotle/icon.png differ diff --git a/graphics/pokemon/groudon/anim_front.png b/graphics/pokemon/groudon/anim_front.png index 2d1efae58..c38e0b206 100644 Binary files a/graphics/pokemon/groudon/anim_front.png and b/graphics/pokemon/groudon/anim_front.png differ diff --git a/graphics/pokemon/groudon/back.png b/graphics/pokemon/groudon/back.png index 064e00705..7733f7264 100644 Binary files a/graphics/pokemon/groudon/back.png and b/graphics/pokemon/groudon/back.png differ diff --git a/graphics/pokemon/groudon/primal/back.png b/graphics/pokemon/groudon/primal/back.png index f8d7ba1bd..0185f51f8 100644 Binary files a/graphics/pokemon/groudon/primal/back.png and b/graphics/pokemon/groudon/primal/back.png differ diff --git a/graphics/pokemon/groudon/primal/front.png b/graphics/pokemon/groudon/primal/front.png index 10d9c46cf..ab7b36a64 100644 Binary files a/graphics/pokemon/groudon/primal/front.png and b/graphics/pokemon/groudon/primal/front.png differ diff --git a/graphics/pokemon/groudon/primal/icon.png b/graphics/pokemon/groudon/primal/icon.png index 50be41669..9adccdaff 100644 Binary files a/graphics/pokemon/groudon/primal/icon.png and b/graphics/pokemon/groudon/primal/icon.png differ diff --git a/graphics/pokemon/grovyle/anim_front.png b/graphics/pokemon/grovyle/anim_front.png index 2b3af1097..c488a0aff 100644 Binary files a/graphics/pokemon/grovyle/anim_front.png and b/graphics/pokemon/grovyle/anim_front.png differ diff --git a/graphics/pokemon/grovyle/back.png b/graphics/pokemon/grovyle/back.png index 6f76854c3..8f319457b 100644 Binary files a/graphics/pokemon/grovyle/back.png and b/graphics/pokemon/grovyle/back.png differ diff --git a/graphics/pokemon/grovyle/icon.png b/graphics/pokemon/grovyle/icon.png index d48096e17..e65557f33 100644 Binary files a/graphics/pokemon/grovyle/icon.png and b/graphics/pokemon/grovyle/icon.png differ diff --git a/graphics/pokemon/growlithe/anim_front.png b/graphics/pokemon/growlithe/anim_front.png index 8017e1517..d0f170ea8 100644 Binary files a/graphics/pokemon/growlithe/anim_front.png and b/graphics/pokemon/growlithe/anim_front.png differ diff --git a/graphics/pokemon/growlithe/back.png b/graphics/pokemon/growlithe/back.png index 30be0614f..835d9d88a 100644 Binary files a/graphics/pokemon/growlithe/back.png and b/graphics/pokemon/growlithe/back.png differ diff --git a/graphics/pokemon/growlithe/hisuian/icon.png b/graphics/pokemon/growlithe/hisuian/icon.png index 91be10db5..b2b03733f 100644 Binary files a/graphics/pokemon/growlithe/hisuian/icon.png and b/graphics/pokemon/growlithe/hisuian/icon.png differ diff --git a/graphics/pokemon/growlithe/icon.png b/graphics/pokemon/growlithe/icon.png index 16c19d587..d9ee550f8 100644 Binary files a/graphics/pokemon/growlithe/icon.png and b/graphics/pokemon/growlithe/icon.png differ diff --git a/graphics/pokemon/growlithe/normal.pal b/graphics/pokemon/growlithe/normal.pal index 7517c2929..49e3d09b2 100644 --- a/graphics/pokemon/growlithe/normal.pal +++ b/graphics/pokemon/growlithe/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -115 98 32 +255 255 246 +222 222 213 +106 106 106 +246 123 65 +205 74 74 +123 49 8 255 246 164 -197 172 98 -16 16 16 222 205 123 +192 168 96 +115 98 32 +248 176 80 +238 139 74 197 82 82 115 57 16 -255 180 82 -238 139 74 -115 98 32 -106 106 106 -88 88 120 -248 248 240 -216 216 208 -168 48 16 +16 16 16 diff --git a/graphics/pokemon/growlithe/shiny.pal b/graphics/pokemon/growlithe/shiny.pal index d59ffd950..97fda151d 100644 --- a/graphics/pokemon/growlithe/shiny.pal +++ b/graphics/pokemon/growlithe/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 96 48 -240 240 176 -192 176 112 -16 16 16 -208 200 136 -184 168 64 -120 88 24 -248 248 168 -232 224 64 -136 128 72 -80 80 80 -88 88 120 -248 248 240 -216 216 208 +255 255 246 +222 222 213 +106 106 106 246 123 65 +205 74 74 +123 49 8 +246 246 180 +213 205 139 +197 180 115 +106 98 49 +255 255 156 +246 238 49 +197 180 49 +139 98 8 +16 16 16 diff --git a/graphics/pokemon/grubbin/back.png b/graphics/pokemon/grubbin/back.png index 4764ad1b1..f2904a265 100644 Binary files a/graphics/pokemon/grubbin/back.png and b/graphics/pokemon/grubbin/back.png differ diff --git a/graphics/pokemon/grubbin/icon.png b/graphics/pokemon/grubbin/icon.png index 2f46d230c..96071bf8f 100644 Binary files a/graphics/pokemon/grubbin/icon.png and b/graphics/pokemon/grubbin/icon.png differ diff --git a/graphics/pokemon/grumpig/anim_front.png b/graphics/pokemon/grumpig/anim_front.png index 7be50f8ac..4bc3a84cf 100644 Binary files a/graphics/pokemon/grumpig/anim_front.png and b/graphics/pokemon/grumpig/anim_front.png differ diff --git a/graphics/pokemon/grumpig/back.png b/graphics/pokemon/grumpig/back.png index dc3a0b5aa..299ce23a8 100644 Binary files a/graphics/pokemon/grumpig/back.png and b/graphics/pokemon/grumpig/back.png differ diff --git a/graphics/pokemon/grumpig/icon.png b/graphics/pokemon/grumpig/icon.png index c637668d6..013cec0b2 100644 Binary files a/graphics/pokemon/grumpig/icon.png and b/graphics/pokemon/grumpig/icon.png differ diff --git a/graphics/pokemon/gulpin/anim_front.png b/graphics/pokemon/gulpin/anim_front.png index c15f30296..a85959ee7 100644 Binary files a/graphics/pokemon/gulpin/anim_front.png and b/graphics/pokemon/gulpin/anim_front.png differ diff --git a/graphics/pokemon/gulpin/back.png b/graphics/pokemon/gulpin/back.png index a920aca4b..46a384423 100644 Binary files a/graphics/pokemon/gulpin/back.png and b/graphics/pokemon/gulpin/back.png differ diff --git a/graphics/pokemon/gulpin/icon.png b/graphics/pokemon/gulpin/icon.png index 1ae6bbc37..d68ae5b09 100644 Binary files a/graphics/pokemon/gulpin/icon.png and b/graphics/pokemon/gulpin/icon.png differ diff --git a/graphics/pokemon/gumshoos/back.png b/graphics/pokemon/gumshoos/back.png index 049fd50a6..347b5498e 100644 Binary files a/graphics/pokemon/gumshoos/back.png and b/graphics/pokemon/gumshoos/back.png differ diff --git a/graphics/pokemon/gumshoos/front.png b/graphics/pokemon/gumshoos/front.png index d8e11bc25..acfc23ef0 100644 Binary files a/graphics/pokemon/gumshoos/front.png and b/graphics/pokemon/gumshoos/front.png differ diff --git a/graphics/pokemon/gumshoos/icon.png b/graphics/pokemon/gumshoos/icon.png index 3e9d53af5..ac2bd8392 100644 Binary files a/graphics/pokemon/gumshoos/icon.png and b/graphics/pokemon/gumshoos/icon.png differ diff --git a/graphics/pokemon/gurdurr/anim_front.png b/graphics/pokemon/gurdurr/anim_front.png index 827f2c926..1e455d093 100644 Binary files a/graphics/pokemon/gurdurr/anim_front.png and b/graphics/pokemon/gurdurr/anim_front.png differ diff --git a/graphics/pokemon/guzzlord/back.png b/graphics/pokemon/guzzlord/back.png index 3c536f7a3..18f9763e2 100644 Binary files a/graphics/pokemon/guzzlord/back.png and b/graphics/pokemon/guzzlord/back.png differ diff --git a/graphics/pokemon/guzzlord/front.png b/graphics/pokemon/guzzlord/front.png index 3b908ff8f..f9698a43b 100644 Binary files a/graphics/pokemon/guzzlord/front.png and b/graphics/pokemon/guzzlord/front.png differ diff --git a/graphics/pokemon/guzzlord/icon.png b/graphics/pokemon/guzzlord/icon.png index 141a6749e..25e862d78 100644 Binary files a/graphics/pokemon/guzzlord/icon.png and b/graphics/pokemon/guzzlord/icon.png differ diff --git a/graphics/pokemon/gyarados/back.png b/graphics/pokemon/gyarados/back.png index bb4cc7e3e..df7a63b61 100644 Binary files a/graphics/pokemon/gyarados/back.png and b/graphics/pokemon/gyarados/back.png differ diff --git a/graphics/pokemon/gyarados/icon.png b/graphics/pokemon/gyarados/icon.png index a82198593..41ccb5aee 100644 Binary files a/graphics/pokemon/gyarados/icon.png and b/graphics/pokemon/gyarados/icon.png differ diff --git a/graphics/pokemon/gyarados/mega/back.png b/graphics/pokemon/gyarados/mega/back.png index b03533f26..ed0dcf279 100644 Binary files a/graphics/pokemon/gyarados/mega/back.png and b/graphics/pokemon/gyarados/mega/back.png differ diff --git a/graphics/pokemon/gyarados/mega/front.png b/graphics/pokemon/gyarados/mega/front.png index 9d59a86c0..8ea667654 100644 Binary files a/graphics/pokemon/gyarados/mega/front.png and b/graphics/pokemon/gyarados/mega/front.png differ diff --git a/graphics/pokemon/gyarados/mega/icon.png b/graphics/pokemon/gyarados/mega/icon.png index 5a53462ca..7ec290a05 100644 Binary files a/graphics/pokemon/gyarados/mega/icon.png and b/graphics/pokemon/gyarados/mega/icon.png differ diff --git a/graphics/pokemon/hakamo_o/back.png b/graphics/pokemon/hakamo_o/back.png index aba394cd5..f994a70e9 100644 Binary files a/graphics/pokemon/hakamo_o/back.png and b/graphics/pokemon/hakamo_o/back.png differ diff --git a/graphics/pokemon/hakamo_o/icon.png b/graphics/pokemon/hakamo_o/icon.png index a023ceeb4..483677053 100644 Binary files a/graphics/pokemon/hakamo_o/icon.png and b/graphics/pokemon/hakamo_o/icon.png differ diff --git a/graphics/pokemon/happiny/anim_front.png b/graphics/pokemon/happiny/anim_front.png index 6b0455cc9..7ae898ab1 100644 Binary files a/graphics/pokemon/happiny/anim_front.png and b/graphics/pokemon/happiny/anim_front.png differ diff --git a/graphics/pokemon/happiny/back.png b/graphics/pokemon/happiny/back.png index 0517b4768..af69ce4e0 100644 Binary files a/graphics/pokemon/happiny/back.png and b/graphics/pokemon/happiny/back.png differ diff --git a/graphics/pokemon/happiny/icon.png b/graphics/pokemon/happiny/icon.png index 0d8a7b0b4..d559e2bc8 100644 Binary files a/graphics/pokemon/happiny/icon.png and b/graphics/pokemon/happiny/icon.png differ diff --git a/graphics/pokemon/hariyama/back.png b/graphics/pokemon/hariyama/back.png index dac9e0e14..84041f3b5 100644 Binary files a/graphics/pokemon/hariyama/back.png and b/graphics/pokemon/hariyama/back.png differ diff --git a/graphics/pokemon/hariyama/icon.png b/graphics/pokemon/hariyama/icon.png index cb98a6b1f..65b3cd7f1 100644 Binary files a/graphics/pokemon/hariyama/icon.png and b/graphics/pokemon/hariyama/icon.png differ diff --git a/graphics/pokemon/hatenna/back.png b/graphics/pokemon/hatenna/back.png index 8d6ecd735..3a065f5e2 100644 Binary files a/graphics/pokemon/hatenna/back.png and b/graphics/pokemon/hatenna/back.png differ diff --git a/graphics/pokemon/hatenna/front.png b/graphics/pokemon/hatenna/front.png index 4a47b28cc..a137baef0 100644 Binary files a/graphics/pokemon/hatenna/front.png and b/graphics/pokemon/hatenna/front.png differ diff --git a/graphics/pokemon/hatenna/icon.png b/graphics/pokemon/hatenna/icon.png index e80b544b4..6dde7e200 100644 Binary files a/graphics/pokemon/hatenna/icon.png and b/graphics/pokemon/hatenna/icon.png differ diff --git a/graphics/pokemon/hatterene/back.png b/graphics/pokemon/hatterene/back.png index c4a232dc4..ac914d123 100644 Binary files a/graphics/pokemon/hatterene/back.png and b/graphics/pokemon/hatterene/back.png differ diff --git a/graphics/pokemon/hatterene/front.png b/graphics/pokemon/hatterene/front.png index b6995dac8..639f9b64b 100644 Binary files a/graphics/pokemon/hatterene/front.png and b/graphics/pokemon/hatterene/front.png differ diff --git a/graphics/pokemon/hatterene/icon.png b/graphics/pokemon/hatterene/icon.png index 35355eca8..aae700b18 100644 Binary files a/graphics/pokemon/hatterene/icon.png and b/graphics/pokemon/hatterene/icon.png differ diff --git a/graphics/pokemon/hattrem/back.png b/graphics/pokemon/hattrem/back.png index 7f08b60b1..154c55b6d 100644 Binary files a/graphics/pokemon/hattrem/back.png and b/graphics/pokemon/hattrem/back.png differ diff --git a/graphics/pokemon/hattrem/front.png b/graphics/pokemon/hattrem/front.png index 73d1444b3..71b063891 100644 Binary files a/graphics/pokemon/hattrem/front.png and b/graphics/pokemon/hattrem/front.png differ diff --git a/graphics/pokemon/hattrem/icon.png b/graphics/pokemon/hattrem/icon.png index c50887319..e498c4d77 100644 Binary files a/graphics/pokemon/hattrem/icon.png and b/graphics/pokemon/hattrem/icon.png differ diff --git a/graphics/pokemon/haunter/anim_front.png b/graphics/pokemon/haunter/anim_front.png index d702cd687..03156dfa4 100644 Binary files a/graphics/pokemon/haunter/anim_front.png and b/graphics/pokemon/haunter/anim_front.png differ diff --git a/graphics/pokemon/haunter/back.png b/graphics/pokemon/haunter/back.png index f5fa4d925..dccfa7442 100644 Binary files a/graphics/pokemon/haunter/back.png and b/graphics/pokemon/haunter/back.png differ diff --git a/graphics/pokemon/hawlucha/anim_front.png b/graphics/pokemon/hawlucha/anim_front.png index 828ebf633..bd5e0696c 100644 Binary files a/graphics/pokemon/hawlucha/anim_front.png and b/graphics/pokemon/hawlucha/anim_front.png differ diff --git a/graphics/pokemon/hawlucha/back.png b/graphics/pokemon/hawlucha/back.png index a72906edc..9ec243132 100644 Binary files a/graphics/pokemon/hawlucha/back.png and b/graphics/pokemon/hawlucha/back.png differ diff --git a/graphics/pokemon/hawlucha/icon.png b/graphics/pokemon/hawlucha/icon.png index a637cdb96..245a44e54 100644 Binary files a/graphics/pokemon/hawlucha/icon.png and b/graphics/pokemon/hawlucha/icon.png differ diff --git a/graphics/pokemon/haxorus/anim_front.png b/graphics/pokemon/haxorus/anim_front.png index 4c096d457..d189fdc67 100644 Binary files a/graphics/pokemon/haxorus/anim_front.png and b/graphics/pokemon/haxorus/anim_front.png differ diff --git a/graphics/pokemon/haxorus/back.png b/graphics/pokemon/haxorus/back.png index 4cd2f9256..6351df0bb 100644 Binary files a/graphics/pokemon/haxorus/back.png and b/graphics/pokemon/haxorus/back.png differ diff --git a/graphics/pokemon/haxorus/icon.png b/graphics/pokemon/haxorus/icon.png index 5e85f3d1c..0ed740e9b 100644 Binary files a/graphics/pokemon/haxorus/icon.png and b/graphics/pokemon/haxorus/icon.png differ diff --git a/graphics/pokemon/heatmor/anim_front.png b/graphics/pokemon/heatmor/anim_front.png index 9c693f27a..b9c5088ab 100644 Binary files a/graphics/pokemon/heatmor/anim_front.png and b/graphics/pokemon/heatmor/anim_front.png differ diff --git a/graphics/pokemon/heatmor/back.png b/graphics/pokemon/heatmor/back.png index 5df0f4c41..771172013 100644 Binary files a/graphics/pokemon/heatmor/back.png and b/graphics/pokemon/heatmor/back.png differ diff --git a/graphics/pokemon/heatmor/icon.png b/graphics/pokemon/heatmor/icon.png index 8f370ced9..ce6baa571 100644 Binary files a/graphics/pokemon/heatmor/icon.png and b/graphics/pokemon/heatmor/icon.png differ diff --git a/graphics/pokemon/heatran/anim_front.png b/graphics/pokemon/heatran/anim_front.png index 41ebce29a..afc5dbe41 100644 Binary files a/graphics/pokemon/heatran/anim_front.png and b/graphics/pokemon/heatran/anim_front.png differ diff --git a/graphics/pokemon/heatran/back.png b/graphics/pokemon/heatran/back.png index 401779397..54a1e3602 100644 Binary files a/graphics/pokemon/heatran/back.png and b/graphics/pokemon/heatran/back.png differ diff --git a/graphics/pokemon/heatran/icon.png b/graphics/pokemon/heatran/icon.png index 4d05c52ae..a2c712629 100644 Binary files a/graphics/pokemon/heatran/icon.png and b/graphics/pokemon/heatran/icon.png differ diff --git a/graphics/pokemon/heliolisk/anim_front.png b/graphics/pokemon/heliolisk/anim_front.png index 286870fbb..1f56b8487 100644 Binary files a/graphics/pokemon/heliolisk/anim_front.png and b/graphics/pokemon/heliolisk/anim_front.png differ diff --git a/graphics/pokemon/heliolisk/back.png b/graphics/pokemon/heliolisk/back.png index c45ffb166..f4ab74539 100644 Binary files a/graphics/pokemon/heliolisk/back.png and b/graphics/pokemon/heliolisk/back.png differ diff --git a/graphics/pokemon/heliolisk/icon.png b/graphics/pokemon/heliolisk/icon.png index b167e996f..a643a1081 100644 Binary files a/graphics/pokemon/heliolisk/icon.png and b/graphics/pokemon/heliolisk/icon.png differ diff --git a/graphics/pokemon/helioptile/anim_front.png b/graphics/pokemon/helioptile/anim_front.png index abdde9f57..aacc8f847 100644 Binary files a/graphics/pokemon/helioptile/anim_front.png and b/graphics/pokemon/helioptile/anim_front.png differ diff --git a/graphics/pokemon/helioptile/back.png b/graphics/pokemon/helioptile/back.png index 6e8d14096..8931caa9f 100644 Binary files a/graphics/pokemon/helioptile/back.png and b/graphics/pokemon/helioptile/back.png differ diff --git a/graphics/pokemon/helioptile/icon.png b/graphics/pokemon/helioptile/icon.png index 2327bcce2..babec3a36 100644 Binary files a/graphics/pokemon/helioptile/icon.png and b/graphics/pokemon/helioptile/icon.png differ diff --git a/graphics/pokemon/heracross/anim_front.png b/graphics/pokemon/heracross/anim_front.png index 34437b819..426443655 100644 Binary files a/graphics/pokemon/heracross/anim_front.png and b/graphics/pokemon/heracross/anim_front.png differ diff --git a/graphics/pokemon/heracross/back.png b/graphics/pokemon/heracross/back.png index 99a913aca..5796f153d 100644 Binary files a/graphics/pokemon/heracross/back.png and b/graphics/pokemon/heracross/back.png differ diff --git a/graphics/pokemon/heracross/icon.png b/graphics/pokemon/heracross/icon.png index 593dee12b..727876e2a 100644 Binary files a/graphics/pokemon/heracross/icon.png and b/graphics/pokemon/heracross/icon.png differ diff --git a/graphics/pokemon/heracross/mega/back.png b/graphics/pokemon/heracross/mega/back.png index 0014cb604..0ca84ef2c 100644 Binary files a/graphics/pokemon/heracross/mega/back.png and b/graphics/pokemon/heracross/mega/back.png differ diff --git a/graphics/pokemon/heracross/mega/front.png b/graphics/pokemon/heracross/mega/front.png index 8cfd5bcd2..70ab93ded 100644 Binary files a/graphics/pokemon/heracross/mega/front.png and b/graphics/pokemon/heracross/mega/front.png differ diff --git a/graphics/pokemon/heracross/mega/icon.png b/graphics/pokemon/heracross/mega/icon.png index d5847f563..f76513663 100644 Binary files a/graphics/pokemon/heracross/mega/icon.png and b/graphics/pokemon/heracross/mega/icon.png differ diff --git a/graphics/pokemon/herdier/anim_front.png b/graphics/pokemon/herdier/anim_front.png index 954f12904..e0d73d729 100644 Binary files a/graphics/pokemon/herdier/anim_front.png and b/graphics/pokemon/herdier/anim_front.png differ diff --git a/graphics/pokemon/herdier/back.png b/graphics/pokemon/herdier/back.png index 3558ebe7d..3934a150f 100644 Binary files a/graphics/pokemon/herdier/back.png and b/graphics/pokemon/herdier/back.png differ diff --git a/graphics/pokemon/herdier/icon.png b/graphics/pokemon/herdier/icon.png index df38c6151..2798cbdbe 100644 Binary files a/graphics/pokemon/herdier/icon.png and b/graphics/pokemon/herdier/icon.png differ diff --git a/graphics/pokemon/hippopotas/anim_front.png b/graphics/pokemon/hippopotas/anim_front.png index 2470244f6..74eba5613 100644 Binary files a/graphics/pokemon/hippopotas/anim_front.png and b/graphics/pokemon/hippopotas/anim_front.png differ diff --git a/graphics/pokemon/hippopotas/back.png b/graphics/pokemon/hippopotas/back.png index a1589aecc..b34d3d720 100644 Binary files a/graphics/pokemon/hippopotas/back.png and b/graphics/pokemon/hippopotas/back.png differ diff --git a/graphics/pokemon/hippopotas/icon.png b/graphics/pokemon/hippopotas/icon.png index bb547b5b1..29989df43 100644 Binary files a/graphics/pokemon/hippopotas/icon.png and b/graphics/pokemon/hippopotas/icon.png differ diff --git a/graphics/pokemon/hippopotas/iconf.png b/graphics/pokemon/hippopotas/iconf.png index d76767cfa..cfb2b90fd 100644 Binary files a/graphics/pokemon/hippopotas/iconf.png and b/graphics/pokemon/hippopotas/iconf.png differ diff --git a/graphics/pokemon/hippowdon/anim_front.png b/graphics/pokemon/hippowdon/anim_front.png index ae4b104a7..4dba70195 100644 Binary files a/graphics/pokemon/hippowdon/anim_front.png and b/graphics/pokemon/hippowdon/anim_front.png differ diff --git a/graphics/pokemon/hippowdon/icon.png b/graphics/pokemon/hippowdon/icon.png index 7a6821e80..d81336905 100644 Binary files a/graphics/pokemon/hippowdon/icon.png and b/graphics/pokemon/hippowdon/icon.png differ diff --git a/graphics/pokemon/hippowdon/iconf.png b/graphics/pokemon/hippowdon/iconf.png index d89837425..80460903a 100644 Binary files a/graphics/pokemon/hippowdon/iconf.png and b/graphics/pokemon/hippowdon/iconf.png differ diff --git a/graphics/pokemon/hitmonchan/icon.png b/graphics/pokemon/hitmonchan/icon.png index c5cf7dea7..f223bbb02 100644 Binary files a/graphics/pokemon/hitmonchan/icon.png and b/graphics/pokemon/hitmonchan/icon.png differ diff --git a/graphics/pokemon/hitmonlee/back.png b/graphics/pokemon/hitmonlee/back.png index 95f7a21df..303f139f5 100644 Binary files a/graphics/pokemon/hitmonlee/back.png and b/graphics/pokemon/hitmonlee/back.png differ diff --git a/graphics/pokemon/hitmonlee/icon.png b/graphics/pokemon/hitmonlee/icon.png index d71628875..6d105a435 100644 Binary files a/graphics/pokemon/hitmonlee/icon.png and b/graphics/pokemon/hitmonlee/icon.png differ diff --git a/graphics/pokemon/hitmontop/anim_front.png b/graphics/pokemon/hitmontop/anim_front.png index 390a1f24b..65ef049e1 100644 Binary files a/graphics/pokemon/hitmontop/anim_front.png and b/graphics/pokemon/hitmontop/anim_front.png differ diff --git a/graphics/pokemon/hitmontop/back.png b/graphics/pokemon/hitmontop/back.png index 8eb0dec80..ca3daf80b 100644 Binary files a/graphics/pokemon/hitmontop/back.png and b/graphics/pokemon/hitmontop/back.png differ diff --git a/graphics/pokemon/ho_oh/anim_front.png b/graphics/pokemon/ho_oh/anim_front.png index b3b61e0dd..8bc726f79 100644 Binary files a/graphics/pokemon/ho_oh/anim_front.png and b/graphics/pokemon/ho_oh/anim_front.png differ diff --git a/graphics/pokemon/ho_oh/back.png b/graphics/pokemon/ho_oh/back.png index 2ee1aa15a..505ddb7e2 100644 Binary files a/graphics/pokemon/ho_oh/back.png and b/graphics/pokemon/ho_oh/back.png differ diff --git a/graphics/pokemon/honchkrow/anim_front.png b/graphics/pokemon/honchkrow/anim_front.png index 7ad94d9ca..b7cff5cf2 100644 Binary files a/graphics/pokemon/honchkrow/anim_front.png and b/graphics/pokemon/honchkrow/anim_front.png differ diff --git a/graphics/pokemon/honchkrow/back.png b/graphics/pokemon/honchkrow/back.png index b70f65c69..bfa21f01d 100644 Binary files a/graphics/pokemon/honchkrow/back.png and b/graphics/pokemon/honchkrow/back.png differ diff --git a/graphics/pokemon/honchkrow/icon.png b/graphics/pokemon/honchkrow/icon.png index 96c7a5dd4..10a3286d0 100644 Binary files a/graphics/pokemon/honchkrow/icon.png and b/graphics/pokemon/honchkrow/icon.png differ diff --git a/graphics/pokemon/honedge/anim_front.png b/graphics/pokemon/honedge/anim_front.png index 7dc77464f..9a5dc7507 100644 Binary files a/graphics/pokemon/honedge/anim_front.png and b/graphics/pokemon/honedge/anim_front.png differ diff --git a/graphics/pokemon/honedge/back.png b/graphics/pokemon/honedge/back.png index d6dd17c79..d9092fa13 100644 Binary files a/graphics/pokemon/honedge/back.png and b/graphics/pokemon/honedge/back.png differ diff --git a/graphics/pokemon/honedge/icon.png b/graphics/pokemon/honedge/icon.png index cfdc2674d..af720879c 100644 Binary files a/graphics/pokemon/honedge/icon.png and b/graphics/pokemon/honedge/icon.png differ diff --git a/graphics/pokemon/hoopa/anim_front.png b/graphics/pokemon/hoopa/anim_front.png index 3cbdeabbc..0a49818d4 100644 Binary files a/graphics/pokemon/hoopa/anim_front.png and b/graphics/pokemon/hoopa/anim_front.png differ diff --git a/graphics/pokemon/hoopa/icon.png b/graphics/pokemon/hoopa/icon.png index d17cc7b92..29bc90518 100644 Binary files a/graphics/pokemon/hoopa/icon.png and b/graphics/pokemon/hoopa/icon.png differ diff --git a/graphics/pokemon/hoopa/unbound/anim_front.png b/graphics/pokemon/hoopa/unbound/anim_front.png index 6242d2734..e0593d53a 100644 Binary files a/graphics/pokemon/hoopa/unbound/anim_front.png and b/graphics/pokemon/hoopa/unbound/anim_front.png differ diff --git a/graphics/pokemon/hoopa/unbound/back.png b/graphics/pokemon/hoopa/unbound/back.png index fb923c1b8..da608c63c 100644 Binary files a/graphics/pokemon/hoopa/unbound/back.png and b/graphics/pokemon/hoopa/unbound/back.png differ diff --git a/graphics/pokemon/hoopa/unbound/icon.png b/graphics/pokemon/hoopa/unbound/icon.png index e008d31da..4c77ca1e2 100644 Binary files a/graphics/pokemon/hoopa/unbound/icon.png and b/graphics/pokemon/hoopa/unbound/icon.png differ diff --git a/graphics/pokemon/hoothoot/back.png b/graphics/pokemon/hoothoot/back.png index 2f7371e83..c51927615 100644 Binary files a/graphics/pokemon/hoothoot/back.png and b/graphics/pokemon/hoothoot/back.png differ diff --git a/graphics/pokemon/hoothoot/icon.png b/graphics/pokemon/hoothoot/icon.png index 800983e46..3e439f236 100644 Binary files a/graphics/pokemon/hoothoot/icon.png and b/graphics/pokemon/hoothoot/icon.png differ diff --git a/graphics/pokemon/hoppip/back.png b/graphics/pokemon/hoppip/back.png index 26689b8f6..8fd2fd9d6 100644 Binary files a/graphics/pokemon/hoppip/back.png and b/graphics/pokemon/hoppip/back.png differ diff --git a/graphics/pokemon/horsea/back.png b/graphics/pokemon/horsea/back.png index fea6ff01f..7b616aba3 100644 Binary files a/graphics/pokemon/horsea/back.png and b/graphics/pokemon/horsea/back.png differ diff --git a/graphics/pokemon/horsea/icon.png b/graphics/pokemon/horsea/icon.png index 75eede89a..1df582b89 100644 Binary files a/graphics/pokemon/horsea/icon.png and b/graphics/pokemon/horsea/icon.png differ diff --git a/graphics/pokemon/houndoom/back.png b/graphics/pokemon/houndoom/back.png index 122ad9ead..5615673c3 100644 Binary files a/graphics/pokemon/houndoom/back.png and b/graphics/pokemon/houndoom/back.png differ diff --git a/graphics/pokemon/houndoom/icon.png b/graphics/pokemon/houndoom/icon.png index 344a05c9b..e1c34afec 100644 Binary files a/graphics/pokemon/houndoom/icon.png and b/graphics/pokemon/houndoom/icon.png differ diff --git a/graphics/pokemon/houndoom/mega/back.png b/graphics/pokemon/houndoom/mega/back.png index 27ba164c4..a8b45314b 100644 Binary files a/graphics/pokemon/houndoom/mega/back.png and b/graphics/pokemon/houndoom/mega/back.png differ diff --git a/graphics/pokemon/houndoom/mega/front.png b/graphics/pokemon/houndoom/mega/front.png index c93897c50..0a7fa97d3 100644 Binary files a/graphics/pokemon/houndoom/mega/front.png and b/graphics/pokemon/houndoom/mega/front.png differ diff --git a/graphics/pokemon/houndoom/mega/icon.png b/graphics/pokemon/houndoom/mega/icon.png index 063cf09ad..9e0b568b2 100644 Binary files a/graphics/pokemon/houndoom/mega/icon.png and b/graphics/pokemon/houndoom/mega/icon.png differ diff --git a/graphics/pokemon/houndour/anim_front.png b/graphics/pokemon/houndour/anim_front.png index b3d13912a..2cf035d03 100644 Binary files a/graphics/pokemon/houndour/anim_front.png and b/graphics/pokemon/houndour/anim_front.png differ diff --git a/graphics/pokemon/houndour/back.png b/graphics/pokemon/houndour/back.png index 0be3a7723..daf5f91b4 100644 Binary files a/graphics/pokemon/houndour/back.png and b/graphics/pokemon/houndour/back.png differ diff --git a/graphics/pokemon/houndour/icon.png b/graphics/pokemon/houndour/icon.png index 180217d82..dbe35aa66 100644 Binary files a/graphics/pokemon/houndour/icon.png and b/graphics/pokemon/houndour/icon.png differ diff --git a/graphics/pokemon/huntail/anim_front.png b/graphics/pokemon/huntail/anim_front.png index efb051779..e3aa0efab 100644 Binary files a/graphics/pokemon/huntail/anim_front.png and b/graphics/pokemon/huntail/anim_front.png differ diff --git a/graphics/pokemon/huntail/back.png b/graphics/pokemon/huntail/back.png index b3744af5f..91c28e259 100644 Binary files a/graphics/pokemon/huntail/back.png and b/graphics/pokemon/huntail/back.png differ diff --git a/graphics/pokemon/hydreigon/anim_front.png b/graphics/pokemon/hydreigon/anim_front.png index c6906c5f1..b4e3432f0 100644 Binary files a/graphics/pokemon/hydreigon/anim_front.png and b/graphics/pokemon/hydreigon/anim_front.png differ diff --git a/graphics/pokemon/hydreigon/back.png b/graphics/pokemon/hydreigon/back.png index fb95b93fc..3327087d9 100644 Binary files a/graphics/pokemon/hydreigon/back.png and b/graphics/pokemon/hydreigon/back.png differ diff --git a/graphics/pokemon/hypno/anim_front.png b/graphics/pokemon/hypno/anim_front.png index 7a59e4ea2..d96bd7613 100644 Binary files a/graphics/pokemon/hypno/anim_front.png and b/graphics/pokemon/hypno/anim_front.png differ diff --git a/graphics/pokemon/hypno/back.png b/graphics/pokemon/hypno/back.png index 7b72be8c8..8a7987d1e 100644 Binary files a/graphics/pokemon/hypno/back.png and b/graphics/pokemon/hypno/back.png differ diff --git a/graphics/pokemon/igglybuff/back.png b/graphics/pokemon/igglybuff/back.png index 5bd9d468b..4e0ad8314 100644 Binary files a/graphics/pokemon/igglybuff/back.png and b/graphics/pokemon/igglybuff/back.png differ diff --git a/graphics/pokemon/igglybuff/icon.png b/graphics/pokemon/igglybuff/icon.png index 8e4f4bbd1..cc4bfbd29 100644 Binary files a/graphics/pokemon/igglybuff/icon.png and b/graphics/pokemon/igglybuff/icon.png differ diff --git a/graphics/pokemon/illumise/anim_front.png b/graphics/pokemon/illumise/anim_front.png index bbca423e6..8759e9171 100644 Binary files a/graphics/pokemon/illumise/anim_front.png and b/graphics/pokemon/illumise/anim_front.png differ diff --git a/graphics/pokemon/illumise/back.png b/graphics/pokemon/illumise/back.png index 4e44d84c4..d4d429e0d 100644 Binary files a/graphics/pokemon/illumise/back.png and b/graphics/pokemon/illumise/back.png differ diff --git a/graphics/pokemon/illumise/icon.png b/graphics/pokemon/illumise/icon.png index 81c273f1c..db0ba42d0 100644 Binary files a/graphics/pokemon/illumise/icon.png and b/graphics/pokemon/illumise/icon.png differ diff --git a/graphics/pokemon/impidimp/back.png b/graphics/pokemon/impidimp/back.png index 7ef8c6264..60922154a 100644 Binary files a/graphics/pokemon/impidimp/back.png and b/graphics/pokemon/impidimp/back.png differ diff --git a/graphics/pokemon/impidimp/front.png b/graphics/pokemon/impidimp/front.png index ef0d090d8..bf3c1bd9b 100644 Binary files a/graphics/pokemon/impidimp/front.png and b/graphics/pokemon/impidimp/front.png differ diff --git a/graphics/pokemon/impidimp/icon.png b/graphics/pokemon/impidimp/icon.png index 86eee28b9..e889a80d4 100644 Binary files a/graphics/pokemon/impidimp/icon.png and b/graphics/pokemon/impidimp/icon.png differ diff --git a/graphics/pokemon/incineroar/back.png b/graphics/pokemon/incineroar/back.png index c24129584..bb872e1ae 100644 Binary files a/graphics/pokemon/incineroar/back.png and b/graphics/pokemon/incineroar/back.png differ diff --git a/graphics/pokemon/incineroar/front.png b/graphics/pokemon/incineroar/front.png index 29a0b916b..216602d64 100644 Binary files a/graphics/pokemon/incineroar/front.png and b/graphics/pokemon/incineroar/front.png differ diff --git a/graphics/pokemon/incineroar/icon.png b/graphics/pokemon/incineroar/icon.png index 8de1c2403..020c549ec 100644 Binary files a/graphics/pokemon/incineroar/icon.png and b/graphics/pokemon/incineroar/icon.png differ diff --git a/graphics/pokemon/indeedee/back.png b/graphics/pokemon/indeedee/back.png index 2e4230e47..9fcfda9f9 100644 Binary files a/graphics/pokemon/indeedee/back.png and b/graphics/pokemon/indeedee/back.png differ diff --git a/graphics/pokemon/indeedee/female/back.png b/graphics/pokemon/indeedee/female/back.png index 7da4da8a0..425cfe368 100644 Binary files a/graphics/pokemon/indeedee/female/back.png and b/graphics/pokemon/indeedee/female/back.png differ diff --git a/graphics/pokemon/indeedee/female/front.png b/graphics/pokemon/indeedee/female/front.png index 4fc3303c6..16df74811 100644 Binary files a/graphics/pokemon/indeedee/female/front.png and b/graphics/pokemon/indeedee/female/front.png differ diff --git a/graphics/pokemon/indeedee/female/icon.png b/graphics/pokemon/indeedee/female/icon.png index 83c5a5e48..ca9aeda07 100644 Binary files a/graphics/pokemon/indeedee/female/icon.png and b/graphics/pokemon/indeedee/female/icon.png differ diff --git a/graphics/pokemon/indeedee/front.png b/graphics/pokemon/indeedee/front.png index 19d4ad9aa..26b082b61 100644 Binary files a/graphics/pokemon/indeedee/front.png and b/graphics/pokemon/indeedee/front.png differ diff --git a/graphics/pokemon/indeedee/icon.png b/graphics/pokemon/indeedee/icon.png index b226eeca0..ed83aad7c 100644 Binary files a/graphics/pokemon/indeedee/icon.png and b/graphics/pokemon/indeedee/icon.png differ diff --git a/graphics/pokemon/infernape/anim_front.png b/graphics/pokemon/infernape/anim_front.png index 5232461d1..b808e3ab3 100644 Binary files a/graphics/pokemon/infernape/anim_front.png and b/graphics/pokemon/infernape/anim_front.png differ diff --git a/graphics/pokemon/infernape/back.png b/graphics/pokemon/infernape/back.png index 13d9d75da..7ab444c0b 100644 Binary files a/graphics/pokemon/infernape/back.png and b/graphics/pokemon/infernape/back.png differ diff --git a/graphics/pokemon/inkay/anim_front.png b/graphics/pokemon/inkay/anim_front.png index b1ea93f4e..6d250b308 100644 Binary files a/graphics/pokemon/inkay/anim_front.png and b/graphics/pokemon/inkay/anim_front.png differ diff --git a/graphics/pokemon/inkay/back.png b/graphics/pokemon/inkay/back.png index c6791620c..300166ad2 100644 Binary files a/graphics/pokemon/inkay/back.png and b/graphics/pokemon/inkay/back.png differ diff --git a/graphics/pokemon/inkay/icon.png b/graphics/pokemon/inkay/icon.png index ff0becb9f..5cd189702 100644 Binary files a/graphics/pokemon/inkay/icon.png and b/graphics/pokemon/inkay/icon.png differ diff --git a/graphics/pokemon/inteleon/back.png b/graphics/pokemon/inteleon/back.png index a741a6d24..57f6c40c9 100644 Binary files a/graphics/pokemon/inteleon/back.png and b/graphics/pokemon/inteleon/back.png differ diff --git a/graphics/pokemon/inteleon/front.png b/graphics/pokemon/inteleon/front.png index e55bcc179..3ae051456 100644 Binary files a/graphics/pokemon/inteleon/front.png and b/graphics/pokemon/inteleon/front.png differ diff --git a/graphics/pokemon/inteleon/icon.png b/graphics/pokemon/inteleon/icon.png index ff330fffd..37fbd4b59 100644 Binary files a/graphics/pokemon/inteleon/icon.png and b/graphics/pokemon/inteleon/icon.png differ diff --git a/graphics/pokemon/ivysaur/anim_front.png b/graphics/pokemon/ivysaur/anim_front.png index 5a040c415..1fe645853 100644 Binary files a/graphics/pokemon/ivysaur/anim_front.png and b/graphics/pokemon/ivysaur/anim_front.png differ diff --git a/graphics/pokemon/ivysaur/back.png b/graphics/pokemon/ivysaur/back.png index 22b7464c0..004cf339b 100644 Binary files a/graphics/pokemon/ivysaur/back.png and b/graphics/pokemon/ivysaur/back.png differ diff --git a/graphics/pokemon/ivysaur/icon.png b/graphics/pokemon/ivysaur/icon.png index 1ed77e4cf..053ce38ea 100644 Binary files a/graphics/pokemon/ivysaur/icon.png and b/graphics/pokemon/ivysaur/icon.png differ diff --git a/graphics/pokemon/ivysaur/normal.pal b/graphics/pokemon/ivysaur/normal.pal index 8ce5c7c84..30f8e8be5 100644 --- a/graphics/pokemon/ivysaur/normal.pal +++ b/graphics/pokemon/ivysaur/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -120 48 40 -216 64 88 -248 176 168 -248 120 120 -16 16 16 -16 64 72 -120 216 112 -48 128 80 -96 176 88 -128 232 216 -88 208 184 +152 160 208 +255 255 255 +255 172 164 +255 123 123 +213 65 90 +128 224 208 +88 200 184 32 144 128 -248 248 248 -160 48 16 -224 80 56 +16 65 74 +120 208 112 +96 168 88 +48 120 80 +16 72 56 +197 115 57 +123 49 41 +16 16 16 diff --git a/graphics/pokemon/ivysaur/shiny.pal b/graphics/pokemon/ivysaur/shiny.pal index 27e7a2bed..cf39cdcf6 100644 --- a/graphics/pokemon/ivysaur/shiny.pal +++ b/graphics/pokemon/ivysaur/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -107 77 48 -205 139 16 +152 160 208 +255 255 255 255 255 156 255 213 0 -16 16 16 -49 90 16 -139 222 74 -49 131 49 -90 172 32 +205 139 16 205 246 82 164 213 74 123 164 49 -255 255 255 -160 48 16 -224 80 56 +57 98 32 +139 222 74 +90 172 32 +49 131 49 +49 90 16 +213 98 57 +139 32 41 +16 16 16 diff --git a/graphics/pokemon/jangmo_o/back.png b/graphics/pokemon/jangmo_o/back.png index d6e912f09..6416369e9 100644 Binary files a/graphics/pokemon/jangmo_o/back.png and b/graphics/pokemon/jangmo_o/back.png differ diff --git a/graphics/pokemon/jangmo_o/icon.png b/graphics/pokemon/jangmo_o/icon.png index 3c2802c4e..0a8a2c2d0 100644 Binary files a/graphics/pokemon/jangmo_o/icon.png and b/graphics/pokemon/jangmo_o/icon.png differ diff --git a/graphics/pokemon/jellicent/anim_front.png b/graphics/pokemon/jellicent/anim_front.png index ab98dec98..4e08f51dd 100644 Binary files a/graphics/pokemon/jellicent/anim_front.png and b/graphics/pokemon/jellicent/anim_front.png differ diff --git a/graphics/pokemon/jellicent/anim_frontf.png b/graphics/pokemon/jellicent/anim_frontf.png index 581806f3b..d94a329aa 100644 Binary files a/graphics/pokemon/jellicent/anim_frontf.png and b/graphics/pokemon/jellicent/anim_frontf.png differ diff --git a/graphics/pokemon/jellicent/back.png b/graphics/pokemon/jellicent/back.png index b0c6667c8..f6ee8d602 100644 Binary files a/graphics/pokemon/jellicent/back.png and b/graphics/pokemon/jellicent/back.png differ diff --git a/graphics/pokemon/jellicent/frontf.png b/graphics/pokemon/jellicent/frontf.png index 01d656374..7c40aad47 100644 Binary files a/graphics/pokemon/jellicent/frontf.png and b/graphics/pokemon/jellicent/frontf.png differ diff --git a/graphics/pokemon/jigglypuff/anim_front.png b/graphics/pokemon/jigglypuff/anim_front.png index e7d76e1c0..17173331d 100644 Binary files a/graphics/pokemon/jigglypuff/anim_front.png and b/graphics/pokemon/jigglypuff/anim_front.png differ diff --git a/graphics/pokemon/jigglypuff/back.png b/graphics/pokemon/jigglypuff/back.png index 4eac977a9..0c12a8300 100644 Binary files a/graphics/pokemon/jigglypuff/back.png and b/graphics/pokemon/jigglypuff/back.png differ diff --git a/graphics/pokemon/jigglypuff/icon.png b/graphics/pokemon/jigglypuff/icon.png index f78bc4a78..4dec4fa02 100644 Binary files a/graphics/pokemon/jigglypuff/icon.png and b/graphics/pokemon/jigglypuff/icon.png differ diff --git a/graphics/pokemon/jigglypuff/normal.pal b/graphics/pokemon/jigglypuff/normal.pal index 6f4d96e9d..5ab3f9079 100644 --- a/graphics/pokemon/jigglypuff/normal.pal +++ b/graphics/pokemon/jigglypuff/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -164 16 32 +255 255 255 +200 232 248 +16 176 232 +24 112 192 +16 72 136 +104 80 96 +72 56 88 +230 230 230 +164 49 0 +213 57 49 +16 16 16 +255 205 197 255 172 164 230 115 131 -16 16 16 -115 65 24 -255 255 255 -115 98 222 -65 49 156 -148 131 255 -205 189 255 -168 16 0 -232 64 48 -0 0 0 -0 0 0 -0 0 0 +164 16 32 diff --git a/graphics/pokemon/jigglypuff/shiny.pal b/graphics/pokemon/jigglypuff/shiny.pal index 36b8d0ce5..3bfdb77e5 100644 --- a/graphics/pokemon/jigglypuff/shiny.pal +++ b/graphics/pokemon/jigglypuff/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -123 90 115 -246 205 238 -222 156 197 -16 16 16 -140 99 43 +152 160 208 255 255 255 -24 172 74 -41 123 49 -24 222 164 -212 213 216 -163 69 32 -211 97 93 -0 0 0 -0 0 0 -0 0 0 +205 255 189 +24 216 160 +24 168 72 +40 120 48 +156 106 32 +115 65 24 +230 230 230 +164 49 0 +213 57 49 +16 16 16 +255 230 255 +240 200 232 +216 152 192 +120 88 112 diff --git a/graphics/pokemon/jirachi/anim_front.png b/graphics/pokemon/jirachi/anim_front.png index cdce48df4..bd070398d 100644 Binary files a/graphics/pokemon/jirachi/anim_front.png and b/graphics/pokemon/jirachi/anim_front.png differ diff --git a/graphics/pokemon/jirachi/back.png b/graphics/pokemon/jirachi/back.png index 3c97a00f9..9fbca5571 100644 Binary files a/graphics/pokemon/jirachi/back.png and b/graphics/pokemon/jirachi/back.png differ diff --git a/graphics/pokemon/jirachi/icon.png b/graphics/pokemon/jirachi/icon.png index d1c557a59..258272d1c 100644 Binary files a/graphics/pokemon/jirachi/icon.png and b/graphics/pokemon/jirachi/icon.png differ diff --git a/graphics/pokemon/jolteon/back.png b/graphics/pokemon/jolteon/back.png index 13431c7ed..2833c80e6 100644 Binary files a/graphics/pokemon/jolteon/back.png and b/graphics/pokemon/jolteon/back.png differ diff --git a/graphics/pokemon/jolteon/icon.png b/graphics/pokemon/jolteon/icon.png index 897026d17..42df87278 100644 Binary files a/graphics/pokemon/jolteon/icon.png and b/graphics/pokemon/jolteon/icon.png differ diff --git a/graphics/pokemon/joltik/anim_front.png b/graphics/pokemon/joltik/anim_front.png index 922e41fb1..f591acb21 100644 Binary files a/graphics/pokemon/joltik/anim_front.png and b/graphics/pokemon/joltik/anim_front.png differ diff --git a/graphics/pokemon/joltik/back.png b/graphics/pokemon/joltik/back.png index 385f5fcf9..108950c24 100644 Binary files a/graphics/pokemon/joltik/back.png and b/graphics/pokemon/joltik/back.png differ diff --git a/graphics/pokemon/joltik/icon.png b/graphics/pokemon/joltik/icon.png index 08aee6e0f..d4f0111d9 100644 Binary files a/graphics/pokemon/joltik/icon.png and b/graphics/pokemon/joltik/icon.png differ diff --git a/graphics/pokemon/jumpluff/anim_front.png b/graphics/pokemon/jumpluff/anim_front.png index 320494a3e..f78886dc5 100644 Binary files a/graphics/pokemon/jumpluff/anim_front.png and b/graphics/pokemon/jumpluff/anim_front.png differ diff --git a/graphics/pokemon/jumpluff/back.png b/graphics/pokemon/jumpluff/back.png index ca251eda7..4619fd07c 100644 Binary files a/graphics/pokemon/jumpluff/back.png and b/graphics/pokemon/jumpluff/back.png differ diff --git a/graphics/pokemon/jumpluff/icon.png b/graphics/pokemon/jumpluff/icon.png index 1ecdfaf8c..ad7477950 100644 Binary files a/graphics/pokemon/jumpluff/icon.png and b/graphics/pokemon/jumpluff/icon.png differ diff --git a/graphics/pokemon/jynx/back.png b/graphics/pokemon/jynx/back.png index 195ba2a3b..871d3dc8d 100644 Binary files a/graphics/pokemon/jynx/back.png and b/graphics/pokemon/jynx/back.png differ diff --git a/graphics/pokemon/jynx/icon.png b/graphics/pokemon/jynx/icon.png index a22105e3e..6fef2bef7 100644 Binary files a/graphics/pokemon/jynx/icon.png and b/graphics/pokemon/jynx/icon.png differ diff --git a/graphics/pokemon/kabuto/anim_front.png b/graphics/pokemon/kabuto/anim_front.png index 7c167fddf..d738475e9 100644 Binary files a/graphics/pokemon/kabuto/anim_front.png and b/graphics/pokemon/kabuto/anim_front.png differ diff --git a/graphics/pokemon/kabuto/back.png b/graphics/pokemon/kabuto/back.png index bda12ef6f..8dc47b946 100644 Binary files a/graphics/pokemon/kabuto/back.png and b/graphics/pokemon/kabuto/back.png differ diff --git a/graphics/pokemon/kabuto/icon.png b/graphics/pokemon/kabuto/icon.png index 47c279314..6bd273d8d 100644 Binary files a/graphics/pokemon/kabuto/icon.png and b/graphics/pokemon/kabuto/icon.png differ diff --git a/graphics/pokemon/kabutops/anim_front.png b/graphics/pokemon/kabutops/anim_front.png index 6b89dd7c7..5c7a73a85 100644 Binary files a/graphics/pokemon/kabutops/anim_front.png and b/graphics/pokemon/kabutops/anim_front.png differ diff --git a/graphics/pokemon/kabutops/back.png b/graphics/pokemon/kabutops/back.png index df89149f4..dc4bd4392 100644 Binary files a/graphics/pokemon/kabutops/back.png and b/graphics/pokemon/kabutops/back.png differ diff --git a/graphics/pokemon/kabutops/icon.png b/graphics/pokemon/kabutops/icon.png index c7bc27cad..029123b53 100644 Binary files a/graphics/pokemon/kabutops/icon.png and b/graphics/pokemon/kabutops/icon.png differ diff --git a/graphics/pokemon/kadabra/anim_front.png b/graphics/pokemon/kadabra/anim_front.png index e45979f23..2096f2233 100644 Binary files a/graphics/pokemon/kadabra/anim_front.png and b/graphics/pokemon/kadabra/anim_front.png differ diff --git a/graphics/pokemon/kadabra/anim_frontf.png b/graphics/pokemon/kadabra/anim_frontf.png index 4e2c40e41..e78ff9e70 100644 Binary files a/graphics/pokemon/kadabra/anim_frontf.png and b/graphics/pokemon/kadabra/anim_frontf.png differ diff --git a/graphics/pokemon/kadabra/back.png b/graphics/pokemon/kadabra/back.png index a3e025f8f..4ea3df19d 100644 Binary files a/graphics/pokemon/kadabra/back.png and b/graphics/pokemon/kadabra/back.png differ diff --git a/graphics/pokemon/kadabra/backf.png b/graphics/pokemon/kadabra/backf.png index 6e4d57eff..45a60bf7d 100644 Binary files a/graphics/pokemon/kadabra/backf.png and b/graphics/pokemon/kadabra/backf.png differ diff --git a/graphics/pokemon/kadabra/icon.png b/graphics/pokemon/kadabra/icon.png index 21abfcf27..a5c03bb4c 100644 Binary files a/graphics/pokemon/kadabra/icon.png and b/graphics/pokemon/kadabra/icon.png differ diff --git a/graphics/pokemon/kadabra/normal.pal b/graphics/pokemon/kadabra/normal.pal index a69a8d21c..c607508da 100644 --- a/graphics/pokemon/kadabra/normal.pal +++ b/graphics/pokemon/kadabra/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -139 115 16 -98 74 8 +255 255 255 +222 222 222 +180 180 180 +90 90 90 +230 57 41 +197 164 82 +164 115 41 +123 82 8 +90 57 8 +255 255 189 255 238 41 213 189 8 +139 115 16 +98 74 8 16 16 16 -230 57 41 -90 57 8 -164 115 41 -216 216 216 -248 248 248 -88 88 88 -123 82 8 -176 176 176 -248 248 184 -200 168 168 diff --git a/graphics/pokemon/kadabra/shiny.pal b/graphics/pokemon/kadabra/shiny.pal index 1d0d44c74..f0c824094 100644 --- a/graphics/pokemon/kadabra/shiny.pal +++ b/graphics/pokemon/kadabra/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 112 16 -128 88 24 -248 240 128 -224 176 64 +255 255 255 +222 222 222 +180 180 180 +90 90 90 +222 49 41 +222 180 189 +180 123 131 +131 82 90 +90 49 57 +255 246 230 +255 246 131 +230 180 65 +180 115 16 +131 90 24 16 16 16 -224 72 64 -88 48 56 -176 120 128 -216 216 216 -248 248 248 -88 88 88 -128 80 88 -176 176 176 -248 240 224 -216 176 184 diff --git a/graphics/pokemon/kakuna/anim_front.png b/graphics/pokemon/kakuna/anim_front.png index f588b64e0..78f7fd269 100644 Binary files a/graphics/pokemon/kakuna/anim_front.png and b/graphics/pokemon/kakuna/anim_front.png differ diff --git a/graphics/pokemon/kakuna/back.png b/graphics/pokemon/kakuna/back.png index 68d6c7611..ef55df0be 100644 Binary files a/graphics/pokemon/kakuna/back.png and b/graphics/pokemon/kakuna/back.png differ diff --git a/graphics/pokemon/kakuna/icon.png b/graphics/pokemon/kakuna/icon.png index 918f30c2f..82a42fb53 100644 Binary files a/graphics/pokemon/kakuna/icon.png and b/graphics/pokemon/kakuna/icon.png differ diff --git a/graphics/pokemon/kakuna/normal.pal b/graphics/pokemon/kakuna/normal.pal index 91ff072e5..3dd39c3ee 100644 --- a/graphics/pokemon/kakuna/normal.pal +++ b/graphics/pokemon/kakuna/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -222 164 82 -180 123 0 -246 213 74 -255 246 205 -139 90 0 -90 57 0 -57 57 57 -106 106 106 -16 16 16 255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +255 246 205 +240 200 48 +200 152 16 +152 120 0 +120 88 0 +72 56 0 +255 0 255 +255 0 255 +106 106 106 +57 57 57 +16 16 16 +255 0 255 +255 0 255 +255 0 255 diff --git a/graphics/pokemon/kakuna/shiny.pal b/graphics/pokemon/kakuna/shiny.pal index 970c6af70..5a6bb2de0 100644 --- a/graphics/pokemon/kakuna/shiny.pal +++ b/graphics/pokemon/kakuna/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -128 184 40 -80 136 0 -168 248 0 -208 248 152 -48 104 16 -24 64 0 -56 56 56 -104 104 104 +152 160 208 +255 255 255 +213 255 156 +172 255 0 +131 189 41 +82 139 0 +49 106 16 +24 65 0 +255 0 255 +255 0 255 +106 106 106 +57 57 57 16 16 16 -248 248 248 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +255 0 255 +255 0 255 +255 0 255 diff --git a/graphics/pokemon/kangaskhan/back.png b/graphics/pokemon/kangaskhan/back.png index 55a4995ef..9c12200f8 100644 Binary files a/graphics/pokemon/kangaskhan/back.png and b/graphics/pokemon/kangaskhan/back.png differ diff --git a/graphics/pokemon/kangaskhan/icon.png b/graphics/pokemon/kangaskhan/icon.png index 538007a90..7f4b8a279 100644 Binary files a/graphics/pokemon/kangaskhan/icon.png and b/graphics/pokemon/kangaskhan/icon.png differ diff --git a/graphics/pokemon/kangaskhan/mega/back.png b/graphics/pokemon/kangaskhan/mega/back.png index 52aeb8a4f..d9973d7b5 100644 Binary files a/graphics/pokemon/kangaskhan/mega/back.png and b/graphics/pokemon/kangaskhan/mega/back.png differ diff --git a/graphics/pokemon/kangaskhan/mega/front.png b/graphics/pokemon/kangaskhan/mega/front.png index 3d1103c04..61dbd3eb7 100644 Binary files a/graphics/pokemon/kangaskhan/mega/front.png and b/graphics/pokemon/kangaskhan/mega/front.png differ diff --git a/graphics/pokemon/kangaskhan/mega/icon.png b/graphics/pokemon/kangaskhan/mega/icon.png index d612f2abb..529b7348f 100644 Binary files a/graphics/pokemon/kangaskhan/mega/icon.png and b/graphics/pokemon/kangaskhan/mega/icon.png differ diff --git a/graphics/pokemon/karrablast/anim_front.png b/graphics/pokemon/karrablast/anim_front.png index 6e6877c84..218596a3c 100644 Binary files a/graphics/pokemon/karrablast/anim_front.png and b/graphics/pokemon/karrablast/anim_front.png differ diff --git a/graphics/pokemon/karrablast/back.png b/graphics/pokemon/karrablast/back.png index 8819bb969..84795bfd5 100644 Binary files a/graphics/pokemon/karrablast/back.png and b/graphics/pokemon/karrablast/back.png differ diff --git a/graphics/pokemon/kartana/back.png b/graphics/pokemon/kartana/back.png index 60ac4571b..8cd143761 100644 Binary files a/graphics/pokemon/kartana/back.png and b/graphics/pokemon/kartana/back.png differ diff --git a/graphics/pokemon/kartana/front.png b/graphics/pokemon/kartana/front.png index 3da1c7e05..6097f2008 100644 Binary files a/graphics/pokemon/kartana/front.png and b/graphics/pokemon/kartana/front.png differ diff --git a/graphics/pokemon/kartana/icon.png b/graphics/pokemon/kartana/icon.png index d2fbb70b9..7d0b82499 100644 Binary files a/graphics/pokemon/kartana/icon.png and b/graphics/pokemon/kartana/icon.png differ diff --git a/graphics/pokemon/kecleon/anim_front.png b/graphics/pokemon/kecleon/anim_front.png index 9df11e9e8..43f947530 100644 Binary files a/graphics/pokemon/kecleon/anim_front.png and b/graphics/pokemon/kecleon/anim_front.png differ diff --git a/graphics/pokemon/kecleon/back.png b/graphics/pokemon/kecleon/back.png index 4c88008c5..9956c1867 100644 Binary files a/graphics/pokemon/kecleon/back.png and b/graphics/pokemon/kecleon/back.png differ diff --git a/graphics/pokemon/kecleon/icon.png b/graphics/pokemon/kecleon/icon.png index 5b2fef8e8..06fc1286e 100644 Binary files a/graphics/pokemon/kecleon/icon.png and b/graphics/pokemon/kecleon/icon.png differ diff --git a/graphics/pokemon/keldeo/anim_front.png b/graphics/pokemon/keldeo/anim_front.png index 74b3ee7f4..02b1af6ca 100644 Binary files a/graphics/pokemon/keldeo/anim_front.png and b/graphics/pokemon/keldeo/anim_front.png differ diff --git a/graphics/pokemon/keldeo/back.png b/graphics/pokemon/keldeo/back.png index 8c7454eff..561b6766a 100644 Binary files a/graphics/pokemon/keldeo/back.png and b/graphics/pokemon/keldeo/back.png differ diff --git a/graphics/pokemon/keldeo/resolute/front.png b/graphics/pokemon/keldeo/resolute/front.png index 32e16ffed..8e83b810a 100644 Binary files a/graphics/pokemon/keldeo/resolute/front.png and b/graphics/pokemon/keldeo/resolute/front.png differ diff --git a/graphics/pokemon/kingdra/anim_front.png b/graphics/pokemon/kingdra/anim_front.png index 9d0372729..a44cd577d 100644 Binary files a/graphics/pokemon/kingdra/anim_front.png and b/graphics/pokemon/kingdra/anim_front.png differ diff --git a/graphics/pokemon/kingdra/back.png b/graphics/pokemon/kingdra/back.png index 11626702e..bab48255e 100644 Binary files a/graphics/pokemon/kingdra/back.png and b/graphics/pokemon/kingdra/back.png differ diff --git a/graphics/pokemon/kingler/back.png b/graphics/pokemon/kingler/back.png index e9ac8f7b5..94feeee73 100644 Binary files a/graphics/pokemon/kingler/back.png and b/graphics/pokemon/kingler/back.png differ diff --git a/graphics/pokemon/kirlia/anim_front.png b/graphics/pokemon/kirlia/anim_front.png index 445e684fc..17813ae7f 100644 Binary files a/graphics/pokemon/kirlia/anim_front.png and b/graphics/pokemon/kirlia/anim_front.png differ diff --git a/graphics/pokemon/kirlia/back.png b/graphics/pokemon/kirlia/back.png index 02f4476b1..2bd79fbb1 100644 Binary files a/graphics/pokemon/kirlia/back.png and b/graphics/pokemon/kirlia/back.png differ diff --git a/graphics/pokemon/kirlia/icon.png b/graphics/pokemon/kirlia/icon.png index 7aa3bfc65..f02a4fe7c 100644 Binary files a/graphics/pokemon/kirlia/icon.png and b/graphics/pokemon/kirlia/icon.png differ diff --git a/graphics/pokemon/klang/anim_front.png b/graphics/pokemon/klang/anim_front.png index d839f3d5f..8bd05ce48 100644 Binary files a/graphics/pokemon/klang/anim_front.png and b/graphics/pokemon/klang/anim_front.png differ diff --git a/graphics/pokemon/klang/back.png b/graphics/pokemon/klang/back.png index 4fb426c04..306924acd 100644 Binary files a/graphics/pokemon/klang/back.png and b/graphics/pokemon/klang/back.png differ diff --git a/graphics/pokemon/klang/icon.png b/graphics/pokemon/klang/icon.png index ced952fe3..1e31ed614 100644 Binary files a/graphics/pokemon/klang/icon.png and b/graphics/pokemon/klang/icon.png differ diff --git a/graphics/pokemon/kleavor/back.png b/graphics/pokemon/kleavor/back.png index 2d257c878..4300b2afb 100644 Binary files a/graphics/pokemon/kleavor/back.png and b/graphics/pokemon/kleavor/back.png differ diff --git a/graphics/pokemon/kleavor/front.png b/graphics/pokemon/kleavor/front.png index d7f35c064..cd2341c2a 100644 Binary files a/graphics/pokemon/kleavor/front.png and b/graphics/pokemon/kleavor/front.png differ diff --git a/graphics/pokemon/kleavor/icon.png b/graphics/pokemon/kleavor/icon.png index b617fda00..4443cc143 100644 Binary files a/graphics/pokemon/kleavor/icon.png and b/graphics/pokemon/kleavor/icon.png differ diff --git a/graphics/pokemon/klefki/anim_front.png b/graphics/pokemon/klefki/anim_front.png index ff97a7cdc..ea34c16c3 100644 Binary files a/graphics/pokemon/klefki/anim_front.png and b/graphics/pokemon/klefki/anim_front.png differ diff --git a/graphics/pokemon/klefki/back.png b/graphics/pokemon/klefki/back.png index 5dc2ffbf2..0f869b9c4 100644 Binary files a/graphics/pokemon/klefki/back.png and b/graphics/pokemon/klefki/back.png differ diff --git a/graphics/pokemon/klefki/icon.png b/graphics/pokemon/klefki/icon.png index 98e140ce3..15ea0d942 100644 Binary files a/graphics/pokemon/klefki/icon.png and b/graphics/pokemon/klefki/icon.png differ diff --git a/graphics/pokemon/klink/anim_front.png b/graphics/pokemon/klink/anim_front.png index 3cc3df3d3..76c5db96b 100644 Binary files a/graphics/pokemon/klink/anim_front.png and b/graphics/pokemon/klink/anim_front.png differ diff --git a/graphics/pokemon/klink/back.png b/graphics/pokemon/klink/back.png index c0d2d6f9f..58cadab62 100644 Binary files a/graphics/pokemon/klink/back.png and b/graphics/pokemon/klink/back.png differ diff --git a/graphics/pokemon/klink/icon.png b/graphics/pokemon/klink/icon.png index 46643f2fd..8f5deee30 100644 Binary files a/graphics/pokemon/klink/icon.png and b/graphics/pokemon/klink/icon.png differ diff --git a/graphics/pokemon/klinklang/anim_front.png b/graphics/pokemon/klinklang/anim_front.png index ccf323589..1f0a60ec3 100644 Binary files a/graphics/pokemon/klinklang/anim_front.png and b/graphics/pokemon/klinklang/anim_front.png differ diff --git a/graphics/pokemon/klinklang/back.png b/graphics/pokemon/klinklang/back.png index f56d6f8f6..4e056a68a 100644 Binary files a/graphics/pokemon/klinklang/back.png and b/graphics/pokemon/klinklang/back.png differ diff --git a/graphics/pokemon/klinklang/icon.png b/graphics/pokemon/klinklang/icon.png index bdf8de08a..56d83195b 100644 Binary files a/graphics/pokemon/klinklang/icon.png and b/graphics/pokemon/klinklang/icon.png differ diff --git a/graphics/pokemon/koffing/back.png b/graphics/pokemon/koffing/back.png index eb9e49d22..53938fdeb 100644 Binary files a/graphics/pokemon/koffing/back.png and b/graphics/pokemon/koffing/back.png differ diff --git a/graphics/pokemon/komala/back.png b/graphics/pokemon/komala/back.png index d82ce84e0..f830eb904 100644 Binary files a/graphics/pokemon/komala/back.png and b/graphics/pokemon/komala/back.png differ diff --git a/graphics/pokemon/komala/front.png b/graphics/pokemon/komala/front.png index 72173ea5c..8b8c6cb68 100644 Binary files a/graphics/pokemon/komala/front.png and b/graphics/pokemon/komala/front.png differ diff --git a/graphics/pokemon/komala/icon.png b/graphics/pokemon/komala/icon.png index e2bf43c12..6935e996c 100644 Binary files a/graphics/pokemon/komala/icon.png and b/graphics/pokemon/komala/icon.png differ diff --git a/graphics/pokemon/kommo_o/back.png b/graphics/pokemon/kommo_o/back.png index 187ba5c73..2da65a296 100644 Binary files a/graphics/pokemon/kommo_o/back.png and b/graphics/pokemon/kommo_o/back.png differ diff --git a/graphics/pokemon/kommo_o/icon.png b/graphics/pokemon/kommo_o/icon.png index b9354b7e6..3acaf5329 100644 Binary files a/graphics/pokemon/kommo_o/icon.png and b/graphics/pokemon/kommo_o/icon.png differ diff --git a/graphics/pokemon/krabby/back.png b/graphics/pokemon/krabby/back.png index 58aa0bce1..ef6d9fee5 100644 Binary files a/graphics/pokemon/krabby/back.png and b/graphics/pokemon/krabby/back.png differ diff --git a/graphics/pokemon/kricketot/back.png b/graphics/pokemon/kricketot/back.png index cdae389e5..9de86e0c9 100644 Binary files a/graphics/pokemon/kricketot/back.png and b/graphics/pokemon/kricketot/back.png differ diff --git a/graphics/pokemon/kricketot/icon.png b/graphics/pokemon/kricketot/icon.png index 29cb34edd..f15fa6f2b 100644 Binary files a/graphics/pokemon/kricketot/icon.png and b/graphics/pokemon/kricketot/icon.png differ diff --git a/graphics/pokemon/kricketune/back.png b/graphics/pokemon/kricketune/back.png index fa2a83f4f..79729f83b 100644 Binary files a/graphics/pokemon/kricketune/back.png and b/graphics/pokemon/kricketune/back.png differ diff --git a/graphics/pokemon/kricketune/icon.png b/graphics/pokemon/kricketune/icon.png index d875d454b..f49964f02 100644 Binary files a/graphics/pokemon/kricketune/icon.png and b/graphics/pokemon/kricketune/icon.png differ diff --git a/graphics/pokemon/krokorok/back.png b/graphics/pokemon/krokorok/back.png index cd10af03e..241a4efe9 100644 Binary files a/graphics/pokemon/krokorok/back.png and b/graphics/pokemon/krokorok/back.png differ diff --git a/graphics/pokemon/krokorok/icon.png b/graphics/pokemon/krokorok/icon.png index fab4ebe33..ba79a178b 100644 Binary files a/graphics/pokemon/krokorok/icon.png and b/graphics/pokemon/krokorok/icon.png differ diff --git a/graphics/pokemon/krookodile/anim_front.png b/graphics/pokemon/krookodile/anim_front.png index f216ae9bb..530488b9b 100644 Binary files a/graphics/pokemon/krookodile/anim_front.png and b/graphics/pokemon/krookodile/anim_front.png differ diff --git a/graphics/pokemon/krookodile/back.png b/graphics/pokemon/krookodile/back.png index 8facf782b..6e1b7a10b 100644 Binary files a/graphics/pokemon/krookodile/back.png and b/graphics/pokemon/krookodile/back.png differ diff --git a/graphics/pokemon/krookodile/icon.png b/graphics/pokemon/krookodile/icon.png index cbb075268..7e6cdc4d6 100644 Binary files a/graphics/pokemon/krookodile/icon.png and b/graphics/pokemon/krookodile/icon.png differ diff --git a/graphics/pokemon/kubfu/back.png b/graphics/pokemon/kubfu/back.png index ec05d8771..45c742c60 100644 Binary files a/graphics/pokemon/kubfu/back.png and b/graphics/pokemon/kubfu/back.png differ diff --git a/graphics/pokemon/kubfu/front.png b/graphics/pokemon/kubfu/front.png index 67c215076..cdec61554 100644 Binary files a/graphics/pokemon/kubfu/front.png and b/graphics/pokemon/kubfu/front.png differ diff --git a/graphics/pokemon/kubfu/icon.png b/graphics/pokemon/kubfu/icon.png index a4d91ef04..ea6d8c10e 100644 Binary files a/graphics/pokemon/kubfu/icon.png and b/graphics/pokemon/kubfu/icon.png differ diff --git a/graphics/pokemon/kyogre/anim_front.png b/graphics/pokemon/kyogre/anim_front.png index a7850d7e7..4cb8355bb 100644 Binary files a/graphics/pokemon/kyogre/anim_front.png and b/graphics/pokemon/kyogre/anim_front.png differ diff --git a/graphics/pokemon/kyogre/back.png b/graphics/pokemon/kyogre/back.png index 577691d03..2ff2b958e 100644 Binary files a/graphics/pokemon/kyogre/back.png and b/graphics/pokemon/kyogre/back.png differ diff --git a/graphics/pokemon/kyogre/icon.png b/graphics/pokemon/kyogre/icon.png index 0b6e9c461..03beb854e 100644 Binary files a/graphics/pokemon/kyogre/icon.png and b/graphics/pokemon/kyogre/icon.png differ diff --git a/graphics/pokemon/kyogre/primal/back.png b/graphics/pokemon/kyogre/primal/back.png index da1ef8ba7..654f706e0 100644 Binary files a/graphics/pokemon/kyogre/primal/back.png and b/graphics/pokemon/kyogre/primal/back.png differ diff --git a/graphics/pokemon/kyogre/primal/front.png b/graphics/pokemon/kyogre/primal/front.png index f7b36a043..1cc3baf00 100644 Binary files a/graphics/pokemon/kyogre/primal/front.png and b/graphics/pokemon/kyogre/primal/front.png differ diff --git a/graphics/pokemon/kyogre/primal/icon.png b/graphics/pokemon/kyogre/primal/icon.png index 0f6b18425..08ef79bb7 100644 Binary files a/graphics/pokemon/kyogre/primal/icon.png and b/graphics/pokemon/kyogre/primal/icon.png differ diff --git a/graphics/pokemon/kyurem/anim_front.png b/graphics/pokemon/kyurem/anim_front.png index e3724e83d..19f0080b9 100644 Binary files a/graphics/pokemon/kyurem/anim_front.png and b/graphics/pokemon/kyurem/anim_front.png differ diff --git a/graphics/pokemon/kyurem/back.png b/graphics/pokemon/kyurem/back.png index 47f7628f1..0000576c9 100644 Binary files a/graphics/pokemon/kyurem/back.png and b/graphics/pokemon/kyurem/back.png differ diff --git a/graphics/pokemon/kyurem/black/anim_front.png b/graphics/pokemon/kyurem/black/anim_front.png index e02f1f06e..97c8fa214 100644 Binary files a/graphics/pokemon/kyurem/black/anim_front.png and b/graphics/pokemon/kyurem/black/anim_front.png differ diff --git a/graphics/pokemon/kyurem/black/back.png b/graphics/pokemon/kyurem/black/back.png index c339231d9..4e9c83539 100644 Binary files a/graphics/pokemon/kyurem/black/back.png and b/graphics/pokemon/kyurem/black/back.png differ diff --git a/graphics/pokemon/kyurem/black/icon.png b/graphics/pokemon/kyurem/black/icon.png index 29d26e65d..3e5218fc0 100644 Binary files a/graphics/pokemon/kyurem/black/icon.png and b/graphics/pokemon/kyurem/black/icon.png differ diff --git a/graphics/pokemon/kyurem/white/anim_front.png b/graphics/pokemon/kyurem/white/anim_front.png index 431e67fb0..0f2185688 100644 Binary files a/graphics/pokemon/kyurem/white/anim_front.png and b/graphics/pokemon/kyurem/white/anim_front.png differ diff --git a/graphics/pokemon/kyurem/white/back.png b/graphics/pokemon/kyurem/white/back.png index 137655bff..0f76b5c45 100644 Binary files a/graphics/pokemon/kyurem/white/back.png and b/graphics/pokemon/kyurem/white/back.png differ diff --git a/graphics/pokemon/kyurem/white/icon.png b/graphics/pokemon/kyurem/white/icon.png index 3e78bfb63..877f297c0 100644 Binary files a/graphics/pokemon/kyurem/white/icon.png and b/graphics/pokemon/kyurem/white/icon.png differ diff --git a/graphics/pokemon/lairon/anim_front.png b/graphics/pokemon/lairon/anim_front.png index cff0296b6..79c345af4 100644 Binary files a/graphics/pokemon/lairon/anim_front.png and b/graphics/pokemon/lairon/anim_front.png differ diff --git a/graphics/pokemon/lairon/back.png b/graphics/pokemon/lairon/back.png index c57726bce..b549431e5 100644 Binary files a/graphics/pokemon/lairon/back.png and b/graphics/pokemon/lairon/back.png differ diff --git a/graphics/pokemon/lampent/anim_front.png b/graphics/pokemon/lampent/anim_front.png index 8be09c5da..766dc2d32 100644 Binary files a/graphics/pokemon/lampent/anim_front.png and b/graphics/pokemon/lampent/anim_front.png differ diff --git a/graphics/pokemon/lampent/back.png b/graphics/pokemon/lampent/back.png index 315f327bd..ae2a2291d 100644 Binary files a/graphics/pokemon/lampent/back.png and b/graphics/pokemon/lampent/back.png differ diff --git a/graphics/pokemon/lampent/icon.png b/graphics/pokemon/lampent/icon.png index cc8c63fa2..99ac442d7 100644 Binary files a/graphics/pokemon/lampent/icon.png and b/graphics/pokemon/lampent/icon.png differ diff --git a/graphics/pokemon/landorus/anim_front.png b/graphics/pokemon/landorus/anim_front.png index 13b09deed..762c5cd2e 100644 Binary files a/graphics/pokemon/landorus/anim_front.png and b/graphics/pokemon/landorus/anim_front.png differ diff --git a/graphics/pokemon/landorus/back.png b/graphics/pokemon/landorus/back.png index f79331c25..f70121ac4 100644 Binary files a/graphics/pokemon/landorus/back.png and b/graphics/pokemon/landorus/back.png differ diff --git a/graphics/pokemon/landorus/therian/anim_front.png b/graphics/pokemon/landorus/therian/anim_front.png index 456f43e43..2ea9efd8b 100644 Binary files a/graphics/pokemon/landorus/therian/anim_front.png and b/graphics/pokemon/landorus/therian/anim_front.png differ diff --git a/graphics/pokemon/landorus/therian/back.png b/graphics/pokemon/landorus/therian/back.png index 653dd9503..4ce12e84d 100644 Binary files a/graphics/pokemon/landorus/therian/back.png and b/graphics/pokemon/landorus/therian/back.png differ diff --git a/graphics/pokemon/landorus/therian/icon.png b/graphics/pokemon/landorus/therian/icon.png index eb03117d9..5dbe0c93d 100644 Binary files a/graphics/pokemon/landorus/therian/icon.png and b/graphics/pokemon/landorus/therian/icon.png differ diff --git a/graphics/pokemon/lanturn/back.png b/graphics/pokemon/lanturn/back.png index 2a1dfd70c..7268afd5c 100644 Binary files a/graphics/pokemon/lanturn/back.png and b/graphics/pokemon/lanturn/back.png differ diff --git a/graphics/pokemon/lanturn/icon.png b/graphics/pokemon/lanturn/icon.png index 37ead9ed8..2c5f696e6 100644 Binary files a/graphics/pokemon/lanturn/icon.png and b/graphics/pokemon/lanturn/icon.png differ diff --git a/graphics/pokemon/lapras/icon.png b/graphics/pokemon/lapras/icon.png index 2fd05fee8..97ac28458 100644 Binary files a/graphics/pokemon/lapras/icon.png and b/graphics/pokemon/lapras/icon.png differ diff --git a/graphics/pokemon/larvesta/anim_front.png b/graphics/pokemon/larvesta/anim_front.png index 413b989ac..9c3ddea2a 100644 Binary files a/graphics/pokemon/larvesta/anim_front.png and b/graphics/pokemon/larvesta/anim_front.png differ diff --git a/graphics/pokemon/larvesta/back.png b/graphics/pokemon/larvesta/back.png index 26e9b61e0..ed2206f84 100644 Binary files a/graphics/pokemon/larvesta/back.png and b/graphics/pokemon/larvesta/back.png differ diff --git a/graphics/pokemon/larvitar/anim_front.png b/graphics/pokemon/larvitar/anim_front.png index e2f92824c..5a52aa731 100644 Binary files a/graphics/pokemon/larvitar/anim_front.png and b/graphics/pokemon/larvitar/anim_front.png differ diff --git a/graphics/pokemon/larvitar/icon.png b/graphics/pokemon/larvitar/icon.png index 2247c85e5..56cbe32ab 100644 Binary files a/graphics/pokemon/larvitar/icon.png and b/graphics/pokemon/larvitar/icon.png differ diff --git a/graphics/pokemon/latias/anim_front.png b/graphics/pokemon/latias/anim_front.png index c7d591c6a..658003aea 100644 Binary files a/graphics/pokemon/latias/anim_front.png and b/graphics/pokemon/latias/anim_front.png differ diff --git a/graphics/pokemon/latias/back.png b/graphics/pokemon/latias/back.png index 941f49093..4cd29d317 100644 Binary files a/graphics/pokemon/latias/back.png and b/graphics/pokemon/latias/back.png differ diff --git a/graphics/pokemon/latias/mega/back.png b/graphics/pokemon/latias/mega/back.png index cc0bee56b..33bf9a297 100644 Binary files a/graphics/pokemon/latias/mega/back.png and b/graphics/pokemon/latias/mega/back.png differ diff --git a/graphics/pokemon/latias/mega/front.png b/graphics/pokemon/latias/mega/front.png index ca8b11e64..bb5135056 100644 Binary files a/graphics/pokemon/latias/mega/front.png and b/graphics/pokemon/latias/mega/front.png differ diff --git a/graphics/pokemon/latias/mega/icon.png b/graphics/pokemon/latias/mega/icon.png index 5988e298b..0d022d802 100644 Binary files a/graphics/pokemon/latias/mega/icon.png and b/graphics/pokemon/latias/mega/icon.png differ diff --git a/graphics/pokemon/latios/anim_front.png b/graphics/pokemon/latios/anim_front.png index 63e34da2e..5e952f156 100644 Binary files a/graphics/pokemon/latios/anim_front.png and b/graphics/pokemon/latios/anim_front.png differ diff --git a/graphics/pokemon/latios/back.png b/graphics/pokemon/latios/back.png index 81ac5b381..7c8884758 100644 Binary files a/graphics/pokemon/latios/back.png and b/graphics/pokemon/latios/back.png differ diff --git a/graphics/pokemon/latios/mega/back.png b/graphics/pokemon/latios/mega/back.png index 2f938d6ba..ce13049a7 100644 Binary files a/graphics/pokemon/latios/mega/back.png and b/graphics/pokemon/latios/mega/back.png differ diff --git a/graphics/pokemon/latios/mega/front.png b/graphics/pokemon/latios/mega/front.png index 4d536460e..cc20e9d1c 100644 Binary files a/graphics/pokemon/latios/mega/front.png and b/graphics/pokemon/latios/mega/front.png differ diff --git a/graphics/pokemon/latios/mega/icon.png b/graphics/pokemon/latios/mega/icon.png index acc9e11ff..8d594c2fa 100644 Binary files a/graphics/pokemon/latios/mega/icon.png and b/graphics/pokemon/latios/mega/icon.png differ diff --git a/graphics/pokemon/leafeon/anim_front.png b/graphics/pokemon/leafeon/anim_front.png index bb52cebc0..b3e39fc61 100644 Binary files a/graphics/pokemon/leafeon/anim_front.png and b/graphics/pokemon/leafeon/anim_front.png differ diff --git a/graphics/pokemon/leafeon/back.png b/graphics/pokemon/leafeon/back.png index d8f489ef2..ecf9a2fa3 100644 Binary files a/graphics/pokemon/leafeon/back.png and b/graphics/pokemon/leafeon/back.png differ diff --git a/graphics/pokemon/leavanny/anim_front.png b/graphics/pokemon/leavanny/anim_front.png index b827be85f..103cdd860 100644 Binary files a/graphics/pokemon/leavanny/anim_front.png and b/graphics/pokemon/leavanny/anim_front.png differ diff --git a/graphics/pokemon/leavanny/back.png b/graphics/pokemon/leavanny/back.png index 7dde38292..d1fbfc742 100644 Binary files a/graphics/pokemon/leavanny/back.png and b/graphics/pokemon/leavanny/back.png differ diff --git a/graphics/pokemon/leavanny/icon.png b/graphics/pokemon/leavanny/icon.png index 791cc235e..f8997ec19 100644 Binary files a/graphics/pokemon/leavanny/icon.png and b/graphics/pokemon/leavanny/icon.png differ diff --git a/graphics/pokemon/ledian/back.png b/graphics/pokemon/ledian/back.png index 290e6a101..31c64920b 100644 Binary files a/graphics/pokemon/ledian/back.png and b/graphics/pokemon/ledian/back.png differ diff --git a/graphics/pokemon/ledian/icon.png b/graphics/pokemon/ledian/icon.png index f77e95446..6497773ae 100644 Binary files a/graphics/pokemon/ledian/icon.png and b/graphics/pokemon/ledian/icon.png differ diff --git a/graphics/pokemon/ledyba/back.png b/graphics/pokemon/ledyba/back.png index 03d2fcd65..9749b828d 100644 Binary files a/graphics/pokemon/ledyba/back.png and b/graphics/pokemon/ledyba/back.png differ diff --git a/graphics/pokemon/ledyba/icon.png b/graphics/pokemon/ledyba/icon.png index 497067f1d..a4511c6ea 100644 Binary files a/graphics/pokemon/ledyba/icon.png and b/graphics/pokemon/ledyba/icon.png differ diff --git a/graphics/pokemon/lickilicky/anim_front.png b/graphics/pokemon/lickilicky/anim_front.png index c502d813b..38f23ec49 100644 Binary files a/graphics/pokemon/lickilicky/anim_front.png and b/graphics/pokemon/lickilicky/anim_front.png differ diff --git a/graphics/pokemon/lickilicky/back.png b/graphics/pokemon/lickilicky/back.png index 06a1bd6de..0bc7b3547 100644 Binary files a/graphics/pokemon/lickilicky/back.png and b/graphics/pokemon/lickilicky/back.png differ diff --git a/graphics/pokemon/lickilicky/icon.png b/graphics/pokemon/lickilicky/icon.png index 50ac18c8a..14d004ad5 100644 Binary files a/graphics/pokemon/lickilicky/icon.png and b/graphics/pokemon/lickilicky/icon.png differ diff --git a/graphics/pokemon/lickitung/anim_front.png b/graphics/pokemon/lickitung/anim_front.png index adf4441a6..1a6c1aa9c 100644 Binary files a/graphics/pokemon/lickitung/anim_front.png and b/graphics/pokemon/lickitung/anim_front.png differ diff --git a/graphics/pokemon/lickitung/back.png b/graphics/pokemon/lickitung/back.png index 69ebd16c6..ab93fb884 100644 Binary files a/graphics/pokemon/lickitung/back.png and b/graphics/pokemon/lickitung/back.png differ diff --git a/graphics/pokemon/lickitung/icon.png b/graphics/pokemon/lickitung/icon.png index 6e0e5f988..7e3fbf0fe 100644 Binary files a/graphics/pokemon/lickitung/icon.png and b/graphics/pokemon/lickitung/icon.png differ diff --git a/graphics/pokemon/liepard/anim_front.png b/graphics/pokemon/liepard/anim_front.png index 6d2836703..ce2932e71 100644 Binary files a/graphics/pokemon/liepard/anim_front.png and b/graphics/pokemon/liepard/anim_front.png differ diff --git a/graphics/pokemon/liepard/back.png b/graphics/pokemon/liepard/back.png index aaac4131e..1c557ec17 100644 Binary files a/graphics/pokemon/liepard/back.png and b/graphics/pokemon/liepard/back.png differ diff --git a/graphics/pokemon/liepard/icon.png b/graphics/pokemon/liepard/icon.png index 21d1c26f7..e5541263a 100644 Binary files a/graphics/pokemon/liepard/icon.png and b/graphics/pokemon/liepard/icon.png differ diff --git a/graphics/pokemon/lileep/anim_front.png b/graphics/pokemon/lileep/anim_front.png index afbc8289a..87ba440c2 100644 Binary files a/graphics/pokemon/lileep/anim_front.png and b/graphics/pokemon/lileep/anim_front.png differ diff --git a/graphics/pokemon/lileep/back.png b/graphics/pokemon/lileep/back.png index ea237e93d..b7499076f 100644 Binary files a/graphics/pokemon/lileep/back.png and b/graphics/pokemon/lileep/back.png differ diff --git a/graphics/pokemon/lilligant/anim_front.png b/graphics/pokemon/lilligant/anim_front.png index 20eb75562..0c8a907e7 100644 Binary files a/graphics/pokemon/lilligant/anim_front.png and b/graphics/pokemon/lilligant/anim_front.png differ diff --git a/graphics/pokemon/lilligant/back.png b/graphics/pokemon/lilligant/back.png index 7963da53f..667d772e9 100644 Binary files a/graphics/pokemon/lilligant/back.png and b/graphics/pokemon/lilligant/back.png differ diff --git a/graphics/pokemon/lilligant/hisuian/back.png b/graphics/pokemon/lilligant/hisuian/back.png index 0d55115c5..aefd8b022 100644 Binary files a/graphics/pokemon/lilligant/hisuian/back.png and b/graphics/pokemon/lilligant/hisuian/back.png differ diff --git a/graphics/pokemon/lilligant/hisuian/front.png b/graphics/pokemon/lilligant/hisuian/front.png index 254b0de78..6699ad47f 100644 Binary files a/graphics/pokemon/lilligant/hisuian/front.png and b/graphics/pokemon/lilligant/hisuian/front.png differ diff --git a/graphics/pokemon/lilligant/hisuian/icon.png b/graphics/pokemon/lilligant/hisuian/icon.png index b75e39484..c8149843f 100644 Binary files a/graphics/pokemon/lilligant/hisuian/icon.png and b/graphics/pokemon/lilligant/hisuian/icon.png differ diff --git a/graphics/pokemon/lilligant/icon.png b/graphics/pokemon/lilligant/icon.png index 9ba1d2224..d4c1c8a83 100644 Binary files a/graphics/pokemon/lilligant/icon.png and b/graphics/pokemon/lilligant/icon.png differ diff --git a/graphics/pokemon/lillipup/anim_front.png b/graphics/pokemon/lillipup/anim_front.png index 8a57a9e36..0a68cc533 100644 Binary files a/graphics/pokemon/lillipup/anim_front.png and b/graphics/pokemon/lillipup/anim_front.png differ diff --git a/graphics/pokemon/lillipup/back.png b/graphics/pokemon/lillipup/back.png index 68d6cff3b..61f08f1e7 100644 Binary files a/graphics/pokemon/lillipup/back.png and b/graphics/pokemon/lillipup/back.png differ diff --git a/graphics/pokemon/lillipup/icon.png b/graphics/pokemon/lillipup/icon.png index b4769c44d..7fbf9f44a 100644 Binary files a/graphics/pokemon/lillipup/icon.png and b/graphics/pokemon/lillipup/icon.png differ diff --git a/graphics/pokemon/linoone/anim_front.png b/graphics/pokemon/linoone/anim_front.png index 01be7de73..f2882dd04 100644 Binary files a/graphics/pokemon/linoone/anim_front.png and b/graphics/pokemon/linoone/anim_front.png differ diff --git a/graphics/pokemon/linoone/back.png b/graphics/pokemon/linoone/back.png index e18f05f96..c0c30a69d 100644 Binary files a/graphics/pokemon/linoone/back.png and b/graphics/pokemon/linoone/back.png differ diff --git a/graphics/pokemon/linoone/galarian/back.png b/graphics/pokemon/linoone/galarian/back.png index e33d3cce4..1ccb5486b 100644 Binary files a/graphics/pokemon/linoone/galarian/back.png and b/graphics/pokemon/linoone/galarian/back.png differ diff --git a/graphics/pokemon/linoone/galarian/front.png b/graphics/pokemon/linoone/galarian/front.png index 1049e8cff..6aba33036 100644 Binary files a/graphics/pokemon/linoone/galarian/front.png and b/graphics/pokemon/linoone/galarian/front.png differ diff --git a/graphics/pokemon/linoone/galarian/icon.png b/graphics/pokemon/linoone/galarian/icon.png index 57391b401..12437ca3e 100644 Binary files a/graphics/pokemon/linoone/galarian/icon.png and b/graphics/pokemon/linoone/galarian/icon.png differ diff --git a/graphics/pokemon/linoone/icon.png b/graphics/pokemon/linoone/icon.png index 2f97afd84..a1e1f96af 100644 Binary files a/graphics/pokemon/linoone/icon.png and b/graphics/pokemon/linoone/icon.png differ diff --git a/graphics/pokemon/litleo/anim_front.png b/graphics/pokemon/litleo/anim_front.png index 4175b5d0e..494800e11 100644 Binary files a/graphics/pokemon/litleo/anim_front.png and b/graphics/pokemon/litleo/anim_front.png differ diff --git a/graphics/pokemon/litleo/back.png b/graphics/pokemon/litleo/back.png index 5b775c26c..35d84e49b 100644 Binary files a/graphics/pokemon/litleo/back.png and b/graphics/pokemon/litleo/back.png differ diff --git a/graphics/pokemon/litleo/icon.png b/graphics/pokemon/litleo/icon.png index 60416d1ab..bb5f59fd8 100644 Binary files a/graphics/pokemon/litleo/icon.png and b/graphics/pokemon/litleo/icon.png differ diff --git a/graphics/pokemon/litten/back.png b/graphics/pokemon/litten/back.png index 8b346daa1..7250f7b80 100644 Binary files a/graphics/pokemon/litten/back.png and b/graphics/pokemon/litten/back.png differ diff --git a/graphics/pokemon/litten/front.png b/graphics/pokemon/litten/front.png index ee03ce0f7..f4d99ae21 100644 Binary files a/graphics/pokemon/litten/front.png and b/graphics/pokemon/litten/front.png differ diff --git a/graphics/pokemon/litten/icon.png b/graphics/pokemon/litten/icon.png index 677f1d4c7..5602732b4 100644 Binary files a/graphics/pokemon/litten/icon.png and b/graphics/pokemon/litten/icon.png differ diff --git a/graphics/pokemon/litwick/anim_front.png b/graphics/pokemon/litwick/anim_front.png index 29ed04862..10189cd52 100644 Binary files a/graphics/pokemon/litwick/anim_front.png and b/graphics/pokemon/litwick/anim_front.png differ diff --git a/graphics/pokemon/litwick/back.png b/graphics/pokemon/litwick/back.png index a5f34ad25..258030f4f 100644 Binary files a/graphics/pokemon/litwick/back.png and b/graphics/pokemon/litwick/back.png differ diff --git a/graphics/pokemon/litwick/icon.png b/graphics/pokemon/litwick/icon.png index 4a90f6319..2cc69b77f 100644 Binary files a/graphics/pokemon/litwick/icon.png and b/graphics/pokemon/litwick/icon.png differ diff --git a/graphics/pokemon/lombre/back.png b/graphics/pokemon/lombre/back.png index 2ab93c074..e04d5d483 100644 Binary files a/graphics/pokemon/lombre/back.png and b/graphics/pokemon/lombre/back.png differ diff --git a/graphics/pokemon/lombre/icon.png b/graphics/pokemon/lombre/icon.png index 8747ca455..e0c7b4631 100644 Binary files a/graphics/pokemon/lombre/icon.png and b/graphics/pokemon/lombre/icon.png differ diff --git a/graphics/pokemon/lopunny/anim_front.png b/graphics/pokemon/lopunny/anim_front.png index f88757d59..5bef71243 100644 Binary files a/graphics/pokemon/lopunny/anim_front.png and b/graphics/pokemon/lopunny/anim_front.png differ diff --git a/graphics/pokemon/lopunny/back.png b/graphics/pokemon/lopunny/back.png index c897039ca..9f14452a2 100644 Binary files a/graphics/pokemon/lopunny/back.png and b/graphics/pokemon/lopunny/back.png differ diff --git a/graphics/pokemon/lopunny/icon.png b/graphics/pokemon/lopunny/icon.png index 8511142bb..4dea6a47e 100644 Binary files a/graphics/pokemon/lopunny/icon.png and b/graphics/pokemon/lopunny/icon.png differ diff --git a/graphics/pokemon/lopunny/mega/back.png b/graphics/pokemon/lopunny/mega/back.png index 28fe47e44..2e6c6565e 100644 Binary files a/graphics/pokemon/lopunny/mega/back.png and b/graphics/pokemon/lopunny/mega/back.png differ diff --git a/graphics/pokemon/lopunny/mega/front.png b/graphics/pokemon/lopunny/mega/front.png index 09c8451ae..4de84f030 100644 Binary files a/graphics/pokemon/lopunny/mega/front.png and b/graphics/pokemon/lopunny/mega/front.png differ diff --git a/graphics/pokemon/lopunny/mega/icon.png b/graphics/pokemon/lopunny/mega/icon.png index 28f35c147..652bb9757 100644 Binary files a/graphics/pokemon/lopunny/mega/icon.png and b/graphics/pokemon/lopunny/mega/icon.png differ diff --git a/graphics/pokemon/lotad/anim_front.png b/graphics/pokemon/lotad/anim_front.png index 1c8dd71eb..cadc74768 100644 Binary files a/graphics/pokemon/lotad/anim_front.png and b/graphics/pokemon/lotad/anim_front.png differ diff --git a/graphics/pokemon/lotad/back.png b/graphics/pokemon/lotad/back.png index eb1df9826..1d25c71ed 100644 Binary files a/graphics/pokemon/lotad/back.png and b/graphics/pokemon/lotad/back.png differ diff --git a/graphics/pokemon/lotad/icon.png b/graphics/pokemon/lotad/icon.png index f87f5873e..8be23d48d 100644 Binary files a/graphics/pokemon/lotad/icon.png and b/graphics/pokemon/lotad/icon.png differ diff --git a/graphics/pokemon/loudred/anim_front.png b/graphics/pokemon/loudred/anim_front.png index 0d54a2a04..71912b382 100644 Binary files a/graphics/pokemon/loudred/anim_front.png and b/graphics/pokemon/loudred/anim_front.png differ diff --git a/graphics/pokemon/loudred/back.png b/graphics/pokemon/loudred/back.png index 871515e76..cc4f6cafd 100644 Binary files a/graphics/pokemon/loudred/back.png and b/graphics/pokemon/loudred/back.png differ diff --git a/graphics/pokemon/loudred/icon.png b/graphics/pokemon/loudred/icon.png index 5a8c265fe..cb8d66666 100644 Binary files a/graphics/pokemon/loudred/icon.png and b/graphics/pokemon/loudred/icon.png differ diff --git a/graphics/pokemon/lucario/anim_front.png b/graphics/pokemon/lucario/anim_front.png index 2b8ec0748..3425fd37b 100644 Binary files a/graphics/pokemon/lucario/anim_front.png and b/graphics/pokemon/lucario/anim_front.png differ diff --git a/graphics/pokemon/lucario/icon.png b/graphics/pokemon/lucario/icon.png index 30149ae98..b5c346364 100644 Binary files a/graphics/pokemon/lucario/icon.png and b/graphics/pokemon/lucario/icon.png differ diff --git a/graphics/pokemon/lucario/mega/back.png b/graphics/pokemon/lucario/mega/back.png index f99ad7777..2e3a5736f 100644 Binary files a/graphics/pokemon/lucario/mega/back.png and b/graphics/pokemon/lucario/mega/back.png differ diff --git a/graphics/pokemon/lucario/mega/front.png b/graphics/pokemon/lucario/mega/front.png index b99181972..6a97527d0 100644 Binary files a/graphics/pokemon/lucario/mega/front.png and b/graphics/pokemon/lucario/mega/front.png differ diff --git a/graphics/pokemon/lucario/mega/icon.png b/graphics/pokemon/lucario/mega/icon.png index e09d4c9ff..6023baa5d 100644 Binary files a/graphics/pokemon/lucario/mega/icon.png and b/graphics/pokemon/lucario/mega/icon.png differ diff --git a/graphics/pokemon/ludicolo/anim_front.png b/graphics/pokemon/ludicolo/anim_front.png index fc060ee36..2796df8df 100644 Binary files a/graphics/pokemon/ludicolo/anim_front.png and b/graphics/pokemon/ludicolo/anim_front.png differ diff --git a/graphics/pokemon/ludicolo/back.png b/graphics/pokemon/ludicolo/back.png index adf34db0a..d2b6b4cca 100644 Binary files a/graphics/pokemon/ludicolo/back.png and b/graphics/pokemon/ludicolo/back.png differ diff --git a/graphics/pokemon/ludicolo/icon.png b/graphics/pokemon/ludicolo/icon.png index ef7e2e2a0..c6c61239e 100644 Binary files a/graphics/pokemon/ludicolo/icon.png and b/graphics/pokemon/ludicolo/icon.png differ diff --git a/graphics/pokemon/lugia/anim_front.png b/graphics/pokemon/lugia/anim_front.png index 4b7b6e25e..fbe467fb6 100644 Binary files a/graphics/pokemon/lugia/anim_front.png and b/graphics/pokemon/lugia/anim_front.png differ diff --git a/graphics/pokemon/lugia/back.png b/graphics/pokemon/lugia/back.png index 3e94f84d7..24e768d35 100644 Binary files a/graphics/pokemon/lugia/back.png and b/graphics/pokemon/lugia/back.png differ diff --git a/graphics/pokemon/lumineon/anim_front.png b/graphics/pokemon/lumineon/anim_front.png index c61819170..29ef5dd7b 100644 Binary files a/graphics/pokemon/lumineon/anim_front.png and b/graphics/pokemon/lumineon/anim_front.png differ diff --git a/graphics/pokemon/lumineon/back.png b/graphics/pokemon/lumineon/back.png index a902b5716..1b6e29bf2 100644 Binary files a/graphics/pokemon/lumineon/back.png and b/graphics/pokemon/lumineon/back.png differ diff --git a/graphics/pokemon/lumineon/icon.png b/graphics/pokemon/lumineon/icon.png index 24ce090f0..48da3c340 100644 Binary files a/graphics/pokemon/lumineon/icon.png and b/graphics/pokemon/lumineon/icon.png differ diff --git a/graphics/pokemon/lunala/back.png b/graphics/pokemon/lunala/back.png index 29868c04b..b4f341d7c 100644 Binary files a/graphics/pokemon/lunala/back.png and b/graphics/pokemon/lunala/back.png differ diff --git a/graphics/pokemon/lunala/front.png b/graphics/pokemon/lunala/front.png index c6490b9f1..90ee7d040 100644 Binary files a/graphics/pokemon/lunala/front.png and b/graphics/pokemon/lunala/front.png differ diff --git a/graphics/pokemon/lunala/icon.png b/graphics/pokemon/lunala/icon.png index 913974878..036b9b371 100644 Binary files a/graphics/pokemon/lunala/icon.png and b/graphics/pokemon/lunala/icon.png differ diff --git a/graphics/pokemon/lunatone/anim_front.png b/graphics/pokemon/lunatone/anim_front.png index 7967e05d9..20b840401 100644 Binary files a/graphics/pokemon/lunatone/anim_front.png and b/graphics/pokemon/lunatone/anim_front.png differ diff --git a/graphics/pokemon/lunatone/back.png b/graphics/pokemon/lunatone/back.png index 05c4f397b..71dbd1a46 100644 Binary files a/graphics/pokemon/lunatone/back.png and b/graphics/pokemon/lunatone/back.png differ diff --git a/graphics/pokemon/lunatone/icon.png b/graphics/pokemon/lunatone/icon.png index f89c89683..b6f6c5526 100644 Binary files a/graphics/pokemon/lunatone/icon.png and b/graphics/pokemon/lunatone/icon.png differ diff --git a/graphics/pokemon/lurantis/back.png b/graphics/pokemon/lurantis/back.png index d1cc705b1..a080a77f0 100644 Binary files a/graphics/pokemon/lurantis/back.png and b/graphics/pokemon/lurantis/back.png differ diff --git a/graphics/pokemon/lurantis/front.png b/graphics/pokemon/lurantis/front.png index 8e51a5286..f73999e0d 100644 Binary files a/graphics/pokemon/lurantis/front.png and b/graphics/pokemon/lurantis/front.png differ diff --git a/graphics/pokemon/lurantis/icon.png b/graphics/pokemon/lurantis/icon.png index 062de5bbe..893f651b0 100644 Binary files a/graphics/pokemon/lurantis/icon.png and b/graphics/pokemon/lurantis/icon.png differ diff --git a/graphics/pokemon/luvdisc/anim_front.png b/graphics/pokemon/luvdisc/anim_front.png index dc03adef1..631ab8f09 100644 Binary files a/graphics/pokemon/luvdisc/anim_front.png and b/graphics/pokemon/luvdisc/anim_front.png differ diff --git a/graphics/pokemon/luvdisc/back.png b/graphics/pokemon/luvdisc/back.png index cf4822316..743e11e05 100644 Binary files a/graphics/pokemon/luvdisc/back.png and b/graphics/pokemon/luvdisc/back.png differ diff --git a/graphics/pokemon/luvdisc/icon.png b/graphics/pokemon/luvdisc/icon.png index 8c79f916b..e94f51979 100644 Binary files a/graphics/pokemon/luvdisc/icon.png and b/graphics/pokemon/luvdisc/icon.png differ diff --git a/graphics/pokemon/luxio/icon.png b/graphics/pokemon/luxio/icon.png index 8ccb19b47..bf3696a2a 100644 Binary files a/graphics/pokemon/luxio/icon.png and b/graphics/pokemon/luxio/icon.png differ diff --git a/graphics/pokemon/lycanroc/back.png b/graphics/pokemon/lycanroc/back.png index 322264704..afdf38c6a 100644 Binary files a/graphics/pokemon/lycanroc/back.png and b/graphics/pokemon/lycanroc/back.png differ diff --git a/graphics/pokemon/lycanroc/dusk/back.png b/graphics/pokemon/lycanroc/dusk/back.png index 6a68e0acd..d17f1dc63 100644 Binary files a/graphics/pokemon/lycanroc/dusk/back.png and b/graphics/pokemon/lycanroc/dusk/back.png differ diff --git a/graphics/pokemon/lycanroc/dusk/icon.png b/graphics/pokemon/lycanroc/dusk/icon.png index a3b8ef3a8..7ff67638d 100644 Binary files a/graphics/pokemon/lycanroc/dusk/icon.png and b/graphics/pokemon/lycanroc/dusk/icon.png differ diff --git a/graphics/pokemon/lycanroc/front.png b/graphics/pokemon/lycanroc/front.png index 02ea3ad91..a5058205e 100644 Binary files a/graphics/pokemon/lycanroc/front.png and b/graphics/pokemon/lycanroc/front.png differ diff --git a/graphics/pokemon/lycanroc/icon.png b/graphics/pokemon/lycanroc/icon.png index 85cbb86d4..8ae431337 100644 Binary files a/graphics/pokemon/lycanroc/icon.png and b/graphics/pokemon/lycanroc/icon.png differ diff --git a/graphics/pokemon/lycanroc/midnight/back.png b/graphics/pokemon/lycanroc/midnight/back.png index 821fe5212..7f5356abf 100644 Binary files a/graphics/pokemon/lycanroc/midnight/back.png and b/graphics/pokemon/lycanroc/midnight/back.png differ diff --git a/graphics/pokemon/lycanroc/midnight/icon.png b/graphics/pokemon/lycanroc/midnight/icon.png index 5908770b1..f6b98c949 100644 Binary files a/graphics/pokemon/lycanroc/midnight/icon.png and b/graphics/pokemon/lycanroc/midnight/icon.png differ diff --git a/graphics/pokemon/machamp/anim_front.png b/graphics/pokemon/machamp/anim_front.png index 914f620c7..4b4c47e88 100644 Binary files a/graphics/pokemon/machamp/anim_front.png and b/graphics/pokemon/machamp/anim_front.png differ diff --git a/graphics/pokemon/machamp/back.png b/graphics/pokemon/machamp/back.png index 88b043558..7b9f905cf 100644 Binary files a/graphics/pokemon/machamp/back.png and b/graphics/pokemon/machamp/back.png differ diff --git a/graphics/pokemon/machamp/icon.png b/graphics/pokemon/machamp/icon.png index 7d4b471d5..d8ca5daa5 100644 Binary files a/graphics/pokemon/machamp/icon.png and b/graphics/pokemon/machamp/icon.png differ diff --git a/graphics/pokemon/machamp/normal.pal b/graphics/pokemon/machamp/normal.pal index b08105e30..c91323082 100644 --- a/graphics/pokemon/machamp/normal.pal +++ b/graphics/pokemon/machamp/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +0 0 0 +74 74 98 65 82 98 131 139 148 164 180 180 -0 0 0 -112 96 72 -74 74 98 +197 213 222 +82 65 0 +131 115 41 172 156 65 -184 0 0 -248 248 248 -128 112 40 -240 232 152 -80 64 0 -200 192 96 -224 80 56 -168 48 16 +205 197 98 +246 238 156 +255 74 57 +189 0 0 +205 222 238 +255 255 255 diff --git a/graphics/pokemon/machamp/shiny.pal b/graphics/pokemon/machamp/shiny.pal index 3bbeb6722..20887b0aa 100644 --- a/graphics/pokemon/machamp/shiny.pal +++ b/graphics/pokemon/machamp/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -56 80 24 -104 136 56 -152 184 88 -8 8 8 -80 64 24 +152 160 208 +0 0 0 49 74 0 -160 152 80 -184 32 32 -248 248 248 -128 112 40 -216 208 144 -80 64 24 -200 192 96 -248 104 88 -184 32 32 +74 106 16 +106 139 41 +148 189 74 +172 222 106 +82 65 0 +131 115 41 +172 156 65 +205 197 98 +246 238 156 +255 74 57 +189 0 0 +205 222 238 +255 255 255 diff --git a/graphics/pokemon/machoke/anim_front.png b/graphics/pokemon/machoke/anim_front.png index 0698723bb..d770f9910 100644 Binary files a/graphics/pokemon/machoke/anim_front.png and b/graphics/pokemon/machoke/anim_front.png differ diff --git a/graphics/pokemon/machoke/back.png b/graphics/pokemon/machoke/back.png index 8d0c23169..0403e37ad 100644 Binary files a/graphics/pokemon/machoke/back.png and b/graphics/pokemon/machoke/back.png differ diff --git a/graphics/pokemon/machoke/icon.png b/graphics/pokemon/machoke/icon.png index fa54dce1d..7a8fe8224 100644 Binary files a/graphics/pokemon/machoke/icon.png and b/graphics/pokemon/machoke/icon.png differ diff --git a/graphics/pokemon/machoke/normal.pal b/graphics/pokemon/machoke/normal.pal index 1dab6bec2..60348197e 100644 --- a/graphics/pokemon/machoke/normal.pal +++ b/graphics/pokemon/machoke/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -82 57 0 -16 16 16 -238 230 139 -205 189 98 -139 115 180 -189 156 230 +0 0 0 +74 74 98 106 49 131 +139 115 180 +164 139 205 +189 156 230 205 189 230 -197 0 0 -248 248 248 -156 57 123 -240 224 120 -72 72 96 -200 176 96 +82 57 0 131 115 41 +205 189 98 +238 230 139 +156 57 123 +197 0 0 +205 222 238 +255 255 255 diff --git a/graphics/pokemon/machoke/shiny.pal b/graphics/pokemon/machoke/shiny.pal index 0a5c93d31..640441c22 100644 --- a/graphics/pokemon/machoke/shiny.pal +++ b/graphics/pokemon/machoke/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -248 160 176 -96 72 24 -16 16 16 -232 224 136 -200 184 96 -104 136 56 -144 184 112 -40 88 0 -176 216 144 -32 120 176 -248 248 248 -24 96 136 -232 224 136 -72 72 96 -200 184 96 -128 112 40 +208 152 160 +0 0 0 +16 65 0 +41 90 0 +82 115 41 +123 156 90 +148 189 115 +180 222 148 +82 57 0 +131 115 41 +205 189 98 +238 230 139 +0 98 156 +0 115 197 +205 222 238 +255 255 255 diff --git a/graphics/pokemon/machop/anim_front.png b/graphics/pokemon/machop/anim_front.png index 805d96efb..3cd8f1210 100644 Binary files a/graphics/pokemon/machop/anim_front.png and b/graphics/pokemon/machop/anim_front.png differ diff --git a/graphics/pokemon/machop/back.png b/graphics/pokemon/machop/back.png index 8c8a28c8d..2d4cdb607 100644 Binary files a/graphics/pokemon/machop/back.png and b/graphics/pokemon/machop/back.png differ diff --git a/graphics/pokemon/machop/icon.png b/graphics/pokemon/machop/icon.png index 2ff89045d..535e998b1 100644 Binary files a/graphics/pokemon/machop/icon.png and b/graphics/pokemon/machop/icon.png differ diff --git a/graphics/pokemon/machop/normal.pal b/graphics/pokemon/machop/normal.pal index 7274f6250..8a8b66f91 100644 --- a/graphics/pokemon/machop/normal.pal +++ b/graphics/pokemon/machop/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -107 82 33 -239 230 140 -173 156 90 -206 189 99 +160 152 208 0 0 0 -148 189 189 -90 123 107 -173 214 197 41 74 82 +90 123 106 +115 164 164 +148 189 189 +172 213 197 +255 0 255 +106 82 32 +172 156 90 +205 189 98 +238 230 139 255 255 255 -239 82 82 -181 0 0 -115 165 165 -240 80 80 -255 132 140 +180 0 0 +238 82 82 +255 131 139 diff --git a/graphics/pokemon/machop/shiny.pal b/graphics/pokemon/machop/shiny.pal index 620971b69..10b8e11c7 100644 --- a/graphics/pokemon/machop/shiny.pal +++ b/graphics/pokemon/machop/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 80 32 -232 224 136 -168 152 88 -200 184 96 -16 16 16 -176 168 120 -96 88 56 -208 208 152 -64 56 16 -248 248 248 -224 96 88 -160 40 40 -136 128 88 -224 96 88 -248 128 136 +0 0 0 +65 57 16 +106 98 57 +148 139 90 +189 180 123 +222 222 156 +255 0 255 +106 82 32 +172 156 90 +205 189 98 +238 230 139 +255 255 255 +180 0 0 +238 82 82 +255 131 139 diff --git a/graphics/pokemon/magby/anim_front.png b/graphics/pokemon/magby/anim_front.png index b46614b96..19c543b8b 100644 Binary files a/graphics/pokemon/magby/anim_front.png and b/graphics/pokemon/magby/anim_front.png differ diff --git a/graphics/pokemon/magby/back.png b/graphics/pokemon/magby/back.png index 6c70c8578..59c8220e3 100644 Binary files a/graphics/pokemon/magby/back.png and b/graphics/pokemon/magby/back.png differ diff --git a/graphics/pokemon/magby/icon.png b/graphics/pokemon/magby/icon.png index 3765f8c52..5fa36dce2 100644 Binary files a/graphics/pokemon/magby/icon.png and b/graphics/pokemon/magby/icon.png differ diff --git a/graphics/pokemon/magcargo/anim_front.png b/graphics/pokemon/magcargo/anim_front.png index 99daf54d8..5d7450fab 100644 Binary files a/graphics/pokemon/magcargo/anim_front.png and b/graphics/pokemon/magcargo/anim_front.png differ diff --git a/graphics/pokemon/magcargo/back.png b/graphics/pokemon/magcargo/back.png index 4a751836a..3d40c9744 100644 Binary files a/graphics/pokemon/magcargo/back.png and b/graphics/pokemon/magcargo/back.png differ diff --git a/graphics/pokemon/magcargo/icon.png b/graphics/pokemon/magcargo/icon.png index d6fd85ba2..85e78ec68 100644 Binary files a/graphics/pokemon/magcargo/icon.png and b/graphics/pokemon/magcargo/icon.png differ diff --git a/graphics/pokemon/magearna/icon.png b/graphics/pokemon/magearna/icon.png index af8009a98..cfb4c0664 100644 Binary files a/graphics/pokemon/magearna/icon.png and b/graphics/pokemon/magearna/icon.png differ diff --git a/graphics/pokemon/magikarp/back.png b/graphics/pokemon/magikarp/back.png index 63569d647..b8af93ae6 100644 Binary files a/graphics/pokemon/magikarp/back.png and b/graphics/pokemon/magikarp/back.png differ diff --git a/graphics/pokemon/magikarp/icon.png b/graphics/pokemon/magikarp/icon.png index 4b03fad87..6b5559823 100644 Binary files a/graphics/pokemon/magikarp/icon.png and b/graphics/pokemon/magikarp/icon.png differ diff --git a/graphics/pokemon/magmar/back.png b/graphics/pokemon/magmar/back.png index 8d931b20d..4b8c0aab2 100644 Binary files a/graphics/pokemon/magmar/back.png and b/graphics/pokemon/magmar/back.png differ diff --git a/graphics/pokemon/magmar/icon.png b/graphics/pokemon/magmar/icon.png index 22ff1b833..1c553ef2f 100644 Binary files a/graphics/pokemon/magmar/icon.png and b/graphics/pokemon/magmar/icon.png differ diff --git a/graphics/pokemon/magmortar/anim_front.png b/graphics/pokemon/magmortar/anim_front.png index fc0d37186..3f0531e11 100644 Binary files a/graphics/pokemon/magmortar/anim_front.png and b/graphics/pokemon/magmortar/anim_front.png differ diff --git a/graphics/pokemon/magmortar/back.png b/graphics/pokemon/magmortar/back.png index af616882c..486ba64af 100644 Binary files a/graphics/pokemon/magmortar/back.png and b/graphics/pokemon/magmortar/back.png differ diff --git a/graphics/pokemon/magmortar/icon.png b/graphics/pokemon/magmortar/icon.png index 9d884866f..025e630d4 100644 Binary files a/graphics/pokemon/magmortar/icon.png and b/graphics/pokemon/magmortar/icon.png differ diff --git a/graphics/pokemon/magnemite/back.png b/graphics/pokemon/magnemite/back.png index f6c421503..e1b35043b 100644 Binary files a/graphics/pokemon/magnemite/back.png and b/graphics/pokemon/magnemite/back.png differ diff --git a/graphics/pokemon/magneton/back.png b/graphics/pokemon/magneton/back.png index d0ffef7d4..7a45ee78d 100644 Binary files a/graphics/pokemon/magneton/back.png and b/graphics/pokemon/magneton/back.png differ diff --git a/graphics/pokemon/magnezone/anim_front.png b/graphics/pokemon/magnezone/anim_front.png index 859947ae1..c9230b368 100644 Binary files a/graphics/pokemon/magnezone/anim_front.png and b/graphics/pokemon/magnezone/anim_front.png differ diff --git a/graphics/pokemon/magnezone/back.png b/graphics/pokemon/magnezone/back.png index 67230e720..fc400281d 100644 Binary files a/graphics/pokemon/magnezone/back.png and b/graphics/pokemon/magnezone/back.png differ diff --git a/graphics/pokemon/magnezone/icon.png b/graphics/pokemon/magnezone/icon.png index 1db70af68..b80791d1f 100644 Binary files a/graphics/pokemon/magnezone/icon.png and b/graphics/pokemon/magnezone/icon.png differ diff --git a/graphics/pokemon/makuhita/anim_front.png b/graphics/pokemon/makuhita/anim_front.png index 557f31b90..aca8179e6 100644 Binary files a/graphics/pokemon/makuhita/anim_front.png and b/graphics/pokemon/makuhita/anim_front.png differ diff --git a/graphics/pokemon/makuhita/back.png b/graphics/pokemon/makuhita/back.png index 127b84147..8731bc0a9 100644 Binary files a/graphics/pokemon/makuhita/back.png and b/graphics/pokemon/makuhita/back.png differ diff --git a/graphics/pokemon/makuhita/icon.png b/graphics/pokemon/makuhita/icon.png index d324fbed6..ed89f64e4 100644 Binary files a/graphics/pokemon/makuhita/icon.png and b/graphics/pokemon/makuhita/icon.png differ diff --git a/graphics/pokemon/malamar/anim_front.png b/graphics/pokemon/malamar/anim_front.png index 234741d74..f68817441 100644 Binary files a/graphics/pokemon/malamar/anim_front.png and b/graphics/pokemon/malamar/anim_front.png differ diff --git a/graphics/pokemon/malamar/back.png b/graphics/pokemon/malamar/back.png index de4dc940d..5bfe6a985 100644 Binary files a/graphics/pokemon/malamar/back.png and b/graphics/pokemon/malamar/back.png differ diff --git a/graphics/pokemon/malamar/icon.png b/graphics/pokemon/malamar/icon.png index b53d4f937..fc73934b2 100644 Binary files a/graphics/pokemon/malamar/icon.png and b/graphics/pokemon/malamar/icon.png differ diff --git a/graphics/pokemon/mamoswine/anim_front.png b/graphics/pokemon/mamoswine/anim_front.png index 515514217..dd42d13b6 100644 Binary files a/graphics/pokemon/mamoswine/anim_front.png and b/graphics/pokemon/mamoswine/anim_front.png differ diff --git a/graphics/pokemon/mamoswine/back.png b/graphics/pokemon/mamoswine/back.png index 8519a4ccc..5414fda62 100644 Binary files a/graphics/pokemon/mamoswine/back.png and b/graphics/pokemon/mamoswine/back.png differ diff --git a/graphics/pokemon/mamoswine/icon.png b/graphics/pokemon/mamoswine/icon.png index 012b94387..93e673ad6 100644 Binary files a/graphics/pokemon/mamoswine/icon.png and b/graphics/pokemon/mamoswine/icon.png differ diff --git a/graphics/pokemon/manaphy/anim_front.png b/graphics/pokemon/manaphy/anim_front.png index a1d3676e9..b9934eee7 100644 Binary files a/graphics/pokemon/manaphy/anim_front.png and b/graphics/pokemon/manaphy/anim_front.png differ diff --git a/graphics/pokemon/manaphy/back.png b/graphics/pokemon/manaphy/back.png index beab65fbc..a90d766bb 100644 Binary files a/graphics/pokemon/manaphy/back.png and b/graphics/pokemon/manaphy/back.png differ diff --git a/graphics/pokemon/mandibuzz/anim_front.png b/graphics/pokemon/mandibuzz/anim_front.png index 6d211ba18..701457ff3 100644 Binary files a/graphics/pokemon/mandibuzz/anim_front.png and b/graphics/pokemon/mandibuzz/anim_front.png differ diff --git a/graphics/pokemon/mandibuzz/back.png b/graphics/pokemon/mandibuzz/back.png index f5992b197..9d93a03cf 100644 Binary files a/graphics/pokemon/mandibuzz/back.png and b/graphics/pokemon/mandibuzz/back.png differ diff --git a/graphics/pokemon/mandibuzz/icon.png b/graphics/pokemon/mandibuzz/icon.png index 58b9da75c..345f6359c 100644 Binary files a/graphics/pokemon/mandibuzz/icon.png and b/graphics/pokemon/mandibuzz/icon.png differ diff --git a/graphics/pokemon/manectric/anim_front.png b/graphics/pokemon/manectric/anim_front.png index 4a1288465..ce1293dad 100644 Binary files a/graphics/pokemon/manectric/anim_front.png and b/graphics/pokemon/manectric/anim_front.png differ diff --git a/graphics/pokemon/manectric/back.png b/graphics/pokemon/manectric/back.png index 2ca64c655..9777f648d 100644 Binary files a/graphics/pokemon/manectric/back.png and b/graphics/pokemon/manectric/back.png differ diff --git a/graphics/pokemon/manectric/mega/back.png b/graphics/pokemon/manectric/mega/back.png index a6466e634..76f8e83ca 100644 Binary files a/graphics/pokemon/manectric/mega/back.png and b/graphics/pokemon/manectric/mega/back.png differ diff --git a/graphics/pokemon/manectric/mega/front.png b/graphics/pokemon/manectric/mega/front.png index 0bc6dc449..dcb98671b 100644 Binary files a/graphics/pokemon/manectric/mega/front.png and b/graphics/pokemon/manectric/mega/front.png differ diff --git a/graphics/pokemon/manectric/mega/icon.png b/graphics/pokemon/manectric/mega/icon.png index e5313ddae..fca8eeffe 100644 Binary files a/graphics/pokemon/manectric/mega/icon.png and b/graphics/pokemon/manectric/mega/icon.png differ diff --git a/graphics/pokemon/mankey/anim_front.png b/graphics/pokemon/mankey/anim_front.png index afd2815e3..435869073 100644 Binary files a/graphics/pokemon/mankey/anim_front.png and b/graphics/pokemon/mankey/anim_front.png differ diff --git a/graphics/pokemon/mankey/back.png b/graphics/pokemon/mankey/back.png index c10eefa25..283dac52d 100644 Binary files a/graphics/pokemon/mankey/back.png and b/graphics/pokemon/mankey/back.png differ diff --git a/graphics/pokemon/mankey/icon.png b/graphics/pokemon/mankey/icon.png index 531bb5b7b..014ac7244 100644 Binary files a/graphics/pokemon/mankey/icon.png and b/graphics/pokemon/mankey/icon.png differ diff --git a/graphics/pokemon/mankey/normal.pal b/graphics/pokemon/mankey/normal.pal index b0b0e0fbf..c25dd02a6 100644 --- a/graphics/pokemon/mankey/normal.pal +++ b/graphics/pokemon/mankey/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -115 65 0 -222 164 115 +255 255 255 +222 222 222 +255 230 189 +238 180 139 +238 115 98 +180 65 49 16 16 16 +255 197 131 +222 164 115 197 115 74 +115 65 0 +255 246 205 246 222 180 213 172 156 -248 248 248 -248 120 104 -180 65 49 -238 115 98 -238 115 98 -238 180 139 -248 192 168 -248 232 224 -104 72 48 +106 74 41 diff --git a/graphics/pokemon/mankey/shiny.pal b/graphics/pokemon/mankey/shiny.pal index 6daaf349a..d4ad43c9c 100644 --- a/graphics/pokemon/mankey/shiny.pal +++ b/graphics/pokemon/mankey/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -104 88 32 -200 176 112 +152 160 208 +255 255 255 +222 222 222 +255 230 189 +238 180 139 +238 115 98 +180 65 49 16 16 16 -176 128 72 -192 224 160 -152 168 112 -248 248 248 -248 120 104 -152 80 72 -200 88 64 -224 128 112 -232 176 136 -216 208 128 -224 248 200 -80 104 48 +222 213 131 +205 180 115 +180 131 74 +106 82 0 +230 255 205 +197 238 156 +164 180 115 +90 123 41 diff --git a/graphics/pokemon/mantine/anim_front.png b/graphics/pokemon/mantine/anim_front.png index 4b2d203f5..603f1e029 100644 Binary files a/graphics/pokemon/mantine/anim_front.png and b/graphics/pokemon/mantine/anim_front.png differ diff --git a/graphics/pokemon/mantine/back.png b/graphics/pokemon/mantine/back.png index 2e8db428d..ef33e760a 100644 Binary files a/graphics/pokemon/mantine/back.png and b/graphics/pokemon/mantine/back.png differ diff --git a/graphics/pokemon/mantine/icon.png b/graphics/pokemon/mantine/icon.png index a2b404ff5..e72507df9 100644 Binary files a/graphics/pokemon/mantine/icon.png and b/graphics/pokemon/mantine/icon.png differ diff --git a/graphics/pokemon/mantyke/anim_front.png b/graphics/pokemon/mantyke/anim_front.png index 4b7b62f9a..9a3162211 100644 Binary files a/graphics/pokemon/mantyke/anim_front.png and b/graphics/pokemon/mantyke/anim_front.png differ diff --git a/graphics/pokemon/mantyke/back.png b/graphics/pokemon/mantyke/back.png index ae0bf3770..c98b265f3 100644 Binary files a/graphics/pokemon/mantyke/back.png and b/graphics/pokemon/mantyke/back.png differ diff --git a/graphics/pokemon/mantyke/icon.png b/graphics/pokemon/mantyke/icon.png index c1be595ce..4db3ea3a0 100644 Binary files a/graphics/pokemon/mantyke/icon.png and b/graphics/pokemon/mantyke/icon.png differ diff --git a/graphics/pokemon/maractus/anim_front.png b/graphics/pokemon/maractus/anim_front.png index cd790ab71..da44901b8 100644 Binary files a/graphics/pokemon/maractus/anim_front.png and b/graphics/pokemon/maractus/anim_front.png differ diff --git a/graphics/pokemon/maractus/back.png b/graphics/pokemon/maractus/back.png index 4a6107aae..bc83adca5 100644 Binary files a/graphics/pokemon/maractus/back.png and b/graphics/pokemon/maractus/back.png differ diff --git a/graphics/pokemon/maractus/icon.png b/graphics/pokemon/maractus/icon.png index 314a0da42..a01611b2f 100644 Binary files a/graphics/pokemon/maractus/icon.png and b/graphics/pokemon/maractus/icon.png differ diff --git a/graphics/pokemon/mareanie/back.png b/graphics/pokemon/mareanie/back.png index fdcc7af07..fd9ac27e9 100644 Binary files a/graphics/pokemon/mareanie/back.png and b/graphics/pokemon/mareanie/back.png differ diff --git a/graphics/pokemon/mareanie/front.png b/graphics/pokemon/mareanie/front.png index 7643da7b4..6bf9dd059 100644 Binary files a/graphics/pokemon/mareanie/front.png and b/graphics/pokemon/mareanie/front.png differ diff --git a/graphics/pokemon/mareanie/icon.png b/graphics/pokemon/mareanie/icon.png index 40934c36d..7b7dc44fb 100644 Binary files a/graphics/pokemon/mareanie/icon.png and b/graphics/pokemon/mareanie/icon.png differ diff --git a/graphics/pokemon/mareep/icon.png b/graphics/pokemon/mareep/icon.png index f7c37dc03..5fdd5183d 100644 Binary files a/graphics/pokemon/mareep/icon.png and b/graphics/pokemon/mareep/icon.png differ diff --git a/graphics/pokemon/marill/anim_front.png b/graphics/pokemon/marill/anim_front.png index f4fae57e3..e9815f489 100644 Binary files a/graphics/pokemon/marill/anim_front.png and b/graphics/pokemon/marill/anim_front.png differ diff --git a/graphics/pokemon/marill/back.png b/graphics/pokemon/marill/back.png index 61676c01b..8eb2c5da1 100644 Binary files a/graphics/pokemon/marill/back.png and b/graphics/pokemon/marill/back.png differ diff --git a/graphics/pokemon/marill/icon.png b/graphics/pokemon/marill/icon.png index 6c2edeed9..1113feb24 100644 Binary files a/graphics/pokemon/marill/icon.png and b/graphics/pokemon/marill/icon.png differ diff --git a/graphics/pokemon/marowak/alolan/back.png b/graphics/pokemon/marowak/alolan/back.png index cc901739d..69e99db6a 100644 Binary files a/graphics/pokemon/marowak/alolan/back.png and b/graphics/pokemon/marowak/alolan/back.png differ diff --git a/graphics/pokemon/marowak/alolan/front.png b/graphics/pokemon/marowak/alolan/front.png index 652a08ebc..cfd9e37b4 100644 Binary files a/graphics/pokemon/marowak/alolan/front.png and b/graphics/pokemon/marowak/alolan/front.png differ diff --git a/graphics/pokemon/marowak/alolan/icon.png b/graphics/pokemon/marowak/alolan/icon.png index 7af392b2b..3ea2a868c 100644 Binary files a/graphics/pokemon/marowak/alolan/icon.png and b/graphics/pokemon/marowak/alolan/icon.png differ diff --git a/graphics/pokemon/marowak/back.png b/graphics/pokemon/marowak/back.png index 6293711c4..76acb2c82 100644 Binary files a/graphics/pokemon/marowak/back.png and b/graphics/pokemon/marowak/back.png differ diff --git a/graphics/pokemon/marshadow/anim_front.png b/graphics/pokemon/marshadow/anim_front.png index 37cb05327..866348de4 100644 Binary files a/graphics/pokemon/marshadow/anim_front.png and b/graphics/pokemon/marshadow/anim_front.png differ diff --git a/graphics/pokemon/marshadow/back.png b/graphics/pokemon/marshadow/back.png index b6ddb3d97..7e53e86b2 100644 Binary files a/graphics/pokemon/marshadow/back.png and b/graphics/pokemon/marshadow/back.png differ diff --git a/graphics/pokemon/marshadow/icon.png b/graphics/pokemon/marshadow/icon.png index 5ac013d4a..e7fb5674d 100644 Binary files a/graphics/pokemon/marshadow/icon.png and b/graphics/pokemon/marshadow/icon.png differ diff --git a/graphics/pokemon/marshtomp/anim_front.png b/graphics/pokemon/marshtomp/anim_front.png index 8514a02ea..384e5aa3e 100644 Binary files a/graphics/pokemon/marshtomp/anim_front.png and b/graphics/pokemon/marshtomp/anim_front.png differ diff --git a/graphics/pokemon/marshtomp/icon.png b/graphics/pokemon/marshtomp/icon.png index 0cb17213f..41a6fba6d 100644 Binary files a/graphics/pokemon/marshtomp/icon.png and b/graphics/pokemon/marshtomp/icon.png differ diff --git a/graphics/pokemon/masquerain/back.png b/graphics/pokemon/masquerain/back.png index c6f11d6c6..c824de1cd 100644 Binary files a/graphics/pokemon/masquerain/back.png and b/graphics/pokemon/masquerain/back.png differ diff --git a/graphics/pokemon/masquerain/icon.png b/graphics/pokemon/masquerain/icon.png index d44da9adc..cf9cc1317 100644 Binary files a/graphics/pokemon/masquerain/icon.png and b/graphics/pokemon/masquerain/icon.png differ diff --git a/graphics/pokemon/mawile/anim_front.png b/graphics/pokemon/mawile/anim_front.png index 684f52761..b19c8fceb 100644 Binary files a/graphics/pokemon/mawile/anim_front.png and b/graphics/pokemon/mawile/anim_front.png differ diff --git a/graphics/pokemon/mawile/back.png b/graphics/pokemon/mawile/back.png index 059778897..2455232c2 100644 Binary files a/graphics/pokemon/mawile/back.png and b/graphics/pokemon/mawile/back.png differ diff --git a/graphics/pokemon/mawile/mega/back.png b/graphics/pokemon/mawile/mega/back.png index 7cac134ea..bce83460e 100644 Binary files a/graphics/pokemon/mawile/mega/back.png and b/graphics/pokemon/mawile/mega/back.png differ diff --git a/graphics/pokemon/mawile/mega/front.png b/graphics/pokemon/mawile/mega/front.png index ee50483e1..5ab49d557 100644 Binary files a/graphics/pokemon/mawile/mega/front.png and b/graphics/pokemon/mawile/mega/front.png differ diff --git a/graphics/pokemon/mawile/mega/icon.png b/graphics/pokemon/mawile/mega/icon.png index e0f228ed1..6fdec15cc 100644 Binary files a/graphics/pokemon/mawile/mega/icon.png and b/graphics/pokemon/mawile/mega/icon.png differ diff --git a/graphics/pokemon/medicham/back.png b/graphics/pokemon/medicham/back.png index 636fc0483..afe746eb6 100644 Binary files a/graphics/pokemon/medicham/back.png and b/graphics/pokemon/medicham/back.png differ diff --git a/graphics/pokemon/medicham/mega/back.png b/graphics/pokemon/medicham/mega/back.png index 685379f2b..692470be7 100644 Binary files a/graphics/pokemon/medicham/mega/back.png and b/graphics/pokemon/medicham/mega/back.png differ diff --git a/graphics/pokemon/medicham/mega/front.png b/graphics/pokemon/medicham/mega/front.png index 188d17827..d375b55d4 100644 Binary files a/graphics/pokemon/medicham/mega/front.png and b/graphics/pokemon/medicham/mega/front.png differ diff --git a/graphics/pokemon/medicham/mega/icon.png b/graphics/pokemon/medicham/mega/icon.png index d59b3a037..acb021da4 100644 Binary files a/graphics/pokemon/medicham/mega/icon.png and b/graphics/pokemon/medicham/mega/icon.png differ diff --git a/graphics/pokemon/meditite/icon.png b/graphics/pokemon/meditite/icon.png index d685fd5b8..5dfeab7d7 100644 Binary files a/graphics/pokemon/meditite/icon.png and b/graphics/pokemon/meditite/icon.png differ diff --git a/graphics/pokemon/meganium/back.png b/graphics/pokemon/meganium/back.png index f05c199e5..0dd1d8218 100644 Binary files a/graphics/pokemon/meganium/back.png and b/graphics/pokemon/meganium/back.png differ diff --git a/graphics/pokemon/melmetal/back.png b/graphics/pokemon/melmetal/back.png index dc6954175..26889e2d1 100644 Binary files a/graphics/pokemon/melmetal/back.png and b/graphics/pokemon/melmetal/back.png differ diff --git a/graphics/pokemon/melmetal/front.png b/graphics/pokemon/melmetal/front.png index e73661648..1eaf80672 100644 Binary files a/graphics/pokemon/melmetal/front.png and b/graphics/pokemon/melmetal/front.png differ diff --git a/graphics/pokemon/melmetal/icon.png b/graphics/pokemon/melmetal/icon.png index 10cc39db4..fa70c6b6b 100644 Binary files a/graphics/pokemon/melmetal/icon.png and b/graphics/pokemon/melmetal/icon.png differ diff --git a/graphics/pokemon/meloetta/anim_front.png b/graphics/pokemon/meloetta/anim_front.png index 511566d9d..59587eedb 100644 Binary files a/graphics/pokemon/meloetta/anim_front.png and b/graphics/pokemon/meloetta/anim_front.png differ diff --git a/graphics/pokemon/meloetta/back.png b/graphics/pokemon/meloetta/back.png index 63dde56e2..dababcd31 100644 Binary files a/graphics/pokemon/meloetta/back.png and b/graphics/pokemon/meloetta/back.png differ diff --git a/graphics/pokemon/meloetta/pirouette/back.png b/graphics/pokemon/meloetta/pirouette/back.png index d48d1aa74..7cf58872b 100644 Binary files a/graphics/pokemon/meloetta/pirouette/back.png and b/graphics/pokemon/meloetta/pirouette/back.png differ diff --git a/graphics/pokemon/meloetta/pirouette/front.png b/graphics/pokemon/meloetta/pirouette/front.png index a00347324..a3b532860 100644 Binary files a/graphics/pokemon/meloetta/pirouette/front.png and b/graphics/pokemon/meloetta/pirouette/front.png differ diff --git a/graphics/pokemon/meloetta/pirouette/icon.png b/graphics/pokemon/meloetta/pirouette/icon.png index 3929aa1a8..1e1fef9e7 100644 Binary files a/graphics/pokemon/meloetta/pirouette/icon.png and b/graphics/pokemon/meloetta/pirouette/icon.png differ diff --git a/graphics/pokemon/meltan/back.png b/graphics/pokemon/meltan/back.png index df8821076..d2785c36d 100644 Binary files a/graphics/pokemon/meltan/back.png and b/graphics/pokemon/meltan/back.png differ diff --git a/graphics/pokemon/meltan/front.png b/graphics/pokemon/meltan/front.png index 528bb4794..97ebff0de 100644 Binary files a/graphics/pokemon/meltan/front.png and b/graphics/pokemon/meltan/front.png differ diff --git a/graphics/pokemon/meltan/icon.png b/graphics/pokemon/meltan/icon.png index 5069fab47..17fb4f96b 100644 Binary files a/graphics/pokemon/meltan/icon.png and b/graphics/pokemon/meltan/icon.png differ diff --git a/graphics/pokemon/meowstic/anim_front.png b/graphics/pokemon/meowstic/anim_front.png index b44643574..e4d9b1e43 100644 Binary files a/graphics/pokemon/meowstic/anim_front.png and b/graphics/pokemon/meowstic/anim_front.png differ diff --git a/graphics/pokemon/meowstic/back.png b/graphics/pokemon/meowstic/back.png index 3faef99bb..1c7d9610f 100644 Binary files a/graphics/pokemon/meowstic/back.png and b/graphics/pokemon/meowstic/back.png differ diff --git a/graphics/pokemon/meowstic/female/anim_front.png b/graphics/pokemon/meowstic/female/anim_front.png index 6982cc35a..53b386c49 100644 Binary files a/graphics/pokemon/meowstic/female/anim_front.png and b/graphics/pokemon/meowstic/female/anim_front.png differ diff --git a/graphics/pokemon/meowstic/female/back.png b/graphics/pokemon/meowstic/female/back.png index 6abf2ed7b..42b7f9cc7 100644 Binary files a/graphics/pokemon/meowstic/female/back.png and b/graphics/pokemon/meowstic/female/back.png differ diff --git a/graphics/pokemon/meowstic/female/icon.png b/graphics/pokemon/meowstic/female/icon.png index 4f9bc1fad..379bd27f9 100644 Binary files a/graphics/pokemon/meowstic/female/icon.png and b/graphics/pokemon/meowstic/female/icon.png differ diff --git a/graphics/pokemon/meowstic/icon.png b/graphics/pokemon/meowstic/icon.png index 17126853a..4e115005f 100644 Binary files a/graphics/pokemon/meowstic/icon.png and b/graphics/pokemon/meowstic/icon.png differ diff --git a/graphics/pokemon/meowth/alolan/back.png b/graphics/pokemon/meowth/alolan/back.png index 3e851c5ef..84eafdae0 100644 Binary files a/graphics/pokemon/meowth/alolan/back.png and b/graphics/pokemon/meowth/alolan/back.png differ diff --git a/graphics/pokemon/meowth/alolan/front.png b/graphics/pokemon/meowth/alolan/front.png index 6b1c52d60..9f174a597 100644 Binary files a/graphics/pokemon/meowth/alolan/front.png and b/graphics/pokemon/meowth/alolan/front.png differ diff --git a/graphics/pokemon/meowth/alolan/icon.png b/graphics/pokemon/meowth/alolan/icon.png index 0d64e3aa2..d4b80eb6b 100644 Binary files a/graphics/pokemon/meowth/alolan/icon.png and b/graphics/pokemon/meowth/alolan/icon.png differ diff --git a/graphics/pokemon/meowth/anim_front.png b/graphics/pokemon/meowth/anim_front.png index 22a12d4f5..ff750a7cb 100644 Binary files a/graphics/pokemon/meowth/anim_front.png and b/graphics/pokemon/meowth/anim_front.png differ diff --git a/graphics/pokemon/meowth/back.png b/graphics/pokemon/meowth/back.png index af728214f..acf5ae7c2 100644 Binary files a/graphics/pokemon/meowth/back.png and b/graphics/pokemon/meowth/back.png differ diff --git a/graphics/pokemon/meowth/galarian/back.png b/graphics/pokemon/meowth/galarian/back.png index 7040b58c8..a7ad396e7 100644 Binary files a/graphics/pokemon/meowth/galarian/back.png and b/graphics/pokemon/meowth/galarian/back.png differ diff --git a/graphics/pokemon/meowth/galarian/front.png b/graphics/pokemon/meowth/galarian/front.png index c3d880993..05c6ee6db 100644 Binary files a/graphics/pokemon/meowth/galarian/front.png and b/graphics/pokemon/meowth/galarian/front.png differ diff --git a/graphics/pokemon/meowth/galarian/icon.png b/graphics/pokemon/meowth/galarian/icon.png index 4a8a7db60..5292f0b54 100644 Binary files a/graphics/pokemon/meowth/galarian/icon.png and b/graphics/pokemon/meowth/galarian/icon.png differ diff --git a/graphics/pokemon/meowth/normal.pal b/graphics/pokemon/meowth/normal.pal index 133349470..f49558023 100644 --- a/graphics/pokemon/meowth/normal.pal +++ b/graphics/pokemon/meowth/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 104 0 -248 224 128 -16 16 16 +255 255 255 +230 230 230 +255 213 0 +205 164 0 148 90 0 -248 248 248 -248 208 0 -200 160 0 -192 120 8 -216 184 56 -216 216 216 255 115 82 -232 152 48 -148 65 0 213 90 57 -0 0 0 +16 16 16 +238 156 49 +197 123 8 +148 65 0 +255 255 180 +255 230 131 +222 189 57 +136 104 0 diff --git a/graphics/pokemon/meowth/shiny.pal b/graphics/pokemon/meowth/shiny.pal index 0aba58a22..4c6c84229 100644 --- a/graphics/pokemon/meowth/shiny.pal +++ b/graphics/pokemon/meowth/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 72 24 -255 205 131 -16 16 16 -136 72 24 -248 248 248 -248 208 0 -200 160 0 -208 88 112 -216 160 64 -224 224 224 -248 112 80 -248 128 144 -172 41 57 +255 255 255 +230 230 230 +255 213 0 +205 164 0 +148 90 0 +255 115 82 213 90 57 -0 0 0 +16 16 16 +246 123 139 +213 82 106 +172 41 57 +255 238 180 +255 205 131 +222 156 57 +156 65 0 diff --git a/graphics/pokemon/mesprit/anim_front.png b/graphics/pokemon/mesprit/anim_front.png index d3e02e56f..bd48e34c8 100644 Binary files a/graphics/pokemon/mesprit/anim_front.png and b/graphics/pokemon/mesprit/anim_front.png differ diff --git a/graphics/pokemon/mesprit/back.png b/graphics/pokemon/mesprit/back.png index 686144387..b3be041ea 100644 Binary files a/graphics/pokemon/mesprit/back.png and b/graphics/pokemon/mesprit/back.png differ diff --git a/graphics/pokemon/metagross/anim_front.png b/graphics/pokemon/metagross/anim_front.png index a810d9add..c04a8b3e7 100644 Binary files a/graphics/pokemon/metagross/anim_front.png and b/graphics/pokemon/metagross/anim_front.png differ diff --git a/graphics/pokemon/metagross/back.png b/graphics/pokemon/metagross/back.png index 301008734..fa14922c6 100644 Binary files a/graphics/pokemon/metagross/back.png and b/graphics/pokemon/metagross/back.png differ diff --git a/graphics/pokemon/metagross/icon.png b/graphics/pokemon/metagross/icon.png index fe451800f..fa3053197 100644 Binary files a/graphics/pokemon/metagross/icon.png and b/graphics/pokemon/metagross/icon.png differ diff --git a/graphics/pokemon/metagross/mega/icon.png b/graphics/pokemon/metagross/mega/icon.png index 608cdf120..76a04a67f 100644 Binary files a/graphics/pokemon/metagross/mega/icon.png and b/graphics/pokemon/metagross/mega/icon.png differ diff --git a/graphics/pokemon/metang/anim_front.png b/graphics/pokemon/metang/anim_front.png index 64961fba8..c70198db7 100644 Binary files a/graphics/pokemon/metang/anim_front.png and b/graphics/pokemon/metang/anim_front.png differ diff --git a/graphics/pokemon/metang/back.png b/graphics/pokemon/metang/back.png index 68d6754d3..aad09e496 100644 Binary files a/graphics/pokemon/metang/back.png and b/graphics/pokemon/metang/back.png differ diff --git a/graphics/pokemon/metapod/anim_front.png b/graphics/pokemon/metapod/anim_front.png index 6640f3cbc..d5ebef9a6 100644 Binary files a/graphics/pokemon/metapod/anim_front.png and b/graphics/pokemon/metapod/anim_front.png differ diff --git a/graphics/pokemon/metapod/back.png b/graphics/pokemon/metapod/back.png index 59657b7f1..7649fae75 100644 Binary files a/graphics/pokemon/metapod/back.png and b/graphics/pokemon/metapod/back.png differ diff --git a/graphics/pokemon/metapod/icon.png b/graphics/pokemon/metapod/icon.png index 896c1858a..cd84b979c 100644 Binary files a/graphics/pokemon/metapod/icon.png and b/graphics/pokemon/metapod/icon.png differ diff --git a/graphics/pokemon/metapod/normal.pal b/graphics/pokemon/metapod/normal.pal index 8bdd97c5e..8147ad328 100644 --- a/graphics/pokemon/metapod/normal.pal +++ b/graphics/pokemon/metapod/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -72 104 80 -176 224 80 -56 80 56 -128 192 72 -104 136 88 -0 0 0 -104 160 72 -248 248 248 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +152 160 208 +57 74 65 +74 106 82 +106 139 90 +106 164 74 +131 197 74 +180 230 82 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 255 255 0 0 0 diff --git a/graphics/pokemon/metapod/shiny.pal b/graphics/pokemon/metapod/shiny.pal index bf33e8df6..900c80de0 100644 --- a/graphics/pokemon/metapod/shiny.pal +++ b/graphics/pokemon/metapod/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 56 24 -248 168 120 -96 24 0 -248 112 56 -192 88 24 -16 16 16 -224 104 48 -248 248 248 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +98 24 0 +148 57 24 +197 90 24 +230 106 49 +255 115 57 +255 172 123 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 255 255 0 0 0 diff --git a/graphics/pokemon/mew/back.png b/graphics/pokemon/mew/back.png index bbaaa33d9..674c6b666 100644 Binary files a/graphics/pokemon/mew/back.png and b/graphics/pokemon/mew/back.png differ diff --git a/graphics/pokemon/mewtwo/back.png b/graphics/pokemon/mewtwo/back.png index aec286d7b..2deab236a 100644 Binary files a/graphics/pokemon/mewtwo/back.png and b/graphics/pokemon/mewtwo/back.png differ diff --git a/graphics/pokemon/mewtwo/mega_x/back.png b/graphics/pokemon/mewtwo/mega_x/back.png index 32276bfac..e910d8e29 100644 Binary files a/graphics/pokemon/mewtwo/mega_x/back.png and b/graphics/pokemon/mewtwo/mega_x/back.png differ diff --git a/graphics/pokemon/mewtwo/mega_x/front.png b/graphics/pokemon/mewtwo/mega_x/front.png index 98e3e50d2..83d35b036 100644 Binary files a/graphics/pokemon/mewtwo/mega_x/front.png and b/graphics/pokemon/mewtwo/mega_x/front.png differ diff --git a/graphics/pokemon/mewtwo/mega_x/icon.png b/graphics/pokemon/mewtwo/mega_x/icon.png index ab857b0b6..dfee66356 100644 Binary files a/graphics/pokemon/mewtwo/mega_x/icon.png and b/graphics/pokemon/mewtwo/mega_x/icon.png differ diff --git a/graphics/pokemon/mewtwo/mega_y/back.png b/graphics/pokemon/mewtwo/mega_y/back.png index 6cc24a826..d908b5051 100644 Binary files a/graphics/pokemon/mewtwo/mega_y/back.png and b/graphics/pokemon/mewtwo/mega_y/back.png differ diff --git a/graphics/pokemon/mewtwo/mega_y/front.png b/graphics/pokemon/mewtwo/mega_y/front.png index a83bb8bdf..f796174f2 100644 Binary files a/graphics/pokemon/mewtwo/mega_y/front.png and b/graphics/pokemon/mewtwo/mega_y/front.png differ diff --git a/graphics/pokemon/mewtwo/mega_y/icon.png b/graphics/pokemon/mewtwo/mega_y/icon.png index 0b5fb53da..67cfc7f40 100644 Binary files a/graphics/pokemon/mewtwo/mega_y/icon.png and b/graphics/pokemon/mewtwo/mega_y/icon.png differ diff --git a/graphics/pokemon/mienfoo/anim_front.png b/graphics/pokemon/mienfoo/anim_front.png index 6fe019243..9e772faa4 100644 Binary files a/graphics/pokemon/mienfoo/anim_front.png and b/graphics/pokemon/mienfoo/anim_front.png differ diff --git a/graphics/pokemon/mienfoo/back.png b/graphics/pokemon/mienfoo/back.png index 91b73f07d..2ba5066c8 100644 Binary files a/graphics/pokemon/mienfoo/back.png and b/graphics/pokemon/mienfoo/back.png differ diff --git a/graphics/pokemon/mienshao/anim_front.png b/graphics/pokemon/mienshao/anim_front.png index 860b6b641..598dad2d0 100644 Binary files a/graphics/pokemon/mienshao/anim_front.png and b/graphics/pokemon/mienshao/anim_front.png differ diff --git a/graphics/pokemon/mienshao/back.png b/graphics/pokemon/mienshao/back.png index 43157c337..98e9b6e11 100644 Binary files a/graphics/pokemon/mienshao/back.png and b/graphics/pokemon/mienshao/back.png differ diff --git a/graphics/pokemon/mightyena/anim_front.png b/graphics/pokemon/mightyena/anim_front.png index 24f486df6..90f55dfdf 100644 Binary files a/graphics/pokemon/mightyena/anim_front.png and b/graphics/pokemon/mightyena/anim_front.png differ diff --git a/graphics/pokemon/mightyena/back.png b/graphics/pokemon/mightyena/back.png index 975019118..fad59cf11 100644 Binary files a/graphics/pokemon/mightyena/back.png and b/graphics/pokemon/mightyena/back.png differ diff --git a/graphics/pokemon/mightyena/icon.png b/graphics/pokemon/mightyena/icon.png index 3067e7e0e..ad5f379da 100644 Binary files a/graphics/pokemon/mightyena/icon.png and b/graphics/pokemon/mightyena/icon.png differ diff --git a/graphics/pokemon/milcery/back.png b/graphics/pokemon/milcery/back.png index 661ef00c7..fec01e631 100644 Binary files a/graphics/pokemon/milcery/back.png and b/graphics/pokemon/milcery/back.png differ diff --git a/graphics/pokemon/milcery/front.png b/graphics/pokemon/milcery/front.png index 11460701d..3271cbe17 100644 Binary files a/graphics/pokemon/milcery/front.png and b/graphics/pokemon/milcery/front.png differ diff --git a/graphics/pokemon/milcery/icon.png b/graphics/pokemon/milcery/icon.png index 9edf83068..0e0b54d6c 100644 Binary files a/graphics/pokemon/milcery/icon.png and b/graphics/pokemon/milcery/icon.png differ diff --git a/graphics/pokemon/miltank/anim_front.png b/graphics/pokemon/miltank/anim_front.png index 857bbeaba..97eb281ed 100644 Binary files a/graphics/pokemon/miltank/anim_front.png and b/graphics/pokemon/miltank/anim_front.png differ diff --git a/graphics/pokemon/miltank/back.png b/graphics/pokemon/miltank/back.png index 98c21ec46..ce0113ab2 100644 Binary files a/graphics/pokemon/miltank/back.png and b/graphics/pokemon/miltank/back.png differ diff --git a/graphics/pokemon/miltank/icon.png b/graphics/pokemon/miltank/icon.png index d63715cbb..b0b6caf92 100644 Binary files a/graphics/pokemon/miltank/icon.png and b/graphics/pokemon/miltank/icon.png differ diff --git a/graphics/pokemon/mime_jr/anim_front.png b/graphics/pokemon/mime_jr/anim_front.png index 72620db84..bd97d354d 100644 Binary files a/graphics/pokemon/mime_jr/anim_front.png and b/graphics/pokemon/mime_jr/anim_front.png differ diff --git a/graphics/pokemon/mime_jr/back.png b/graphics/pokemon/mime_jr/back.png index 834cf2ecb..d6c059b3f 100644 Binary files a/graphics/pokemon/mime_jr/back.png and b/graphics/pokemon/mime_jr/back.png differ diff --git a/graphics/pokemon/mime_jr/icon.png b/graphics/pokemon/mime_jr/icon.png index 5fd6d871d..454d59948 100644 Binary files a/graphics/pokemon/mime_jr/icon.png and b/graphics/pokemon/mime_jr/icon.png differ diff --git a/graphics/pokemon/mimikyu/back.png b/graphics/pokemon/mimikyu/back.png index ea35006b6..557789a6b 100644 Binary files a/graphics/pokemon/mimikyu/back.png and b/graphics/pokemon/mimikyu/back.png differ diff --git a/graphics/pokemon/mimikyu/front.png b/graphics/pokemon/mimikyu/front.png index 85157ea9a..9d1a9181d 100644 Binary files a/graphics/pokemon/mimikyu/front.png and b/graphics/pokemon/mimikyu/front.png differ diff --git a/graphics/pokemon/mimikyu/icon.png b/graphics/pokemon/mimikyu/icon.png index 960acf04a..89c587683 100644 Binary files a/graphics/pokemon/mimikyu/icon.png and b/graphics/pokemon/mimikyu/icon.png differ diff --git a/graphics/pokemon/minccino/anim_front.png b/graphics/pokemon/minccino/anim_front.png index ceb8f0292..f2942a2cb 100644 Binary files a/graphics/pokemon/minccino/anim_front.png and b/graphics/pokemon/minccino/anim_front.png differ diff --git a/graphics/pokemon/minior/back.png b/graphics/pokemon/minior/back.png index c36a22eac..2e99bdc5e 100644 Binary files a/graphics/pokemon/minior/back.png and b/graphics/pokemon/minior/back.png differ diff --git a/graphics/pokemon/minior/core/red/icon.png b/graphics/pokemon/minior/core/red/icon.png index 46535bcda..486dcdebd 100644 Binary files a/graphics/pokemon/minior/core/red/icon.png and b/graphics/pokemon/minior/core/red/icon.png differ diff --git a/graphics/pokemon/minior/front.png b/graphics/pokemon/minior/front.png index 793072c8b..4d1330b65 100644 Binary files a/graphics/pokemon/minior/front.png and b/graphics/pokemon/minior/front.png differ diff --git a/graphics/pokemon/minior/icon.png b/graphics/pokemon/minior/icon.png index 4b79f8179..1ce9b5a57 100644 Binary files a/graphics/pokemon/minior/icon.png and b/graphics/pokemon/minior/icon.png differ diff --git a/graphics/pokemon/minun/anim_front.png b/graphics/pokemon/minun/anim_front.png index 7ef0fc8fd..f309898b2 100644 Binary files a/graphics/pokemon/minun/anim_front.png and b/graphics/pokemon/minun/anim_front.png differ diff --git a/graphics/pokemon/minun/icon.png b/graphics/pokemon/minun/icon.png index 410a031e7..03bc10b0f 100644 Binary files a/graphics/pokemon/minun/icon.png and b/graphics/pokemon/minun/icon.png differ diff --git a/graphics/pokemon/misdreavus/anim_front.png b/graphics/pokemon/misdreavus/anim_front.png index 6e6af15db..e59ff75f0 100644 Binary files a/graphics/pokemon/misdreavus/anim_front.png and b/graphics/pokemon/misdreavus/anim_front.png differ diff --git a/graphics/pokemon/misdreavus/back.png b/graphics/pokemon/misdreavus/back.png index 9331fa236..53fcc1e18 100644 Binary files a/graphics/pokemon/misdreavus/back.png and b/graphics/pokemon/misdreavus/back.png differ diff --git a/graphics/pokemon/misdreavus/icon.png b/graphics/pokemon/misdreavus/icon.png index 2546c8f6f..47c3031a1 100644 Binary files a/graphics/pokemon/misdreavus/icon.png and b/graphics/pokemon/misdreavus/icon.png differ diff --git a/graphics/pokemon/mismagius/anim_front.png b/graphics/pokemon/mismagius/anim_front.png index b9fc9d9d3..4d86748a1 100644 Binary files a/graphics/pokemon/mismagius/anim_front.png and b/graphics/pokemon/mismagius/anim_front.png differ diff --git a/graphics/pokemon/mismagius/back.png b/graphics/pokemon/mismagius/back.png index 8782472e8..9aa8666d1 100644 Binary files a/graphics/pokemon/mismagius/back.png and b/graphics/pokemon/mismagius/back.png differ diff --git a/graphics/pokemon/moltres/back.png b/graphics/pokemon/moltres/back.png index fdbf9b67a..d1ee4ba2c 100644 Binary files a/graphics/pokemon/moltres/back.png and b/graphics/pokemon/moltres/back.png differ diff --git a/graphics/pokemon/moltres/galarian/back.png b/graphics/pokemon/moltres/galarian/back.png index a6f6d2266..6ea99b523 100644 Binary files a/graphics/pokemon/moltres/galarian/back.png and b/graphics/pokemon/moltres/galarian/back.png differ diff --git a/graphics/pokemon/moltres/galarian/front.png b/graphics/pokemon/moltres/galarian/front.png index 0fa0dc446..a0f00c0a6 100644 Binary files a/graphics/pokemon/moltres/galarian/front.png and b/graphics/pokemon/moltres/galarian/front.png differ diff --git a/graphics/pokemon/moltres/galarian/icon.png b/graphics/pokemon/moltres/galarian/icon.png index 2cc640caa..0f469cbf5 100644 Binary files a/graphics/pokemon/moltres/galarian/icon.png and b/graphics/pokemon/moltres/galarian/icon.png differ diff --git a/graphics/pokemon/monferno/anim_front.png b/graphics/pokemon/monferno/anim_front.png index 41f3547dc..7d4167c6b 100644 Binary files a/graphics/pokemon/monferno/anim_front.png and b/graphics/pokemon/monferno/anim_front.png differ diff --git a/graphics/pokemon/monferno/back.png b/graphics/pokemon/monferno/back.png index 4290da6ed..502e061c2 100644 Binary files a/graphics/pokemon/monferno/back.png and b/graphics/pokemon/monferno/back.png differ diff --git a/graphics/pokemon/morelull/back.png b/graphics/pokemon/morelull/back.png index f8184539b..2c0e0e813 100644 Binary files a/graphics/pokemon/morelull/back.png and b/graphics/pokemon/morelull/back.png differ diff --git a/graphics/pokemon/morelull/front.png b/graphics/pokemon/morelull/front.png index ce7dae4da..73c2c9642 100644 Binary files a/graphics/pokemon/morelull/front.png and b/graphics/pokemon/morelull/front.png differ diff --git a/graphics/pokemon/morelull/icon.png b/graphics/pokemon/morelull/icon.png index e5ed1bf7a..221ebe545 100644 Binary files a/graphics/pokemon/morelull/icon.png and b/graphics/pokemon/morelull/icon.png differ diff --git a/graphics/pokemon/morgrem/back.png b/graphics/pokemon/morgrem/back.png index 31fc0f739..c646a8fe9 100644 Binary files a/graphics/pokemon/morgrem/back.png and b/graphics/pokemon/morgrem/back.png differ diff --git a/graphics/pokemon/morgrem/front.png b/graphics/pokemon/morgrem/front.png index a6ef7e1b8..980ead417 100644 Binary files a/graphics/pokemon/morgrem/front.png and b/graphics/pokemon/morgrem/front.png differ diff --git a/graphics/pokemon/morgrem/icon.png b/graphics/pokemon/morgrem/icon.png index f33d7b797..54112d6b6 100644 Binary files a/graphics/pokemon/morgrem/icon.png and b/graphics/pokemon/morgrem/icon.png differ diff --git a/graphics/pokemon/morpeko/back.png b/graphics/pokemon/morpeko/back.png index 26abcd981..722b1acd9 100644 Binary files a/graphics/pokemon/morpeko/back.png and b/graphics/pokemon/morpeko/back.png differ diff --git a/graphics/pokemon/morpeko/front.png b/graphics/pokemon/morpeko/front.png index 6874b86fb..acf1de956 100644 Binary files a/graphics/pokemon/morpeko/front.png and b/graphics/pokemon/morpeko/front.png differ diff --git a/graphics/pokemon/morpeko/hangry/back.png b/graphics/pokemon/morpeko/hangry/back.png index d1aebd52e..93284f87b 100644 Binary files a/graphics/pokemon/morpeko/hangry/back.png and b/graphics/pokemon/morpeko/hangry/back.png differ diff --git a/graphics/pokemon/morpeko/hangry/front.png b/graphics/pokemon/morpeko/hangry/front.png index d978edf41..240970e83 100644 Binary files a/graphics/pokemon/morpeko/hangry/front.png and b/graphics/pokemon/morpeko/hangry/front.png differ diff --git a/graphics/pokemon/morpeko/hangry/icon.png b/graphics/pokemon/morpeko/hangry/icon.png index d66b3232d..94b69b322 100644 Binary files a/graphics/pokemon/morpeko/hangry/icon.png and b/graphics/pokemon/morpeko/hangry/icon.png differ diff --git a/graphics/pokemon/morpeko/icon.png b/graphics/pokemon/morpeko/icon.png index 2ad5674d6..b6503b42f 100644 Binary files a/graphics/pokemon/morpeko/icon.png and b/graphics/pokemon/morpeko/icon.png differ diff --git a/graphics/pokemon/mothim/back.png b/graphics/pokemon/mothim/back.png index 3712abeac..ce5d70ea1 100644 Binary files a/graphics/pokemon/mothim/back.png and b/graphics/pokemon/mothim/back.png differ diff --git a/graphics/pokemon/mr_mime/galarian/back.png b/graphics/pokemon/mr_mime/galarian/back.png index 48655beb0..28b4aa04c 100644 Binary files a/graphics/pokemon/mr_mime/galarian/back.png and b/graphics/pokemon/mr_mime/galarian/back.png differ diff --git a/graphics/pokemon/mr_mime/galarian/front.png b/graphics/pokemon/mr_mime/galarian/front.png index 03a017e7b..6e308c514 100644 Binary files a/graphics/pokemon/mr_mime/galarian/front.png and b/graphics/pokemon/mr_mime/galarian/front.png differ diff --git a/graphics/pokemon/mr_mime/galarian/icon.png b/graphics/pokemon/mr_mime/galarian/icon.png index 782035bf9..c2c7c06ee 100644 Binary files a/graphics/pokemon/mr_mime/galarian/icon.png and b/graphics/pokemon/mr_mime/galarian/icon.png differ diff --git a/graphics/pokemon/mr_mime/icon.png b/graphics/pokemon/mr_mime/icon.png index 3582b8d77..7b106384c 100644 Binary files a/graphics/pokemon/mr_mime/icon.png and b/graphics/pokemon/mr_mime/icon.png differ diff --git a/graphics/pokemon/mr_rime/back.png b/graphics/pokemon/mr_rime/back.png index 1ff25321b..e5db5406d 100644 Binary files a/graphics/pokemon/mr_rime/back.png and b/graphics/pokemon/mr_rime/back.png differ diff --git a/graphics/pokemon/mr_rime/front.png b/graphics/pokemon/mr_rime/front.png index e36e9a183..3c86f31cc 100644 Binary files a/graphics/pokemon/mr_rime/front.png and b/graphics/pokemon/mr_rime/front.png differ diff --git a/graphics/pokemon/mr_rime/icon.png b/graphics/pokemon/mr_rime/icon.png index 77685f563..f13b60b4d 100644 Binary files a/graphics/pokemon/mr_rime/icon.png and b/graphics/pokemon/mr_rime/icon.png differ diff --git a/graphics/pokemon/mudbray/back.png b/graphics/pokemon/mudbray/back.png index 27bacc3a7..0068d8321 100644 Binary files a/graphics/pokemon/mudbray/back.png and b/graphics/pokemon/mudbray/back.png differ diff --git a/graphics/pokemon/mudbray/front.png b/graphics/pokemon/mudbray/front.png index 5986aa446..a8aa29e32 100644 Binary files a/graphics/pokemon/mudbray/front.png and b/graphics/pokemon/mudbray/front.png differ diff --git a/graphics/pokemon/mudbray/icon.png b/graphics/pokemon/mudbray/icon.png index bd5f4891a..0447096ec 100644 Binary files a/graphics/pokemon/mudbray/icon.png and b/graphics/pokemon/mudbray/icon.png differ diff --git a/graphics/pokemon/mudkip/anim_front.png b/graphics/pokemon/mudkip/anim_front.png index f64717a76..dbc9857e0 100644 Binary files a/graphics/pokemon/mudkip/anim_front.png and b/graphics/pokemon/mudkip/anim_front.png differ diff --git a/graphics/pokemon/mudkip/back.png b/graphics/pokemon/mudkip/back.png index 3c9410db9..3f00039b6 100644 Binary files a/graphics/pokemon/mudkip/back.png and b/graphics/pokemon/mudkip/back.png differ diff --git a/graphics/pokemon/mudkip/icon.png b/graphics/pokemon/mudkip/icon.png index 9710d2288..7d3a6f6e4 100644 Binary files a/graphics/pokemon/mudkip/icon.png and b/graphics/pokemon/mudkip/icon.png differ diff --git a/graphics/pokemon/mudsdale/back.png b/graphics/pokemon/mudsdale/back.png index 04a73cc19..0eeb5e794 100644 Binary files a/graphics/pokemon/mudsdale/back.png and b/graphics/pokemon/mudsdale/back.png differ diff --git a/graphics/pokemon/mudsdale/front.png b/graphics/pokemon/mudsdale/front.png index 7e3d763fe..2ad257561 100644 Binary files a/graphics/pokemon/mudsdale/front.png and b/graphics/pokemon/mudsdale/front.png differ diff --git a/graphics/pokemon/mudsdale/icon.png b/graphics/pokemon/mudsdale/icon.png index 25ba67a46..3146346ea 100644 Binary files a/graphics/pokemon/mudsdale/icon.png and b/graphics/pokemon/mudsdale/icon.png differ diff --git a/graphics/pokemon/muk/alolan/back.png b/graphics/pokemon/muk/alolan/back.png index 011a70804..243561d49 100644 Binary files a/graphics/pokemon/muk/alolan/back.png and b/graphics/pokemon/muk/alolan/back.png differ diff --git a/graphics/pokemon/muk/alolan/front.png b/graphics/pokemon/muk/alolan/front.png index d1f521712..ef2c2e767 100644 Binary files a/graphics/pokemon/muk/alolan/front.png and b/graphics/pokemon/muk/alolan/front.png differ diff --git a/graphics/pokemon/muk/alolan/icon.png b/graphics/pokemon/muk/alolan/icon.png index c3064446f..d598fd728 100644 Binary files a/graphics/pokemon/muk/alolan/icon.png and b/graphics/pokemon/muk/alolan/icon.png differ diff --git a/graphics/pokemon/muk/back.png b/graphics/pokemon/muk/back.png index 22c34cdce..1a197e469 100644 Binary files a/graphics/pokemon/muk/back.png and b/graphics/pokemon/muk/back.png differ diff --git a/graphics/pokemon/munchlax/anim_front.png b/graphics/pokemon/munchlax/anim_front.png index 9dd40ec5d..1174fb383 100644 Binary files a/graphics/pokemon/munchlax/anim_front.png and b/graphics/pokemon/munchlax/anim_front.png differ diff --git a/graphics/pokemon/munchlax/back.png b/graphics/pokemon/munchlax/back.png index af000021f..9ed2883f1 100644 Binary files a/graphics/pokemon/munchlax/back.png and b/graphics/pokemon/munchlax/back.png differ diff --git a/graphics/pokemon/munchlax/icon.png b/graphics/pokemon/munchlax/icon.png index c2f1d5379..a7da2abd8 100644 Binary files a/graphics/pokemon/munchlax/icon.png and b/graphics/pokemon/munchlax/icon.png differ diff --git a/graphics/pokemon/munna/anim_front.png b/graphics/pokemon/munna/anim_front.png index c5bbc1150..c7d84bd9b 100644 Binary files a/graphics/pokemon/munna/anim_front.png and b/graphics/pokemon/munna/anim_front.png differ diff --git a/graphics/pokemon/munna/back.png b/graphics/pokemon/munna/back.png index 916114685..c5a2d581d 100644 Binary files a/graphics/pokemon/munna/back.png and b/graphics/pokemon/munna/back.png differ diff --git a/graphics/pokemon/murkrow/anim_front.png b/graphics/pokemon/murkrow/anim_front.png index abc7a6052..5866a2d55 100644 Binary files a/graphics/pokemon/murkrow/anim_front.png and b/graphics/pokemon/murkrow/anim_front.png differ diff --git a/graphics/pokemon/murkrow/back.png b/graphics/pokemon/murkrow/back.png index e2e1a0cbd..2cb23806a 100644 Binary files a/graphics/pokemon/murkrow/back.png and b/graphics/pokemon/murkrow/back.png differ diff --git a/graphics/pokemon/murkrow/icon.png b/graphics/pokemon/murkrow/icon.png index 26869b23a..cde9aeeae 100644 Binary files a/graphics/pokemon/murkrow/icon.png and b/graphics/pokemon/murkrow/icon.png differ diff --git a/graphics/pokemon/musharna/anim_front.png b/graphics/pokemon/musharna/anim_front.png index e658a72f1..f75dd3b0c 100644 Binary files a/graphics/pokemon/musharna/anim_front.png and b/graphics/pokemon/musharna/anim_front.png differ diff --git a/graphics/pokemon/musharna/back.png b/graphics/pokemon/musharna/back.png index b07b57653..0cbb3a80e 100644 Binary files a/graphics/pokemon/musharna/back.png and b/graphics/pokemon/musharna/back.png differ diff --git a/graphics/pokemon/naganadel/back.png b/graphics/pokemon/naganadel/back.png index fbb0ab2e3..ccd5aac7c 100644 Binary files a/graphics/pokemon/naganadel/back.png and b/graphics/pokemon/naganadel/back.png differ diff --git a/graphics/pokemon/naganadel/front.png b/graphics/pokemon/naganadel/front.png index a588677d0..cc63efb3d 100644 Binary files a/graphics/pokemon/naganadel/front.png and b/graphics/pokemon/naganadel/front.png differ diff --git a/graphics/pokemon/naganadel/icon.png b/graphics/pokemon/naganadel/icon.png index 8fecf12d7..23204c5d1 100644 Binary files a/graphics/pokemon/naganadel/icon.png and b/graphics/pokemon/naganadel/icon.png differ diff --git a/graphics/pokemon/natu/back.png b/graphics/pokemon/natu/back.png index fead4bed1..be5542c96 100644 Binary files a/graphics/pokemon/natu/back.png and b/graphics/pokemon/natu/back.png differ diff --git a/graphics/pokemon/natu/icon.png b/graphics/pokemon/natu/icon.png index cfb53a18d..3ff857f3d 100644 Binary files a/graphics/pokemon/natu/icon.png and b/graphics/pokemon/natu/icon.png differ diff --git a/graphics/pokemon/necrozma/back.png b/graphics/pokemon/necrozma/back.png index 640f4383d..f2c778964 100644 Binary files a/graphics/pokemon/necrozma/back.png and b/graphics/pokemon/necrozma/back.png differ diff --git a/graphics/pokemon/necrozma/front.png b/graphics/pokemon/necrozma/front.png index fc121c643..9974c437f 100644 Binary files a/graphics/pokemon/necrozma/front.png and b/graphics/pokemon/necrozma/front.png differ diff --git a/graphics/pokemon/necrozma/icon.png b/graphics/pokemon/necrozma/icon.png index 780813bba..1d4283fdd 100644 Binary files a/graphics/pokemon/necrozma/icon.png and b/graphics/pokemon/necrozma/icon.png differ diff --git a/graphics/pokemon/nickit/back.png b/graphics/pokemon/nickit/back.png index 226988eee..eafe60271 100644 Binary files a/graphics/pokemon/nickit/back.png and b/graphics/pokemon/nickit/back.png differ diff --git a/graphics/pokemon/nickit/front.png b/graphics/pokemon/nickit/front.png index 1a29023a0..9aba8f113 100644 Binary files a/graphics/pokemon/nickit/front.png and b/graphics/pokemon/nickit/front.png differ diff --git a/graphics/pokemon/nickit/icon.png b/graphics/pokemon/nickit/icon.png index b0777d878..b7095d9c7 100644 Binary files a/graphics/pokemon/nickit/icon.png and b/graphics/pokemon/nickit/icon.png differ diff --git a/graphics/pokemon/nidoking/anim_front.png b/graphics/pokemon/nidoking/anim_front.png index 2615b43a6..a08514474 100644 Binary files a/graphics/pokemon/nidoking/anim_front.png and b/graphics/pokemon/nidoking/anim_front.png differ diff --git a/graphics/pokemon/nidoking/back.png b/graphics/pokemon/nidoking/back.png index 093f5c13e..6291e963e 100644 Binary files a/graphics/pokemon/nidoking/back.png and b/graphics/pokemon/nidoking/back.png differ diff --git a/graphics/pokemon/nidoking/normal.pal b/graphics/pokemon/nidoking/normal.pal index 84b8d0f6c..e78c26819 100644 --- a/graphics/pokemon/nidoking/normal.pal +++ b/graphics/pokemon/nidoking/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -90 41 106 -222 148 246 -16 16 16 -213 115 238 -164 82 148 -41 123 148 -0 74 98 -65 148 197 255 255 255 +230 230 213 197 197 164 -172 16 0 115 115 90 230 65 49 -230 230 213 -232 232 216 +172 16 0 +197 115 189 +64 144 192 +40 120 144 +0 72 96 +216 144 240 +213 115 238 +164 82 148 +90 41 106 +16 16 16 diff --git a/graphics/pokemon/nidoking/shiny.pal b/graphics/pokemon/nidoking/shiny.pal index e4d7cdea6..201c7fcc7 100644 --- a/graphics/pokemon/nidoking/shiny.pal +++ b/graphics/pokemon/nidoking/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 80 128 -160 240 248 +255 255 255 +230 213 213 +197 180 164 +115 98 90 +230 65 49 +172 16 0 +197 115 189 +189 148 74 +148 98 32 +115 74 0 +139 238 255 +90 189 255 +56 136 200 +24 82 156 16 16 16 -112 192 248 -72 144 200 -144 104 40 -96 72 16 -184 152 88 -248 248 248 -192 176 160 -168 40 32 -112 96 88 -224 80 72 -248 232 232 -224 208 208 diff --git a/graphics/pokemon/nidoqueen/anim_front.png b/graphics/pokemon/nidoqueen/anim_front.png index 0a8f23915..58c6901a7 100644 Binary files a/graphics/pokemon/nidoqueen/anim_front.png and b/graphics/pokemon/nidoqueen/anim_front.png differ diff --git a/graphics/pokemon/nidoqueen/back.png b/graphics/pokemon/nidoqueen/back.png index 7271e6d9c..243b801a0 100644 Binary files a/graphics/pokemon/nidoqueen/back.png and b/graphics/pokemon/nidoqueen/back.png differ diff --git a/graphics/pokemon/nidoqueen/icon.png b/graphics/pokemon/nidoqueen/icon.png index 3d42bb57b..0d1d7a6f6 100644 Binary files a/graphics/pokemon/nidoqueen/icon.png and b/graphics/pokemon/nidoqueen/icon.png differ diff --git a/graphics/pokemon/nidoqueen/normal.pal b/graphics/pokemon/nidoqueen/normal.pal index 3901338e3..fbc98e54c 100644 --- a/graphics/pokemon/nidoqueen/normal.pal +++ b/graphics/pokemon/nidoqueen/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -98 139 172 +255 255 255 +208 200 200 +238 230 164 +230 205 139 +192 168 88 +115 90 41 +255 156 139 +200 104 104 +160 40 64 +222 255 255 +156 213 222 90 180 205 +98 139 172 49 74 74 16 16 16 -189 172 90 -115 90 41 -115 90 41 -156 213 222 -208 208 208 -248 248 248 -189 172 90 -230 205 139 -238 230 164 -112 40 40 -232 128 120 diff --git a/graphics/pokemon/nidoqueen/shiny.pal b/graphics/pokemon/nidoqueen/shiny.pal index 08199f12a..3af2e0347 100644 --- a/graphics/pokemon/nidoqueen/shiny.pal +++ b/graphics/pokemon/nidoqueen/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -104 120 48 -136 160 80 -56 72 8 +152 160 208 +255 255 255 +213 213 213 +246 205 213 +255 172 180 +230 131 148 +189 90 98 +255 156 139 +230 65 49 +172 16 0 +222 246 172 +197 222 123 +131 164 65 +106 123 41 +57 74 0 16 16 16 -224 128 144 -136 64 72 -184 88 96 -200 216 144 -208 208 208 -248 248 248 -224 136 152 -248 168 176 -240 200 208 -168 44 32 -240 124 112 diff --git a/graphics/pokemon/nidoran_f/anim_front.png b/graphics/pokemon/nidoran_f/anim_front.png index 4f35d5218..a097c3a49 100644 Binary files a/graphics/pokemon/nidoran_f/anim_front.png and b/graphics/pokemon/nidoran_f/anim_front.png differ diff --git a/graphics/pokemon/nidoran_f/back.png b/graphics/pokemon/nidoran_f/back.png index eb6b3a137..95e0c30e5 100644 Binary files a/graphics/pokemon/nidoran_f/back.png and b/graphics/pokemon/nidoran_f/back.png differ diff --git a/graphics/pokemon/nidoran_f/icon.png b/graphics/pokemon/nidoran_f/icon.png index 402fd0642..2f8c516aa 100644 Binary files a/graphics/pokemon/nidoran_f/icon.png and b/graphics/pokemon/nidoran_f/icon.png differ diff --git a/graphics/pokemon/nidoran_f/normal.pal b/graphics/pokemon/nidoran_f/normal.pal index 6f2e8898b..b90fb5570 100644 --- a/graphics/pokemon/nidoran_f/normal.pal +++ b/graphics/pokemon/nidoran_f/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -115 131 172 -90 65 131 -172 172 205 -213 213 255 -52 109 179 -65 139 230 -16 16 16 -248 248 248 -189 49 74 238 238 255 +213 213 255 +172 172 205 +115 131 172 +64 64 128 255 82 65 +189 49 74 +24 152 144 +82 139 180 +57 106 148 +255 0 255 +255 0 255 +255 255 255 222 222 222 -0 0 0 -0 0 0 -0 0 0 +16 16 16 diff --git a/graphics/pokemon/nidoran_f/shiny.pal b/graphics/pokemon/nidoran_f/shiny.pal index 7c10b617d..722554334 100644 --- a/graphics/pokemon/nidoran_f/shiny.pal +++ b/graphics/pokemon/nidoran_f/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -152 104 168 -112 40 128 -184 144 192 -224 184 232 -64 96 0 -112 144 16 +208 208 160 +238 222 255 +230 189 238 +189 148 197 +156 106 172 +115 41 131 +255 82 65 +189 49 74 +115 148 16 +90 123 8 +65 98 0 +255 0 255 +255 0 255 +255 255 255 +222 222 222 16 16 16 -248 248 248 -160 40 32 -232 232 248 -248 80 64 -216 216 216 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/nidoran_m/anim_front.png b/graphics/pokemon/nidoran_m/anim_front.png index dd3539ce4..6dea62a97 100644 Binary files a/graphics/pokemon/nidoran_m/anim_front.png and b/graphics/pokemon/nidoran_m/anim_front.png differ diff --git a/graphics/pokemon/nidoran_m/back.png b/graphics/pokemon/nidoran_m/back.png index 0fc9a6509..0b72bd73d 100644 Binary files a/graphics/pokemon/nidoran_m/back.png and b/graphics/pokemon/nidoran_m/back.png differ diff --git a/graphics/pokemon/nidoran_m/icon.png b/graphics/pokemon/nidoran_m/icon.png index aef34cda6..5564859ed 100644 Binary files a/graphics/pokemon/nidoran_m/icon.png and b/graphics/pokemon/nidoran_m/icon.png differ diff --git a/graphics/pokemon/nidoran_m/normal.pal b/graphics/pokemon/nidoran_m/normal.pal index 711acdb79..3261195ba 100644 --- a/graphics/pokemon/nidoran_m/normal.pal +++ b/graphics/pokemon/nidoran_m/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -189 98 197 -230 156 213 -98 65 106 -16 16 16 -238 189 238 -0 98 65 -0 164 115 -205 205 205 -255 106 82 +152 160 208 255 255 255 +16 16 16 +255 106 82 222 65 41 -176 24 0 -0 0 0 -0 0 0 -0 0 0 +180 24 0 +24 205 156 +0 164 115 +0 98 65 +152 72 168 +238 189 238 +230 156 213 +189 98 197 +98 65 106 +205 205 205 +131 131 131 diff --git a/graphics/pokemon/nidoran_m/shiny.pal b/graphics/pokemon/nidoran_m/shiny.pal index 843ad1eaf..da856f827 100644 --- a/graphics/pokemon/nidoran_m/shiny.pal +++ b/graphics/pokemon/nidoran_m/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 160 200 -176 200 248 -72 88 152 +255 255 255 16 16 16 -208 224 248 -120 56 40 -144 104 64 -200 200 200 -248 104 80 -248 248 248 -216 40 56 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +255 106 82 +222 65 41 +180 24 0 +180 123 90 +139 90 49 +123 49 32 +120 136 200 +213 230 255 +180 205 255 +148 164 205 +74 90 156 +205 205 205 +131 131 131 diff --git a/graphics/pokemon/nidorina/anim_front.png b/graphics/pokemon/nidorina/anim_front.png index f5a23ddac..2759f85b5 100644 Binary files a/graphics/pokemon/nidorina/anim_front.png and b/graphics/pokemon/nidorina/anim_front.png differ diff --git a/graphics/pokemon/nidorina/back.png b/graphics/pokemon/nidorina/back.png index 1d96a737d..c17843af5 100644 Binary files a/graphics/pokemon/nidorina/back.png and b/graphics/pokemon/nidorina/back.png differ diff --git a/graphics/pokemon/nidorina/icon.png b/graphics/pokemon/nidorina/icon.png index c8fbc09a7..496336a59 100644 Binary files a/graphics/pokemon/nidorina/icon.png and b/graphics/pokemon/nidorina/icon.png differ diff --git a/graphics/pokemon/nidorina/normal.pal b/graphics/pokemon/nidorina/normal.pal index bab15d82f..e49d1f451 100644 --- a/graphics/pokemon/nidorina/normal.pal +++ b/graphics/pokemon/nidorina/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -90 148 180 -197 230 238 -57 90 98 -16 16 16 -139 197 205 -24 57 115 -55 95 176 -72 128 240 +152 208 160 255 255 255 -214 214 214 -197 32 16 +213 213 213 +131 131 131 +74 131 246 +16 98 180 +24 57 115 255 156 139 238 74 57 -131 131 131 -0 0 0 +197 32 16 +222 255 255 +197 230 238 +139 197 205 +90 148 180 +57 90 98 +16 16 16 diff --git a/graphics/pokemon/nidorina/shiny.pal b/graphics/pokemon/nidorina/shiny.pal index ee67585e0..d259eff81 100644 --- a/graphics/pokemon/nidorina/shiny.pal +++ b/graphics/pokemon/nidorina/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -178 116 166 -255 198 247 +152 160 208 +255 255 255 +213 213 213 +131 131 131 +90 131 32 +65 106 16 +32 74 0 +255 156 139 +238 74 57 +197 32 16 +255 238 246 +238 222 230 +205 148 197 +180 106 164 98 82 90 16 16 16 -204 157 197 -40 73 14 -65 106 16 -93 131 40 -255 255 255 -214 214 214 -197 32 16 -255 156 140 -238 74 57 -131 131 131 -0 0 0 diff --git a/graphics/pokemon/nidorino/anim_front.png b/graphics/pokemon/nidorino/anim_front.png index 8aece1ef7..94847a3c9 100644 Binary files a/graphics/pokemon/nidorino/anim_front.png and b/graphics/pokemon/nidorino/anim_front.png differ diff --git a/graphics/pokemon/nidorino/back.png b/graphics/pokemon/nidorino/back.png index 3ee49e0ae..1b1a13d47 100644 Binary files a/graphics/pokemon/nidorino/back.png and b/graphics/pokemon/nidorino/back.png differ diff --git a/graphics/pokemon/nidorino/icon.png b/graphics/pokemon/nidorino/icon.png index dc2f92d81..8901b895e 100644 Binary files a/graphics/pokemon/nidorino/icon.png and b/graphics/pokemon/nidorino/icon.png differ diff --git a/graphics/pokemon/nidorino/normal.pal b/graphics/pokemon/nidorino/normal.pal index a668ac118..b6d01ea67 100644 --- a/graphics/pokemon/nidorino/normal.pal +++ b/graphics/pokemon/nidorino/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -90 57 98 -205 131 222 +152 160 208 +255 255 255 +255 106 82 +222 65 41 +180 24 0 +57 238 189 +74 205 164 +0 148 98 +128 88 80 16 16 16 230 172 238 +205 131 222 148 90 180 -0 148 98 -74 205 164 -248 248 248 -128 128 128 -192 192 192 -144 88 176 -168 40 40 -232 128 120 -0 0 0 -0 0 0 +90 57 98 +197 197 197 +131 131 131 diff --git a/graphics/pokemon/nidorino/shiny.pal b/graphics/pokemon/nidorino/shiny.pal index 4c4ca0cc2..aaa9beee9 100644 --- a/graphics/pokemon/nidorino/shiny.pal +++ b/graphics/pokemon/nidorino/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 72 136 -168 176 240 -16 16 16 -208 208 248 -128 120 176 -104 56 80 +255 255 255 +255 106 82 +222 65 41 +180 24 0 +180 131 156 +148 98 123 +106 57 82 144 96 120 -248 248 248 -128 128 128 -192 192 192 -64 72 136 -178 70 53 -247 127 111 -0 0 0 -0 0 0 +16 16 16 +213 213 255 +172 180 246 +131 123 189 +65 74 139 +197 197 197 +131 131 131 diff --git a/graphics/pokemon/nihilego/back.png b/graphics/pokemon/nihilego/back.png index 3246bb9fb..a4dfc7632 100644 Binary files a/graphics/pokemon/nihilego/back.png and b/graphics/pokemon/nihilego/back.png differ diff --git a/graphics/pokemon/nihilego/front.png b/graphics/pokemon/nihilego/front.png index 512060f00..379bb93e4 100644 Binary files a/graphics/pokemon/nihilego/front.png and b/graphics/pokemon/nihilego/front.png differ diff --git a/graphics/pokemon/nihilego/icon.png b/graphics/pokemon/nihilego/icon.png index 5a733d9fb..6e8f855d5 100644 Binary files a/graphics/pokemon/nihilego/icon.png and b/graphics/pokemon/nihilego/icon.png differ diff --git a/graphics/pokemon/nincada/anim_front.png b/graphics/pokemon/nincada/anim_front.png index 110bd12d7..261fbc098 100644 Binary files a/graphics/pokemon/nincada/anim_front.png and b/graphics/pokemon/nincada/anim_front.png differ diff --git a/graphics/pokemon/nincada/back.png b/graphics/pokemon/nincada/back.png index 251d56791..99d215b56 100644 Binary files a/graphics/pokemon/nincada/back.png and b/graphics/pokemon/nincada/back.png differ diff --git a/graphics/pokemon/nincada/icon.png b/graphics/pokemon/nincada/icon.png index 23b118047..4247b280f 100644 Binary files a/graphics/pokemon/nincada/icon.png and b/graphics/pokemon/nincada/icon.png differ diff --git a/graphics/pokemon/ninetales/alolan/back.png b/graphics/pokemon/ninetales/alolan/back.png index c20553d0e..149d868a5 100644 Binary files a/graphics/pokemon/ninetales/alolan/back.png and b/graphics/pokemon/ninetales/alolan/back.png differ diff --git a/graphics/pokemon/ninetales/alolan/front.png b/graphics/pokemon/ninetales/alolan/front.png index 6dd26f287..22ae9d2c9 100644 Binary files a/graphics/pokemon/ninetales/alolan/front.png and b/graphics/pokemon/ninetales/alolan/front.png differ diff --git a/graphics/pokemon/ninetales/alolan/icon.png b/graphics/pokemon/ninetales/alolan/icon.png index 8bfa8fe27..71ac99d5a 100644 Binary files a/graphics/pokemon/ninetales/alolan/icon.png and b/graphics/pokemon/ninetales/alolan/icon.png differ diff --git a/graphics/pokemon/ninetales/anim_front.png b/graphics/pokemon/ninetales/anim_front.png index 06ef7fc49..3cc6d2db5 100644 Binary files a/graphics/pokemon/ninetales/anim_front.png and b/graphics/pokemon/ninetales/anim_front.png differ diff --git a/graphics/pokemon/ninetales/back.png b/graphics/pokemon/ninetales/back.png index f1031e720..247f7ad87 100644 Binary files a/graphics/pokemon/ninetales/back.png and b/graphics/pokemon/ninetales/back.png differ diff --git a/graphics/pokemon/ninetales/icon.png b/graphics/pokemon/ninetales/icon.png index 109cb23db..15044635d 100644 Binary files a/graphics/pokemon/ninetales/icon.png and b/graphics/pokemon/ninetales/icon.png differ diff --git a/graphics/pokemon/ninetales/normal.pal b/graphics/pokemon/ninetales/normal.pal index 021c15775..0153dceb7 100644 --- a/graphics/pokemon/ninetales/normal.pal +++ b/graphics/pokemon/ninetales/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -205 156 74 -131 98 24 -246 230 123 -16 16 16 -230 197 82 -180 16 0 255 255 255 255 106 41 -255 172 49 -255 148 16 -168 16 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +222 32 16 +180 16 0 +255 0 255 +248 160 56 +232 128 40 +238 222 115 +205 156 98 +255 238 180 +246 230 123 +230 197 82 +205 156 74 +131 98 24 +16 16 16 diff --git a/graphics/pokemon/ninetales/shiny.pal b/graphics/pokemon/ninetales/shiny.pal index dc02c553b..7a30db18a 100644 --- a/graphics/pokemon/ninetales/shiny.pal +++ b/graphics/pokemon/ninetales/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 128 168 -120 88 128 -216 216 224 +255 255 255 +255 106 41 +222 32 16 +180 16 0 +255 0 255 +148 172 230 +98 156 255 +238 222 115 +205 156 98 +246 238 255 +222 222 230 +189 180 205 +156 131 172 +123 90 131 16 16 16 -184 176 200 -176 40 32 -248 248 248 -248 120 64 -144 168 224 -96 152 248 -175 79 70 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/ninjask/anim_front.png b/graphics/pokemon/ninjask/anim_front.png index d53bbbe83..bca98030c 100644 Binary files a/graphics/pokemon/ninjask/anim_front.png and b/graphics/pokemon/ninjask/anim_front.png differ diff --git a/graphics/pokemon/ninjask/back.png b/graphics/pokemon/ninjask/back.png index c4ed360b0..30b7b2b6e 100644 Binary files a/graphics/pokemon/ninjask/back.png and b/graphics/pokemon/ninjask/back.png differ diff --git a/graphics/pokemon/ninjask/icon.png b/graphics/pokemon/ninjask/icon.png index 3d8f9fa57..1e4e23a03 100644 Binary files a/graphics/pokemon/ninjask/icon.png and b/graphics/pokemon/ninjask/icon.png differ diff --git a/graphics/pokemon/noctowl/back.png b/graphics/pokemon/noctowl/back.png index 66fa21d1c..3900e31bb 100644 Binary files a/graphics/pokemon/noctowl/back.png and b/graphics/pokemon/noctowl/back.png differ diff --git a/graphics/pokemon/noctowl/icon.png b/graphics/pokemon/noctowl/icon.png index 2aa500da7..764d6ecc0 100644 Binary files a/graphics/pokemon/noctowl/icon.png and b/graphics/pokemon/noctowl/icon.png differ diff --git a/graphics/pokemon/noibat/anim_front.png b/graphics/pokemon/noibat/anim_front.png index c068bb0aa..fcc5190a3 100644 Binary files a/graphics/pokemon/noibat/anim_front.png and b/graphics/pokemon/noibat/anim_front.png differ diff --git a/graphics/pokemon/noibat/back.png b/graphics/pokemon/noibat/back.png index 4432bd184..139eee7e0 100644 Binary files a/graphics/pokemon/noibat/back.png and b/graphics/pokemon/noibat/back.png differ diff --git a/graphics/pokemon/noibat/icon.png b/graphics/pokemon/noibat/icon.png index ee3641d7a..90e10f24a 100644 Binary files a/graphics/pokemon/noibat/icon.png and b/graphics/pokemon/noibat/icon.png differ diff --git a/graphics/pokemon/noivern/anim_front.png b/graphics/pokemon/noivern/anim_front.png index 3f0244eb5..e8a51e7e5 100644 Binary files a/graphics/pokemon/noivern/anim_front.png and b/graphics/pokemon/noivern/anim_front.png differ diff --git a/graphics/pokemon/noivern/back.png b/graphics/pokemon/noivern/back.png index aeeaddeb5..154069bb0 100644 Binary files a/graphics/pokemon/noivern/back.png and b/graphics/pokemon/noivern/back.png differ diff --git a/graphics/pokemon/noivern/icon.png b/graphics/pokemon/noivern/icon.png index cd99373b8..e1cbd1b28 100644 Binary files a/graphics/pokemon/noivern/icon.png and b/graphics/pokemon/noivern/icon.png differ diff --git a/graphics/pokemon/nosepass/back.png b/graphics/pokemon/nosepass/back.png index bf536c78b..2bff316f6 100644 Binary files a/graphics/pokemon/nosepass/back.png and b/graphics/pokemon/nosepass/back.png differ diff --git a/graphics/pokemon/nosepass/icon.png b/graphics/pokemon/nosepass/icon.png index bf83f42e7..4bb333c10 100644 Binary files a/graphics/pokemon/nosepass/icon.png and b/graphics/pokemon/nosepass/icon.png differ diff --git a/graphics/pokemon/numel/icon.png b/graphics/pokemon/numel/icon.png index 9228a6215..cf43715c8 100644 Binary files a/graphics/pokemon/numel/icon.png and b/graphics/pokemon/numel/icon.png differ diff --git a/graphics/pokemon/nuzleaf/back.png b/graphics/pokemon/nuzleaf/back.png index 593ba9fd2..6703a7ca9 100644 Binary files a/graphics/pokemon/nuzleaf/back.png and b/graphics/pokemon/nuzleaf/back.png differ diff --git a/graphics/pokemon/nuzleaf/icon.png b/graphics/pokemon/nuzleaf/icon.png index 1800ce0cf..524fc6db2 100644 Binary files a/graphics/pokemon/nuzleaf/icon.png and b/graphics/pokemon/nuzleaf/icon.png differ diff --git a/graphics/pokemon/obstagoon/back.png b/graphics/pokemon/obstagoon/back.png index ada3a2b3e..57b8ac19a 100644 Binary files a/graphics/pokemon/obstagoon/back.png and b/graphics/pokemon/obstagoon/back.png differ diff --git a/graphics/pokemon/obstagoon/front.png b/graphics/pokemon/obstagoon/front.png index 519b6398d..c7fb15849 100644 Binary files a/graphics/pokemon/obstagoon/front.png and b/graphics/pokemon/obstagoon/front.png differ diff --git a/graphics/pokemon/obstagoon/icon.png b/graphics/pokemon/obstagoon/icon.png index 843914a55..47edf20f2 100644 Binary files a/graphics/pokemon/obstagoon/icon.png and b/graphics/pokemon/obstagoon/icon.png differ diff --git a/graphics/pokemon/octillery/anim_front.png b/graphics/pokemon/octillery/anim_front.png index 564c0f3d2..f7e1aec68 100644 Binary files a/graphics/pokemon/octillery/anim_front.png and b/graphics/pokemon/octillery/anim_front.png differ diff --git a/graphics/pokemon/octillery/back.png b/graphics/pokemon/octillery/back.png index 543024873..dabf208f1 100644 Binary files a/graphics/pokemon/octillery/back.png and b/graphics/pokemon/octillery/back.png differ diff --git a/graphics/pokemon/octillery/icon.png b/graphics/pokemon/octillery/icon.png index 247e399d5..4cf5c9d66 100644 Binary files a/graphics/pokemon/octillery/icon.png and b/graphics/pokemon/octillery/icon.png differ diff --git a/graphics/pokemon/oddish/anim_front.png b/graphics/pokemon/oddish/anim_front.png index 71db276f7..8b82826b8 100644 Binary files a/graphics/pokemon/oddish/anim_front.png and b/graphics/pokemon/oddish/anim_front.png differ diff --git a/graphics/pokemon/oddish/back.png b/graphics/pokemon/oddish/back.png index 5ddfa0beb..63e8d6851 100644 Binary files a/graphics/pokemon/oddish/back.png and b/graphics/pokemon/oddish/back.png differ diff --git a/graphics/pokemon/oddish/normal.pal b/graphics/pokemon/oddish/normal.pal index 30c3a2645..7458d45c1 100644 --- a/graphics/pokemon/oddish/normal.pal +++ b/graphics/pokemon/oddish/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -248 192 192 +208 208 160 +255 255 255 +180 41 49 +238 57 49 +197 230 123 +156 213 74 139 172 49 74 90 32 -156 213 74 -197 230 123 -16 16 16 -90 106 131 -115 148 164 +255 0 255 +255 0 255 +255 0 255 148 180 197 -238 57 49 +115 148 164 +90 106 131 41 57 74 -178 92 121 -214 149 172 -0 0 0 -0 0 0 -0 0 0 +16 16 16 diff --git a/graphics/pokemon/oddish/shiny.pal b/graphics/pokemon/oddish/shiny.pal index f62a3b4a4..a524e2b16 100644 --- a/graphics/pokemon/oddish/shiny.pal +++ b/graphics/pokemon/oddish/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -146 188 56 -104 130 26 -191 229 78 -219 244 144 +152 160 208 +255 255 255 +180 41 49 +238 57 49 +222 255 123 +197 246 57 +148 197 49 +98 131 0 +255 0 255 +255 0 255 +255 0 255 +139 246 65 +90 197 0 +57 148 0 +16 98 0 16 16 16 -76 147 29 -112 196 39 -154 226 81 -224 72 64 -32 96 19 -234 72 60 -255 136 132 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/omanyte/back.png b/graphics/pokemon/omanyte/back.png index 6a823cca8..d65b3e5a1 100644 Binary files a/graphics/pokemon/omanyte/back.png and b/graphics/pokemon/omanyte/back.png differ diff --git a/graphics/pokemon/omanyte/icon.png b/graphics/pokemon/omanyte/icon.png index d3440c67f..e84e16522 100644 Binary files a/graphics/pokemon/omanyte/icon.png and b/graphics/pokemon/omanyte/icon.png differ diff --git a/graphics/pokemon/omastar/anim_front.png b/graphics/pokemon/omastar/anim_front.png index e816ccf7b..42d693d72 100644 Binary files a/graphics/pokemon/omastar/anim_front.png and b/graphics/pokemon/omastar/anim_front.png differ diff --git a/graphics/pokemon/omastar/back.png b/graphics/pokemon/omastar/back.png index 7a62ec01e..2cf70e6bf 100644 Binary files a/graphics/pokemon/omastar/back.png and b/graphics/pokemon/omastar/back.png differ diff --git a/graphics/pokemon/omastar/icon.png b/graphics/pokemon/omastar/icon.png index e3cb54d95..1b72c4439 100644 Binary files a/graphics/pokemon/omastar/icon.png and b/graphics/pokemon/omastar/icon.png differ diff --git a/graphics/pokemon/onix/back.png b/graphics/pokemon/onix/back.png index 3a361f8f5..4a9e34afd 100644 Binary files a/graphics/pokemon/onix/back.png and b/graphics/pokemon/onix/back.png differ diff --git a/graphics/pokemon/oranguru/back.png b/graphics/pokemon/oranguru/back.png index ef195d5de..cd0322d4f 100644 Binary files a/graphics/pokemon/oranguru/back.png and b/graphics/pokemon/oranguru/back.png differ diff --git a/graphics/pokemon/oranguru/front.png b/graphics/pokemon/oranguru/front.png index b7f54b072..b0ba3510c 100644 Binary files a/graphics/pokemon/oranguru/front.png and b/graphics/pokemon/oranguru/front.png differ diff --git a/graphics/pokemon/oranguru/icon.png b/graphics/pokemon/oranguru/icon.png index ecb749e40..da7abe984 100644 Binary files a/graphics/pokemon/oranguru/icon.png and b/graphics/pokemon/oranguru/icon.png differ diff --git a/graphics/pokemon/orbeetle/back.png b/graphics/pokemon/orbeetle/back.png index 9d05053b6..0fa7b8129 100644 Binary files a/graphics/pokemon/orbeetle/back.png and b/graphics/pokemon/orbeetle/back.png differ diff --git a/graphics/pokemon/orbeetle/front.png b/graphics/pokemon/orbeetle/front.png index 6985abd01..4d2c29ca3 100644 Binary files a/graphics/pokemon/orbeetle/front.png and b/graphics/pokemon/orbeetle/front.png differ diff --git a/graphics/pokemon/orbeetle/icon.png b/graphics/pokemon/orbeetle/icon.png index 818aede52..9e8ddbed6 100644 Binary files a/graphics/pokemon/orbeetle/icon.png and b/graphics/pokemon/orbeetle/icon.png differ diff --git a/graphics/pokemon/oricorio/back.png b/graphics/pokemon/oricorio/back.png index 6dce8ad1e..dbdf864a9 100644 Binary files a/graphics/pokemon/oricorio/back.png and b/graphics/pokemon/oricorio/back.png differ diff --git a/graphics/pokemon/oricorio/front.png b/graphics/pokemon/oricorio/front.png index a2493fcca..b41b689eb 100644 Binary files a/graphics/pokemon/oricorio/front.png and b/graphics/pokemon/oricorio/front.png differ diff --git a/graphics/pokemon/oricorio/icon.png b/graphics/pokemon/oricorio/icon.png index a11934772..80936904c 100644 Binary files a/graphics/pokemon/oricorio/icon.png and b/graphics/pokemon/oricorio/icon.png differ diff --git a/graphics/pokemon/oshawott/back.png b/graphics/pokemon/oshawott/back.png index 8dd9e05c8..9e783e0b2 100644 Binary files a/graphics/pokemon/oshawott/back.png and b/graphics/pokemon/oshawott/back.png differ diff --git a/graphics/pokemon/oshawott/icon.png b/graphics/pokemon/oshawott/icon.png index 9184bcc8d..f9bf07e55 100644 Binary files a/graphics/pokemon/oshawott/icon.png and b/graphics/pokemon/oshawott/icon.png differ diff --git a/graphics/pokemon/overqwil/back.png b/graphics/pokemon/overqwil/back.png index e4950d7dd..79670b060 100644 Binary files a/graphics/pokemon/overqwil/back.png and b/graphics/pokemon/overqwil/back.png differ diff --git a/graphics/pokemon/overqwil/front.png b/graphics/pokemon/overqwil/front.png index e607202ee..fa6f3121a 100644 Binary files a/graphics/pokemon/overqwil/front.png and b/graphics/pokemon/overqwil/front.png differ diff --git a/graphics/pokemon/overqwil/icon.png b/graphics/pokemon/overqwil/icon.png index d39d9f0ca..661013b72 100644 Binary files a/graphics/pokemon/overqwil/icon.png and b/graphics/pokemon/overqwil/icon.png differ diff --git a/graphics/pokemon/pachirisu/anim_front.png b/graphics/pokemon/pachirisu/anim_front.png index 34753e2f7..8af3f81c8 100644 Binary files a/graphics/pokemon/pachirisu/anim_front.png and b/graphics/pokemon/pachirisu/anim_front.png differ diff --git a/graphics/pokemon/pachirisu/back.png b/graphics/pokemon/pachirisu/back.png index 6591dc8c9..ca3fd09cf 100644 Binary files a/graphics/pokemon/pachirisu/back.png and b/graphics/pokemon/pachirisu/back.png differ diff --git a/graphics/pokemon/pachirisu/icon.png b/graphics/pokemon/pachirisu/icon.png index f89c560ea..d9973de3c 100644 Binary files a/graphics/pokemon/pachirisu/icon.png and b/graphics/pokemon/pachirisu/icon.png differ diff --git a/graphics/pokemon/palkia/anim_front.png b/graphics/pokemon/palkia/anim_front.png index 4e463f0de..73c70a694 100644 Binary files a/graphics/pokemon/palkia/anim_front.png and b/graphics/pokemon/palkia/anim_front.png differ diff --git a/graphics/pokemon/palkia/back.png b/graphics/pokemon/palkia/back.png index 53196658c..f38ba8a23 100644 Binary files a/graphics/pokemon/palkia/back.png and b/graphics/pokemon/palkia/back.png differ diff --git a/graphics/pokemon/palkia/origin/back.png b/graphics/pokemon/palkia/origin/back.png index 49b93b4c0..1c3bbd210 100644 Binary files a/graphics/pokemon/palkia/origin/back.png and b/graphics/pokemon/palkia/origin/back.png differ diff --git a/graphics/pokemon/palkia/origin/front.png b/graphics/pokemon/palkia/origin/front.png index 05d4a96f2..3147470d6 100644 Binary files a/graphics/pokemon/palkia/origin/front.png and b/graphics/pokemon/palkia/origin/front.png differ diff --git a/graphics/pokemon/palkia/origin/icon.png b/graphics/pokemon/palkia/origin/icon.png index cd70b7038..772e8c864 100644 Binary files a/graphics/pokemon/palkia/origin/icon.png and b/graphics/pokemon/palkia/origin/icon.png differ diff --git a/graphics/pokemon/palossand/back.png b/graphics/pokemon/palossand/back.png index 6ce357d5b..c80721be1 100644 Binary files a/graphics/pokemon/palossand/back.png and b/graphics/pokemon/palossand/back.png differ diff --git a/graphics/pokemon/palossand/front.png b/graphics/pokemon/palossand/front.png index 9a50b753b..d22845d34 100644 Binary files a/graphics/pokemon/palossand/front.png and b/graphics/pokemon/palossand/front.png differ diff --git a/graphics/pokemon/palossand/icon.png b/graphics/pokemon/palossand/icon.png index 55ff0914b..3131f2c20 100644 Binary files a/graphics/pokemon/palossand/icon.png and b/graphics/pokemon/palossand/icon.png differ diff --git a/graphics/pokemon/palpitoad/anim_front.png b/graphics/pokemon/palpitoad/anim_front.png index 9762b21cc..27fba830e 100644 Binary files a/graphics/pokemon/palpitoad/anim_front.png and b/graphics/pokemon/palpitoad/anim_front.png differ diff --git a/graphics/pokemon/palpitoad/back.png b/graphics/pokemon/palpitoad/back.png index 34efc42ba..6490991b1 100644 Binary files a/graphics/pokemon/palpitoad/back.png and b/graphics/pokemon/palpitoad/back.png differ diff --git a/graphics/pokemon/palpitoad/icon.png b/graphics/pokemon/palpitoad/icon.png index 9ff2ec6fa..c035d93d8 100644 Binary files a/graphics/pokemon/palpitoad/icon.png and b/graphics/pokemon/palpitoad/icon.png differ diff --git a/graphics/pokemon/pancham/anim_front.png b/graphics/pokemon/pancham/anim_front.png index ce8c3bede..1434d9289 100644 Binary files a/graphics/pokemon/pancham/anim_front.png and b/graphics/pokemon/pancham/anim_front.png differ diff --git a/graphics/pokemon/pancham/back.png b/graphics/pokemon/pancham/back.png index dc0c02b7e..b19f8338f 100644 Binary files a/graphics/pokemon/pancham/back.png and b/graphics/pokemon/pancham/back.png differ diff --git a/graphics/pokemon/pancham/icon.png b/graphics/pokemon/pancham/icon.png index b7ae11d24..86f389bb8 100644 Binary files a/graphics/pokemon/pancham/icon.png and b/graphics/pokemon/pancham/icon.png differ diff --git a/graphics/pokemon/pangoro/anim_front.png b/graphics/pokemon/pangoro/anim_front.png index 1d5305467..144466d0b 100644 Binary files a/graphics/pokemon/pangoro/anim_front.png and b/graphics/pokemon/pangoro/anim_front.png differ diff --git a/graphics/pokemon/pangoro/back.png b/graphics/pokemon/pangoro/back.png index 4d1fb491b..3cf38acb1 100644 Binary files a/graphics/pokemon/pangoro/back.png and b/graphics/pokemon/pangoro/back.png differ diff --git a/graphics/pokemon/pangoro/icon.png b/graphics/pokemon/pangoro/icon.png index 068d4f6e6..1ffb29051 100644 Binary files a/graphics/pokemon/pangoro/icon.png and b/graphics/pokemon/pangoro/icon.png differ diff --git a/graphics/pokemon/panpour/anim_front.png b/graphics/pokemon/panpour/anim_front.png index ae6c0222d..84233aa35 100644 Binary files a/graphics/pokemon/panpour/anim_front.png and b/graphics/pokemon/panpour/anim_front.png differ diff --git a/graphics/pokemon/panpour/back.png b/graphics/pokemon/panpour/back.png index ac92d316d..9428ad780 100644 Binary files a/graphics/pokemon/panpour/back.png and b/graphics/pokemon/panpour/back.png differ diff --git a/graphics/pokemon/panpour/icon.png b/graphics/pokemon/panpour/icon.png index 342c2a2fd..ac874976e 100644 Binary files a/graphics/pokemon/panpour/icon.png and b/graphics/pokemon/panpour/icon.png differ diff --git a/graphics/pokemon/pansage/anim_front.png b/graphics/pokemon/pansage/anim_front.png index d4c0044d9..9eb2397d1 100644 Binary files a/graphics/pokemon/pansage/anim_front.png and b/graphics/pokemon/pansage/anim_front.png differ diff --git a/graphics/pokemon/pansage/back.png b/graphics/pokemon/pansage/back.png index 6aa99dce7..90de0b408 100644 Binary files a/graphics/pokemon/pansage/back.png and b/graphics/pokemon/pansage/back.png differ diff --git a/graphics/pokemon/pansage/icon.png b/graphics/pokemon/pansage/icon.png index eec69b308..e5fce534b 100644 Binary files a/graphics/pokemon/pansage/icon.png and b/graphics/pokemon/pansage/icon.png differ diff --git a/graphics/pokemon/pansear/anim_front.png b/graphics/pokemon/pansear/anim_front.png index 1d11a0f83..0510243a9 100644 Binary files a/graphics/pokemon/pansear/anim_front.png and b/graphics/pokemon/pansear/anim_front.png differ diff --git a/graphics/pokemon/pansear/back.png b/graphics/pokemon/pansear/back.png index 5f98cee72..d5017e1ba 100644 Binary files a/graphics/pokemon/pansear/back.png and b/graphics/pokemon/pansear/back.png differ diff --git a/graphics/pokemon/pansear/icon.png b/graphics/pokemon/pansear/icon.png index b52ae3558..ca1e09dac 100644 Binary files a/graphics/pokemon/pansear/icon.png and b/graphics/pokemon/pansear/icon.png differ diff --git a/graphics/pokemon/paras/anim_front.png b/graphics/pokemon/paras/anim_front.png index ff5d42fc2..b22fccb14 100644 Binary files a/graphics/pokemon/paras/anim_front.png and b/graphics/pokemon/paras/anim_front.png differ diff --git a/graphics/pokemon/paras/back.png b/graphics/pokemon/paras/back.png index ca19353cf..34c882480 100644 Binary files a/graphics/pokemon/paras/back.png and b/graphics/pokemon/paras/back.png differ diff --git a/graphics/pokemon/paras/normal.pal b/graphics/pokemon/paras/normal.pal index 08c060f7a..731359747 100644 --- a/graphics/pokemon/paras/normal.pal +++ b/graphics/pokemon/paras/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -189 65 65 -98 41 41 -246 106 106 -197 180 32 -255 213 82 -16 16 16 -112 72 24 -57 41 16 -230 131 41 -255 246 255 -180 98 32 -255 172 98 +255 247 255 +206 206 206 90 90 90 -205 205 205 -164 164 205 +255 214 82 +197 181 33 +247 107 107 +189 66 66 +99 41 41 +165 165 206 +255 173 99 +230 132 41 +181 99 33 +115 74 25 +58 41 16 +16 16 16 diff --git a/graphics/pokemon/paras/shiny.pal b/graphics/pokemon/paras/shiny.pal index d5b733479..9a99b14b8 100644 --- a/graphics/pokemon/paras/shiny.pal +++ b/graphics/pokemon/paras/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -224 56 80 -152 16 40 -248 120 144 -192 176 32 -248 208 80 +255 247 255 +206 206 206 +90 90 90 +255 247 90 +206 189 33 +255 123 148 +230 58 82 +156 0 25 +165 165 206 +255 132 58 +239 82 25 +197 49 33 +107 41 16 +58 33 8 16 16 16 -104 40 16 -56 32 8 -224 96 48 -255 246 255 -176 48 40 -240 144 96 -88 88 88 -248 240 248 -200 200 200 diff --git a/graphics/pokemon/parasect/anim_front.png b/graphics/pokemon/parasect/anim_front.png index 3feef164b..963b1485a 100644 Binary files a/graphics/pokemon/parasect/anim_front.png and b/graphics/pokemon/parasect/anim_front.png differ diff --git a/graphics/pokemon/parasect/back.png b/graphics/pokemon/parasect/back.png index bc8802b1a..3a5d5a806 100644 Binary files a/graphics/pokemon/parasect/back.png and b/graphics/pokemon/parasect/back.png differ diff --git a/graphics/pokemon/parasect/normal.pal b/graphics/pokemon/parasect/normal.pal index 0d82fc25c..9aec34687 100644 --- a/graphics/pokemon/parasect/normal.pal +++ b/graphics/pokemon/parasect/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 8 8 -248 104 104 -240 48 48 -248 208 80 +255 246 255 +213 213 213 +156 139 164 +255 213 82 +213 205 49 +255 106 106 +238 49 49 +189 49 65 +123 8 8 +255 0 255 +255 131 82 +222 106 49 +180 65 57 +98 16 0 16 16 16 -240 152 152 -208 200 48 -192 48 64 -96 16 0 -176 64 56 -248 240 248 -216 104 48 -208 208 208 -152 136 160 -0 0 0 diff --git a/graphics/pokemon/parasect/shiny.pal b/graphics/pokemon/parasect/shiny.pal index ef2a4d63f..a2ea6ecd9 100644 --- a/graphics/pokemon/parasect/shiny.pal +++ b/graphics/pokemon/parasect/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 64 8 -248 168 96 -232 136 48 -248 208 80 +255 246 255 +213 213 213 +156 139 164 +255 213 82 +213 205 49 +255 172 98 +238 139 49 +180 98 49 +123 65 8 +255 0 255 +255 197 82 +222 164 49 +172 106 65 +98 57 0 16 16 16 -248 192 80 -208 200 48 -176 96 48 -96 56 16 -168 112 80 -248 240 248 -216 168 72 -208 208 208 -152 136 160 -0 0 0 diff --git a/graphics/pokemon/passimian/back.png b/graphics/pokemon/passimian/back.png index c49499b9d..e27f88bb0 100644 Binary files a/graphics/pokemon/passimian/back.png and b/graphics/pokemon/passimian/back.png differ diff --git a/graphics/pokemon/passimian/front.png b/graphics/pokemon/passimian/front.png index d3a1c59b4..94ebe658c 100644 Binary files a/graphics/pokemon/passimian/front.png and b/graphics/pokemon/passimian/front.png differ diff --git a/graphics/pokemon/passimian/icon.png b/graphics/pokemon/passimian/icon.png index 7d168e462..6daf24ccb 100644 Binary files a/graphics/pokemon/passimian/icon.png and b/graphics/pokemon/passimian/icon.png differ diff --git a/graphics/pokemon/patrat/anim_front.png b/graphics/pokemon/patrat/anim_front.png index 082347e52..68bf54bc4 100644 Binary files a/graphics/pokemon/patrat/anim_front.png and b/graphics/pokemon/patrat/anim_front.png differ diff --git a/graphics/pokemon/patrat/back.png b/graphics/pokemon/patrat/back.png index 47fb55255..677b14213 100644 Binary files a/graphics/pokemon/patrat/back.png and b/graphics/pokemon/patrat/back.png differ diff --git a/graphics/pokemon/patrat/icon.png b/graphics/pokemon/patrat/icon.png index 6c259fd09..0d6c4c6d6 100644 Binary files a/graphics/pokemon/patrat/icon.png and b/graphics/pokemon/patrat/icon.png differ diff --git a/graphics/pokemon/pawniard/anim_front.png b/graphics/pokemon/pawniard/anim_front.png index 46cae01bd..7fc6d3b72 100644 Binary files a/graphics/pokemon/pawniard/anim_front.png and b/graphics/pokemon/pawniard/anim_front.png differ diff --git a/graphics/pokemon/pawniard/back.png b/graphics/pokemon/pawniard/back.png index 717e9b131..1bc44f8f2 100644 Binary files a/graphics/pokemon/pawniard/back.png and b/graphics/pokemon/pawniard/back.png differ diff --git a/graphics/pokemon/pawniard/icon.png b/graphics/pokemon/pawniard/icon.png index 747cb8edc..703944b41 100644 Binary files a/graphics/pokemon/pawniard/icon.png and b/graphics/pokemon/pawniard/icon.png differ diff --git a/graphics/pokemon/pelipper/anim_front.png b/graphics/pokemon/pelipper/anim_front.png index 320c012d1..d99325b03 100644 Binary files a/graphics/pokemon/pelipper/anim_front.png and b/graphics/pokemon/pelipper/anim_front.png differ diff --git a/graphics/pokemon/pelipper/back.png b/graphics/pokemon/pelipper/back.png index 69a5cf610..7fb23beef 100644 Binary files a/graphics/pokemon/pelipper/back.png and b/graphics/pokemon/pelipper/back.png differ diff --git a/graphics/pokemon/perrserker/back.png b/graphics/pokemon/perrserker/back.png index 40ab5c40f..1a116b98a 100644 Binary files a/graphics/pokemon/perrserker/back.png and b/graphics/pokemon/perrserker/back.png differ diff --git a/graphics/pokemon/perrserker/front.png b/graphics/pokemon/perrserker/front.png index f66afda09..2544418b3 100644 Binary files a/graphics/pokemon/perrserker/front.png and b/graphics/pokemon/perrserker/front.png differ diff --git a/graphics/pokemon/perrserker/icon.png b/graphics/pokemon/perrserker/icon.png index 7607e1ee4..fe93bd317 100644 Binary files a/graphics/pokemon/perrserker/icon.png and b/graphics/pokemon/perrserker/icon.png differ diff --git a/graphics/pokemon/persian/alolan/back.png b/graphics/pokemon/persian/alolan/back.png index 39e4aafaf..cdf20d0f7 100644 Binary files a/graphics/pokemon/persian/alolan/back.png and b/graphics/pokemon/persian/alolan/back.png differ diff --git a/graphics/pokemon/persian/alolan/front.png b/graphics/pokemon/persian/alolan/front.png index fef220dd2..83bfb2dc4 100644 Binary files a/graphics/pokemon/persian/alolan/front.png and b/graphics/pokemon/persian/alolan/front.png differ diff --git a/graphics/pokemon/persian/alolan/icon.png b/graphics/pokemon/persian/alolan/icon.png index a72048df5..75348250d 100644 Binary files a/graphics/pokemon/persian/alolan/icon.png and b/graphics/pokemon/persian/alolan/icon.png differ diff --git a/graphics/pokemon/persian/anim_front.png b/graphics/pokemon/persian/anim_front.png index c805f3204..72e34fad1 100644 Binary files a/graphics/pokemon/persian/anim_front.png and b/graphics/pokemon/persian/anim_front.png differ diff --git a/graphics/pokemon/persian/back.png b/graphics/pokemon/persian/back.png index 90ff46373..9dc29f554 100644 Binary files a/graphics/pokemon/persian/back.png and b/graphics/pokemon/persian/back.png differ diff --git a/graphics/pokemon/persian/icon.png b/graphics/pokemon/persian/icon.png index caae1e99e..7c004cd11 100644 Binary files a/graphics/pokemon/persian/icon.png and b/graphics/pokemon/persian/icon.png differ diff --git a/graphics/pokemon/persian/normal.pal b/graphics/pokemon/persian/normal.pal index 073415db2..02c30235b 100644 --- a/graphics/pokemon/persian/normal.pal +++ b/graphics/pokemon/persian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +255 255 255 +222 222 222 16 16 16 -128 80 0 -144 120 32 -216 176 104 -184 160 72 -176 128 40 -248 224 128 -240 80 64 -248 248 248 -248 184 152 -160 16 0 -216 216 216 -248 248 168 -136 0 0 -232 64 48 +255 189 156 +246 82 65 +164 16 0 +189 164 74 +148 123 32 +115 90 16 +255 0 255 +255 255 172 +255 230 131 +222 180 106 +180 131 41 +131 82 0 diff --git a/graphics/pokemon/persian/shiny.pal b/graphics/pokemon/persian/shiny.pal index ba2fdc3fe..0fe291327 100644 --- a/graphics/pokemon/persian/shiny.pal +++ b/graphics/pokemon/persian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +255 255 255 +222 222 222 16 16 16 -120 96 16 -208 136 136 -232 200 128 -240 184 184 -168 144 48 -248 240 144 -240 96 88 -248 248 248 -248 184 152 -160 40 32 -216 216 216 -248 248 200 -163 43 32 -244 103 90 +255 189 156 +246 82 65 +164 16 0 +255 180 180 +238 131 131 +222 98 98 +255 0 255 +255 255 205 +255 246 148 +238 205 131 +189 156 49 +139 106 8 diff --git a/graphics/pokemon/petilil/anim_front.png b/graphics/pokemon/petilil/anim_front.png index 1afe91ff5..f39753266 100644 Binary files a/graphics/pokemon/petilil/anim_front.png and b/graphics/pokemon/petilil/anim_front.png differ diff --git a/graphics/pokemon/petilil/back.png b/graphics/pokemon/petilil/back.png index c1e683719..af9325d37 100644 Binary files a/graphics/pokemon/petilil/back.png and b/graphics/pokemon/petilil/back.png differ diff --git a/graphics/pokemon/petilil/icon.png b/graphics/pokemon/petilil/icon.png index 6e9c931ee..11aa904fa 100644 Binary files a/graphics/pokemon/petilil/icon.png and b/graphics/pokemon/petilil/icon.png differ diff --git a/graphics/pokemon/phanpy/anim_front.png b/graphics/pokemon/phanpy/anim_front.png index 31f393972..480c6bf5d 100644 Binary files a/graphics/pokemon/phanpy/anim_front.png and b/graphics/pokemon/phanpy/anim_front.png differ diff --git a/graphics/pokemon/phanpy/icon.png b/graphics/pokemon/phanpy/icon.png index 9929d6982..35420cd10 100644 Binary files a/graphics/pokemon/phanpy/icon.png and b/graphics/pokemon/phanpy/icon.png differ diff --git a/graphics/pokemon/phantump/anim_front.png b/graphics/pokemon/phantump/anim_front.png index f6eef6dc1..baaa2b3a8 100644 Binary files a/graphics/pokemon/phantump/anim_front.png and b/graphics/pokemon/phantump/anim_front.png differ diff --git a/graphics/pokemon/phantump/back.png b/graphics/pokemon/phantump/back.png index 8d290f64d..266e0f662 100644 Binary files a/graphics/pokemon/phantump/back.png and b/graphics/pokemon/phantump/back.png differ diff --git a/graphics/pokemon/phantump/icon.png b/graphics/pokemon/phantump/icon.png index 4a11272c9..f3a5b536e 100644 Binary files a/graphics/pokemon/phantump/icon.png and b/graphics/pokemon/phantump/icon.png differ diff --git a/graphics/pokemon/pheromosa/back.png b/graphics/pokemon/pheromosa/back.png index 6afd28aca..9cc3c9d6b 100644 Binary files a/graphics/pokemon/pheromosa/back.png and b/graphics/pokemon/pheromosa/back.png differ diff --git a/graphics/pokemon/pheromosa/front.png b/graphics/pokemon/pheromosa/front.png index 4ef210959..fdbed272c 100644 Binary files a/graphics/pokemon/pheromosa/front.png and b/graphics/pokemon/pheromosa/front.png differ diff --git a/graphics/pokemon/pheromosa/icon.png b/graphics/pokemon/pheromosa/icon.png index 4ca4d8210..4ab3a02a4 100644 Binary files a/graphics/pokemon/pheromosa/icon.png and b/graphics/pokemon/pheromosa/icon.png differ diff --git a/graphics/pokemon/phione/anim_front.png b/graphics/pokemon/phione/anim_front.png index 842cce89d..a2b680ab0 100644 Binary files a/graphics/pokemon/phione/anim_front.png and b/graphics/pokemon/phione/anim_front.png differ diff --git a/graphics/pokemon/phione/back.png b/graphics/pokemon/phione/back.png index d70eb2077..a8d31b659 100644 Binary files a/graphics/pokemon/phione/back.png and b/graphics/pokemon/phione/back.png differ diff --git a/graphics/pokemon/pichu/back.png b/graphics/pokemon/pichu/back.png index f33717ba3..559ec0935 100644 Binary files a/graphics/pokemon/pichu/back.png and b/graphics/pokemon/pichu/back.png differ diff --git a/graphics/pokemon/pidgeot/anim_front.png b/graphics/pokemon/pidgeot/anim_front.png index 8ff5e6c13..2a9f7c588 100644 Binary files a/graphics/pokemon/pidgeot/anim_front.png and b/graphics/pokemon/pidgeot/anim_front.png differ diff --git a/graphics/pokemon/pidgeot/back.png b/graphics/pokemon/pidgeot/back.png index 34369db65..183b1254b 100644 Binary files a/graphics/pokemon/pidgeot/back.png and b/graphics/pokemon/pidgeot/back.png differ diff --git a/graphics/pokemon/pidgeot/icon.png b/graphics/pokemon/pidgeot/icon.png index a614a8a37..69f8ce299 100644 Binary files a/graphics/pokemon/pidgeot/icon.png and b/graphics/pokemon/pidgeot/icon.png differ diff --git a/graphics/pokemon/pidgeot/mega/back.png b/graphics/pokemon/pidgeot/mega/back.png index 034a265fa..19eacf1fd 100644 Binary files a/graphics/pokemon/pidgeot/mega/back.png and b/graphics/pokemon/pidgeot/mega/back.png differ diff --git a/graphics/pokemon/pidgeot/mega/front.png b/graphics/pokemon/pidgeot/mega/front.png index ba951b145..948738f10 100644 Binary files a/graphics/pokemon/pidgeot/mega/front.png and b/graphics/pokemon/pidgeot/mega/front.png differ diff --git a/graphics/pokemon/pidgeot/mega/icon.png b/graphics/pokemon/pidgeot/mega/icon.png index 8d43310e4..32cb6e1f1 100644 Binary files a/graphics/pokemon/pidgeot/mega/icon.png and b/graphics/pokemon/pidgeot/mega/icon.png differ diff --git a/graphics/pokemon/pidgeot/normal.pal b/graphics/pokemon/pidgeot/normal.pal index c387bd5b8..43afea2f1 100644 --- a/graphics/pokemon/pidgeot/normal.pal +++ b/graphics/pokemon/pidgeot/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -90 57 41 -16 16 16 -172 123 90 -115 82 74 -230 180 98 -255 230 139 -248 240 120 -248 152 112 -238 98 65 -139 57 32 -213 49 24 -197 180 197 255 255 255 +197 180 197 +255 246 189 +255 230 139 +230 180 98 +255 172 115 +238 98 65 +213 49 24 +139 57 32 230 164 156 189 123 123 +172 123 90 +115 82 74 +90 57 41 +16 16 16 diff --git a/graphics/pokemon/pidgeot/shiny.pal b/graphics/pokemon/pidgeot/shiny.pal index 5b47a0d5d..d97921941 100644 --- a/graphics/pokemon/pidgeot/shiny.pal +++ b/graphics/pokemon/pidgeot/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 56 0 +255 255 255 +197 180 197 +255 255 164 +255 255 123 +255 213 82 +255 238 115 +255 213 0 +246 164 0 +197 98 0 +255 205 90 +205 148 57 +180 131 16 +139 98 8 +115 74 0 16 16 16 -184 144 48 -136 96 16 -232 200 96 -248 248 144 -248 248 144 -248 248 96 -248 216 48 -192 96 0 -240 168 32 -192 176 192 -248 248 248 -248 200 88 -200 144 56 diff --git a/graphics/pokemon/pidgeotto/anim_front.png b/graphics/pokemon/pidgeotto/anim_front.png index 6610f19da..49fc12c0b 100644 Binary files a/graphics/pokemon/pidgeotto/anim_front.png and b/graphics/pokemon/pidgeotto/anim_front.png differ diff --git a/graphics/pokemon/pidgeotto/back.png b/graphics/pokemon/pidgeotto/back.png index 739e474e0..43aaed915 100644 Binary files a/graphics/pokemon/pidgeotto/back.png and b/graphics/pokemon/pidgeotto/back.png differ diff --git a/graphics/pokemon/pidgeotto/icon.png b/graphics/pokemon/pidgeotto/icon.png index 6f6c10c5d..7e0de3695 100644 Binary files a/graphics/pokemon/pidgeotto/icon.png and b/graphics/pokemon/pidgeotto/icon.png differ diff --git a/graphics/pokemon/pidgeotto/normal.pal b/graphics/pokemon/pidgeotto/normal.pal index 6c8b9ef6f..30dbaad1b 100644 --- a/graphics/pokemon/pidgeotto/normal.pal +++ b/graphics/pokemon/pidgeotto/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -123 49 32 -197 49 41 -238 98 65 -32 32 32 -144 64 72 -131 82 49 -248 248 248 -65 41 32 -120 120 128 -255 172 115 +255 255 255 213 213 222 -172 123 90 -230 189 90 +123 123 131 +16 16 16 +240 152 232 255 230 139 +230 189 90 +216 112 200 172 123 90 +131 82 49 +65 41 32 +255 172 115 +238 98 65 +197 49 41 +123 49 32 diff --git a/graphics/pokemon/pidgeotto/shiny.pal b/graphics/pokemon/pidgeotto/shiny.pal index 8281977d4..1af35cfe2 100644 --- a/graphics/pokemon/pidgeotto/shiny.pal +++ b/graphics/pokemon/pidgeotto/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -184 96 0 -232 152 16 -248 216 48 -16 16 16 -112 104 16 -112 128 48 -248 248 248 -48 56 16 -120 120 128 +152 160 208 +255 255 255 +213 213 222 +123 123 131 +32 32 32 248 248 120 -224 192 40 -176 176 72 -208 208 128 -240 248 168 -144 152 80 +246 255 172 +222 222 148 +224 184 0 +148 156 82 +115 131 49 +82 98 16 +255 255 172 +255 213 0 +238 148 0 +189 98 0 diff --git a/graphics/pokemon/pidgey/anim_front.png b/graphics/pokemon/pidgey/anim_front.png index 76890a127..77cd7c2ba 100644 Binary files a/graphics/pokemon/pidgey/anim_front.png and b/graphics/pokemon/pidgey/anim_front.png differ diff --git a/graphics/pokemon/pidgey/back.png b/graphics/pokemon/pidgey/back.png index 8fc81a972..e5510fe08 100644 Binary files a/graphics/pokemon/pidgey/back.png and b/graphics/pokemon/pidgey/back.png differ diff --git a/graphics/pokemon/pidgey/icon.png b/graphics/pokemon/pidgey/icon.png index e5b56c3ec..c3aba700f 100644 Binary files a/graphics/pokemon/pidgey/icon.png and b/graphics/pokemon/pidgey/icon.png differ diff --git a/graphics/pokemon/pidgey/normal.pal b/graphics/pokemon/pidgey/normal.pal index da639746d..4081f468a 100644 --- a/graphics/pokemon/pidgey/normal.pal +++ b/graphics/pokemon/pidgey/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 72 48 -205 131 90 -164 98 90 -164 98 90 -230 189 98 +255 255 255 +189 189 189 +131 131 131 16 16 16 -255 238 156 -128 128 128 -189 41 32 -184 184 184 255 172 115 -248 248 248 238 98 65 +189 41 32 +255 246 189 +255 238 156 +230 189 98 205 131 90 -64 32 16 +164 98 90 +115 74 49 +65 41 24 +255 0 255 diff --git a/graphics/pokemon/pidgey/shiny.pal b/graphics/pokemon/pidgey/shiny.pal index 37d1fed4b..48ea08bf6 100644 --- a/graphics/pokemon/pidgey/shiny.pal +++ b/graphics/pokemon/pidgey/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -96 88 0 -176 160 32 -136 136 24 -136 136 24 -200 200 80 +152 160 208 +255 255 255 +189 189 189 +131 131 131 16 16 16 -232 232 128 -128 128 128 -192 112 0 -184 184 184 -248 232 112 -248 248 248 -232 192 64 -168 160 64 -72 56 0 +255 238 115 +255 205 41 +197 115 0 +238 255 238 +230 230 131 +205 205 24 +180 164 16 +139 139 16 +115 123 0 +82 106 0 +255 0 255 diff --git a/graphics/pokemon/pidove/anim_front.png b/graphics/pokemon/pidove/anim_front.png index e5dde5bb1..bf1c539f8 100644 Binary files a/graphics/pokemon/pidove/anim_front.png and b/graphics/pokemon/pidove/anim_front.png differ diff --git a/graphics/pokemon/pidove/back.png b/graphics/pokemon/pidove/back.png index 7b3f42f93..134a788b5 100644 Binary files a/graphics/pokemon/pidove/back.png and b/graphics/pokemon/pidove/back.png differ diff --git a/graphics/pokemon/pidove/icon.png b/graphics/pokemon/pidove/icon.png index 17e0dae24..ff6e494b5 100644 Binary files a/graphics/pokemon/pidove/icon.png and b/graphics/pokemon/pidove/icon.png differ diff --git a/graphics/pokemon/pignite/anim_front.png b/graphics/pokemon/pignite/anim_front.png index 2c830fb0d..78f10f157 100644 Binary files a/graphics/pokemon/pignite/anim_front.png and b/graphics/pokemon/pignite/anim_front.png differ diff --git a/graphics/pokemon/pignite/back.png b/graphics/pokemon/pignite/back.png index 9c706c221..78f8ad289 100644 Binary files a/graphics/pokemon/pignite/back.png and b/graphics/pokemon/pignite/back.png differ diff --git a/graphics/pokemon/pikachu/anim_front.png b/graphics/pokemon/pikachu/anim_front.png index af75b2b51..89538a861 100644 Binary files a/graphics/pokemon/pikachu/anim_front.png and b/graphics/pokemon/pikachu/anim_front.png differ diff --git a/graphics/pokemon/pikachu/anim_frontf.png b/graphics/pokemon/pikachu/anim_frontf.png index c911e36cb..27780be98 100644 Binary files a/graphics/pokemon/pikachu/anim_frontf.png and b/graphics/pokemon/pikachu/anim_frontf.png differ diff --git a/graphics/pokemon/pikachu/back.png b/graphics/pokemon/pikachu/back.png index 64ed04d26..c18078cfd 100644 Binary files a/graphics/pokemon/pikachu/back.png and b/graphics/pokemon/pikachu/back.png differ diff --git a/graphics/pokemon/pikachu/backf.png b/graphics/pokemon/pikachu/backf.png index f28863413..9f0166b3d 100644 Binary files a/graphics/pokemon/pikachu/backf.png and b/graphics/pokemon/pikachu/backf.png differ diff --git a/graphics/pokemon/pikachu/icon.png b/graphics/pokemon/pikachu/icon.png index ca9532541..64135c13f 100644 Binary files a/graphics/pokemon/pikachu/icon.png and b/graphics/pokemon/pikachu/icon.png differ diff --git a/graphics/pokemon/pikachu/normal.pal b/graphics/pokemon/pikachu/normal.pal index 8f402fd44..057bc45b8 100644 --- a/graphics/pokemon/pikachu/normal.pal +++ b/graphics/pokemon/pikachu/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 0 0 0 -41 41 41 -99 49 8 -82 82 90 -247 189 33 -156 82 0 -247 230 82 +255 246 164 +246 230 82 +246 189 32 222 148 0 -255 247 165 +156 82 0 +98 49 8 +230 148 131 +230 90 65 +197 32 24 +123 41 8 +123 123 139 +64 64 72 +41 41 41 255 255 255 -230 90 66 -197 33 25 -168 48 16 -224 80 56 -0 0 0 diff --git a/graphics/pokemon/pikachu/partner_cap/back.png b/graphics/pokemon/pikachu/partner_cap/back.png index 0f8e1ee9a..961611d28 100644 Binary files a/graphics/pokemon/pikachu/partner_cap/back.png and b/graphics/pokemon/pikachu/partner_cap/back.png differ diff --git a/graphics/pokemon/pikachu/partner_cap/front.png b/graphics/pokemon/pikachu/partner_cap/front.png index eebce0a0d..696590076 100644 Binary files a/graphics/pokemon/pikachu/partner_cap/front.png and b/graphics/pokemon/pikachu/partner_cap/front.png differ diff --git a/graphics/pokemon/pikachu/shiny.pal b/graphics/pokemon/pikachu/shiny.pal index b2149ed68..524daf09f 100644 --- a/graphics/pokemon/pikachu/shiny.pal +++ b/graphics/pokemon/pikachu/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -40 40 40 -112 24 8 -80 80 88 -240 160 24 -176 56 16 -248 200 72 -224 128 0 -248 232 152 -248 248 248 -224 96 64 -192 40 24 -192 40 24 -224 96 64 0 0 0 +255 230 131 +255 197 49 +255 164 0 +230 131 0 +180 49 0 +115 16 0 +230 156 131 +230 98 65 +197 41 24 +123 49 8 +115 115 131 +82 82 90 +41 41 41 +255 255 255 diff --git a/graphics/pokemon/pikachu/world_cap/back.png b/graphics/pokemon/pikachu/world_cap/back.png index 3dec3e4bc..91f26897e 100644 Binary files a/graphics/pokemon/pikachu/world_cap/back.png and b/graphics/pokemon/pikachu/world_cap/back.png differ diff --git a/graphics/pokemon/pikachu/world_cap/front.png b/graphics/pokemon/pikachu/world_cap/front.png index 3ae769455..02b6dd7b8 100644 Binary files a/graphics/pokemon/pikachu/world_cap/front.png and b/graphics/pokemon/pikachu/world_cap/front.png differ diff --git a/graphics/pokemon/pikipek/back.png b/graphics/pokemon/pikipek/back.png index 6db6f66df..030eea3c1 100644 Binary files a/graphics/pokemon/pikipek/back.png and b/graphics/pokemon/pikipek/back.png differ diff --git a/graphics/pokemon/pikipek/front.png b/graphics/pokemon/pikipek/front.png index 973b1d140..a16e45512 100644 Binary files a/graphics/pokemon/pikipek/front.png and b/graphics/pokemon/pikipek/front.png differ diff --git a/graphics/pokemon/pikipek/icon.png b/graphics/pokemon/pikipek/icon.png index f13c8e9d1..291e148f1 100644 Binary files a/graphics/pokemon/pikipek/icon.png and b/graphics/pokemon/pikipek/icon.png differ diff --git a/graphics/pokemon/piloswine/anim_front.png b/graphics/pokemon/piloswine/anim_front.png index 3c52661e4..b02c23d17 100644 Binary files a/graphics/pokemon/piloswine/anim_front.png and b/graphics/pokemon/piloswine/anim_front.png differ diff --git a/graphics/pokemon/piloswine/back.png b/graphics/pokemon/piloswine/back.png index f7f9d30a1..331388aa6 100644 Binary files a/graphics/pokemon/piloswine/back.png and b/graphics/pokemon/piloswine/back.png differ diff --git a/graphics/pokemon/piloswine/icon.png b/graphics/pokemon/piloswine/icon.png index f8bf43624..a6ecd9893 100644 Binary files a/graphics/pokemon/piloswine/icon.png and b/graphics/pokemon/piloswine/icon.png differ diff --git a/graphics/pokemon/pincurchin/icon.png b/graphics/pokemon/pincurchin/icon.png index e2973a288..354d7d37d 100644 Binary files a/graphics/pokemon/pincurchin/icon.png and b/graphics/pokemon/pincurchin/icon.png differ diff --git a/graphics/pokemon/pineco/anim_front.png b/graphics/pokemon/pineco/anim_front.png index 3f2de289f..e2704f189 100644 Binary files a/graphics/pokemon/pineco/anim_front.png and b/graphics/pokemon/pineco/anim_front.png differ diff --git a/graphics/pokemon/pineco/back.png b/graphics/pokemon/pineco/back.png index 538abd92b..e90dde8c4 100644 Binary files a/graphics/pokemon/pineco/back.png and b/graphics/pokemon/pineco/back.png differ diff --git a/graphics/pokemon/pineco/icon.png b/graphics/pokemon/pineco/icon.png index d03a69ce3..fd509029b 100644 Binary files a/graphics/pokemon/pineco/icon.png and b/graphics/pokemon/pineco/icon.png differ diff --git a/graphics/pokemon/pinsir/back.png b/graphics/pokemon/pinsir/back.png index 0e66a8b70..8f984d796 100644 Binary files a/graphics/pokemon/pinsir/back.png and b/graphics/pokemon/pinsir/back.png differ diff --git a/graphics/pokemon/pinsir/icon.png b/graphics/pokemon/pinsir/icon.png index ac2a4bed0..ac8914611 100644 Binary files a/graphics/pokemon/pinsir/icon.png and b/graphics/pokemon/pinsir/icon.png differ diff --git a/graphics/pokemon/pinsir/mega/back.png b/graphics/pokemon/pinsir/mega/back.png index badd03cd0..f57585d8f 100644 Binary files a/graphics/pokemon/pinsir/mega/back.png and b/graphics/pokemon/pinsir/mega/back.png differ diff --git a/graphics/pokemon/pinsir/mega/front.png b/graphics/pokemon/pinsir/mega/front.png index 6ba222b44..2b495dba8 100644 Binary files a/graphics/pokemon/pinsir/mega/front.png and b/graphics/pokemon/pinsir/mega/front.png differ diff --git a/graphics/pokemon/pinsir/mega/icon.png b/graphics/pokemon/pinsir/mega/icon.png index ba6d5b6d4..57caf09bd 100644 Binary files a/graphics/pokemon/pinsir/mega/icon.png and b/graphics/pokemon/pinsir/mega/icon.png differ diff --git a/graphics/pokemon/piplup/anim_front.png b/graphics/pokemon/piplup/anim_front.png index d2d18cf1a..1ed77ba1d 100644 Binary files a/graphics/pokemon/piplup/anim_front.png and b/graphics/pokemon/piplup/anim_front.png differ diff --git a/graphics/pokemon/piplup/back.png b/graphics/pokemon/piplup/back.png index 98da2cafb..e4a7255bc 100644 Binary files a/graphics/pokemon/piplup/back.png and b/graphics/pokemon/piplup/back.png differ diff --git a/graphics/pokemon/piplup/icon.png b/graphics/pokemon/piplup/icon.png index 5eeb8a1c2..83ee49d74 100644 Binary files a/graphics/pokemon/piplup/icon.png and b/graphics/pokemon/piplup/icon.png differ diff --git a/graphics/pokemon/plusle/anim_front.png b/graphics/pokemon/plusle/anim_front.png index 9ed841cf0..35b92aca3 100644 Binary files a/graphics/pokemon/plusle/anim_front.png and b/graphics/pokemon/plusle/anim_front.png differ diff --git a/graphics/pokemon/plusle/back.png b/graphics/pokemon/plusle/back.png index ce81a914a..b63fbb9ce 100644 Binary files a/graphics/pokemon/plusle/back.png and b/graphics/pokemon/plusle/back.png differ diff --git a/graphics/pokemon/plusle/icon.png b/graphics/pokemon/plusle/icon.png index b216d812b..063355f28 100644 Binary files a/graphics/pokemon/plusle/icon.png and b/graphics/pokemon/plusle/icon.png differ diff --git a/graphics/pokemon/poipole/back.png b/graphics/pokemon/poipole/back.png index 7015d806a..65f062815 100644 Binary files a/graphics/pokemon/poipole/back.png and b/graphics/pokemon/poipole/back.png differ diff --git a/graphics/pokemon/poipole/front.png b/graphics/pokemon/poipole/front.png index fc3f513ba..95042adc0 100644 Binary files a/graphics/pokemon/poipole/front.png and b/graphics/pokemon/poipole/front.png differ diff --git a/graphics/pokemon/poipole/icon.png b/graphics/pokemon/poipole/icon.png index 37b9d6b82..dce46b073 100644 Binary files a/graphics/pokemon/poipole/icon.png and b/graphics/pokemon/poipole/icon.png differ diff --git a/graphics/pokemon/politoed/back.png b/graphics/pokemon/politoed/back.png index fc41804ec..c40360146 100644 Binary files a/graphics/pokemon/politoed/back.png and b/graphics/pokemon/politoed/back.png differ diff --git a/graphics/pokemon/politoed/icon.png b/graphics/pokemon/politoed/icon.png index 0b3c3d7b0..ffc6a38a4 100644 Binary files a/graphics/pokemon/politoed/icon.png and b/graphics/pokemon/politoed/icon.png differ diff --git a/graphics/pokemon/poliwag/anim_front.png b/graphics/pokemon/poliwag/anim_front.png index 40d9a43b6..b0e5aac1c 100644 Binary files a/graphics/pokemon/poliwag/anim_front.png and b/graphics/pokemon/poliwag/anim_front.png differ diff --git a/graphics/pokemon/poliwag/back.png b/graphics/pokemon/poliwag/back.png index 762909494..d85f353b2 100644 Binary files a/graphics/pokemon/poliwag/back.png and b/graphics/pokemon/poliwag/back.png differ diff --git a/graphics/pokemon/poliwag/icon.png b/graphics/pokemon/poliwag/icon.png index aa84ec0de..c0b0e6222 100644 Binary files a/graphics/pokemon/poliwag/icon.png and b/graphics/pokemon/poliwag/icon.png differ diff --git a/graphics/pokemon/poliwag/normal.pal b/graphics/pokemon/poliwag/normal.pal index 09bad1cd3..3fddb21d1 100644 --- a/graphics/pokemon/poliwag/normal.pal +++ b/graphics/pokemon/poliwag/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 57 115 -139 164 230 -82 131 197 -57 90 131 255 255 255 -16 16 16 -98 98 98 +200 200 200 180 172 189 +98 98 98 +255 0 255 +255 0 255 +56 112 168 255 189 172 255 106 106 189 90 74 -205 205 205 -57 115 172 -0 0 0 -0 0 0 +136 160 224 +80 128 192 +56 88 128 +24 56 112 +16 16 16 diff --git a/graphics/pokemon/poliwag/shiny.pal b/graphics/pokemon/poliwag/shiny.pal index 9a526f806..065f2ac3c 100644 --- a/graphics/pokemon/poliwag/shiny.pal +++ b/graphics/pokemon/poliwag/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 88 144 -160 208 232 -128 176 232 -72 104 192 -248 248 248 -16 16 16 -96 96 96 -192 184 200 -248 184 168 -248 128 128 -184 104 88 -224 224 224 +255 255 255 +222 222 222 +180 172 189 +98 98 98 +255 0 255 +255 0 255 96 144 232 -0 0 0 -0 0 0 +255 189 172 +255 106 106 +189 90 74 +164 213 246 +115 172 255 +82 115 213 +32 74 164 +16 16 16 diff --git a/graphics/pokemon/poliwhirl/anim_front.png b/graphics/pokemon/poliwhirl/anim_front.png index 1d5cf7180..e3dbb03ce 100644 Binary files a/graphics/pokemon/poliwhirl/anim_front.png and b/graphics/pokemon/poliwhirl/anim_front.png differ diff --git a/graphics/pokemon/poliwhirl/back.png b/graphics/pokemon/poliwhirl/back.png index 74ad4ac81..b0c6138b1 100644 Binary files a/graphics/pokemon/poliwhirl/back.png and b/graphics/pokemon/poliwhirl/back.png differ diff --git a/graphics/pokemon/poliwhirl/icon.png b/graphics/pokemon/poliwhirl/icon.png index a7b4d27df..d4c4f7280 100644 Binary files a/graphics/pokemon/poliwhirl/icon.png and b/graphics/pokemon/poliwhirl/icon.png differ diff --git a/graphics/pokemon/poliwhirl/normal.pal b/graphics/pokemon/poliwhirl/normal.pal index ac25d75a6..741a92a08 100644 --- a/graphics/pokemon/poliwhirl/normal.pal +++ b/graphics/pokemon/poliwhirl/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 57 98 -82 90 131 -115 131 197 -248 248 248 -115 131 197 -80 80 80 -184 184 192 -15 15 15 -136 160 224 -120 120 120 -136 152 160 -240 240 248 +255 255 255 213 213 222 -0 0 0 -0 0 0 +189 189 189 +164 164 164 +255 0 255 +255 0 255 +255 0 255 +123 123 123 +82 82 82 +56 112 168 +136 160 224 +80 128 192 +56 88 128 +24 56 112 +16 16 16 diff --git a/graphics/pokemon/poliwhirl/shiny.pal b/graphics/pokemon/poliwhirl/shiny.pal index 46d11fec3..0fcd67b82 100644 --- a/graphics/pokemon/poliwhirl/shiny.pal +++ b/graphics/pokemon/poliwhirl/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 88 144 -72 128 192 -104 192 240 -248 248 248 +255 255 255 +213 213 222 +189 189 189 +164 164 164 +255 0 255 +255 0 255 +255 0 255 +123 123 123 +82 82 82 64 160 232 -80 80 80 -184 184 184 +123 222 255 +82 189 255 +57 131 213 +32 90 172 16 16 16 -160 224 240 -120 120 120 -160 160 160 -248 248 248 -208 208 216 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/poliwrath/anim_front.png b/graphics/pokemon/poliwrath/anim_front.png index 67004c713..5051a0445 100644 Binary files a/graphics/pokemon/poliwrath/anim_front.png and b/graphics/pokemon/poliwrath/anim_front.png differ diff --git a/graphics/pokemon/poliwrath/back.png b/graphics/pokemon/poliwrath/back.png index 991318594..0e39599c9 100644 Binary files a/graphics/pokemon/poliwrath/back.png and b/graphics/pokemon/poliwrath/back.png differ diff --git a/graphics/pokemon/poliwrath/icon.png b/graphics/pokemon/poliwrath/icon.png index 4b549c002..9e0f2ed47 100644 Binary files a/graphics/pokemon/poliwrath/icon.png and b/graphics/pokemon/poliwrath/icon.png differ diff --git a/graphics/pokemon/poliwrath/normal.pal b/graphics/pokemon/poliwrath/normal.pal index e1f44100a..ab89bed15 100644 --- a/graphics/pokemon/poliwrath/normal.pal +++ b/graphics/pokemon/poliwrath/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -82 90 131 -180 189 230 -32 57 90 -115 131 197 -16 16 16 255 255 255 213 213 222 189 189 189 -82 82 82 -123 123 123 -232 232 248 164 164 164 -0 0 0 -0 0 0 -0 0 0 +255 0 255 +255 0 255 +56 112 168 +123 123 123 +82 82 82 +16 16 16 +136 160 224 +80 128 192 +56 88 128 +24 57 112 +16 16 16 diff --git a/graphics/pokemon/poliwrath/shiny.pal b/graphics/pokemon/poliwrath/shiny.pal index 3b92345e7..cbfca2817 100644 --- a/graphics/pokemon/poliwrath/shiny.pal +++ b/graphics/pokemon/poliwrath/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -248 160 176 -104 136 72 -184 216 160 -48 80 24 -136 184 112 +152 160 208 +255 255 255 +213 213 222 +189 189 189 +164 164 164 +255 0 255 +255 0 255 +120 160 88 +123 123 123 +82 82 82 +16 16 16 +189 222 164 +139 189 115 +106 139 74 +49 82 24 16 16 16 -248 248 248 -208 208 216 -184 184 184 -80 80 80 -120 120 120 -248 248 248 -160 160 160 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/polteageist/back.png b/graphics/pokemon/polteageist/back.png index b379f1fd2..53afd3c7d 100644 Binary files a/graphics/pokemon/polteageist/back.png and b/graphics/pokemon/polteageist/back.png differ diff --git a/graphics/pokemon/polteageist/front.png b/graphics/pokemon/polteageist/front.png index c05244805..05615b431 100644 Binary files a/graphics/pokemon/polteageist/front.png and b/graphics/pokemon/polteageist/front.png differ diff --git a/graphics/pokemon/polteageist/icon.png b/graphics/pokemon/polteageist/icon.png index d68d213e0..22fba612d 100644 Binary files a/graphics/pokemon/polteageist/icon.png and b/graphics/pokemon/polteageist/icon.png differ diff --git a/graphics/pokemon/ponyta/anim_front.png b/graphics/pokemon/ponyta/anim_front.png index b32f2e098..abb69bd7e 100644 Binary files a/graphics/pokemon/ponyta/anim_front.png and b/graphics/pokemon/ponyta/anim_front.png differ diff --git a/graphics/pokemon/ponyta/back.png b/graphics/pokemon/ponyta/back.png index b999c11da..64f3ae87e 100644 Binary files a/graphics/pokemon/ponyta/back.png and b/graphics/pokemon/ponyta/back.png differ diff --git a/graphics/pokemon/ponyta/galarian/back.png b/graphics/pokemon/ponyta/galarian/back.png index 9f27e92ba..fe4558431 100644 Binary files a/graphics/pokemon/ponyta/galarian/back.png and b/graphics/pokemon/ponyta/galarian/back.png differ diff --git a/graphics/pokemon/ponyta/galarian/front.png b/graphics/pokemon/ponyta/galarian/front.png index 23a535079..5ef1f3521 100644 Binary files a/graphics/pokemon/ponyta/galarian/front.png and b/graphics/pokemon/ponyta/galarian/front.png differ diff --git a/graphics/pokemon/ponyta/galarian/icon.png b/graphics/pokemon/ponyta/galarian/icon.png index 9991cc38d..3db1d91a5 100644 Binary files a/graphics/pokemon/ponyta/galarian/icon.png and b/graphics/pokemon/ponyta/galarian/icon.png differ diff --git a/graphics/pokemon/ponyta/icon.png b/graphics/pokemon/ponyta/icon.png index 22bf847ef..d049c9cd6 100644 Binary files a/graphics/pokemon/ponyta/icon.png and b/graphics/pokemon/ponyta/icon.png differ diff --git a/graphics/pokemon/ponyta/normal.pal b/graphics/pokemon/ponyta/normal.pal index d2af3d8c9..59e2afebe 100644 --- a/graphics/pokemon/ponyta/normal.pal +++ b/graphics/pokemon/ponyta/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +0 0 0 +255 255 255 +255 238 205 +230 205 139 +197 156 106 +139 82 49 +115 49 49 +238 49 49 230 90 41 255 156 24 255 222 82 -238 49 49 -139 82 49 -115 49 49 -255 238 205 -16 16 16 -160 72 72 -230 205 139 -197 156 106 -255 255 255 -65 74 131 -115 123 164 -197 197 213 +197 197 208 +115 123 160 +65 74 128 +0 0 0 diff --git a/graphics/pokemon/ponyta/shiny.pal b/graphics/pokemon/ponyta/shiny.pal index 99c81ff10..b778aec8a 100644 --- a/graphics/pokemon/ponyta/shiny.pal +++ b/graphics/pokemon/ponyta/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 144 232 -112 168 240 -192 216 248 -40 88 224 +0 0 0 +255 255 255 +255 255 222 +238 222 156 +205 172 123 176 128 112 -128 80 64 -248 248 216 -16 16 16 -176 128 112 -232 216 152 -200 168 120 -248 248 248 -64 72 80 -112 120 128 -192 192 192 +131 82 65 +41 88 230 +74 148 238 +115 172 246 +197 222 255 +197 197 197 +115 123 131 +65 74 82 +0 0 0 diff --git a/graphics/pokemon/poochyena/anim_front.png b/graphics/pokemon/poochyena/anim_front.png index 3362dc38b..46b6da0d1 100644 Binary files a/graphics/pokemon/poochyena/anim_front.png and b/graphics/pokemon/poochyena/anim_front.png differ diff --git a/graphics/pokemon/poochyena/back.png b/graphics/pokemon/poochyena/back.png index d4bf054bc..9a87ccafd 100644 Binary files a/graphics/pokemon/poochyena/back.png and b/graphics/pokemon/poochyena/back.png differ diff --git a/graphics/pokemon/poochyena/icon.png b/graphics/pokemon/poochyena/icon.png index e91254f8c..6e934038d 100644 Binary files a/graphics/pokemon/poochyena/icon.png and b/graphics/pokemon/poochyena/icon.png differ diff --git a/graphics/pokemon/popplio/back.png b/graphics/pokemon/popplio/back.png index 84f9b41a4..923ab7ef8 100644 Binary files a/graphics/pokemon/popplio/back.png and b/graphics/pokemon/popplio/back.png differ diff --git a/graphics/pokemon/popplio/front.png b/graphics/pokemon/popplio/front.png index 7274f5f1f..3e66227b4 100644 Binary files a/graphics/pokemon/popplio/front.png and b/graphics/pokemon/popplio/front.png differ diff --git a/graphics/pokemon/popplio/icon.png b/graphics/pokemon/popplio/icon.png index 5e72054c2..c35b74d2d 100644 Binary files a/graphics/pokemon/popplio/icon.png and b/graphics/pokemon/popplio/icon.png differ diff --git a/graphics/pokemon/porygon/anim_front.png b/graphics/pokemon/porygon/anim_front.png index 9d79f1db3..bd6c33103 100644 Binary files a/graphics/pokemon/porygon/anim_front.png and b/graphics/pokemon/porygon/anim_front.png differ diff --git a/graphics/pokemon/porygon/back.png b/graphics/pokemon/porygon/back.png index 870792e2d..2fd12a326 100644 Binary files a/graphics/pokemon/porygon/back.png and b/graphics/pokemon/porygon/back.png differ diff --git a/graphics/pokemon/porygon/icon.png b/graphics/pokemon/porygon/icon.png index 53d6356f7..d0cf9aece 100644 Binary files a/graphics/pokemon/porygon/icon.png and b/graphics/pokemon/porygon/icon.png differ diff --git a/graphics/pokemon/porygon2/anim_front.png b/graphics/pokemon/porygon2/anim_front.png index f494bd5e8..566ebfecb 100644 Binary files a/graphics/pokemon/porygon2/anim_front.png and b/graphics/pokemon/porygon2/anim_front.png differ diff --git a/graphics/pokemon/porygon2/back.png b/graphics/pokemon/porygon2/back.png index 6b9016508..292284f64 100644 Binary files a/graphics/pokemon/porygon2/back.png and b/graphics/pokemon/porygon2/back.png differ diff --git a/graphics/pokemon/porygon2/icon.png b/graphics/pokemon/porygon2/icon.png index 0a6d62f9c..0c9493f1f 100644 Binary files a/graphics/pokemon/porygon2/icon.png and b/graphics/pokemon/porygon2/icon.png differ diff --git a/graphics/pokemon/porygon_z/anim_front.png b/graphics/pokemon/porygon_z/anim_front.png index 16d5181ba..6ec9f0d12 100644 Binary files a/graphics/pokemon/porygon_z/anim_front.png and b/graphics/pokemon/porygon_z/anim_front.png differ diff --git a/graphics/pokemon/porygon_z/back.png b/graphics/pokemon/porygon_z/back.png index 4589a9887..8f2bf4f77 100644 Binary files a/graphics/pokemon/porygon_z/back.png and b/graphics/pokemon/porygon_z/back.png differ diff --git a/graphics/pokemon/porygon_z/icon.png b/graphics/pokemon/porygon_z/icon.png index 28fad4e3e..e8597f6b6 100644 Binary files a/graphics/pokemon/porygon_z/icon.png and b/graphics/pokemon/porygon_z/icon.png differ diff --git a/graphics/pokemon/primarina/back.png b/graphics/pokemon/primarina/back.png index ec17476b6..3baec0151 100644 Binary files a/graphics/pokemon/primarina/back.png and b/graphics/pokemon/primarina/back.png differ diff --git a/graphics/pokemon/primarina/front.png b/graphics/pokemon/primarina/front.png index 7bb279f8f..e203b8e0f 100644 Binary files a/graphics/pokemon/primarina/front.png and b/graphics/pokemon/primarina/front.png differ diff --git a/graphics/pokemon/primarina/icon.png b/graphics/pokemon/primarina/icon.png index 17a80b2e1..d642cf12b 100644 Binary files a/graphics/pokemon/primarina/icon.png and b/graphics/pokemon/primarina/icon.png differ diff --git a/graphics/pokemon/primeape/anim_front.png b/graphics/pokemon/primeape/anim_front.png index 44e61d033..85cec2952 100644 Binary files a/graphics/pokemon/primeape/anim_front.png and b/graphics/pokemon/primeape/anim_front.png differ diff --git a/graphics/pokemon/primeape/back.png b/graphics/pokemon/primeape/back.png index fd3e1c078..e5880490d 100644 Binary files a/graphics/pokemon/primeape/back.png and b/graphics/pokemon/primeape/back.png differ diff --git a/graphics/pokemon/primeape/icon.png b/graphics/pokemon/primeape/icon.png index 4e48a7b27..dedb65a08 100644 Binary files a/graphics/pokemon/primeape/icon.png and b/graphics/pokemon/primeape/icon.png differ diff --git a/graphics/pokemon/primeape/normal.pal b/graphics/pokemon/primeape/normal.pal index 015a68508..ef74715fd 100644 --- a/graphics/pokemon/primeape/normal.pal +++ b/graphics/pokemon/primeape/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -90 49 0 -156 106 106 -205 139 90 -0 0 0 -98 74 32 -255 230 180 -65 65 65 -230 189 156 +255 255 255 +197 197 197 123 123 123 -255 255 213 +65 65 65 255 148 90 -248 248 248 189 74 49 -255 148 90 -224 176 136 +230 180 139 +205 139 90 +156 106 106 +90 49 0 +0 0 0 +255 255 213 +255 230 180 +230 189 156 +98 74 32 diff --git a/graphics/pokemon/primeape/shiny.pal b/graphics/pokemon/primeape/shiny.pal index d1ae31aed..1e9e67730 100644 --- a/graphics/pokemon/primeape/shiny.pal +++ b/graphics/pokemon/primeape/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -88 72 0 -128 120 40 -168 168 88 -16 16 16 -168 96 56 -248 208 152 -64 64 64 -216 160 112 -120 120 120 -248 232 184 -248 144 88 -248 248 248 -184 96 72 -248 160 112 -200 216 128 +152 160 208 +255 255 255 +197 197 197 +123 123 123 +65 65 65 +255 148 90 +189 74 49 +205 222 131 +172 172 90 +131 123 32 +90 74 0 +0 0 0 +255 230 172 +255 205 139 +222 156 106 +172 98 57 diff --git a/graphics/pokemon/prinplup/anim_front.png b/graphics/pokemon/prinplup/anim_front.png index 4c18033e7..b4180798f 100644 Binary files a/graphics/pokemon/prinplup/anim_front.png and b/graphics/pokemon/prinplup/anim_front.png differ diff --git a/graphics/pokemon/prinplup/back.png b/graphics/pokemon/prinplup/back.png index 0e66817f4..002f28843 100644 Binary files a/graphics/pokemon/prinplup/back.png and b/graphics/pokemon/prinplup/back.png differ diff --git a/graphics/pokemon/prinplup/icon.png b/graphics/pokemon/prinplup/icon.png index 9cd1081b4..1a7f56291 100644 Binary files a/graphics/pokemon/prinplup/icon.png and b/graphics/pokemon/prinplup/icon.png differ diff --git a/graphics/pokemon/probopass/anim_front.png b/graphics/pokemon/probopass/anim_front.png index d224fe6c9..bcca97230 100644 Binary files a/graphics/pokemon/probopass/anim_front.png and b/graphics/pokemon/probopass/anim_front.png differ diff --git a/graphics/pokemon/probopass/back.png b/graphics/pokemon/probopass/back.png index 43d030bde..4e1ac3b90 100644 Binary files a/graphics/pokemon/probopass/back.png and b/graphics/pokemon/probopass/back.png differ diff --git a/graphics/pokemon/psyduck/anim_front.png b/graphics/pokemon/psyduck/anim_front.png index 00513cabe..561b367a7 100644 Binary files a/graphics/pokemon/psyduck/anim_front.png and b/graphics/pokemon/psyduck/anim_front.png differ diff --git a/graphics/pokemon/psyduck/back.png b/graphics/pokemon/psyduck/back.png index 4bed36444..855d8aa43 100644 Binary files a/graphics/pokemon/psyduck/back.png and b/graphics/pokemon/psyduck/back.png differ diff --git a/graphics/pokemon/psyduck/icon.png b/graphics/pokemon/psyduck/icon.png index c14ae4fb4..1f87ab0ff 100644 Binary files a/graphics/pokemon/psyduck/icon.png and b/graphics/pokemon/psyduck/icon.png differ diff --git a/graphics/pokemon/psyduck/normal.pal b/graphics/pokemon/psyduck/normal.pal index 7e2179a0b..56e9584cf 100644 --- a/graphics/pokemon/psyduck/normal.pal +++ b/graphics/pokemon/psyduck/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -123 123 123 -16 16 16 -148 90 16 -230 164 82 -255 213 74 -255 230 164 -222 180 82 -255 255 255 -131 90 0 255 238 189 246 222 139 -248 232 184 -0 0 0 -0 0 0 -0 0 0 +222 180 82 +131 90 0 +255 255 255 +222 222 222 +123 123 123 +255 0 255 +255 0 255 +255 0 255 +255 230 164 +255 213 74 +230 164 82 +148 90 16 +16 16 16 diff --git a/graphics/pokemon/psyduck/shiny.pal b/graphics/pokemon/psyduck/shiny.pal index 5151358e5..8f51e6fa7 100644 --- a/graphics/pokemon/psyduck/shiny.pal +++ b/graphics/pokemon/psyduck/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 120 120 +230 255 255 +180 222 246 +156 180 205 +123 131 156 +255 255 255 +222 222 222 +123 123 123 +255 0 255 +255 0 255 +255 0 255 +197 246 246 +156 222 230 +123 180 156 +65 106 115 16 16 16 -64 104 112 -120 176 152 -152 216 224 -192 240 240 -152 176 200 -248 248 248 -120 128 152 -224 248 248 -176 216 240 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/pumpkaboo/anim_front.png b/graphics/pokemon/pumpkaboo/anim_front.png index 680d2be4a..bbdbf0452 100644 Binary files a/graphics/pokemon/pumpkaboo/anim_front.png and b/graphics/pokemon/pumpkaboo/anim_front.png differ diff --git a/graphics/pokemon/pumpkaboo/icon.png b/graphics/pokemon/pumpkaboo/icon.png index dfebbfd96..e4db713ce 100644 Binary files a/graphics/pokemon/pumpkaboo/icon.png and b/graphics/pokemon/pumpkaboo/icon.png differ diff --git a/graphics/pokemon/pumpkaboo/large/anim_front.png b/graphics/pokemon/pumpkaboo/large/anim_front.png index 416f2cb75..68ccbd7ea 100644 Binary files a/graphics/pokemon/pumpkaboo/large/anim_front.png and b/graphics/pokemon/pumpkaboo/large/anim_front.png differ diff --git a/graphics/pokemon/pumpkaboo/small/anim_front.png b/graphics/pokemon/pumpkaboo/small/anim_front.png index 88ec2f765..61690764b 100644 Binary files a/graphics/pokemon/pumpkaboo/small/anim_front.png and b/graphics/pokemon/pumpkaboo/small/anim_front.png differ diff --git a/graphics/pokemon/pumpkaboo/super/anim_front.png b/graphics/pokemon/pumpkaboo/super/anim_front.png index 10a16be3c..fa1e57e75 100644 Binary files a/graphics/pokemon/pumpkaboo/super/anim_front.png and b/graphics/pokemon/pumpkaboo/super/anim_front.png differ diff --git a/graphics/pokemon/pupitar/anim_front.png b/graphics/pokemon/pupitar/anim_front.png index 7c883493f..c6e09e2d9 100644 Binary files a/graphics/pokemon/pupitar/anim_front.png and b/graphics/pokemon/pupitar/anim_front.png differ diff --git a/graphics/pokemon/pupitar/back.png b/graphics/pokemon/pupitar/back.png index 5417f482c..84a03b7e0 100644 Binary files a/graphics/pokemon/pupitar/back.png and b/graphics/pokemon/pupitar/back.png differ diff --git a/graphics/pokemon/pupitar/icon.png b/graphics/pokemon/pupitar/icon.png index 96d4ff503..ce3db5009 100644 Binary files a/graphics/pokemon/pupitar/icon.png and b/graphics/pokemon/pupitar/icon.png differ diff --git a/graphics/pokemon/purrloin/anim_front.png b/graphics/pokemon/purrloin/anim_front.png index e699be598..466fc9105 100644 Binary files a/graphics/pokemon/purrloin/anim_front.png and b/graphics/pokemon/purrloin/anim_front.png differ diff --git a/graphics/pokemon/purrloin/back.png b/graphics/pokemon/purrloin/back.png index 73ba5c163..b86bd2a0f 100644 Binary files a/graphics/pokemon/purrloin/back.png and b/graphics/pokemon/purrloin/back.png differ diff --git a/graphics/pokemon/purrloin/icon.png b/graphics/pokemon/purrloin/icon.png index f1f689db1..eebaecaa2 100644 Binary files a/graphics/pokemon/purrloin/icon.png and b/graphics/pokemon/purrloin/icon.png differ diff --git a/graphics/pokemon/purugly/anim_front.png b/graphics/pokemon/purugly/anim_front.png index 07a2e5a0d..674df91b8 100644 Binary files a/graphics/pokemon/purugly/anim_front.png and b/graphics/pokemon/purugly/anim_front.png differ diff --git a/graphics/pokemon/purugly/back.png b/graphics/pokemon/purugly/back.png index 1eae72417..f17ed1e3f 100644 Binary files a/graphics/pokemon/purugly/back.png and b/graphics/pokemon/purugly/back.png differ diff --git a/graphics/pokemon/purugly/icon.png b/graphics/pokemon/purugly/icon.png index 22c86876e..dd44327f6 100644 Binary files a/graphics/pokemon/purugly/icon.png and b/graphics/pokemon/purugly/icon.png differ diff --git a/graphics/pokemon/pyroar/anim_front.png b/graphics/pokemon/pyroar/anim_front.png index e2cdb0936..d36397ea6 100644 Binary files a/graphics/pokemon/pyroar/anim_front.png and b/graphics/pokemon/pyroar/anim_front.png differ diff --git a/graphics/pokemon/pyroar/anim_frontf.png b/graphics/pokemon/pyroar/anim_frontf.png index 014c60ab5..45a1063b3 100644 Binary files a/graphics/pokemon/pyroar/anim_frontf.png and b/graphics/pokemon/pyroar/anim_frontf.png differ diff --git a/graphics/pokemon/pyroar/back.png b/graphics/pokemon/pyroar/back.png index b806ed8e1..4da26f34f 100644 Binary files a/graphics/pokemon/pyroar/back.png and b/graphics/pokemon/pyroar/back.png differ diff --git a/graphics/pokemon/pyroar/backf.png b/graphics/pokemon/pyroar/backf.png index b7a221750..de161303d 100644 Binary files a/graphics/pokemon/pyroar/backf.png and b/graphics/pokemon/pyroar/backf.png differ diff --git a/graphics/pokemon/pyroar/frontf.png b/graphics/pokemon/pyroar/frontf.png index 7e6095a55..ff02e8d95 100644 Binary files a/graphics/pokemon/pyroar/frontf.png and b/graphics/pokemon/pyroar/frontf.png differ diff --git a/graphics/pokemon/pyroar/iconf.png b/graphics/pokemon/pyroar/iconf.png index 7ce013240..aa640f6c0 100644 Binary files a/graphics/pokemon/pyroar/iconf.png and b/graphics/pokemon/pyroar/iconf.png differ diff --git a/graphics/pokemon/pyukumuku/back.png b/graphics/pokemon/pyukumuku/back.png index c28d95a37..6712078e3 100644 Binary files a/graphics/pokemon/pyukumuku/back.png and b/graphics/pokemon/pyukumuku/back.png differ diff --git a/graphics/pokemon/pyukumuku/icon.png b/graphics/pokemon/pyukumuku/icon.png index 9e0a0a197..2e3e04451 100644 Binary files a/graphics/pokemon/pyukumuku/icon.png and b/graphics/pokemon/pyukumuku/icon.png differ diff --git a/graphics/pokemon/quagsire/icon.png b/graphics/pokemon/quagsire/icon.png index 988040339..9a1027dc3 100644 Binary files a/graphics/pokemon/quagsire/icon.png and b/graphics/pokemon/quagsire/icon.png differ diff --git a/graphics/pokemon/question_mark/double/anim_front.png b/graphics/pokemon/question_mark/double/anim_front.png index a6aff68c5..6afe02dee 100644 Binary files a/graphics/pokemon/question_mark/double/anim_front.png and b/graphics/pokemon/question_mark/double/anim_front.png differ diff --git a/graphics/pokemon/question_mark/double/back.png b/graphics/pokemon/question_mark/double/back.png index 8274a11ec..14eb6e139 100644 Binary files a/graphics/pokemon/question_mark/double/back.png and b/graphics/pokemon/question_mark/double/back.png differ diff --git a/graphics/pokemon/quilava/icon.png b/graphics/pokemon/quilava/icon.png index 41dd53e7e..ee8ea0fde 100644 Binary files a/graphics/pokemon/quilava/icon.png and b/graphics/pokemon/quilava/icon.png differ diff --git a/graphics/pokemon/quilladin/anim_front.png b/graphics/pokemon/quilladin/anim_front.png index 3fde9cf13..b88513904 100644 Binary files a/graphics/pokemon/quilladin/anim_front.png and b/graphics/pokemon/quilladin/anim_front.png differ diff --git a/graphics/pokemon/quilladin/back.png b/graphics/pokemon/quilladin/back.png index 132fc1364..0c961901e 100644 Binary files a/graphics/pokemon/quilladin/back.png and b/graphics/pokemon/quilladin/back.png differ diff --git a/graphics/pokemon/quilladin/icon.png b/graphics/pokemon/quilladin/icon.png index 5347898d5..26154c2ac 100644 Binary files a/graphics/pokemon/quilladin/icon.png and b/graphics/pokemon/quilladin/icon.png differ diff --git a/graphics/pokemon/qwilfish/anim_front.png b/graphics/pokemon/qwilfish/anim_front.png index c0de3bcca..3d12f6a11 100644 Binary files a/graphics/pokemon/qwilfish/anim_front.png and b/graphics/pokemon/qwilfish/anim_front.png differ diff --git a/graphics/pokemon/qwilfish/back.png b/graphics/pokemon/qwilfish/back.png index 030698c14..5e6c2b9ff 100644 Binary files a/graphics/pokemon/qwilfish/back.png and b/graphics/pokemon/qwilfish/back.png differ diff --git a/graphics/pokemon/qwilfish/hisuian/icon.png b/graphics/pokemon/qwilfish/hisuian/icon.png index e470f106a..6936dfe88 100644 Binary files a/graphics/pokemon/qwilfish/hisuian/icon.png and b/graphics/pokemon/qwilfish/hisuian/icon.png differ diff --git a/graphics/pokemon/qwilfish/icon.png b/graphics/pokemon/qwilfish/icon.png index 0e5c3e0e3..624df9179 100644 Binary files a/graphics/pokemon/qwilfish/icon.png and b/graphics/pokemon/qwilfish/icon.png differ diff --git a/graphics/pokemon/raboot/back.png b/graphics/pokemon/raboot/back.png index 78cf7631b..1651d9e0e 100644 Binary files a/graphics/pokemon/raboot/back.png and b/graphics/pokemon/raboot/back.png differ diff --git a/graphics/pokemon/raboot/front.png b/graphics/pokemon/raboot/front.png index 756269fac..19d8f25f0 100644 Binary files a/graphics/pokemon/raboot/front.png and b/graphics/pokemon/raboot/front.png differ diff --git a/graphics/pokemon/raboot/icon.png b/graphics/pokemon/raboot/icon.png index 53d0121ef..80df66631 100644 Binary files a/graphics/pokemon/raboot/icon.png and b/graphics/pokemon/raboot/icon.png differ diff --git a/graphics/pokemon/raichu/alolan/back.png b/graphics/pokemon/raichu/alolan/back.png index 7980abbad..abb01054a 100644 Binary files a/graphics/pokemon/raichu/alolan/back.png and b/graphics/pokemon/raichu/alolan/back.png differ diff --git a/graphics/pokemon/raichu/alolan/front.png b/graphics/pokemon/raichu/alolan/front.png index 22261d63b..20c88523f 100644 Binary files a/graphics/pokemon/raichu/alolan/front.png and b/graphics/pokemon/raichu/alolan/front.png differ diff --git a/graphics/pokemon/raichu/alolan/icon.png b/graphics/pokemon/raichu/alolan/icon.png index 40b0b849b..d005cf7e1 100644 Binary files a/graphics/pokemon/raichu/alolan/icon.png and b/graphics/pokemon/raichu/alolan/icon.png differ diff --git a/graphics/pokemon/raichu/anim_front.png b/graphics/pokemon/raichu/anim_front.png index 99d592765..5466c93f4 100644 Binary files a/graphics/pokemon/raichu/anim_front.png and b/graphics/pokemon/raichu/anim_front.png differ diff --git a/graphics/pokemon/raichu/anim_frontf.png b/graphics/pokemon/raichu/anim_frontf.png index 23ddf1fa7..59d4b4353 100644 Binary files a/graphics/pokemon/raichu/anim_frontf.png and b/graphics/pokemon/raichu/anim_frontf.png differ diff --git a/graphics/pokemon/raichu/back.png b/graphics/pokemon/raichu/back.png index b4d8b75a8..8cf42c3a0 100644 Binary files a/graphics/pokemon/raichu/back.png and b/graphics/pokemon/raichu/back.png differ diff --git a/graphics/pokemon/raichu/icon.png b/graphics/pokemon/raichu/icon.png index bc4c0424d..6a6abcfb7 100644 Binary files a/graphics/pokemon/raichu/icon.png and b/graphics/pokemon/raichu/icon.png differ diff --git a/graphics/pokemon/raichu/normal.pal b/graphics/pokemon/raichu/normal.pal index 6594ba18b..d29868af5 100644 --- a/graphics/pokemon/raichu/normal.pal +++ b/graphics/pokemon/raichu/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -90 41 41 -139 98 16 0 0 0 -115 65 49 -255 189 0 -148 65 65 -255 222 90 +255 238 213 +230 205 164 246 172 41 222 123 49 -255 238 213 189 90 49 +148 65 65 +90 41 41 +255 222 90 +255 189 0 +139 98 16 +115 65 49 189 24 8 -255 213 90 98 98 106 57 57 65 diff --git a/graphics/pokemon/raichu/shiny.pal b/graphics/pokemon/raichu/shiny.pal index 5177b62f9..385105d29 100644 --- a/graphics/pokemon/raichu/shiny.pal +++ b/graphics/pokemon/raichu/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 16 16 -136 104 32 -16 16 16 -112 64 48 -184 160 104 -144 40 32 -216 208 152 -240 128 56 -216 88 64 -248 232 208 -176 64 48 -184 40 24 -224 184 128 -96 96 104 -56 56 64 +0 0 0 +255 230 213 +230 197 156 +246 123 32 +222 74 49 +189 57 32 +148 41 32 +82 16 16 +222 205 131 +189 164 90 +139 98 16 +115 65 49 +189 24 8 +98 98 106 +57 57 65 diff --git a/graphics/pokemon/raikou/anim_front.png b/graphics/pokemon/raikou/anim_front.png index 99286b1ab..070a85266 100644 Binary files a/graphics/pokemon/raikou/anim_front.png and b/graphics/pokemon/raikou/anim_front.png differ diff --git a/graphics/pokemon/raikou/back.png b/graphics/pokemon/raikou/back.png index 582b875ba..15d47d314 100644 Binary files a/graphics/pokemon/raikou/back.png and b/graphics/pokemon/raikou/back.png differ diff --git a/graphics/pokemon/ralts/anim_front.png b/graphics/pokemon/ralts/anim_front.png index ac7b54741..0e5f893b5 100644 Binary files a/graphics/pokemon/ralts/anim_front.png and b/graphics/pokemon/ralts/anim_front.png differ diff --git a/graphics/pokemon/ralts/back.png b/graphics/pokemon/ralts/back.png index bb6967130..cd566de08 100644 Binary files a/graphics/pokemon/ralts/back.png and b/graphics/pokemon/ralts/back.png differ diff --git a/graphics/pokemon/ralts/icon.png b/graphics/pokemon/ralts/icon.png index fdf95be28..1fcb12567 100644 Binary files a/graphics/pokemon/ralts/icon.png and b/graphics/pokemon/ralts/icon.png differ diff --git a/graphics/pokemon/rampardos/anim_front.png b/graphics/pokemon/rampardos/anim_front.png index 99c8a15b2..3c912158e 100644 Binary files a/graphics/pokemon/rampardos/anim_front.png and b/graphics/pokemon/rampardos/anim_front.png differ diff --git a/graphics/pokemon/rampardos/back.png b/graphics/pokemon/rampardos/back.png index 5ee5dc37f..834cafb28 100644 Binary files a/graphics/pokemon/rampardos/back.png and b/graphics/pokemon/rampardos/back.png differ diff --git a/graphics/pokemon/rampardos/icon.png b/graphics/pokemon/rampardos/icon.png index 2a58834a6..3e1c9e663 100644 Binary files a/graphics/pokemon/rampardos/icon.png and b/graphics/pokemon/rampardos/icon.png differ diff --git a/graphics/pokemon/rapidash/anim_front.png b/graphics/pokemon/rapidash/anim_front.png index de3f07c2e..34d8eda27 100644 Binary files a/graphics/pokemon/rapidash/anim_front.png and b/graphics/pokemon/rapidash/anim_front.png differ diff --git a/graphics/pokemon/rapidash/back.png b/graphics/pokemon/rapidash/back.png index 811f88d29..58330ba98 100644 Binary files a/graphics/pokemon/rapidash/back.png and b/graphics/pokemon/rapidash/back.png differ diff --git a/graphics/pokemon/rapidash/galarian/back.png b/graphics/pokemon/rapidash/galarian/back.png index 5db4665c2..df065bf1f 100644 Binary files a/graphics/pokemon/rapidash/galarian/back.png and b/graphics/pokemon/rapidash/galarian/back.png differ diff --git a/graphics/pokemon/rapidash/galarian/front.png b/graphics/pokemon/rapidash/galarian/front.png index 7ec1a597c..78070b1a8 100644 Binary files a/graphics/pokemon/rapidash/galarian/front.png and b/graphics/pokemon/rapidash/galarian/front.png differ diff --git a/graphics/pokemon/rapidash/galarian/icon.png b/graphics/pokemon/rapidash/galarian/icon.png index e9816e59e..abd13ec13 100644 Binary files a/graphics/pokemon/rapidash/galarian/icon.png and b/graphics/pokemon/rapidash/galarian/icon.png differ diff --git a/graphics/pokemon/rapidash/normal.pal b/graphics/pokemon/rapidash/normal.pal index a55c358ab..9adbea502 100644 --- a/graphics/pokemon/rapidash/normal.pal +++ b/graphics/pokemon/rapidash/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -255 156 24 -230 98 41 -222 16 16 -255 222 82 -139 82 49 -255 230 197 -16 16 16 -197 148 106 -238 197 139 -168 72 64 -197 197 197 +0 0 0 255 255 255 -248 160 152 +255 230 197 +238 197 139 +197 148 106 +139 82 49 +115 49 49 +222 16 16 +230 98 41 +255 156 24 +255 222 82 +197 197 197 115 123 131 65 74 82 +0 0 0 diff --git a/graphics/pokemon/rapidash/shiny.pal b/graphics/pokemon/rapidash/shiny.pal index e879ee424..0d72a91bd 100644 --- a/graphics/pokemon/rapidash/shiny.pal +++ b/graphics/pokemon/rapidash/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -168 168 184 -136 136 160 -104 104 120 -192 192 216 -128 80 64 -248 240 208 -16 16 16 -200 168 120 -232 216 152 -104 104 120 -192 192 192 -248 248 248 -168 168 184 -112 120 128 -64 72 80 +0 0 0 +255 255 255 +255 246 213 +238 222 164 +189 172 106 +156 115 74 +131 82 65 +106 106 123 +131 131 148 +156 156 172 +197 197 222 +197 197 197 +115 123 131 +65 74 82 +0 0 0 diff --git a/graphics/pokemon/raticate/alolan/back.png b/graphics/pokemon/raticate/alolan/back.png index 74c3b847b..7ea9895e5 100644 Binary files a/graphics/pokemon/raticate/alolan/back.png and b/graphics/pokemon/raticate/alolan/back.png differ diff --git a/graphics/pokemon/raticate/alolan/front.png b/graphics/pokemon/raticate/alolan/front.png index ba70a6787..509c47662 100644 Binary files a/graphics/pokemon/raticate/alolan/front.png and b/graphics/pokemon/raticate/alolan/front.png differ diff --git a/graphics/pokemon/raticate/alolan/icon.png b/graphics/pokemon/raticate/alolan/icon.png index f0154de8f..4acd9d040 100644 Binary files a/graphics/pokemon/raticate/alolan/icon.png and b/graphics/pokemon/raticate/alolan/icon.png differ diff --git a/graphics/pokemon/raticate/anim_front.png b/graphics/pokemon/raticate/anim_front.png index df0cb3948..749a46a48 100644 Binary files a/graphics/pokemon/raticate/anim_front.png and b/graphics/pokemon/raticate/anim_front.png differ diff --git a/graphics/pokemon/raticate/anim_frontf.png b/graphics/pokemon/raticate/anim_frontf.png index 11f8feac1..4fe376077 100644 Binary files a/graphics/pokemon/raticate/anim_frontf.png and b/graphics/pokemon/raticate/anim_frontf.png differ diff --git a/graphics/pokemon/raticate/back.png b/graphics/pokemon/raticate/back.png index 002285f5a..3131c485d 100644 Binary files a/graphics/pokemon/raticate/back.png and b/graphics/pokemon/raticate/back.png differ diff --git a/graphics/pokemon/raticate/backf.png b/graphics/pokemon/raticate/backf.png index 3812d02dd..dbf7f8bef 100644 Binary files a/graphics/pokemon/raticate/backf.png and b/graphics/pokemon/raticate/backf.png differ diff --git a/graphics/pokemon/raticate/icon.png b/graphics/pokemon/raticate/icon.png index b88cfb8ae..1786b16b8 100644 Binary files a/graphics/pokemon/raticate/icon.png and b/graphics/pokemon/raticate/icon.png differ diff --git a/graphics/pokemon/raticate/normal.pal b/graphics/pokemon/raticate/normal.pal index b02c703c2..2bf8c9eba 100644 --- a/graphics/pokemon/raticate/normal.pal +++ b/graphics/pokemon/raticate/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -148 82 16 -197 131 82 -255 205 156 -16 16 16 -106 57 0 -197 148 57 -164 115 41 -222 180 74 -180 180 180 255 255 255 -131 90 41 +255 205 156 +197 131 82 +148 82 16 246 246 164 238 205 115 -115 115 115 164 131 49 +131 90 41 +222 180 74 +197 148 57 +164 115 41 +106 57 0 +180 180 180 +115 115 115 +16 16 16 diff --git a/graphics/pokemon/raticate/shiny.pal b/graphics/pokemon/raticate/shiny.pal index 96b6128bb..bf3ef687e 100644 --- a/graphics/pokemon/raticate/shiny.pal +++ b/graphics/pokemon/raticate/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -144 80 16 -192 128 80 -248 200 152 +152 160 208 +255 255 255 +255 205 156 +197 131 82 +148 82 16 +230 246 189 +213 230 139 +156 172 65 +131 131 49 +238 148 74 +213 115 57 +180 82 41 +123 24 0 +180 180 180 +115 115 115 16 16 16 -120 24 0 -208 112 56 -176 80 40 -232 144 72 -176 176 176 -248 248 248 -128 128 48 -224 240 184 -208 224 136 -112 112 112 -152 168 64 diff --git a/graphics/pokemon/rattata/alolan/back.png b/graphics/pokemon/rattata/alolan/back.png index 99355cae6..3ad8eb28f 100644 Binary files a/graphics/pokemon/rattata/alolan/back.png and b/graphics/pokemon/rattata/alolan/back.png differ diff --git a/graphics/pokemon/rattata/alolan/front.png b/graphics/pokemon/rattata/alolan/front.png index 08a74455b..865c09c22 100644 Binary files a/graphics/pokemon/rattata/alolan/front.png and b/graphics/pokemon/rattata/alolan/front.png differ diff --git a/graphics/pokemon/rattata/alolan/icon.png b/graphics/pokemon/rattata/alolan/icon.png index c75ce409d..b13e1e9bb 100644 Binary files a/graphics/pokemon/rattata/alolan/icon.png and b/graphics/pokemon/rattata/alolan/icon.png differ diff --git a/graphics/pokemon/rattata/anim_front.png b/graphics/pokemon/rattata/anim_front.png index b6f1016ec..dd52fb08f 100644 Binary files a/graphics/pokemon/rattata/anim_front.png and b/graphics/pokemon/rattata/anim_front.png differ diff --git a/graphics/pokemon/rattata/anim_frontf.png b/graphics/pokemon/rattata/anim_frontf.png index e3aef3a76..a941ba164 100644 Binary files a/graphics/pokemon/rattata/anim_frontf.png and b/graphics/pokemon/rattata/anim_frontf.png differ diff --git a/graphics/pokemon/rattata/back.png b/graphics/pokemon/rattata/back.png index 361dd43ab..9e8c699bb 100644 Binary files a/graphics/pokemon/rattata/back.png and b/graphics/pokemon/rattata/back.png differ diff --git a/graphics/pokemon/rattata/backf.png b/graphics/pokemon/rattata/backf.png index ca7c693df..c8d1a3de8 100644 Binary files a/graphics/pokemon/rattata/backf.png and b/graphics/pokemon/rattata/backf.png differ diff --git a/graphics/pokemon/rattata/icon.png b/graphics/pokemon/rattata/icon.png index 782947eca..30d865e81 100644 Binary files a/graphics/pokemon/rattata/icon.png and b/graphics/pokemon/rattata/icon.png differ diff --git a/graphics/pokemon/rattata/normal.pal b/graphics/pokemon/rattata/normal.pal index 8c69af29f..d36de4ac5 100644 --- a/graphics/pokemon/rattata/normal.pal +++ b/graphics/pokemon/rattata/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -139 74 139 -180 115 189 -213 148 213 -74 41 65 -16 16 16 -205 172 98 -238 222 180 -205 205 205 -164 115 8 -230 90 115 255 255 255 +230 90 115 164 24 57 +208 152 208 +180 115 189 +139 74 139 +74 41 65 +238 222 180 +230 205 115 +205 172 98 +164 115 8 98 74 8 +205 205 205 90 90 90 -0 0 0 +16 16 16 diff --git a/graphics/pokemon/rattata/shiny.pal b/graphics/pokemon/rattata/shiny.pal index e0d5ee48e..fcba5ae25 100644 --- a/graphics/pokemon/rattata/shiny.pal +++ b/graphics/pokemon/rattata/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -144 136 56 -192 192 104 -224 224 136 -104 88 16 +208 152 208 +255 255 255 +123 139 222 +65 82 164 +230 230 139 +197 197 106 +148 139 57 +106 90 16 +230 213 197 +222 197 131 +197 164 115 +156 106 32 +90 65 32 +205 205 205 +90 90 90 16 16 16 -192 160 112 -224 208 192 -200 200 200 -152 104 32 -120 136 216 -248 248 248 -64 80 160 -88 64 32 -88 88 88 -144 136 56 diff --git a/graphics/pokemon/rayquaza/anim_front.png b/graphics/pokemon/rayquaza/anim_front.png index 6c25d4b8b..c1c78f9a1 100644 Binary files a/graphics/pokemon/rayquaza/anim_front.png and b/graphics/pokemon/rayquaza/anim_front.png differ diff --git a/graphics/pokemon/rayquaza/back.png b/graphics/pokemon/rayquaza/back.png index 5e86178c3..bae5c56e1 100644 Binary files a/graphics/pokemon/rayquaza/back.png and b/graphics/pokemon/rayquaza/back.png differ diff --git a/graphics/pokemon/rayquaza/icon.png b/graphics/pokemon/rayquaza/icon.png index 52db7f643..e5bcba086 100644 Binary files a/graphics/pokemon/rayquaza/icon.png and b/graphics/pokemon/rayquaza/icon.png differ diff --git a/graphics/pokemon/rayquaza/mega/back.png b/graphics/pokemon/rayquaza/mega/back.png index 63ec5cbcd..51eb1dbc3 100644 Binary files a/graphics/pokemon/rayquaza/mega/back.png and b/graphics/pokemon/rayquaza/mega/back.png differ diff --git a/graphics/pokemon/rayquaza/mega/front.png b/graphics/pokemon/rayquaza/mega/front.png index a16317e4f..2cb0f6144 100644 Binary files a/graphics/pokemon/rayquaza/mega/front.png and b/graphics/pokemon/rayquaza/mega/front.png differ diff --git a/graphics/pokemon/rayquaza/mega/icon.png b/graphics/pokemon/rayquaza/mega/icon.png index 20ed2ab87..4d578a1d0 100644 Binary files a/graphics/pokemon/rayquaza/mega/icon.png and b/graphics/pokemon/rayquaza/mega/icon.png differ diff --git a/graphics/pokemon/regice/anim_front.png b/graphics/pokemon/regice/anim_front.png index 2105b1cb7..7e28e59c4 100644 Binary files a/graphics/pokemon/regice/anim_front.png and b/graphics/pokemon/regice/anim_front.png differ diff --git a/graphics/pokemon/regice/back.png b/graphics/pokemon/regice/back.png index 23d478cac..85a4a94d4 100644 Binary files a/graphics/pokemon/regice/back.png and b/graphics/pokemon/regice/back.png differ diff --git a/graphics/pokemon/regice/icon.png b/graphics/pokemon/regice/icon.png index 7aeec93ae..3f2c787a6 100644 Binary files a/graphics/pokemon/regice/icon.png and b/graphics/pokemon/regice/icon.png differ diff --git a/graphics/pokemon/regidrago/back.png b/graphics/pokemon/regidrago/back.png index 9db3635c4..9c96ee2fc 100644 Binary files a/graphics/pokemon/regidrago/back.png and b/graphics/pokemon/regidrago/back.png differ diff --git a/graphics/pokemon/regidrago/front.png b/graphics/pokemon/regidrago/front.png index dd73e21ec..59f367fae 100644 Binary files a/graphics/pokemon/regidrago/front.png and b/graphics/pokemon/regidrago/front.png differ diff --git a/graphics/pokemon/regidrago/icon.png b/graphics/pokemon/regidrago/icon.png index e99b151da..3b994684b 100644 Binary files a/graphics/pokemon/regidrago/icon.png and b/graphics/pokemon/regidrago/icon.png differ diff --git a/graphics/pokemon/regieleki/back.png b/graphics/pokemon/regieleki/back.png index ae081d190..59d39eae4 100644 Binary files a/graphics/pokemon/regieleki/back.png and b/graphics/pokemon/regieleki/back.png differ diff --git a/graphics/pokemon/regieleki/front.png b/graphics/pokemon/regieleki/front.png index b62200211..d88744bcd 100644 Binary files a/graphics/pokemon/regieleki/front.png and b/graphics/pokemon/regieleki/front.png differ diff --git a/graphics/pokemon/regieleki/icon.png b/graphics/pokemon/regieleki/icon.png index 7f4fbfa9f..bf3b3f3a8 100644 Binary files a/graphics/pokemon/regieleki/icon.png and b/graphics/pokemon/regieleki/icon.png differ diff --git a/graphics/pokemon/regigigas/anim_front.png b/graphics/pokemon/regigigas/anim_front.png index 52c1d6069..125b269d1 100644 Binary files a/graphics/pokemon/regigigas/anim_front.png and b/graphics/pokemon/regigigas/anim_front.png differ diff --git a/graphics/pokemon/regigigas/back.png b/graphics/pokemon/regigigas/back.png index 411d5b23a..1f4df37a7 100644 Binary files a/graphics/pokemon/regigigas/back.png and b/graphics/pokemon/regigigas/back.png differ diff --git a/graphics/pokemon/regigigas/icon.png b/graphics/pokemon/regigigas/icon.png index 93c4d86a1..e71eafcb1 100644 Binary files a/graphics/pokemon/regigigas/icon.png and b/graphics/pokemon/regigigas/icon.png differ diff --git a/graphics/pokemon/regirock/anim_front.png b/graphics/pokemon/regirock/anim_front.png index f132cb917..88bfa4ff0 100644 Binary files a/graphics/pokemon/regirock/anim_front.png and b/graphics/pokemon/regirock/anim_front.png differ diff --git a/graphics/pokemon/regirock/back.png b/graphics/pokemon/regirock/back.png index d9dd76c77..8b2eb502e 100644 Binary files a/graphics/pokemon/regirock/back.png and b/graphics/pokemon/regirock/back.png differ diff --git a/graphics/pokemon/regirock/icon.png b/graphics/pokemon/regirock/icon.png index 518461352..10010ad63 100644 Binary files a/graphics/pokemon/regirock/icon.png and b/graphics/pokemon/regirock/icon.png differ diff --git a/graphics/pokemon/registeel/anim_front.png b/graphics/pokemon/registeel/anim_front.png index 6864ebbda..acf975f9f 100644 Binary files a/graphics/pokemon/registeel/anim_front.png and b/graphics/pokemon/registeel/anim_front.png differ diff --git a/graphics/pokemon/registeel/back.png b/graphics/pokemon/registeel/back.png index 01b7d4bf7..a12bf98fd 100644 Binary files a/graphics/pokemon/registeel/back.png and b/graphics/pokemon/registeel/back.png differ diff --git a/graphics/pokemon/registeel/icon.png b/graphics/pokemon/registeel/icon.png index f13d39cc3..cd8cb275c 100644 Binary files a/graphics/pokemon/registeel/icon.png and b/graphics/pokemon/registeel/icon.png differ diff --git a/graphics/pokemon/relicanth/icon.png b/graphics/pokemon/relicanth/icon.png index ab1cdada8..034689977 100644 Binary files a/graphics/pokemon/relicanth/icon.png and b/graphics/pokemon/relicanth/icon.png differ diff --git a/graphics/pokemon/remoraid/anim_front.png b/graphics/pokemon/remoraid/anim_front.png index e9858af03..daf58f3c3 100644 Binary files a/graphics/pokemon/remoraid/anim_front.png and b/graphics/pokemon/remoraid/anim_front.png differ diff --git a/graphics/pokemon/remoraid/back.png b/graphics/pokemon/remoraid/back.png index 128726f52..906f92e20 100644 Binary files a/graphics/pokemon/remoraid/back.png and b/graphics/pokemon/remoraid/back.png differ diff --git a/graphics/pokemon/remoraid/icon.png b/graphics/pokemon/remoraid/icon.png index 6ab7ab4f7..d7d7d9793 100644 Binary files a/graphics/pokemon/remoraid/icon.png and b/graphics/pokemon/remoraid/icon.png differ diff --git a/graphics/pokemon/reshiram/anim_front.png b/graphics/pokemon/reshiram/anim_front.png index 80ab6c459..f0bbac206 100644 Binary files a/graphics/pokemon/reshiram/anim_front.png and b/graphics/pokemon/reshiram/anim_front.png differ diff --git a/graphics/pokemon/reuniclus/back.png b/graphics/pokemon/reuniclus/back.png index f1c77cc5b..eacf29de6 100644 Binary files a/graphics/pokemon/reuniclus/back.png and b/graphics/pokemon/reuniclus/back.png differ diff --git a/graphics/pokemon/reuniclus/icon.png b/graphics/pokemon/reuniclus/icon.png index fc2d7c6fe..a00f84066 100644 Binary files a/graphics/pokemon/reuniclus/icon.png and b/graphics/pokemon/reuniclus/icon.png differ diff --git a/graphics/pokemon/rhydon/back.png b/graphics/pokemon/rhydon/back.png index a930759a6..8d810fca7 100644 Binary files a/graphics/pokemon/rhydon/back.png and b/graphics/pokemon/rhydon/back.png differ diff --git a/graphics/pokemon/rhydon/icon.png b/graphics/pokemon/rhydon/icon.png index bc303074c..6784a0d15 100644 Binary files a/graphics/pokemon/rhydon/icon.png and b/graphics/pokemon/rhydon/icon.png differ diff --git a/graphics/pokemon/rhyhorn/back.png b/graphics/pokemon/rhyhorn/back.png index 65797134f..dfa96100e 100644 Binary files a/graphics/pokemon/rhyhorn/back.png and b/graphics/pokemon/rhyhorn/back.png differ diff --git a/graphics/pokemon/rhyhorn/icon.png b/graphics/pokemon/rhyhorn/icon.png index d8c8a07c4..b36109e5a 100644 Binary files a/graphics/pokemon/rhyhorn/icon.png and b/graphics/pokemon/rhyhorn/icon.png differ diff --git a/graphics/pokemon/rhyperior/anim_front.png b/graphics/pokemon/rhyperior/anim_front.png index 22b2d6635..3d07661e3 100644 Binary files a/graphics/pokemon/rhyperior/anim_front.png and b/graphics/pokemon/rhyperior/anim_front.png differ diff --git a/graphics/pokemon/rhyperior/back.png b/graphics/pokemon/rhyperior/back.png index e5978ce37..3c6bcf330 100644 Binary files a/graphics/pokemon/rhyperior/back.png and b/graphics/pokemon/rhyperior/back.png differ diff --git a/graphics/pokemon/rhyperior/icon.png b/graphics/pokemon/rhyperior/icon.png index 22226ce76..9104fa724 100644 Binary files a/graphics/pokemon/rhyperior/icon.png and b/graphics/pokemon/rhyperior/icon.png differ diff --git a/graphics/pokemon/ribombee/back.png b/graphics/pokemon/ribombee/back.png index 76b45b715..ba18f68de 100644 Binary files a/graphics/pokemon/ribombee/back.png and b/graphics/pokemon/ribombee/back.png differ diff --git a/graphics/pokemon/ribombee/front.png b/graphics/pokemon/ribombee/front.png index 3cc7f7955..77a4dd149 100644 Binary files a/graphics/pokemon/ribombee/front.png and b/graphics/pokemon/ribombee/front.png differ diff --git a/graphics/pokemon/ribombee/icon.png b/graphics/pokemon/ribombee/icon.png index e21b70ea0..10117f123 100644 Binary files a/graphics/pokemon/ribombee/icon.png and b/graphics/pokemon/ribombee/icon.png differ diff --git a/graphics/pokemon/rillaboom/back.png b/graphics/pokemon/rillaboom/back.png index f31df221f..decc2fbaf 100644 Binary files a/graphics/pokemon/rillaboom/back.png and b/graphics/pokemon/rillaboom/back.png differ diff --git a/graphics/pokemon/rillaboom/front.png b/graphics/pokemon/rillaboom/front.png index d8f8b71e9..b3822a3b4 100644 Binary files a/graphics/pokemon/rillaboom/front.png and b/graphics/pokemon/rillaboom/front.png differ diff --git a/graphics/pokemon/rillaboom/icon.png b/graphics/pokemon/rillaboom/icon.png index 3fbd51b3d..1315d1214 100644 Binary files a/graphics/pokemon/rillaboom/icon.png and b/graphics/pokemon/rillaboom/icon.png differ diff --git a/graphics/pokemon/riolu/anim_front.png b/graphics/pokemon/riolu/anim_front.png index c4dbe76d4..091e0dd92 100644 Binary files a/graphics/pokemon/riolu/anim_front.png and b/graphics/pokemon/riolu/anim_front.png differ diff --git a/graphics/pokemon/riolu/icon.png b/graphics/pokemon/riolu/icon.png index 0d2b8e90a..1a2978852 100644 Binary files a/graphics/pokemon/riolu/icon.png and b/graphics/pokemon/riolu/icon.png differ diff --git a/graphics/pokemon/rockruff/back.png b/graphics/pokemon/rockruff/back.png index 877e0ea66..fe6f24e82 100644 Binary files a/graphics/pokemon/rockruff/back.png and b/graphics/pokemon/rockruff/back.png differ diff --git a/graphics/pokemon/rockruff/front.png b/graphics/pokemon/rockruff/front.png index 1b5178d3e..1199fbb59 100644 Binary files a/graphics/pokemon/rockruff/front.png and b/graphics/pokemon/rockruff/front.png differ diff --git a/graphics/pokemon/rockruff/icon.png b/graphics/pokemon/rockruff/icon.png index b421d36eb..5df839ab5 100644 Binary files a/graphics/pokemon/rockruff/icon.png and b/graphics/pokemon/rockruff/icon.png differ diff --git a/graphics/pokemon/roggenrola/anim_front.png b/graphics/pokemon/roggenrola/anim_front.png index 8ebe4f02c..6094a9110 100644 Binary files a/graphics/pokemon/roggenrola/anim_front.png and b/graphics/pokemon/roggenrola/anim_front.png differ diff --git a/graphics/pokemon/roggenrola/back.png b/graphics/pokemon/roggenrola/back.png index ab336a5cf..86937d8d1 100644 Binary files a/graphics/pokemon/roggenrola/back.png and b/graphics/pokemon/roggenrola/back.png differ diff --git a/graphics/pokemon/roggenrola/icon.png b/graphics/pokemon/roggenrola/icon.png index 93fcd368b..485e0d0f7 100644 Binary files a/graphics/pokemon/roggenrola/icon.png and b/graphics/pokemon/roggenrola/icon.png differ diff --git a/graphics/pokemon/rolycoly/back.png b/graphics/pokemon/rolycoly/back.png index 3a395f335..38f090049 100644 Binary files a/graphics/pokemon/rolycoly/back.png and b/graphics/pokemon/rolycoly/back.png differ diff --git a/graphics/pokemon/rolycoly/icon.png b/graphics/pokemon/rolycoly/icon.png index cb245e6cb..fb4108eaa 100644 Binary files a/graphics/pokemon/rolycoly/icon.png and b/graphics/pokemon/rolycoly/icon.png differ diff --git a/graphics/pokemon/rookidee/back.png b/graphics/pokemon/rookidee/back.png index 19e0726ba..0248ac322 100644 Binary files a/graphics/pokemon/rookidee/back.png and b/graphics/pokemon/rookidee/back.png differ diff --git a/graphics/pokemon/rookidee/icon.png b/graphics/pokemon/rookidee/icon.png index 8af833b08..b06523786 100644 Binary files a/graphics/pokemon/rookidee/icon.png and b/graphics/pokemon/rookidee/icon.png differ diff --git a/graphics/pokemon/roselia/back.png b/graphics/pokemon/roselia/back.png index 726dc1910..8f69c2a6c 100644 Binary files a/graphics/pokemon/roselia/back.png and b/graphics/pokemon/roselia/back.png differ diff --git a/graphics/pokemon/roselia/icon.png b/graphics/pokemon/roselia/icon.png index 00378e766..6fa3cb9c2 100644 Binary files a/graphics/pokemon/roselia/icon.png and b/graphics/pokemon/roselia/icon.png differ diff --git a/graphics/pokemon/roserade/back.png b/graphics/pokemon/roserade/back.png index e9c4eafbf..1c4c4e30b 100644 Binary files a/graphics/pokemon/roserade/back.png and b/graphics/pokemon/roserade/back.png differ diff --git a/graphics/pokemon/roserade/icon.png b/graphics/pokemon/roserade/icon.png index 92a1a520a..68f7f8660 100644 Binary files a/graphics/pokemon/roserade/icon.png and b/graphics/pokemon/roserade/icon.png differ diff --git a/graphics/pokemon/rotom/anim_front.png b/graphics/pokemon/rotom/anim_front.png index bb3147f3a..1579cd386 100644 Binary files a/graphics/pokemon/rotom/anim_front.png and b/graphics/pokemon/rotom/anim_front.png differ diff --git a/graphics/pokemon/rotom/back.png b/graphics/pokemon/rotom/back.png index f0690d42b..404fdf63a 100644 Binary files a/graphics/pokemon/rotom/back.png and b/graphics/pokemon/rotom/back.png differ diff --git a/graphics/pokemon/rotom/fan/anim_front.png b/graphics/pokemon/rotom/fan/anim_front.png index bff2116b4..aea9383a6 100644 Binary files a/graphics/pokemon/rotom/fan/anim_front.png and b/graphics/pokemon/rotom/fan/anim_front.png differ diff --git a/graphics/pokemon/rotom/fan/back.png b/graphics/pokemon/rotom/fan/back.png index 571f289d1..c8b7316c4 100644 Binary files a/graphics/pokemon/rotom/fan/back.png and b/graphics/pokemon/rotom/fan/back.png differ diff --git a/graphics/pokemon/rotom/fan/icon.png b/graphics/pokemon/rotom/fan/icon.png index 49ec1f461..be3b62936 100644 Binary files a/graphics/pokemon/rotom/fan/icon.png and b/graphics/pokemon/rotom/fan/icon.png differ diff --git a/graphics/pokemon/rotom/frost/anim_front.png b/graphics/pokemon/rotom/frost/anim_front.png index fc7d2d359..019aa481e 100644 Binary files a/graphics/pokemon/rotom/frost/anim_front.png and b/graphics/pokemon/rotom/frost/anim_front.png differ diff --git a/graphics/pokemon/rotom/frost/back.png b/graphics/pokemon/rotom/frost/back.png index 5d6188dd3..cda64c1b6 100644 Binary files a/graphics/pokemon/rotom/frost/back.png and b/graphics/pokemon/rotom/frost/back.png differ diff --git a/graphics/pokemon/rotom/frost/icon.png b/graphics/pokemon/rotom/frost/icon.png index ef4b45065..b476f3ba1 100644 Binary files a/graphics/pokemon/rotom/frost/icon.png and b/graphics/pokemon/rotom/frost/icon.png differ diff --git a/graphics/pokemon/rotom/heat/anim_front.png b/graphics/pokemon/rotom/heat/anim_front.png index 84c343d1e..5d96fda88 100644 Binary files a/graphics/pokemon/rotom/heat/anim_front.png and b/graphics/pokemon/rotom/heat/anim_front.png differ diff --git a/graphics/pokemon/rotom/heat/back.png b/graphics/pokemon/rotom/heat/back.png index f79738f1e..d3490af71 100644 Binary files a/graphics/pokemon/rotom/heat/back.png and b/graphics/pokemon/rotom/heat/back.png differ diff --git a/graphics/pokemon/rotom/heat/icon.png b/graphics/pokemon/rotom/heat/icon.png index a25696ec6..3044cadeb 100644 Binary files a/graphics/pokemon/rotom/heat/icon.png and b/graphics/pokemon/rotom/heat/icon.png differ diff --git a/graphics/pokemon/rotom/mow/anim_front.png b/graphics/pokemon/rotom/mow/anim_front.png index 1939d1026..550ddfc73 100644 Binary files a/graphics/pokemon/rotom/mow/anim_front.png and b/graphics/pokemon/rotom/mow/anim_front.png differ diff --git a/graphics/pokemon/rotom/mow/back.png b/graphics/pokemon/rotom/mow/back.png index cedfc25d9..f13609906 100644 Binary files a/graphics/pokemon/rotom/mow/back.png and b/graphics/pokemon/rotom/mow/back.png differ diff --git a/graphics/pokemon/rotom/mow/icon.png b/graphics/pokemon/rotom/mow/icon.png index b76d1d7ef..c3982e342 100644 Binary files a/graphics/pokemon/rotom/mow/icon.png and b/graphics/pokemon/rotom/mow/icon.png differ diff --git a/graphics/pokemon/rotom/wash/anim_front.png b/graphics/pokemon/rotom/wash/anim_front.png index 15f654776..d0e54071c 100644 Binary files a/graphics/pokemon/rotom/wash/anim_front.png and b/graphics/pokemon/rotom/wash/anim_front.png differ diff --git a/graphics/pokemon/rotom/wash/back.png b/graphics/pokemon/rotom/wash/back.png index 96959e52d..8efbf3767 100644 Binary files a/graphics/pokemon/rotom/wash/back.png and b/graphics/pokemon/rotom/wash/back.png differ diff --git a/graphics/pokemon/rotom/wash/icon.png b/graphics/pokemon/rotom/wash/icon.png index fc8db9bf3..265e2442f 100644 Binary files a/graphics/pokemon/rotom/wash/icon.png and b/graphics/pokemon/rotom/wash/icon.png differ diff --git a/graphics/pokemon/rowlet/back.png b/graphics/pokemon/rowlet/back.png index a79da79ed..b60016c42 100644 Binary files a/graphics/pokemon/rowlet/back.png and b/graphics/pokemon/rowlet/back.png differ diff --git a/graphics/pokemon/rowlet/front.png b/graphics/pokemon/rowlet/front.png index e071fd87c..55953244e 100644 Binary files a/graphics/pokemon/rowlet/front.png and b/graphics/pokemon/rowlet/front.png differ diff --git a/graphics/pokemon/rowlet/icon.png b/graphics/pokemon/rowlet/icon.png index 16876f03b..433666f6e 100644 Binary files a/graphics/pokemon/rowlet/icon.png and b/graphics/pokemon/rowlet/icon.png differ diff --git a/graphics/pokemon/rufflet/anim_front.png b/graphics/pokemon/rufflet/anim_front.png index 6de5d6b5c..4e1e1edc8 100644 Binary files a/graphics/pokemon/rufflet/anim_front.png and b/graphics/pokemon/rufflet/anim_front.png differ diff --git a/graphics/pokemon/rufflet/back.png b/graphics/pokemon/rufflet/back.png index ddc7f2c91..e8d7170be 100644 Binary files a/graphics/pokemon/rufflet/back.png and b/graphics/pokemon/rufflet/back.png differ diff --git a/graphics/pokemon/runerigus/back.png b/graphics/pokemon/runerigus/back.png index c736b944c..cde168e6c 100644 Binary files a/graphics/pokemon/runerigus/back.png and b/graphics/pokemon/runerigus/back.png differ diff --git a/graphics/pokemon/runerigus/front.png b/graphics/pokemon/runerigus/front.png index bda306c62..d43f55877 100644 Binary files a/graphics/pokemon/runerigus/front.png and b/graphics/pokemon/runerigus/front.png differ diff --git a/graphics/pokemon/runerigus/icon.png b/graphics/pokemon/runerigus/icon.png index f3f20461b..9110ff9f9 100644 Binary files a/graphics/pokemon/runerigus/icon.png and b/graphics/pokemon/runerigus/icon.png differ diff --git a/graphics/pokemon/sableye/anim_front.png b/graphics/pokemon/sableye/anim_front.png index 68e2da1cc..827f9c28b 100644 Binary files a/graphics/pokemon/sableye/anim_front.png and b/graphics/pokemon/sableye/anim_front.png differ diff --git a/graphics/pokemon/sableye/back.png b/graphics/pokemon/sableye/back.png index bb02d98c7..6a0fd17f6 100644 Binary files a/graphics/pokemon/sableye/back.png and b/graphics/pokemon/sableye/back.png differ diff --git a/graphics/pokemon/sableye/icon.png b/graphics/pokemon/sableye/icon.png index 37ac215c2..0e3f3618d 100644 Binary files a/graphics/pokemon/sableye/icon.png and b/graphics/pokemon/sableye/icon.png differ diff --git a/graphics/pokemon/sableye/mega/back.png b/graphics/pokemon/sableye/mega/back.png index d9d0eb386..ed4d1ead0 100644 Binary files a/graphics/pokemon/sableye/mega/back.png and b/graphics/pokemon/sableye/mega/back.png differ diff --git a/graphics/pokemon/sableye/mega/front.png b/graphics/pokemon/sableye/mega/front.png index 121ec46a0..2bc7ca4f9 100644 Binary files a/graphics/pokemon/sableye/mega/front.png and b/graphics/pokemon/sableye/mega/front.png differ diff --git a/graphics/pokemon/sableye/mega/icon.png b/graphics/pokemon/sableye/mega/icon.png index 8ec708d70..9374e7b05 100644 Binary files a/graphics/pokemon/sableye/mega/icon.png and b/graphics/pokemon/sableye/mega/icon.png differ diff --git a/graphics/pokemon/salamence/anim_front.png b/graphics/pokemon/salamence/anim_front.png index 1bf563abe..977f43a6f 100644 Binary files a/graphics/pokemon/salamence/anim_front.png and b/graphics/pokemon/salamence/anim_front.png differ diff --git a/graphics/pokemon/salamence/back.png b/graphics/pokemon/salamence/back.png index 1444a66a9..2564c88cf 100644 Binary files a/graphics/pokemon/salamence/back.png and b/graphics/pokemon/salamence/back.png differ diff --git a/graphics/pokemon/salamence/mega/back.png b/graphics/pokemon/salamence/mega/back.png index 5c2405eb1..0f68e4513 100644 Binary files a/graphics/pokemon/salamence/mega/back.png and b/graphics/pokemon/salamence/mega/back.png differ diff --git a/graphics/pokemon/salamence/mega/front.png b/graphics/pokemon/salamence/mega/front.png index 3952ebd84..bec9a9254 100644 Binary files a/graphics/pokemon/salamence/mega/front.png and b/graphics/pokemon/salamence/mega/front.png differ diff --git a/graphics/pokemon/salamence/mega/icon.png b/graphics/pokemon/salamence/mega/icon.png index d6ac1be83..231749c97 100644 Binary files a/graphics/pokemon/salamence/mega/icon.png and b/graphics/pokemon/salamence/mega/icon.png differ diff --git a/graphics/pokemon/salandit/icon.png b/graphics/pokemon/salandit/icon.png index 151ab403d..e0c6309c7 100644 Binary files a/graphics/pokemon/salandit/icon.png and b/graphics/pokemon/salandit/icon.png differ diff --git a/graphics/pokemon/salazzle/back.png b/graphics/pokemon/salazzle/back.png index 6bcd2a5f9..f4d414e69 100644 Binary files a/graphics/pokemon/salazzle/back.png and b/graphics/pokemon/salazzle/back.png differ diff --git a/graphics/pokemon/salazzle/icon.png b/graphics/pokemon/salazzle/icon.png index 62187a542..db4edf2fc 100644 Binary files a/graphics/pokemon/salazzle/icon.png and b/graphics/pokemon/salazzle/icon.png differ diff --git a/graphics/pokemon/samurott/anim_front.png b/graphics/pokemon/samurott/anim_front.png index 646801fd1..ee43614bf 100644 Binary files a/graphics/pokemon/samurott/anim_front.png and b/graphics/pokemon/samurott/anim_front.png differ diff --git a/graphics/pokemon/samurott/back.png b/graphics/pokemon/samurott/back.png index e7d04a599..546936e1c 100644 Binary files a/graphics/pokemon/samurott/back.png and b/graphics/pokemon/samurott/back.png differ diff --git a/graphics/pokemon/samurott/hisuian/front.png b/graphics/pokemon/samurott/hisuian/front.png index 2a8099c0f..65e62201c 100755 Binary files a/graphics/pokemon/samurott/hisuian/front.png and b/graphics/pokemon/samurott/hisuian/front.png differ diff --git a/graphics/pokemon/samurott/hisuian/icon.png b/graphics/pokemon/samurott/hisuian/icon.png index 399dc4605..fdcbe6718 100644 Binary files a/graphics/pokemon/samurott/hisuian/icon.png and b/graphics/pokemon/samurott/hisuian/icon.png differ diff --git a/graphics/pokemon/samurott/icon.png b/graphics/pokemon/samurott/icon.png index 8de1512d6..333c6cb87 100644 Binary files a/graphics/pokemon/samurott/icon.png and b/graphics/pokemon/samurott/icon.png differ diff --git a/graphics/pokemon/sandaconda/back.png b/graphics/pokemon/sandaconda/back.png index a14bc0b3b..9b3a9b325 100644 Binary files a/graphics/pokemon/sandaconda/back.png and b/graphics/pokemon/sandaconda/back.png differ diff --git a/graphics/pokemon/sandaconda/front.png b/graphics/pokemon/sandaconda/front.png index 2ed17bcb4..54c2af107 100644 Binary files a/graphics/pokemon/sandaconda/front.png and b/graphics/pokemon/sandaconda/front.png differ diff --git a/graphics/pokemon/sandaconda/icon.png b/graphics/pokemon/sandaconda/icon.png index 67d761c94..bfde35f57 100644 Binary files a/graphics/pokemon/sandaconda/icon.png and b/graphics/pokemon/sandaconda/icon.png differ diff --git a/graphics/pokemon/sandile/back.png b/graphics/pokemon/sandile/back.png index 533e2e592..168094704 100644 Binary files a/graphics/pokemon/sandile/back.png and b/graphics/pokemon/sandile/back.png differ diff --git a/graphics/pokemon/sandile/icon.png b/graphics/pokemon/sandile/icon.png index 7d78dbebd..c582ed4f9 100644 Binary files a/graphics/pokemon/sandile/icon.png and b/graphics/pokemon/sandile/icon.png differ diff --git a/graphics/pokemon/sandshrew/alolan/back.png b/graphics/pokemon/sandshrew/alolan/back.png index f2dac80db..1e09ba38b 100644 Binary files a/graphics/pokemon/sandshrew/alolan/back.png and b/graphics/pokemon/sandshrew/alolan/back.png differ diff --git a/graphics/pokemon/sandshrew/alolan/front.png b/graphics/pokemon/sandshrew/alolan/front.png index 638a077b4..f3d4dc140 100644 Binary files a/graphics/pokemon/sandshrew/alolan/front.png and b/graphics/pokemon/sandshrew/alolan/front.png differ diff --git a/graphics/pokemon/sandshrew/alolan/icon.png b/graphics/pokemon/sandshrew/alolan/icon.png index ee42ab5cd..a1cc049bd 100644 Binary files a/graphics/pokemon/sandshrew/alolan/icon.png and b/graphics/pokemon/sandshrew/alolan/icon.png differ diff --git a/graphics/pokemon/sandshrew/anim_front.png b/graphics/pokemon/sandshrew/anim_front.png index 1382c8fde..cd573e51f 100644 Binary files a/graphics/pokemon/sandshrew/anim_front.png and b/graphics/pokemon/sandshrew/anim_front.png differ diff --git a/graphics/pokemon/sandshrew/back.png b/graphics/pokemon/sandshrew/back.png index 6bdc2ad33..42c6f9659 100644 Binary files a/graphics/pokemon/sandshrew/back.png and b/graphics/pokemon/sandshrew/back.png differ diff --git a/graphics/pokemon/sandshrew/icon.png b/graphics/pokemon/sandshrew/icon.png index a56d109ff..1a6aca2c3 100644 Binary files a/graphics/pokemon/sandshrew/icon.png and b/graphics/pokemon/sandshrew/icon.png differ diff --git a/graphics/pokemon/sandshrew/normal.pal b/graphics/pokemon/sandshrew/normal.pal index a2d45c33b..fe0c6179e 100644 --- a/graphics/pokemon/sandshrew/normal.pal +++ b/graphics/pokemon/sandshrew/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -131 98 16 +255 255 255 +255 0 255 238 222 16 -205 189 180 -16 16 16 205 180 0 -176 128 16 -232 232 200 -16 56 120 -248 248 248 -40 120 200 -232 216 200 -128 128 128 -200 200 200 +180 131 16 +131 98 16 115 74 24 -0 0 0 +40 120 200 +16 56 120 +205 189 180 +230 213 197 +238 238 222 +131 131 131 +82 82 82 +16 16 16 diff --git a/graphics/pokemon/sandshrew/shiny.pal b/graphics/pokemon/sandshrew/shiny.pal index 4ee0966b0..dbba31d65 100644 --- a/graphics/pokemon/sandshrew/shiny.pal +++ b/graphics/pokemon/sandshrew/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -64 96 64 -168 216 72 -192 184 184 -16 16 16 -136 176 64 -104 128 72 -224 232 224 -24 48 88 -248 248 248 +208 152 160 +255 255 255 +255 0 255 +172 222 74 +139 180 65 +106 131 74 +65 98 65 +49 74 49 48 96 144 -216 208 200 -128 128 128 -200 200 200 -0 0 0 -0 0 0 +24 44 88 +197 189 189 +222 213 205 +230 238 230 +131 131 131 +82 82 82 +16 16 16 diff --git a/graphics/pokemon/sandslash/alolan/back.png b/graphics/pokemon/sandslash/alolan/back.png index 3415e1437..c64d69536 100644 Binary files a/graphics/pokemon/sandslash/alolan/back.png and b/graphics/pokemon/sandslash/alolan/back.png differ diff --git a/graphics/pokemon/sandslash/alolan/front.png b/graphics/pokemon/sandslash/alolan/front.png index 77cd15f4a..fc7644cc1 100644 Binary files a/graphics/pokemon/sandslash/alolan/front.png and b/graphics/pokemon/sandslash/alolan/front.png differ diff --git a/graphics/pokemon/sandslash/alolan/icon.png b/graphics/pokemon/sandslash/alolan/icon.png index 08f5f232e..88cea6049 100644 Binary files a/graphics/pokemon/sandslash/alolan/icon.png and b/graphics/pokemon/sandslash/alolan/icon.png differ diff --git a/graphics/pokemon/sandslash/anim_front.png b/graphics/pokemon/sandslash/anim_front.png index 17ace0801..b43561b11 100644 Binary files a/graphics/pokemon/sandslash/anim_front.png and b/graphics/pokemon/sandslash/anim_front.png differ diff --git a/graphics/pokemon/sandslash/back.png b/graphics/pokemon/sandslash/back.png index 36116e703..0813bc9f9 100644 Binary files a/graphics/pokemon/sandslash/back.png and b/graphics/pokemon/sandslash/back.png differ diff --git a/graphics/pokemon/sandslash/normal.pal b/graphics/pokemon/sandslash/normal.pal index ff473ca5e..5ede9a666 100644 --- a/graphics/pokemon/sandslash/normal.pal +++ b/graphics/pokemon/sandslash/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -74 57 16 -172 131 49 -16 16 16 -148 123 0 -139 98 24 -213 172 32 -90 74 0 +255 238 115 246 213 32 +213 172 32 +148 123 0 +90 74 0 255 255 255 -139 139 139 222 213 180 -200 200 208 -48 48 72 +197 180 123 +139 139 139 82 82 82 -0 0 0 +205 164 74 +172 131 49 +139 98 24 +74 57 16 +16 16 16 diff --git a/graphics/pokemon/sandslash/shiny.pal b/graphics/pokemon/sandslash/shiny.pal index 86e888dbb..63da4f4e7 100644 --- a/graphics/pokemon/sandslash/shiny.pal +++ b/graphics/pokemon/sandslash/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 0 16 -216 48 64 +255 246 189 +213 197 123 +172 148 98 +131 115 41 +90 74 0 +255 255 255 +222 205 189 +197 172 131 +139 139 139 +82 82 82 +255 98 98 +222 49 65 +189 8 32 +74 57 16 16 16 16 -120 104 56 -184 8 32 -168 144 96 -72 56 16 -208 192 120 -248 248 248 -136 136 136 -216 200 184 -200 200 208 -48 48 72 -80 80 80 -255 0 0 diff --git a/graphics/pokemon/sandygast/back.png b/graphics/pokemon/sandygast/back.png index dd22fd6d7..a6cb1c375 100644 Binary files a/graphics/pokemon/sandygast/back.png and b/graphics/pokemon/sandygast/back.png differ diff --git a/graphics/pokemon/sandygast/front.png b/graphics/pokemon/sandygast/front.png index edfdc95e1..5e80875bb 100644 Binary files a/graphics/pokemon/sandygast/front.png and b/graphics/pokemon/sandygast/front.png differ diff --git a/graphics/pokemon/sandygast/icon.png b/graphics/pokemon/sandygast/icon.png index 8578e5f69..46167f5ab 100644 Binary files a/graphics/pokemon/sandygast/icon.png and b/graphics/pokemon/sandygast/icon.png differ diff --git a/graphics/pokemon/sawk/anim_front.png b/graphics/pokemon/sawk/anim_front.png index f789e668c..9ee074103 100644 Binary files a/graphics/pokemon/sawk/anim_front.png and b/graphics/pokemon/sawk/anim_front.png differ diff --git a/graphics/pokemon/sawk/back.png b/graphics/pokemon/sawk/back.png index e6e65d064..35e589d28 100644 Binary files a/graphics/pokemon/sawk/back.png and b/graphics/pokemon/sawk/back.png differ diff --git a/graphics/pokemon/sawk/icon.png b/graphics/pokemon/sawk/icon.png index a60a171be..f9486e93f 100644 Binary files a/graphics/pokemon/sawk/icon.png and b/graphics/pokemon/sawk/icon.png differ diff --git a/graphics/pokemon/sawsbuck/anim_front.png b/graphics/pokemon/sawsbuck/anim_front.png index 2f2ebd936..fa28352dd 100644 Binary files a/graphics/pokemon/sawsbuck/anim_front.png and b/graphics/pokemon/sawsbuck/anim_front.png differ diff --git a/graphics/pokemon/sawsbuck/autumn/front.png b/graphics/pokemon/sawsbuck/autumn/front.png index f0e099620..97c43db22 100644 Binary files a/graphics/pokemon/sawsbuck/autumn/front.png and b/graphics/pokemon/sawsbuck/autumn/front.png differ diff --git a/graphics/pokemon/sawsbuck/back.png b/graphics/pokemon/sawsbuck/back.png index 0360e3129..bbf5eef95 100644 Binary files a/graphics/pokemon/sawsbuck/back.png and b/graphics/pokemon/sawsbuck/back.png differ diff --git a/graphics/pokemon/sawsbuck/icon.png b/graphics/pokemon/sawsbuck/icon.png index 83ca879b4..b73633ea6 100644 Binary files a/graphics/pokemon/sawsbuck/icon.png and b/graphics/pokemon/sawsbuck/icon.png differ diff --git a/graphics/pokemon/sawsbuck/summer/front.png b/graphics/pokemon/sawsbuck/summer/front.png index 0a32832ba..96a0c150c 100644 Binary files a/graphics/pokemon/sawsbuck/summer/front.png and b/graphics/pokemon/sawsbuck/summer/front.png differ diff --git a/graphics/pokemon/sawsbuck/winter/back.png b/graphics/pokemon/sawsbuck/winter/back.png index 7bc1cc292..607a9ee99 100644 Binary files a/graphics/pokemon/sawsbuck/winter/back.png and b/graphics/pokemon/sawsbuck/winter/back.png differ diff --git a/graphics/pokemon/sawsbuck/winter/front.png b/graphics/pokemon/sawsbuck/winter/front.png index 795a8764f..d97aa2a90 100644 Binary files a/graphics/pokemon/sawsbuck/winter/front.png and b/graphics/pokemon/sawsbuck/winter/front.png differ diff --git a/graphics/pokemon/scatterbug/anim_front.png b/graphics/pokemon/scatterbug/anim_front.png index b8a8ab048..22ea9418e 100644 Binary files a/graphics/pokemon/scatterbug/anim_front.png and b/graphics/pokemon/scatterbug/anim_front.png differ diff --git a/graphics/pokemon/scatterbug/back.png b/graphics/pokemon/scatterbug/back.png index c42b8f60f..d22122fb6 100644 Binary files a/graphics/pokemon/scatterbug/back.png and b/graphics/pokemon/scatterbug/back.png differ diff --git a/graphics/pokemon/scatterbug/icon.png b/graphics/pokemon/scatterbug/icon.png index 7921166d6..eceb9886e 100644 Binary files a/graphics/pokemon/scatterbug/icon.png and b/graphics/pokemon/scatterbug/icon.png differ diff --git a/graphics/pokemon/sceptile/anim_front.png b/graphics/pokemon/sceptile/anim_front.png index 7cae6d5eb..c297cf729 100644 Binary files a/graphics/pokemon/sceptile/anim_front.png and b/graphics/pokemon/sceptile/anim_front.png differ diff --git a/graphics/pokemon/sceptile/back.png b/graphics/pokemon/sceptile/back.png index 9f621fdff..7b530a086 100644 Binary files a/graphics/pokemon/sceptile/back.png and b/graphics/pokemon/sceptile/back.png differ diff --git a/graphics/pokemon/sceptile/icon.png b/graphics/pokemon/sceptile/icon.png index fcacf0a59..3eec2474b 100644 Binary files a/graphics/pokemon/sceptile/icon.png and b/graphics/pokemon/sceptile/icon.png differ diff --git a/graphics/pokemon/sceptile/mega/back.png b/graphics/pokemon/sceptile/mega/back.png index 8c396d3ca..ab62da17f 100644 Binary files a/graphics/pokemon/sceptile/mega/back.png and b/graphics/pokemon/sceptile/mega/back.png differ diff --git a/graphics/pokemon/sceptile/mega/front.png b/graphics/pokemon/sceptile/mega/front.png index 206708058..85c5df5b1 100644 Binary files a/graphics/pokemon/sceptile/mega/front.png and b/graphics/pokemon/sceptile/mega/front.png differ diff --git a/graphics/pokemon/sceptile/mega/icon.png b/graphics/pokemon/sceptile/mega/icon.png index 719360c9b..7ec8aa19e 100644 Binary files a/graphics/pokemon/sceptile/mega/icon.png and b/graphics/pokemon/sceptile/mega/icon.png differ diff --git a/graphics/pokemon/scizor/anim_front.png b/graphics/pokemon/scizor/anim_front.png index 2eb0806c7..c5e6b302b 100644 Binary files a/graphics/pokemon/scizor/anim_front.png and b/graphics/pokemon/scizor/anim_front.png differ diff --git a/graphics/pokemon/scizor/back.png b/graphics/pokemon/scizor/back.png index aee797574..90049e102 100644 Binary files a/graphics/pokemon/scizor/back.png and b/graphics/pokemon/scizor/back.png differ diff --git a/graphics/pokemon/scizor/icon.png b/graphics/pokemon/scizor/icon.png index bec0586d8..5fc6d9740 100644 Binary files a/graphics/pokemon/scizor/icon.png and b/graphics/pokemon/scizor/icon.png differ diff --git a/graphics/pokemon/scizor/mega/back.png b/graphics/pokemon/scizor/mega/back.png index aadea4456..8cbc7f76f 100644 Binary files a/graphics/pokemon/scizor/mega/back.png and b/graphics/pokemon/scizor/mega/back.png differ diff --git a/graphics/pokemon/scizor/mega/front.png b/graphics/pokemon/scizor/mega/front.png index b1a69d545..534d4403d 100644 Binary files a/graphics/pokemon/scizor/mega/front.png and b/graphics/pokemon/scizor/mega/front.png differ diff --git a/graphics/pokemon/scizor/mega/icon.png b/graphics/pokemon/scizor/mega/icon.png index 6d96dd950..2ba3e8243 100644 Binary files a/graphics/pokemon/scizor/mega/icon.png and b/graphics/pokemon/scizor/mega/icon.png differ diff --git a/graphics/pokemon/scolipede/anim_front.png b/graphics/pokemon/scolipede/anim_front.png index 326332411..9ed55dab0 100644 Binary files a/graphics/pokemon/scolipede/anim_front.png and b/graphics/pokemon/scolipede/anim_front.png differ diff --git a/graphics/pokemon/scolipede/back.png b/graphics/pokemon/scolipede/back.png index fe71c89aa..2a8235682 100644 Binary files a/graphics/pokemon/scolipede/back.png and b/graphics/pokemon/scolipede/back.png differ diff --git a/graphics/pokemon/scolipede/icon.png b/graphics/pokemon/scolipede/icon.png index e00cd4d91..c5b66dc26 100644 Binary files a/graphics/pokemon/scolipede/icon.png and b/graphics/pokemon/scolipede/icon.png differ diff --git a/graphics/pokemon/scorbunny/back.png b/graphics/pokemon/scorbunny/back.png index 025949e0d..1189ea61f 100644 Binary files a/graphics/pokemon/scorbunny/back.png and b/graphics/pokemon/scorbunny/back.png differ diff --git a/graphics/pokemon/scorbunny/front.png b/graphics/pokemon/scorbunny/front.png index 8cc2c3f36..03cac0952 100644 Binary files a/graphics/pokemon/scorbunny/front.png and b/graphics/pokemon/scorbunny/front.png differ diff --git a/graphics/pokemon/scorbunny/icon.png b/graphics/pokemon/scorbunny/icon.png index 5b746f76d..9009f3e1d 100644 Binary files a/graphics/pokemon/scorbunny/icon.png and b/graphics/pokemon/scorbunny/icon.png differ diff --git a/graphics/pokemon/scrafty/anim_front.png b/graphics/pokemon/scrafty/anim_front.png index 9ace538cb..d150e4298 100644 Binary files a/graphics/pokemon/scrafty/anim_front.png and b/graphics/pokemon/scrafty/anim_front.png differ diff --git a/graphics/pokemon/scrafty/back.png b/graphics/pokemon/scrafty/back.png index ca3d0f448..9d066bf0b 100644 Binary files a/graphics/pokemon/scrafty/back.png and b/graphics/pokemon/scrafty/back.png differ diff --git a/graphics/pokemon/scrafty/icon.png b/graphics/pokemon/scrafty/icon.png index daa5061b0..0e4af9f53 100644 Binary files a/graphics/pokemon/scrafty/icon.png and b/graphics/pokemon/scrafty/icon.png differ diff --git a/graphics/pokemon/scraggy/anim_front.png b/graphics/pokemon/scraggy/anim_front.png index 73cb8a256..fde3828d2 100644 Binary files a/graphics/pokemon/scraggy/anim_front.png and b/graphics/pokemon/scraggy/anim_front.png differ diff --git a/graphics/pokemon/scraggy/back.png b/graphics/pokemon/scraggy/back.png index 446961805..992f635c8 100644 Binary files a/graphics/pokemon/scraggy/back.png and b/graphics/pokemon/scraggy/back.png differ diff --git a/graphics/pokemon/scyther/back.png b/graphics/pokemon/scyther/back.png index 863bf3366..e16174649 100644 Binary files a/graphics/pokemon/scyther/back.png and b/graphics/pokemon/scyther/back.png differ diff --git a/graphics/pokemon/scyther/icon.png b/graphics/pokemon/scyther/icon.png index 9b6129670..2bba195d2 100644 Binary files a/graphics/pokemon/scyther/icon.png and b/graphics/pokemon/scyther/icon.png differ diff --git a/graphics/pokemon/seadra/back.png b/graphics/pokemon/seadra/back.png index 2846658a2..b4264953f 100644 Binary files a/graphics/pokemon/seadra/back.png and b/graphics/pokemon/seadra/back.png differ diff --git a/graphics/pokemon/seadra/icon.png b/graphics/pokemon/seadra/icon.png index b93932619..358bb1c13 100644 Binary files a/graphics/pokemon/seadra/icon.png and b/graphics/pokemon/seadra/icon.png differ diff --git a/graphics/pokemon/seaking/back.png b/graphics/pokemon/seaking/back.png index 8fde25b3b..b39711b76 100644 Binary files a/graphics/pokemon/seaking/back.png and b/graphics/pokemon/seaking/back.png differ diff --git a/graphics/pokemon/seaking/icon.png b/graphics/pokemon/seaking/icon.png index 161987fe9..c95eeda1c 100644 Binary files a/graphics/pokemon/seaking/icon.png and b/graphics/pokemon/seaking/icon.png differ diff --git a/graphics/pokemon/sealeo/anim_front.png b/graphics/pokemon/sealeo/anim_front.png index 8041b38bb..027ef6de1 100644 Binary files a/graphics/pokemon/sealeo/anim_front.png and b/graphics/pokemon/sealeo/anim_front.png differ diff --git a/graphics/pokemon/sealeo/icon.png b/graphics/pokemon/sealeo/icon.png index 4ab29ca67..2e08d775d 100644 Binary files a/graphics/pokemon/sealeo/icon.png and b/graphics/pokemon/sealeo/icon.png differ diff --git a/graphics/pokemon/seedot/back.png b/graphics/pokemon/seedot/back.png index 119c48f1f..30cd018c4 100644 Binary files a/graphics/pokemon/seedot/back.png and b/graphics/pokemon/seedot/back.png differ diff --git a/graphics/pokemon/seedot/icon.png b/graphics/pokemon/seedot/icon.png index 1087b533c..26f4d0b2c 100644 Binary files a/graphics/pokemon/seedot/icon.png and b/graphics/pokemon/seedot/icon.png differ diff --git a/graphics/pokemon/seel/back.png b/graphics/pokemon/seel/back.png index 17a7860fc..0521176e3 100644 Binary files a/graphics/pokemon/seel/back.png and b/graphics/pokemon/seel/back.png differ diff --git a/graphics/pokemon/seel/icon.png b/graphics/pokemon/seel/icon.png index b72059c90..1328be070 100644 Binary files a/graphics/pokemon/seel/icon.png and b/graphics/pokemon/seel/icon.png differ diff --git a/graphics/pokemon/seismitoad/anim_front.png b/graphics/pokemon/seismitoad/anim_front.png index f367e3390..9446c095d 100644 Binary files a/graphics/pokemon/seismitoad/anim_front.png and b/graphics/pokemon/seismitoad/anim_front.png differ diff --git a/graphics/pokemon/seismitoad/back.png b/graphics/pokemon/seismitoad/back.png index e86466f42..9435bd8c0 100644 Binary files a/graphics/pokemon/seismitoad/back.png and b/graphics/pokemon/seismitoad/back.png differ diff --git a/graphics/pokemon/seismitoad/icon.png b/graphics/pokemon/seismitoad/icon.png index b4e348fea..fc83558bf 100644 Binary files a/graphics/pokemon/seismitoad/icon.png and b/graphics/pokemon/seismitoad/icon.png differ diff --git a/graphics/pokemon/sentret/back.png b/graphics/pokemon/sentret/back.png index ef30949f8..fcb1a333a 100644 Binary files a/graphics/pokemon/sentret/back.png and b/graphics/pokemon/sentret/back.png differ diff --git a/graphics/pokemon/serperior/anim_front.png b/graphics/pokemon/serperior/anim_front.png index 40c2f29b6..1056e166c 100644 Binary files a/graphics/pokemon/serperior/anim_front.png and b/graphics/pokemon/serperior/anim_front.png differ diff --git a/graphics/pokemon/serperior/back.png b/graphics/pokemon/serperior/back.png index 82cc79370..32e8fc79d 100644 Binary files a/graphics/pokemon/serperior/back.png and b/graphics/pokemon/serperior/back.png differ diff --git a/graphics/pokemon/serperior/icon.png b/graphics/pokemon/serperior/icon.png index dcf778592..d6c43e33a 100644 Binary files a/graphics/pokemon/serperior/icon.png and b/graphics/pokemon/serperior/icon.png differ diff --git a/graphics/pokemon/servine/anim_front.png b/graphics/pokemon/servine/anim_front.png index 89dcff019..05e7e6d81 100644 Binary files a/graphics/pokemon/servine/anim_front.png and b/graphics/pokemon/servine/anim_front.png differ diff --git a/graphics/pokemon/servine/back.png b/graphics/pokemon/servine/back.png index 67ac5207d..fac3947ef 100644 Binary files a/graphics/pokemon/servine/back.png and b/graphics/pokemon/servine/back.png differ diff --git a/graphics/pokemon/servine/icon.png b/graphics/pokemon/servine/icon.png index d4f23834e..efe51adfe 100644 Binary files a/graphics/pokemon/servine/icon.png and b/graphics/pokemon/servine/icon.png differ diff --git a/graphics/pokemon/seviper/anim_front.png b/graphics/pokemon/seviper/anim_front.png index b38668ead..364385b87 100644 Binary files a/graphics/pokemon/seviper/anim_front.png and b/graphics/pokemon/seviper/anim_front.png differ diff --git a/graphics/pokemon/seviper/back.png b/graphics/pokemon/seviper/back.png index 3c5d85d92..9dbf0921b 100644 Binary files a/graphics/pokemon/seviper/back.png and b/graphics/pokemon/seviper/back.png differ diff --git a/graphics/pokemon/sewaddle/anim_front.png b/graphics/pokemon/sewaddle/anim_front.png index e3b396dea..3a46aa599 100644 Binary files a/graphics/pokemon/sewaddle/anim_front.png and b/graphics/pokemon/sewaddle/anim_front.png differ diff --git a/graphics/pokemon/sewaddle/back.png b/graphics/pokemon/sewaddle/back.png index 38fdf9d12..5068374f0 100644 Binary files a/graphics/pokemon/sewaddle/back.png and b/graphics/pokemon/sewaddle/back.png differ diff --git a/graphics/pokemon/sharpedo/anim_front.png b/graphics/pokemon/sharpedo/anim_front.png index a27d1085b..cf261cd4a 100644 Binary files a/graphics/pokemon/sharpedo/anim_front.png and b/graphics/pokemon/sharpedo/anim_front.png differ diff --git a/graphics/pokemon/sharpedo/back.png b/graphics/pokemon/sharpedo/back.png index 4f1e78bd4..647afc784 100644 Binary files a/graphics/pokemon/sharpedo/back.png and b/graphics/pokemon/sharpedo/back.png differ diff --git a/graphics/pokemon/sharpedo/mega/back.png b/graphics/pokemon/sharpedo/mega/back.png index 847b52f1d..893d63a2b 100644 Binary files a/graphics/pokemon/sharpedo/mega/back.png and b/graphics/pokemon/sharpedo/mega/back.png differ diff --git a/graphics/pokemon/sharpedo/mega/front.png b/graphics/pokemon/sharpedo/mega/front.png index fa0f5aaeb..4709fd7cc 100644 Binary files a/graphics/pokemon/sharpedo/mega/front.png and b/graphics/pokemon/sharpedo/mega/front.png differ diff --git a/graphics/pokemon/sharpedo/mega/icon.png b/graphics/pokemon/sharpedo/mega/icon.png index 9072ec87c..465d405be 100644 Binary files a/graphics/pokemon/sharpedo/mega/icon.png and b/graphics/pokemon/sharpedo/mega/icon.png differ diff --git a/graphics/pokemon/shaymin/anim_front.png b/graphics/pokemon/shaymin/anim_front.png index e37ed4ecd..82ae30626 100644 Binary files a/graphics/pokemon/shaymin/anim_front.png and b/graphics/pokemon/shaymin/anim_front.png differ diff --git a/graphics/pokemon/shaymin/back.png b/graphics/pokemon/shaymin/back.png index 9950f398d..e66df248f 100644 Binary files a/graphics/pokemon/shaymin/back.png and b/graphics/pokemon/shaymin/back.png differ diff --git a/graphics/pokemon/shaymin/icon.png b/graphics/pokemon/shaymin/icon.png index 85143871a..4471c5c2b 100644 Binary files a/graphics/pokemon/shaymin/icon.png and b/graphics/pokemon/shaymin/icon.png differ diff --git a/graphics/pokemon/shaymin/sky/anim_front.png b/graphics/pokemon/shaymin/sky/anim_front.png index 3bac8c84f..541477651 100644 Binary files a/graphics/pokemon/shaymin/sky/anim_front.png and b/graphics/pokemon/shaymin/sky/anim_front.png differ diff --git a/graphics/pokemon/shaymin/sky/back.png b/graphics/pokemon/shaymin/sky/back.png index f21c36297..e88300f03 100644 Binary files a/graphics/pokemon/shaymin/sky/back.png and b/graphics/pokemon/shaymin/sky/back.png differ diff --git a/graphics/pokemon/shaymin/sky/icon.png b/graphics/pokemon/shaymin/sky/icon.png index a97340a4c..346e80da0 100644 Binary files a/graphics/pokemon/shaymin/sky/icon.png and b/graphics/pokemon/shaymin/sky/icon.png differ diff --git a/graphics/pokemon/shedinja/anim_front.png b/graphics/pokemon/shedinja/anim_front.png index ac8cae6a4..897127dff 100644 Binary files a/graphics/pokemon/shedinja/anim_front.png and b/graphics/pokemon/shedinja/anim_front.png differ diff --git a/graphics/pokemon/shedinja/back.png b/graphics/pokemon/shedinja/back.png index 5c21e6f55..97fb734c1 100644 Binary files a/graphics/pokemon/shedinja/back.png and b/graphics/pokemon/shedinja/back.png differ diff --git a/graphics/pokemon/shedinja/icon.png b/graphics/pokemon/shedinja/icon.png index 7e28ea052..9aeaa40a4 100644 Binary files a/graphics/pokemon/shedinja/icon.png and b/graphics/pokemon/shedinja/icon.png differ diff --git a/graphics/pokemon/shelgon/anim_front.png b/graphics/pokemon/shelgon/anim_front.png index 63fba01f5..d3a746fce 100644 Binary files a/graphics/pokemon/shelgon/anim_front.png and b/graphics/pokemon/shelgon/anim_front.png differ diff --git a/graphics/pokemon/shelgon/back.png b/graphics/pokemon/shelgon/back.png index 44179f902..7d53c48c7 100644 Binary files a/graphics/pokemon/shelgon/back.png and b/graphics/pokemon/shelgon/back.png differ diff --git a/graphics/pokemon/shelgon/icon.png b/graphics/pokemon/shelgon/icon.png index 8395a6bd6..48c814ff2 100644 Binary files a/graphics/pokemon/shelgon/icon.png and b/graphics/pokemon/shelgon/icon.png differ diff --git a/graphics/pokemon/shellder/anim_front.png b/graphics/pokemon/shellder/anim_front.png index 5cbfe44a9..ec58b85d1 100644 Binary files a/graphics/pokemon/shellder/anim_front.png and b/graphics/pokemon/shellder/anim_front.png differ diff --git a/graphics/pokemon/shellder/back.png b/graphics/pokemon/shellder/back.png index ca1ca31dc..6a402e9ea 100644 Binary files a/graphics/pokemon/shellder/back.png and b/graphics/pokemon/shellder/back.png differ diff --git a/graphics/pokemon/shellos/anim_front.png b/graphics/pokemon/shellos/anim_front.png index 6776b91af..f548e886c 100644 Binary files a/graphics/pokemon/shellos/anim_front.png and b/graphics/pokemon/shellos/anim_front.png differ diff --git a/graphics/pokemon/shellos/back.png b/graphics/pokemon/shellos/back.png index 7da2fb83e..f9d12dd63 100644 Binary files a/graphics/pokemon/shellos/back.png and b/graphics/pokemon/shellos/back.png differ diff --git a/graphics/pokemon/shellos/east_sea/anim_front.png b/graphics/pokemon/shellos/east_sea/anim_front.png index c8f658217..0ba327803 100644 Binary files a/graphics/pokemon/shellos/east_sea/anim_front.png and b/graphics/pokemon/shellos/east_sea/anim_front.png differ diff --git a/graphics/pokemon/shellos/icon.png b/graphics/pokemon/shellos/icon.png index c32bd8e91..031c9b509 100644 Binary files a/graphics/pokemon/shellos/icon.png and b/graphics/pokemon/shellos/icon.png differ diff --git a/graphics/pokemon/shelmet/anim_front.png b/graphics/pokemon/shelmet/anim_front.png index ab72a1d00..a655e54d1 100644 Binary files a/graphics/pokemon/shelmet/anim_front.png and b/graphics/pokemon/shelmet/anim_front.png differ diff --git a/graphics/pokemon/shelmet/back.png b/graphics/pokemon/shelmet/back.png index 39e6b3cd8..846c84b5d 100644 Binary files a/graphics/pokemon/shelmet/back.png and b/graphics/pokemon/shelmet/back.png differ diff --git a/graphics/pokemon/shelmet/icon.png b/graphics/pokemon/shelmet/icon.png index a33100d29..2dc08fe42 100644 Binary files a/graphics/pokemon/shelmet/icon.png and b/graphics/pokemon/shelmet/icon.png differ diff --git a/graphics/pokemon/shieldon/anim_front.png b/graphics/pokemon/shieldon/anim_front.png index 6dd990aa9..43e59272e 100644 Binary files a/graphics/pokemon/shieldon/anim_front.png and b/graphics/pokemon/shieldon/anim_front.png differ diff --git a/graphics/pokemon/shieldon/back.png b/graphics/pokemon/shieldon/back.png index 91b5269a6..bd55d112a 100644 Binary files a/graphics/pokemon/shieldon/back.png and b/graphics/pokemon/shieldon/back.png differ diff --git a/graphics/pokemon/shieldon/icon.png b/graphics/pokemon/shieldon/icon.png index 1aed61106..4e0a46784 100644 Binary files a/graphics/pokemon/shieldon/icon.png and b/graphics/pokemon/shieldon/icon.png differ diff --git a/graphics/pokemon/shiftry/anim_front.png b/graphics/pokemon/shiftry/anim_front.png index 43f4020d3..f813d71d1 100644 Binary files a/graphics/pokemon/shiftry/anim_front.png and b/graphics/pokemon/shiftry/anim_front.png differ diff --git a/graphics/pokemon/shiftry/back.png b/graphics/pokemon/shiftry/back.png index 637b2b612..aba33b7de 100644 Binary files a/graphics/pokemon/shiftry/back.png and b/graphics/pokemon/shiftry/back.png differ diff --git a/graphics/pokemon/shiinotic/back.png b/graphics/pokemon/shiinotic/back.png index 6b54c55e9..de88b363b 100644 Binary files a/graphics/pokemon/shiinotic/back.png and b/graphics/pokemon/shiinotic/back.png differ diff --git a/graphics/pokemon/shiinotic/front.png b/graphics/pokemon/shiinotic/front.png index 29090a83d..0f63c92c7 100644 Binary files a/graphics/pokemon/shiinotic/front.png and b/graphics/pokemon/shiinotic/front.png differ diff --git a/graphics/pokemon/shiinotic/icon.png b/graphics/pokemon/shiinotic/icon.png index 78230a0ae..510d61a97 100644 Binary files a/graphics/pokemon/shiinotic/icon.png and b/graphics/pokemon/shiinotic/icon.png differ diff --git a/graphics/pokemon/shinx/icon.png b/graphics/pokemon/shinx/icon.png index e72fa39bf..503036a11 100644 Binary files a/graphics/pokemon/shinx/icon.png and b/graphics/pokemon/shinx/icon.png differ diff --git a/graphics/pokemon/shroomish/anim_front.png b/graphics/pokemon/shroomish/anim_front.png index 1a2b86f3a..d06679fdb 100644 Binary files a/graphics/pokemon/shroomish/anim_front.png and b/graphics/pokemon/shroomish/anim_front.png differ diff --git a/graphics/pokemon/shroomish/back.png b/graphics/pokemon/shroomish/back.png index b5cbc1b84..2baed2a42 100644 Binary files a/graphics/pokemon/shroomish/back.png and b/graphics/pokemon/shroomish/back.png differ diff --git a/graphics/pokemon/shroomish/icon.png b/graphics/pokemon/shroomish/icon.png index 05d554c7e..f5ca6d5f9 100644 Binary files a/graphics/pokemon/shroomish/icon.png and b/graphics/pokemon/shroomish/icon.png differ diff --git a/graphics/pokemon/shuckle/anim_front.png b/graphics/pokemon/shuckle/anim_front.png index 2c38f3ed8..619f3b978 100644 Binary files a/graphics/pokemon/shuckle/anim_front.png and b/graphics/pokemon/shuckle/anim_front.png differ diff --git a/graphics/pokemon/shuckle/back.png b/graphics/pokemon/shuckle/back.png index 5e4042ca0..235287795 100644 Binary files a/graphics/pokemon/shuckle/back.png and b/graphics/pokemon/shuckle/back.png differ diff --git a/graphics/pokemon/shuckle/icon.png b/graphics/pokemon/shuckle/icon.png index 15755681c..ba967932f 100644 Binary files a/graphics/pokemon/shuckle/icon.png and b/graphics/pokemon/shuckle/icon.png differ diff --git a/graphics/pokemon/shuppet/icon.png b/graphics/pokemon/shuppet/icon.png index 71f391f7a..44fd5bb19 100644 Binary files a/graphics/pokemon/shuppet/icon.png and b/graphics/pokemon/shuppet/icon.png differ diff --git a/graphics/pokemon/sigilyph/anim_front.png b/graphics/pokemon/sigilyph/anim_front.png index 1e12d377d..db53519b7 100644 Binary files a/graphics/pokemon/sigilyph/anim_front.png and b/graphics/pokemon/sigilyph/anim_front.png differ diff --git a/graphics/pokemon/sigilyph/back.png b/graphics/pokemon/sigilyph/back.png index 0e0d355f1..e1528d211 100644 Binary files a/graphics/pokemon/sigilyph/back.png and b/graphics/pokemon/sigilyph/back.png differ diff --git a/graphics/pokemon/silcoon/anim_front.png b/graphics/pokemon/silcoon/anim_front.png index f809975c7..8fb93f1fc 100644 Binary files a/graphics/pokemon/silcoon/anim_front.png and b/graphics/pokemon/silcoon/anim_front.png differ diff --git a/graphics/pokemon/silcoon/back.png b/graphics/pokemon/silcoon/back.png index b158c7762..2df79c25f 100644 Binary files a/graphics/pokemon/silcoon/back.png and b/graphics/pokemon/silcoon/back.png differ diff --git a/graphics/pokemon/silcoon/icon.png b/graphics/pokemon/silcoon/icon.png index 48174fbba..8eddb4d0f 100644 Binary files a/graphics/pokemon/silcoon/icon.png and b/graphics/pokemon/silcoon/icon.png differ diff --git a/graphics/pokemon/silicobra/back.png b/graphics/pokemon/silicobra/back.png index a161178d1..39b46dd9d 100644 Binary files a/graphics/pokemon/silicobra/back.png and b/graphics/pokemon/silicobra/back.png differ diff --git a/graphics/pokemon/silicobra/front.png b/graphics/pokemon/silicobra/front.png index 81a79e9fa..b6ed6ea56 100644 Binary files a/graphics/pokemon/silicobra/front.png and b/graphics/pokemon/silicobra/front.png differ diff --git a/graphics/pokemon/silicobra/icon.png b/graphics/pokemon/silicobra/icon.png index 9923d1ab7..c48874a72 100644 Binary files a/graphics/pokemon/silicobra/icon.png and b/graphics/pokemon/silicobra/icon.png differ diff --git a/graphics/pokemon/silvally/icon.png b/graphics/pokemon/silvally/icon.png index 2ed3ba765..2ef6ae9ad 100644 Binary files a/graphics/pokemon/silvally/icon.png and b/graphics/pokemon/silvally/icon.png differ diff --git a/graphics/pokemon/simipour/anim_front.png b/graphics/pokemon/simipour/anim_front.png index e1e4784d5..927aeb1eb 100644 Binary files a/graphics/pokemon/simipour/anim_front.png and b/graphics/pokemon/simipour/anim_front.png differ diff --git a/graphics/pokemon/simipour/back.png b/graphics/pokemon/simipour/back.png index 26e6bae97..652ad6897 100644 Binary files a/graphics/pokemon/simipour/back.png and b/graphics/pokemon/simipour/back.png differ diff --git a/graphics/pokemon/simipour/icon.png b/graphics/pokemon/simipour/icon.png index 6c97ec5d2..6f305ff7f 100644 Binary files a/graphics/pokemon/simipour/icon.png and b/graphics/pokemon/simipour/icon.png differ diff --git a/graphics/pokemon/simisage/anim_front.png b/graphics/pokemon/simisage/anim_front.png index 646ed188c..d9601c955 100644 Binary files a/graphics/pokemon/simisage/anim_front.png and b/graphics/pokemon/simisage/anim_front.png differ diff --git a/graphics/pokemon/simisage/back.png b/graphics/pokemon/simisage/back.png index e45f9daec..87984629f 100644 Binary files a/graphics/pokemon/simisage/back.png and b/graphics/pokemon/simisage/back.png differ diff --git a/graphics/pokemon/simisage/icon.png b/graphics/pokemon/simisage/icon.png index 8649faa98..e637c05a5 100644 Binary files a/graphics/pokemon/simisage/icon.png and b/graphics/pokemon/simisage/icon.png differ diff --git a/graphics/pokemon/simisear/anim_front.png b/graphics/pokemon/simisear/anim_front.png index eb9457083..7426fffe7 100644 Binary files a/graphics/pokemon/simisear/anim_front.png and b/graphics/pokemon/simisear/anim_front.png differ diff --git a/graphics/pokemon/simisear/back.png b/graphics/pokemon/simisear/back.png index 100a6c81a..55d90c1f4 100644 Binary files a/graphics/pokemon/simisear/back.png and b/graphics/pokemon/simisear/back.png differ diff --git a/graphics/pokemon/simisear/icon.png b/graphics/pokemon/simisear/icon.png index cb6199a65..f7bc5ef78 100644 Binary files a/graphics/pokemon/simisear/icon.png and b/graphics/pokemon/simisear/icon.png differ diff --git a/graphics/pokemon/sinistea/back.png b/graphics/pokemon/sinistea/back.png index ce35016f5..3335de212 100644 Binary files a/graphics/pokemon/sinistea/back.png and b/graphics/pokemon/sinistea/back.png differ diff --git a/graphics/pokemon/sinistea/front.png b/graphics/pokemon/sinistea/front.png index 6d091318b..cb9dec97c 100644 Binary files a/graphics/pokemon/sinistea/front.png and b/graphics/pokemon/sinistea/front.png differ diff --git a/graphics/pokemon/sinistea/icon.png b/graphics/pokemon/sinistea/icon.png index ce6494539..0f5154685 100644 Binary files a/graphics/pokemon/sinistea/icon.png and b/graphics/pokemon/sinistea/icon.png differ diff --git a/graphics/pokemon/sirfetchd/back.png b/graphics/pokemon/sirfetchd/back.png index 51d3e24e2..966060fd4 100644 Binary files a/graphics/pokemon/sirfetchd/back.png and b/graphics/pokemon/sirfetchd/back.png differ diff --git a/graphics/pokemon/sirfetchd/icon.png b/graphics/pokemon/sirfetchd/icon.png index d0e95e80d..eefa9a738 100644 Binary files a/graphics/pokemon/sirfetchd/icon.png and b/graphics/pokemon/sirfetchd/icon.png differ diff --git a/graphics/pokemon/sizzlipede/back.png b/graphics/pokemon/sizzlipede/back.png index abb22c0f8..7dc436d0d 100644 Binary files a/graphics/pokemon/sizzlipede/back.png and b/graphics/pokemon/sizzlipede/back.png differ diff --git a/graphics/pokemon/sizzlipede/icon.png b/graphics/pokemon/sizzlipede/icon.png index 514e703d5..e3c83ae04 100644 Binary files a/graphics/pokemon/sizzlipede/icon.png and b/graphics/pokemon/sizzlipede/icon.png differ diff --git a/graphics/pokemon/skarmory/anim_front.png b/graphics/pokemon/skarmory/anim_front.png index 33fa535a6..ea1033f3e 100644 Binary files a/graphics/pokemon/skarmory/anim_front.png and b/graphics/pokemon/skarmory/anim_front.png differ diff --git a/graphics/pokemon/skarmory/back.png b/graphics/pokemon/skarmory/back.png index f1ac49cc3..558943da5 100644 Binary files a/graphics/pokemon/skarmory/back.png and b/graphics/pokemon/skarmory/back.png differ diff --git a/graphics/pokemon/skarmory/icon.png b/graphics/pokemon/skarmory/icon.png index 024063490..4226ba392 100644 Binary files a/graphics/pokemon/skarmory/icon.png and b/graphics/pokemon/skarmory/icon.png differ diff --git a/graphics/pokemon/skiddo/anim_front.png b/graphics/pokemon/skiddo/anim_front.png index fb35b1d97..5705ded48 100644 Binary files a/graphics/pokemon/skiddo/anim_front.png and b/graphics/pokemon/skiddo/anim_front.png differ diff --git a/graphics/pokemon/skiddo/back.png b/graphics/pokemon/skiddo/back.png index e25ff0752..e0821bbdc 100644 Binary files a/graphics/pokemon/skiddo/back.png and b/graphics/pokemon/skiddo/back.png differ diff --git a/graphics/pokemon/skiddo/icon.png b/graphics/pokemon/skiddo/icon.png index 9d5c8800d..645f8ec21 100644 Binary files a/graphics/pokemon/skiddo/icon.png and b/graphics/pokemon/skiddo/icon.png differ diff --git a/graphics/pokemon/skiploom/anim_front.png b/graphics/pokemon/skiploom/anim_front.png index fb85c06ba..873e2c86f 100644 Binary files a/graphics/pokemon/skiploom/anim_front.png and b/graphics/pokemon/skiploom/anim_front.png differ diff --git a/graphics/pokemon/skiploom/back.png b/graphics/pokemon/skiploom/back.png index 6729470f2..f1fb2f68f 100644 Binary files a/graphics/pokemon/skiploom/back.png and b/graphics/pokemon/skiploom/back.png differ diff --git a/graphics/pokemon/skiploom/icon.png b/graphics/pokemon/skiploom/icon.png index 8d6bb8bf3..21189bed8 100644 Binary files a/graphics/pokemon/skiploom/icon.png and b/graphics/pokemon/skiploom/icon.png differ diff --git a/graphics/pokemon/skitty/anim_front.png b/graphics/pokemon/skitty/anim_front.png index a51596528..7f0c1ab4e 100644 Binary files a/graphics/pokemon/skitty/anim_front.png and b/graphics/pokemon/skitty/anim_front.png differ diff --git a/graphics/pokemon/skitty/back.png b/graphics/pokemon/skitty/back.png index 760fa559b..1d82716d0 100644 Binary files a/graphics/pokemon/skitty/back.png and b/graphics/pokemon/skitty/back.png differ diff --git a/graphics/pokemon/skitty/icon.png b/graphics/pokemon/skitty/icon.png index 1420b42b3..cb585a363 100644 Binary files a/graphics/pokemon/skitty/icon.png and b/graphics/pokemon/skitty/icon.png differ diff --git a/graphics/pokemon/skorupi/anim_front.png b/graphics/pokemon/skorupi/anim_front.png index 79e4e7a23..2120db4b0 100644 Binary files a/graphics/pokemon/skorupi/anim_front.png and b/graphics/pokemon/skorupi/anim_front.png differ diff --git a/graphics/pokemon/skorupi/back.png b/graphics/pokemon/skorupi/back.png index 6ea6e82e8..7e0d17f89 100644 Binary files a/graphics/pokemon/skorupi/back.png and b/graphics/pokemon/skorupi/back.png differ diff --git a/graphics/pokemon/skorupi/icon.png b/graphics/pokemon/skorupi/icon.png index a37c3fe54..5b35d4e0a 100644 Binary files a/graphics/pokemon/skorupi/icon.png and b/graphics/pokemon/skorupi/icon.png differ diff --git a/graphics/pokemon/skrelp/anim_front.png b/graphics/pokemon/skrelp/anim_front.png index 51a58bba4..c5b29d0cb 100644 Binary files a/graphics/pokemon/skrelp/anim_front.png and b/graphics/pokemon/skrelp/anim_front.png differ diff --git a/graphics/pokemon/skrelp/back.png b/graphics/pokemon/skrelp/back.png index b94aa5916..54315f57c 100644 Binary files a/graphics/pokemon/skrelp/back.png and b/graphics/pokemon/skrelp/back.png differ diff --git a/graphics/pokemon/skrelp/icon.png b/graphics/pokemon/skrelp/icon.png index 9b6f1276d..4c627eb7c 100644 Binary files a/graphics/pokemon/skrelp/icon.png and b/graphics/pokemon/skrelp/icon.png differ diff --git a/graphics/pokemon/skuntank/anim_front.png b/graphics/pokemon/skuntank/anim_front.png index e90c1db94..52caa25ad 100644 Binary files a/graphics/pokemon/skuntank/anim_front.png and b/graphics/pokemon/skuntank/anim_front.png differ diff --git a/graphics/pokemon/skuntank/back.png b/graphics/pokemon/skuntank/back.png index 0b024862c..7da4204c9 100644 Binary files a/graphics/pokemon/skuntank/back.png and b/graphics/pokemon/skuntank/back.png differ diff --git a/graphics/pokemon/skuntank/icon.png b/graphics/pokemon/skuntank/icon.png index d9cbedf0f..abdc48a59 100644 Binary files a/graphics/pokemon/skuntank/icon.png and b/graphics/pokemon/skuntank/icon.png differ diff --git a/graphics/pokemon/skwovet/back.png b/graphics/pokemon/skwovet/back.png index 5255f89ef..255068d20 100644 Binary files a/graphics/pokemon/skwovet/back.png and b/graphics/pokemon/skwovet/back.png differ diff --git a/graphics/pokemon/skwovet/front.png b/graphics/pokemon/skwovet/front.png index 57548839a..27dc32341 100644 Binary files a/graphics/pokemon/skwovet/front.png and b/graphics/pokemon/skwovet/front.png differ diff --git a/graphics/pokemon/skwovet/icon.png b/graphics/pokemon/skwovet/icon.png index bc8855f43..e7fc80916 100644 Binary files a/graphics/pokemon/skwovet/icon.png and b/graphics/pokemon/skwovet/icon.png differ diff --git a/graphics/pokemon/slaking/anim_front.png b/graphics/pokemon/slaking/anim_front.png index 357fd0c86..1b0ddece3 100644 Binary files a/graphics/pokemon/slaking/anim_front.png and b/graphics/pokemon/slaking/anim_front.png differ diff --git a/graphics/pokemon/slaking/back.png b/graphics/pokemon/slaking/back.png index 0879b47dd..9e541ebc1 100644 Binary files a/graphics/pokemon/slaking/back.png and b/graphics/pokemon/slaking/back.png differ diff --git a/graphics/pokemon/slaking/icon.png b/graphics/pokemon/slaking/icon.png index 01b5a1244..c0f8e719f 100644 Binary files a/graphics/pokemon/slaking/icon.png and b/graphics/pokemon/slaking/icon.png differ diff --git a/graphics/pokemon/slakoth/anim_front.png b/graphics/pokemon/slakoth/anim_front.png index e1dfc9396..32085285f 100644 Binary files a/graphics/pokemon/slakoth/anim_front.png and b/graphics/pokemon/slakoth/anim_front.png differ diff --git a/graphics/pokemon/slakoth/back.png b/graphics/pokemon/slakoth/back.png index 572f94e87..f1861ff68 100644 Binary files a/graphics/pokemon/slakoth/back.png and b/graphics/pokemon/slakoth/back.png differ diff --git a/graphics/pokemon/sliggoo/anim_front.png b/graphics/pokemon/sliggoo/anim_front.png index a291ee464..a6b839cdd 100644 Binary files a/graphics/pokemon/sliggoo/anim_front.png and b/graphics/pokemon/sliggoo/anim_front.png differ diff --git a/graphics/pokemon/sliggoo/back.png b/graphics/pokemon/sliggoo/back.png index bed56d44c..fbc2e4dca 100644 Binary files a/graphics/pokemon/sliggoo/back.png and b/graphics/pokemon/sliggoo/back.png differ diff --git a/graphics/pokemon/sliggoo/hisuian/icon.png b/graphics/pokemon/sliggoo/hisuian/icon.png index 2a3793301..c66baae5a 100644 Binary files a/graphics/pokemon/sliggoo/hisuian/icon.png and b/graphics/pokemon/sliggoo/hisuian/icon.png differ diff --git a/graphics/pokemon/sliggoo/icon.png b/graphics/pokemon/sliggoo/icon.png index b37dc277f..6b73102c9 100644 Binary files a/graphics/pokemon/sliggoo/icon.png and b/graphics/pokemon/sliggoo/icon.png differ diff --git a/graphics/pokemon/slowbro/anim_front.png b/graphics/pokemon/slowbro/anim_front.png index 582875ded..3e05e6203 100644 Binary files a/graphics/pokemon/slowbro/anim_front.png and b/graphics/pokemon/slowbro/anim_front.png differ diff --git a/graphics/pokemon/slowbro/back.png b/graphics/pokemon/slowbro/back.png index 14b0abaa3..88d6cf1a8 100644 Binary files a/graphics/pokemon/slowbro/back.png and b/graphics/pokemon/slowbro/back.png differ diff --git a/graphics/pokemon/slowbro/galarian/back.png b/graphics/pokemon/slowbro/galarian/back.png index 978b0d3f2..697224685 100644 Binary files a/graphics/pokemon/slowbro/galarian/back.png and b/graphics/pokemon/slowbro/galarian/back.png differ diff --git a/graphics/pokemon/slowbro/galarian/front.png b/graphics/pokemon/slowbro/galarian/front.png index e99a7d524..b71e8d253 100644 Binary files a/graphics/pokemon/slowbro/galarian/front.png and b/graphics/pokemon/slowbro/galarian/front.png differ diff --git a/graphics/pokemon/slowbro/galarian/icon.png b/graphics/pokemon/slowbro/galarian/icon.png index 7f2a366a3..285681b2a 100644 Binary files a/graphics/pokemon/slowbro/galarian/icon.png and b/graphics/pokemon/slowbro/galarian/icon.png differ diff --git a/graphics/pokemon/slowbro/icon.png b/graphics/pokemon/slowbro/icon.png index 3288121c2..6b2ab16c8 100644 Binary files a/graphics/pokemon/slowbro/icon.png and b/graphics/pokemon/slowbro/icon.png differ diff --git a/graphics/pokemon/slowbro/mega/back.png b/graphics/pokemon/slowbro/mega/back.png index 948516e32..b24353c96 100644 Binary files a/graphics/pokemon/slowbro/mega/back.png and b/graphics/pokemon/slowbro/mega/back.png differ diff --git a/graphics/pokemon/slowbro/mega/front.png b/graphics/pokemon/slowbro/mega/front.png index 94678b54d..4d2b4a457 100644 Binary files a/graphics/pokemon/slowbro/mega/front.png and b/graphics/pokemon/slowbro/mega/front.png differ diff --git a/graphics/pokemon/slowbro/mega/icon.png b/graphics/pokemon/slowbro/mega/icon.png index 206b656c1..826f0bcce 100644 Binary files a/graphics/pokemon/slowbro/mega/icon.png and b/graphics/pokemon/slowbro/mega/icon.png differ diff --git a/graphics/pokemon/slowbro/normal.pal b/graphics/pokemon/slowbro/normal.pal index ae4d12a99..acd3ce77c 100644 --- a/graphics/pokemon/slowbro/normal.pal +++ b/graphics/pokemon/slowbro/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -123 49 49 -230 106 123 -255 148 148 -24 24 24 -255 189 172 -248 248 248 -216 216 208 -82 82 90 -139 148 148 -131 90 32 -180 189 189 +255 255 255 255 238 180 238 213 131 205 164 98 -232 80 40 +131 90 32 +222 222 213 +180 189 189 +139 148 148 +82 82 90 +230 82 41 +255 189 172 +255 148 148 +230 104 120 +120 48 48 +24 24 24 diff --git a/graphics/pokemon/slowbro/shiny.pal b/graphics/pokemon/slowbro/shiny.pal index 477035fb4..e129fdff3 100644 --- a/graphics/pokemon/slowbro/shiny.pal +++ b/graphics/pokemon/slowbro/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 56 128 -136 112 184 -168 144 248 +255 255 255 +246 238 189 +230 205 139 +197 156 106 +123 90 41 +230 205 98 +205 172 74 +164 123 41 +123 82 41 +230 82 41 +205 189 255 +172 148 255 +131 106 189 +106 65 172 24 24 24 -200 184 248 -248 248 248 -216 216 208 -96 64 40 -152 120 64 -120 88 40 -200 176 104 -240 232 184 -224 200 136 -192 152 104 -224 112 80 diff --git a/graphics/pokemon/slowking/anim_front.png b/graphics/pokemon/slowking/anim_front.png index 0bb1747e5..d9740c007 100644 Binary files a/graphics/pokemon/slowking/anim_front.png and b/graphics/pokemon/slowking/anim_front.png differ diff --git a/graphics/pokemon/slowking/back.png b/graphics/pokemon/slowking/back.png index 8e24edb9b..4d49973bd 100644 Binary files a/graphics/pokemon/slowking/back.png and b/graphics/pokemon/slowking/back.png differ diff --git a/graphics/pokemon/slowking/galarian/back.png b/graphics/pokemon/slowking/galarian/back.png index bfc02e126..ee1e0e6ef 100644 Binary files a/graphics/pokemon/slowking/galarian/back.png and b/graphics/pokemon/slowking/galarian/back.png differ diff --git a/graphics/pokemon/slowking/galarian/front.png b/graphics/pokemon/slowking/galarian/front.png index 0d5608684..fb619a556 100644 Binary files a/graphics/pokemon/slowking/galarian/front.png and b/graphics/pokemon/slowking/galarian/front.png differ diff --git a/graphics/pokemon/slowking/galarian/icon.png b/graphics/pokemon/slowking/galarian/icon.png index 73253c87a..4a69676fe 100644 Binary files a/graphics/pokemon/slowking/galarian/icon.png and b/graphics/pokemon/slowking/galarian/icon.png differ diff --git a/graphics/pokemon/slowpoke/anim_front.png b/graphics/pokemon/slowpoke/anim_front.png index 5f0c1a692..8b709c6e4 100644 Binary files a/graphics/pokemon/slowpoke/anim_front.png and b/graphics/pokemon/slowpoke/anim_front.png differ diff --git a/graphics/pokemon/slowpoke/back.png b/graphics/pokemon/slowpoke/back.png index 7f1dff38f..d35588712 100644 Binary files a/graphics/pokemon/slowpoke/back.png and b/graphics/pokemon/slowpoke/back.png differ diff --git a/graphics/pokemon/slowpoke/galarian/back.png b/graphics/pokemon/slowpoke/galarian/back.png index 3f639a483..af8f0fe84 100644 Binary files a/graphics/pokemon/slowpoke/galarian/back.png and b/graphics/pokemon/slowpoke/galarian/back.png differ diff --git a/graphics/pokemon/slowpoke/galarian/front.png b/graphics/pokemon/slowpoke/galarian/front.png index 43d02deca..37165145a 100644 Binary files a/graphics/pokemon/slowpoke/galarian/front.png and b/graphics/pokemon/slowpoke/galarian/front.png differ diff --git a/graphics/pokemon/slowpoke/galarian/icon.png b/graphics/pokemon/slowpoke/galarian/icon.png index fea1a0dc0..044517429 100644 Binary files a/graphics/pokemon/slowpoke/galarian/icon.png and b/graphics/pokemon/slowpoke/galarian/icon.png differ diff --git a/graphics/pokemon/slowpoke/icon.png b/graphics/pokemon/slowpoke/icon.png index 437206c1a..5fe6f50e8 100644 Binary files a/graphics/pokemon/slowpoke/icon.png and b/graphics/pokemon/slowpoke/icon.png differ diff --git a/graphics/pokemon/slowpoke/normal.pal b/graphics/pokemon/slowpoke/normal.pal index b07163f93..402c21c4a 100644 --- a/graphics/pokemon/slowpoke/normal.pal +++ b/graphics/pokemon/slowpoke/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -168 64 80 -216 96 120 -248 160 160 -248 128 144 -120 32 48 -104 96 96 -208 200 200 -248 248 248 16 16 16 -216 160 96 -136 88 24 -248 224 176 -232 192 136 -248 224 176 -0 0 0 +255 255 255 +213 205 205 +106 98 98 +255 230 180 +238 197 139 +222 164 98 +139 90 24 +255 164 164 +255 131 148 +222 98 123 +172 65 82 +123 32 49 +255 131 148 +222 98 123 diff --git a/graphics/pokemon/slowpoke/shiny.pal b/graphics/pokemon/slowpoke/shiny.pal index eba9b8ae4..b830d7165 100644 --- a/graphics/pokemon/slowpoke/shiny.pal +++ b/graphics/pokemon/slowpoke/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -168 112 120 -192 136 160 -248 208 224 -224 176 192 -128 72 80 -104 96 96 -208 200 200 -248 248 248 16 16 16 -216 176 88 -136 104 16 -248 240 176 -232 208 128 -248 248 248 -232 208 224 +255 255 255 +213 205 205 +106 98 98 +255 246 180 +238 213 131 +222 180 90 +139 106 16 +255 213 230 +230 180 197 +197 139 164 +172 115 123 +131 74 82 +255 131 148 +222 98 123 diff --git a/graphics/pokemon/slugma/anim_front.png b/graphics/pokemon/slugma/anim_front.png index 8324523bf..98d0bd14c 100644 Binary files a/graphics/pokemon/slugma/anim_front.png and b/graphics/pokemon/slugma/anim_front.png differ diff --git a/graphics/pokemon/slugma/back.png b/graphics/pokemon/slugma/back.png index 911c884d3..add53e723 100644 Binary files a/graphics/pokemon/slugma/back.png and b/graphics/pokemon/slugma/back.png differ diff --git a/graphics/pokemon/slugma/icon.png b/graphics/pokemon/slugma/icon.png index 2d38f1e22..18b4973a4 100644 Binary files a/graphics/pokemon/slugma/icon.png and b/graphics/pokemon/slugma/icon.png differ diff --git a/graphics/pokemon/slurpuff/anim_front.png b/graphics/pokemon/slurpuff/anim_front.png index ffc09684d..fa28b4d00 100644 Binary files a/graphics/pokemon/slurpuff/anim_front.png and b/graphics/pokemon/slurpuff/anim_front.png differ diff --git a/graphics/pokemon/slurpuff/back.png b/graphics/pokemon/slurpuff/back.png index ab1297c0f..f8ab4de36 100644 Binary files a/graphics/pokemon/slurpuff/back.png and b/graphics/pokemon/slurpuff/back.png differ diff --git a/graphics/pokemon/slurpuff/icon.png b/graphics/pokemon/slurpuff/icon.png index 80dd320d9..9c386a8c9 100644 Binary files a/graphics/pokemon/slurpuff/icon.png and b/graphics/pokemon/slurpuff/icon.png differ diff --git a/graphics/pokemon/smeargle/anim_front.png b/graphics/pokemon/smeargle/anim_front.png index 026a319ce..9a62395cc 100644 Binary files a/graphics/pokemon/smeargle/anim_front.png and b/graphics/pokemon/smeargle/anim_front.png differ diff --git a/graphics/pokemon/smeargle/back.png b/graphics/pokemon/smeargle/back.png index 15575b374..3721da87e 100644 Binary files a/graphics/pokemon/smeargle/back.png and b/graphics/pokemon/smeargle/back.png differ diff --git a/graphics/pokemon/smeargle/icon.png b/graphics/pokemon/smeargle/icon.png index f472c5cdd..39a6d94f0 100644 Binary files a/graphics/pokemon/smeargle/icon.png and b/graphics/pokemon/smeargle/icon.png differ diff --git a/graphics/pokemon/smoochum/anim_front.png b/graphics/pokemon/smoochum/anim_front.png index 57c82c71f..c9d2b13b0 100644 Binary files a/graphics/pokemon/smoochum/anim_front.png and b/graphics/pokemon/smoochum/anim_front.png differ diff --git a/graphics/pokemon/smoochum/back.png b/graphics/pokemon/smoochum/back.png index 9c013c280..b6e4d0eeb 100644 Binary files a/graphics/pokemon/smoochum/back.png and b/graphics/pokemon/smoochum/back.png differ diff --git a/graphics/pokemon/smoochum/icon.png b/graphics/pokemon/smoochum/icon.png index 252551d54..c210246ea 100644 Binary files a/graphics/pokemon/smoochum/icon.png and b/graphics/pokemon/smoochum/icon.png differ diff --git a/graphics/pokemon/sneasel/anim_front.png b/graphics/pokemon/sneasel/anim_front.png index 60496ff09..72da2a55e 100644 Binary files a/graphics/pokemon/sneasel/anim_front.png and b/graphics/pokemon/sneasel/anim_front.png differ diff --git a/graphics/pokemon/sneasel/back.png b/graphics/pokemon/sneasel/back.png index c79ab812b..a1c918cc2 100644 Binary files a/graphics/pokemon/sneasel/back.png and b/graphics/pokemon/sneasel/back.png differ diff --git a/graphics/pokemon/sneasel/hisuian/icon.png b/graphics/pokemon/sneasel/hisuian/icon.png index 92cc6750f..bd9cae88b 100644 Binary files a/graphics/pokemon/sneasel/hisuian/icon.png and b/graphics/pokemon/sneasel/hisuian/icon.png differ diff --git a/graphics/pokemon/sneasel/icon.png b/graphics/pokemon/sneasel/icon.png index 0213ef4e8..505cde514 100644 Binary files a/graphics/pokemon/sneasel/icon.png and b/graphics/pokemon/sneasel/icon.png differ diff --git a/graphics/pokemon/sneasler/back.png b/graphics/pokemon/sneasler/back.png index 359297646..b39320894 100755 Binary files a/graphics/pokemon/sneasler/back.png and b/graphics/pokemon/sneasler/back.png differ diff --git a/graphics/pokemon/sneasler/front.png b/graphics/pokemon/sneasler/front.png index d9a427a1e..67159da6b 100755 Binary files a/graphics/pokemon/sneasler/front.png and b/graphics/pokemon/sneasler/front.png differ diff --git a/graphics/pokemon/sneasler/icon.png b/graphics/pokemon/sneasler/icon.png index acc1e7d72..4238b0e6a 100644 Binary files a/graphics/pokemon/sneasler/icon.png and b/graphics/pokemon/sneasler/icon.png differ diff --git a/graphics/pokemon/snivy/anim_front.png b/graphics/pokemon/snivy/anim_front.png index d76b490bb..893d974a2 100644 Binary files a/graphics/pokemon/snivy/anim_front.png and b/graphics/pokemon/snivy/anim_front.png differ diff --git a/graphics/pokemon/snivy/back.png b/graphics/pokemon/snivy/back.png index 2f9eaca6e..7a6cd028b 100644 Binary files a/graphics/pokemon/snivy/back.png and b/graphics/pokemon/snivy/back.png differ diff --git a/graphics/pokemon/snivy/icon.png b/graphics/pokemon/snivy/icon.png index 251d3901d..e423ad152 100644 Binary files a/graphics/pokemon/snivy/icon.png and b/graphics/pokemon/snivy/icon.png differ diff --git a/graphics/pokemon/snom/back.png b/graphics/pokemon/snom/back.png index 3ea5024c8..6a7cec46f 100644 Binary files a/graphics/pokemon/snom/back.png and b/graphics/pokemon/snom/back.png differ diff --git a/graphics/pokemon/snom/front.png b/graphics/pokemon/snom/front.png index f078fabb5..ef948108d 100644 Binary files a/graphics/pokemon/snom/front.png and b/graphics/pokemon/snom/front.png differ diff --git a/graphics/pokemon/snom/icon.png b/graphics/pokemon/snom/icon.png index 33eb57ad9..d402de3f5 100644 Binary files a/graphics/pokemon/snom/icon.png and b/graphics/pokemon/snom/icon.png differ diff --git a/graphics/pokemon/snorlax/back.png b/graphics/pokemon/snorlax/back.png index 6b8725592..8e2fc9b3d 100644 Binary files a/graphics/pokemon/snorlax/back.png and b/graphics/pokemon/snorlax/back.png differ diff --git a/graphics/pokemon/snorunt/anim_front.png b/graphics/pokemon/snorunt/anim_front.png index da844cde0..a3bef621c 100644 Binary files a/graphics/pokemon/snorunt/anim_front.png and b/graphics/pokemon/snorunt/anim_front.png differ diff --git a/graphics/pokemon/snorunt/back.png b/graphics/pokemon/snorunt/back.png index 2ca3b0de7..f0b22e166 100644 Binary files a/graphics/pokemon/snorunt/back.png and b/graphics/pokemon/snorunt/back.png differ diff --git a/graphics/pokemon/snorunt/icon.png b/graphics/pokemon/snorunt/icon.png index d5bb8d725..9877e60b2 100644 Binary files a/graphics/pokemon/snorunt/icon.png and b/graphics/pokemon/snorunt/icon.png differ diff --git a/graphics/pokemon/snover/anim_front.png b/graphics/pokemon/snover/anim_front.png index 6ac2109cb..f666d58b3 100644 Binary files a/graphics/pokemon/snover/anim_front.png and b/graphics/pokemon/snover/anim_front.png differ diff --git a/graphics/pokemon/snover/back.png b/graphics/pokemon/snover/back.png index 27e7c1619..19bb8081d 100644 Binary files a/graphics/pokemon/snover/back.png and b/graphics/pokemon/snover/back.png differ diff --git a/graphics/pokemon/snover/icon.png b/graphics/pokemon/snover/icon.png index 6e2f5a8b5..56c5c124a 100644 Binary files a/graphics/pokemon/snover/icon.png and b/graphics/pokemon/snover/icon.png differ diff --git a/graphics/pokemon/snubbull/anim_front.png b/graphics/pokemon/snubbull/anim_front.png index 304a93050..b74b9d6a5 100644 Binary files a/graphics/pokemon/snubbull/anim_front.png and b/graphics/pokemon/snubbull/anim_front.png differ diff --git a/graphics/pokemon/snubbull/icon.png b/graphics/pokemon/snubbull/icon.png index 07a8af2d6..e8547622b 100644 Binary files a/graphics/pokemon/snubbull/icon.png and b/graphics/pokemon/snubbull/icon.png differ diff --git a/graphics/pokemon/sobble/back.png b/graphics/pokemon/sobble/back.png index 49f1773b8..c35b19f2d 100644 Binary files a/graphics/pokemon/sobble/back.png and b/graphics/pokemon/sobble/back.png differ diff --git a/graphics/pokemon/sobble/front.png b/graphics/pokemon/sobble/front.png index 50a5b4e83..5207e93d7 100644 Binary files a/graphics/pokemon/sobble/front.png and b/graphics/pokemon/sobble/front.png differ diff --git a/graphics/pokemon/sobble/icon.png b/graphics/pokemon/sobble/icon.png index 8c28f2b41..69327e018 100644 Binary files a/graphics/pokemon/sobble/icon.png and b/graphics/pokemon/sobble/icon.png differ diff --git a/graphics/pokemon/solgaleo/back.png b/graphics/pokemon/solgaleo/back.png index b870fb51f..c37996f3f 100644 Binary files a/graphics/pokemon/solgaleo/back.png and b/graphics/pokemon/solgaleo/back.png differ diff --git a/graphics/pokemon/solgaleo/front.png b/graphics/pokemon/solgaleo/front.png index 0179a4ac2..5f96ac66f 100644 Binary files a/graphics/pokemon/solgaleo/front.png and b/graphics/pokemon/solgaleo/front.png differ diff --git a/graphics/pokemon/solgaleo/icon.png b/graphics/pokemon/solgaleo/icon.png index 5ade3d74a..e7520c9bc 100644 Binary files a/graphics/pokemon/solgaleo/icon.png and b/graphics/pokemon/solgaleo/icon.png differ diff --git a/graphics/pokemon/solosis/anim_front.png b/graphics/pokemon/solosis/anim_front.png index 9c752b9d0..b1130a2bc 100644 Binary files a/graphics/pokemon/solosis/anim_front.png and b/graphics/pokemon/solosis/anim_front.png differ diff --git a/graphics/pokemon/solosis/back.png b/graphics/pokemon/solosis/back.png index 0a01ea258..165a9e794 100644 Binary files a/graphics/pokemon/solosis/back.png and b/graphics/pokemon/solosis/back.png differ diff --git a/graphics/pokemon/solosis/icon.png b/graphics/pokemon/solosis/icon.png index 5f29c2985..d105bb02e 100644 Binary files a/graphics/pokemon/solosis/icon.png and b/graphics/pokemon/solosis/icon.png differ diff --git a/graphics/pokemon/solrock/anim_front.png b/graphics/pokemon/solrock/anim_front.png index 62458d34b..a8ea53f01 100644 Binary files a/graphics/pokemon/solrock/anim_front.png and b/graphics/pokemon/solrock/anim_front.png differ diff --git a/graphics/pokemon/solrock/back.png b/graphics/pokemon/solrock/back.png index f1ec514b1..2c47b7708 100644 Binary files a/graphics/pokemon/solrock/back.png and b/graphics/pokemon/solrock/back.png differ diff --git a/graphics/pokemon/spearow/anim_front.png b/graphics/pokemon/spearow/anim_front.png index dcdd7072b..5b4539445 100644 Binary files a/graphics/pokemon/spearow/anim_front.png and b/graphics/pokemon/spearow/anim_front.png differ diff --git a/graphics/pokemon/spearow/back.png b/graphics/pokemon/spearow/back.png index 8564bd718..6e456b4da 100644 Binary files a/graphics/pokemon/spearow/back.png and b/graphics/pokemon/spearow/back.png differ diff --git a/graphics/pokemon/spearow/icon.png b/graphics/pokemon/spearow/icon.png index e71e80a80..d0048c91d 100644 Binary files a/graphics/pokemon/spearow/icon.png and b/graphics/pokemon/spearow/icon.png differ diff --git a/graphics/pokemon/spearow/normal.pal b/graphics/pokemon/spearow/normal.pal index 8eda920f0..157c5d2f4 100644 --- a/graphics/pokemon/spearow/normal.pal +++ b/graphics/pokemon/spearow/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -156 82 24 -197 106 32 -106 65 24 -238 172 82 0 0 0 -238 82 74 -172 65 74 230 213 180 -255 255 255 +197 180 156 +139 123 98 +72 64 56 +238 172 82 +197 106 32 +156 82 24 +106 65 24 255 213 205 255 164 139 -197 180 156 +238 82 74 +172 65 74 123 41 41 -139 123 98 -98 82 74 +255 255 255 diff --git a/graphics/pokemon/spearow/shiny.pal b/graphics/pokemon/spearow/shiny.pal index 9f44b1ba5..beaad33da 100644 --- a/graphics/pokemon/spearow/shiny.pal +++ b/graphics/pokemon/spearow/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -144 160 24 -184 168 32 -128 120 16 -224 232 80 -16 16 16 -248 216 24 -224 160 40 -224 208 176 -248 248 248 -248 248 160 -240 232 96 -201 191 147 -160 104 32 -144 136 104 -80 72 56 +152 160 208 +0 0 0 +230 222 180 +197 189 156 +139 131 98 +98 90 74 +230 238 82 +189 172 32 +148 164 24 +131 123 16 +255 255 197 +255 246 115 +255 213 0 +238 164 0 +189 106 0 +255 255 255 diff --git a/graphics/pokemon/spectrier/back.png b/graphics/pokemon/spectrier/back.png index 6c86e3b92..705ed4468 100644 Binary files a/graphics/pokemon/spectrier/back.png and b/graphics/pokemon/spectrier/back.png differ diff --git a/graphics/pokemon/spectrier/front.png b/graphics/pokemon/spectrier/front.png index f56dae948..322b4cc76 100644 Binary files a/graphics/pokemon/spectrier/front.png and b/graphics/pokemon/spectrier/front.png differ diff --git a/graphics/pokemon/spectrier/icon.png b/graphics/pokemon/spectrier/icon.png index 3632db272..3cf118e29 100644 Binary files a/graphics/pokemon/spectrier/icon.png and b/graphics/pokemon/spectrier/icon.png differ diff --git a/graphics/pokemon/spewpa/anim_front.png b/graphics/pokemon/spewpa/anim_front.png index 7c9022e7c..b760b6d64 100644 Binary files a/graphics/pokemon/spewpa/anim_front.png and b/graphics/pokemon/spewpa/anim_front.png differ diff --git a/graphics/pokemon/spewpa/back.png b/graphics/pokemon/spewpa/back.png index ef1bee1ca..d3c797432 100644 Binary files a/graphics/pokemon/spewpa/back.png and b/graphics/pokemon/spewpa/back.png differ diff --git a/graphics/pokemon/spewpa/icon.png b/graphics/pokemon/spewpa/icon.png index 1570afb8c..69a9bfbc8 100644 Binary files a/graphics/pokemon/spewpa/icon.png and b/graphics/pokemon/spewpa/icon.png differ diff --git a/graphics/pokemon/spheal/icon.png b/graphics/pokemon/spheal/icon.png index dcb069882..acb59a755 100644 Binary files a/graphics/pokemon/spheal/icon.png and b/graphics/pokemon/spheal/icon.png differ diff --git a/graphics/pokemon/spinarak/back.png b/graphics/pokemon/spinarak/back.png index 7989d50a1..15a1d8d15 100644 Binary files a/graphics/pokemon/spinarak/back.png and b/graphics/pokemon/spinarak/back.png differ diff --git a/graphics/pokemon/spinarak/icon.png b/graphics/pokemon/spinarak/icon.png index ea482afb2..0a58cafab 100644 Binary files a/graphics/pokemon/spinarak/icon.png and b/graphics/pokemon/spinarak/icon.png differ diff --git a/graphics/pokemon/spinda/icon.png b/graphics/pokemon/spinda/icon.png index 1c7c43685..9ba5ca3ec 100644 Binary files a/graphics/pokemon/spinda/icon.png and b/graphics/pokemon/spinda/icon.png differ diff --git a/graphics/pokemon/spiritomb/anim_front.png b/graphics/pokemon/spiritomb/anim_front.png index e65b2e669..8342c4220 100644 Binary files a/graphics/pokemon/spiritomb/anim_front.png and b/graphics/pokemon/spiritomb/anim_front.png differ diff --git a/graphics/pokemon/spiritomb/back.png b/graphics/pokemon/spiritomb/back.png index db229bd77..0a9870609 100644 Binary files a/graphics/pokemon/spiritomb/back.png and b/graphics/pokemon/spiritomb/back.png differ diff --git a/graphics/pokemon/spiritomb/icon.png b/graphics/pokemon/spiritomb/icon.png index df5108e69..521c66764 100644 Binary files a/graphics/pokemon/spiritomb/icon.png and b/graphics/pokemon/spiritomb/icon.png differ diff --git a/graphics/pokemon/spoink/anim_front.png b/graphics/pokemon/spoink/anim_front.png index 77f746be9..0e40632d4 100644 Binary files a/graphics/pokemon/spoink/anim_front.png and b/graphics/pokemon/spoink/anim_front.png differ diff --git a/graphics/pokemon/spoink/back.png b/graphics/pokemon/spoink/back.png index 61227e4ad..8c873485f 100644 Binary files a/graphics/pokemon/spoink/back.png and b/graphics/pokemon/spoink/back.png differ diff --git a/graphics/pokemon/spoink/icon.png b/graphics/pokemon/spoink/icon.png index a89fe3f81..8ce2c9467 100644 Binary files a/graphics/pokemon/spoink/icon.png and b/graphics/pokemon/spoink/icon.png differ diff --git a/graphics/pokemon/spritzee/anim_front.png b/graphics/pokemon/spritzee/anim_front.png index 12449b206..5e6e4deb6 100644 Binary files a/graphics/pokemon/spritzee/anim_front.png and b/graphics/pokemon/spritzee/anim_front.png differ diff --git a/graphics/pokemon/spritzee/back.png b/graphics/pokemon/spritzee/back.png index 2395e2c19..b6bc7f8d8 100644 Binary files a/graphics/pokemon/spritzee/back.png and b/graphics/pokemon/spritzee/back.png differ diff --git a/graphics/pokemon/spritzee/icon.png b/graphics/pokemon/spritzee/icon.png index 78bcbc589..834639435 100644 Binary files a/graphics/pokemon/spritzee/icon.png and b/graphics/pokemon/spritzee/icon.png differ diff --git a/graphics/pokemon/squirtle/anim_front.png b/graphics/pokemon/squirtle/anim_front.png index fae3743a0..fb84be176 100644 Binary files a/graphics/pokemon/squirtle/anim_front.png and b/graphics/pokemon/squirtle/anim_front.png differ diff --git a/graphics/pokemon/squirtle/back.png b/graphics/pokemon/squirtle/back.png index 75f4e4df3..6158ad507 100644 Binary files a/graphics/pokemon/squirtle/back.png and b/graphics/pokemon/squirtle/back.png differ diff --git a/graphics/pokemon/squirtle/icon.png b/graphics/pokemon/squirtle/icon.png index fce1b970b..c014ca89a 100644 Binary files a/graphics/pokemon/squirtle/icon.png and b/graphics/pokemon/squirtle/icon.png differ diff --git a/graphics/pokemon/squirtle/normal.pal b/graphics/pokemon/squirtle/normal.pal index b2282cee8..8be693421 100644 --- a/graphics/pokemon/squirtle/normal.pal +++ b/graphics/pokemon/squirtle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -90 156 164 -41 115 131 -180 230 238 -139 197 205 -16 16 16 -208 200 200 -248 248 248 -131 41 0 -88 64 32 -189 106 0 -205 123 41 -230 172 90 -255 213 106 -98 41 0 +255 255 255 +205 197 197 213 148 82 +189 106 0 +98 41 0 +255 230 156 +255 213 106 +230 172 90 +205 123 41 +123 49 8 +176 224 232 +136 192 200 +88 152 160 +40 112 128 +16 16 16 diff --git a/graphics/pokemon/squirtle/shiny.pal b/graphics/pokemon/squirtle/shiny.pal index ff20b8f51..7ae46ab43 100644 --- a/graphics/pokemon/squirtle/shiny.pal +++ b/graphics/pokemon/squirtle/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -120 160 224 -64 96 128 -208 232 248 -176 200 248 +208 152 160 +255 255 255 +213 205 205 +156 222 123 +90 172 41 +16 90 16 +255 246 148 +255 230 98 +230 189 82 +205 139 32 +131 57 0 +230 246 255 +180 205 255 +123 164 230 +65 98 131 16 16 16 -208 200 200 -248 248 248 -128 56 0 -128 56 0 -88 168 40 -200 136 32 -224 184 80 -248 240 144 -16 88 16 -152 216 120 diff --git a/graphics/pokemon/stakataka/back.png b/graphics/pokemon/stakataka/back.png index d0d0b5df7..e009b0962 100644 Binary files a/graphics/pokemon/stakataka/back.png and b/graphics/pokemon/stakataka/back.png differ diff --git a/graphics/pokemon/stakataka/front.png b/graphics/pokemon/stakataka/front.png index dd6ad4274..fd73e5110 100644 Binary files a/graphics/pokemon/stakataka/front.png and b/graphics/pokemon/stakataka/front.png differ diff --git a/graphics/pokemon/stakataka/icon.png b/graphics/pokemon/stakataka/icon.png index cae7f946f..ad79ba34d 100644 Binary files a/graphics/pokemon/stakataka/icon.png and b/graphics/pokemon/stakataka/icon.png differ diff --git a/graphics/pokemon/stantler/anim_front.png b/graphics/pokemon/stantler/anim_front.png index 7ebb57785..e0ce71ad7 100644 Binary files a/graphics/pokemon/stantler/anim_front.png and b/graphics/pokemon/stantler/anim_front.png differ diff --git a/graphics/pokemon/stantler/back.png b/graphics/pokemon/stantler/back.png index b0c4bda1a..6964b2953 100644 Binary files a/graphics/pokemon/stantler/back.png and b/graphics/pokemon/stantler/back.png differ diff --git a/graphics/pokemon/stantler/icon.png b/graphics/pokemon/stantler/icon.png index 5aa4a28e5..cb404c89e 100644 Binary files a/graphics/pokemon/stantler/icon.png and b/graphics/pokemon/stantler/icon.png differ diff --git a/graphics/pokemon/staraptor/anim_front.png b/graphics/pokemon/staraptor/anim_front.png index 9a649110a..4620e6cfd 100644 Binary files a/graphics/pokemon/staraptor/anim_front.png and b/graphics/pokemon/staraptor/anim_front.png differ diff --git a/graphics/pokemon/staraptor/back.png b/graphics/pokemon/staraptor/back.png index 9352eb08d..e8d567fe5 100644 Binary files a/graphics/pokemon/staraptor/back.png and b/graphics/pokemon/staraptor/back.png differ diff --git a/graphics/pokemon/staravia/anim_front.png b/graphics/pokemon/staravia/anim_front.png index a5db43400..5f8db161d 100644 Binary files a/graphics/pokemon/staravia/anim_front.png and b/graphics/pokemon/staravia/anim_front.png differ diff --git a/graphics/pokemon/starly/icon.png b/graphics/pokemon/starly/icon.png index 1056f2d1a..7ac47068d 100644 Binary files a/graphics/pokemon/starly/icon.png and b/graphics/pokemon/starly/icon.png differ diff --git a/graphics/pokemon/starmie/back.png b/graphics/pokemon/starmie/back.png index 589c49c31..e80a99ec2 100644 Binary files a/graphics/pokemon/starmie/back.png and b/graphics/pokemon/starmie/back.png differ diff --git a/graphics/pokemon/starmie/icon.png b/graphics/pokemon/starmie/icon.png index 06bbcfce1..defadde9e 100644 Binary files a/graphics/pokemon/starmie/icon.png and b/graphics/pokemon/starmie/icon.png differ diff --git a/graphics/pokemon/staryu/back.png b/graphics/pokemon/staryu/back.png index e10528e22..4715b18e6 100644 Binary files a/graphics/pokemon/staryu/back.png and b/graphics/pokemon/staryu/back.png differ diff --git a/graphics/pokemon/staryu/icon.png b/graphics/pokemon/staryu/icon.png index 1c91256b2..44f680d84 100644 Binary files a/graphics/pokemon/staryu/icon.png and b/graphics/pokemon/staryu/icon.png differ diff --git a/graphics/pokemon/steelix/anim_front.png b/graphics/pokemon/steelix/anim_front.png index d5886a7c7..206cf665f 100644 Binary files a/graphics/pokemon/steelix/anim_front.png and b/graphics/pokemon/steelix/anim_front.png differ diff --git a/graphics/pokemon/steelix/back.png b/graphics/pokemon/steelix/back.png index a92a444a4..19fe60a4d 100644 Binary files a/graphics/pokemon/steelix/back.png and b/graphics/pokemon/steelix/back.png differ diff --git a/graphics/pokemon/steelix/mega/back.png b/graphics/pokemon/steelix/mega/back.png index 87dfcfd35..8e773c0a4 100644 Binary files a/graphics/pokemon/steelix/mega/back.png and b/graphics/pokemon/steelix/mega/back.png differ diff --git a/graphics/pokemon/steelix/mega/front.png b/graphics/pokemon/steelix/mega/front.png index b60d5835a..968ec9676 100644 Binary files a/graphics/pokemon/steelix/mega/front.png and b/graphics/pokemon/steelix/mega/front.png differ diff --git a/graphics/pokemon/steelix/mega/icon.png b/graphics/pokemon/steelix/mega/icon.png index 9a0d8ad4a..588b9a6d2 100644 Binary files a/graphics/pokemon/steelix/mega/icon.png and b/graphics/pokemon/steelix/mega/icon.png differ diff --git a/graphics/pokemon/steenee/back.png b/graphics/pokemon/steenee/back.png index ae80fedc3..9c40a1729 100644 Binary files a/graphics/pokemon/steenee/back.png and b/graphics/pokemon/steenee/back.png differ diff --git a/graphics/pokemon/steenee/front.png b/graphics/pokemon/steenee/front.png index 14c9fc966..77ae6e0f2 100644 Binary files a/graphics/pokemon/steenee/front.png and b/graphics/pokemon/steenee/front.png differ diff --git a/graphics/pokemon/steenee/icon.png b/graphics/pokemon/steenee/icon.png index 04fb29494..80531a631 100644 Binary files a/graphics/pokemon/steenee/icon.png and b/graphics/pokemon/steenee/icon.png differ diff --git a/graphics/pokemon/stonjourner/back.png b/graphics/pokemon/stonjourner/back.png index 78c401f82..faf01d9d5 100644 Binary files a/graphics/pokemon/stonjourner/back.png and b/graphics/pokemon/stonjourner/back.png differ diff --git a/graphics/pokemon/stonjourner/front.png b/graphics/pokemon/stonjourner/front.png index ef55e5b1a..18bff2dc8 100644 Binary files a/graphics/pokemon/stonjourner/front.png and b/graphics/pokemon/stonjourner/front.png differ diff --git a/graphics/pokemon/stonjourner/icon.png b/graphics/pokemon/stonjourner/icon.png index 70e252186..8fadb8567 100644 Binary files a/graphics/pokemon/stonjourner/icon.png and b/graphics/pokemon/stonjourner/icon.png differ diff --git a/graphics/pokemon/stoutland/anim_front.png b/graphics/pokemon/stoutland/anim_front.png index 53913444d..256f3911a 100644 Binary files a/graphics/pokemon/stoutland/anim_front.png and b/graphics/pokemon/stoutland/anim_front.png differ diff --git a/graphics/pokemon/stoutland/back.png b/graphics/pokemon/stoutland/back.png index a9eede155..1051ada0d 100644 Binary files a/graphics/pokemon/stoutland/back.png and b/graphics/pokemon/stoutland/back.png differ diff --git a/graphics/pokemon/stoutland/icon.png b/graphics/pokemon/stoutland/icon.png index fc71ba36c..be14fab16 100644 Binary files a/graphics/pokemon/stoutland/icon.png and b/graphics/pokemon/stoutland/icon.png differ diff --git a/graphics/pokemon/stufful/back.png b/graphics/pokemon/stufful/back.png index bb5074cf0..92ebb8124 100644 Binary files a/graphics/pokemon/stufful/back.png and b/graphics/pokemon/stufful/back.png differ diff --git a/graphics/pokemon/stufful/icon.png b/graphics/pokemon/stufful/icon.png index 8fd6d79a4..de35247ae 100644 Binary files a/graphics/pokemon/stufful/icon.png and b/graphics/pokemon/stufful/icon.png differ diff --git a/graphics/pokemon/stunfisk/anim_front.png b/graphics/pokemon/stunfisk/anim_front.png index d3bea2fd5..769ce41b7 100644 Binary files a/graphics/pokemon/stunfisk/anim_front.png and b/graphics/pokemon/stunfisk/anim_front.png differ diff --git a/graphics/pokemon/stunfisk/back.png b/graphics/pokemon/stunfisk/back.png index e73df3e2d..f3193ded2 100644 Binary files a/graphics/pokemon/stunfisk/back.png and b/graphics/pokemon/stunfisk/back.png differ diff --git a/graphics/pokemon/stunfisk/galarian/back.png b/graphics/pokemon/stunfisk/galarian/back.png index cf5c50f4b..c87160e88 100644 Binary files a/graphics/pokemon/stunfisk/galarian/back.png and b/graphics/pokemon/stunfisk/galarian/back.png differ diff --git a/graphics/pokemon/stunfisk/galarian/front.png b/graphics/pokemon/stunfisk/galarian/front.png index 1f9b32629..921888d6c 100644 Binary files a/graphics/pokemon/stunfisk/galarian/front.png and b/graphics/pokemon/stunfisk/galarian/front.png differ diff --git a/graphics/pokemon/stunfisk/galarian/icon.png b/graphics/pokemon/stunfisk/galarian/icon.png index 2c9970065..729a18bf1 100644 Binary files a/graphics/pokemon/stunfisk/galarian/icon.png and b/graphics/pokemon/stunfisk/galarian/icon.png differ diff --git a/graphics/pokemon/stunfisk/icon.png b/graphics/pokemon/stunfisk/icon.png index 27908a996..d2772f347 100644 Binary files a/graphics/pokemon/stunfisk/icon.png and b/graphics/pokemon/stunfisk/icon.png differ diff --git a/graphics/pokemon/stunky/anim_front.png b/graphics/pokemon/stunky/anim_front.png index b852861ed..2463e0b8d 100644 Binary files a/graphics/pokemon/stunky/anim_front.png and b/graphics/pokemon/stunky/anim_front.png differ diff --git a/graphics/pokemon/stunky/back.png b/graphics/pokemon/stunky/back.png index b28e9bb17..5b30a9ca2 100644 Binary files a/graphics/pokemon/stunky/back.png and b/graphics/pokemon/stunky/back.png differ diff --git a/graphics/pokemon/stunky/icon.png b/graphics/pokemon/stunky/icon.png index c2032493d..013841bff 100644 Binary files a/graphics/pokemon/stunky/icon.png and b/graphics/pokemon/stunky/icon.png differ diff --git a/graphics/pokemon/sudowoodo/anim_front.png b/graphics/pokemon/sudowoodo/anim_front.png index 371334960..3eefcba5f 100644 Binary files a/graphics/pokemon/sudowoodo/anim_front.png and b/graphics/pokemon/sudowoodo/anim_front.png differ diff --git a/graphics/pokemon/sudowoodo/back.png b/graphics/pokemon/sudowoodo/back.png index 4c7ae8bab..777da6846 100644 Binary files a/graphics/pokemon/sudowoodo/back.png and b/graphics/pokemon/sudowoodo/back.png differ diff --git a/graphics/pokemon/sudowoodo/icon.png b/graphics/pokemon/sudowoodo/icon.png index 8b6845a8e..942b841d5 100644 Binary files a/graphics/pokemon/sudowoodo/icon.png and b/graphics/pokemon/sudowoodo/icon.png differ diff --git a/graphics/pokemon/suicune/anim_front.png b/graphics/pokemon/suicune/anim_front.png index 4f4b84be3..83c95cc1b 100644 Binary files a/graphics/pokemon/suicune/anim_front.png and b/graphics/pokemon/suicune/anim_front.png differ diff --git a/graphics/pokemon/suicune/back.png b/graphics/pokemon/suicune/back.png index 54c393a0d..71030f399 100644 Binary files a/graphics/pokemon/suicune/back.png and b/graphics/pokemon/suicune/back.png differ diff --git a/graphics/pokemon/sunflora/anim_front.png b/graphics/pokemon/sunflora/anim_front.png index 872995742..ce54002b8 100644 Binary files a/graphics/pokemon/sunflora/anim_front.png and b/graphics/pokemon/sunflora/anim_front.png differ diff --git a/graphics/pokemon/sunflora/back.png b/graphics/pokemon/sunflora/back.png index 031a9981f..aafbc2bf0 100644 Binary files a/graphics/pokemon/sunflora/back.png and b/graphics/pokemon/sunflora/back.png differ diff --git a/graphics/pokemon/sunflora/icon.png b/graphics/pokemon/sunflora/icon.png index c39ed2d4e..50bfb82f2 100644 Binary files a/graphics/pokemon/sunflora/icon.png and b/graphics/pokemon/sunflora/icon.png differ diff --git a/graphics/pokemon/sunkern/anim_front.png b/graphics/pokemon/sunkern/anim_front.png index b9b5570bc..ec83fa963 100644 Binary files a/graphics/pokemon/sunkern/anim_front.png and b/graphics/pokemon/sunkern/anim_front.png differ diff --git a/graphics/pokemon/sunkern/back.png b/graphics/pokemon/sunkern/back.png index ca7ad41e1..a555fdf52 100644 Binary files a/graphics/pokemon/sunkern/back.png and b/graphics/pokemon/sunkern/back.png differ diff --git a/graphics/pokemon/sunkern/icon.png b/graphics/pokemon/sunkern/icon.png index b2be939da..5c769947a 100644 Binary files a/graphics/pokemon/sunkern/icon.png and b/graphics/pokemon/sunkern/icon.png differ diff --git a/graphics/pokemon/surskit/anim_front.png b/graphics/pokemon/surskit/anim_front.png index fd966ffa6..9745c2eb0 100644 Binary files a/graphics/pokemon/surskit/anim_front.png and b/graphics/pokemon/surskit/anim_front.png differ diff --git a/graphics/pokemon/surskit/back.png b/graphics/pokemon/surskit/back.png index fe06f90ca..4e52a9315 100644 Binary files a/graphics/pokemon/surskit/back.png and b/graphics/pokemon/surskit/back.png differ diff --git a/graphics/pokemon/surskit/icon.png b/graphics/pokemon/surskit/icon.png index cc4e3f23e..cce700e6d 100644 Binary files a/graphics/pokemon/surskit/icon.png and b/graphics/pokemon/surskit/icon.png differ diff --git a/graphics/pokemon/swablu/anim_front.png b/graphics/pokemon/swablu/anim_front.png index 46d96847e..43c738b52 100644 Binary files a/graphics/pokemon/swablu/anim_front.png and b/graphics/pokemon/swablu/anim_front.png differ diff --git a/graphics/pokemon/swadloon/anim_front.png b/graphics/pokemon/swadloon/anim_front.png index a71fe43ba..818802b1f 100644 Binary files a/graphics/pokemon/swadloon/anim_front.png and b/graphics/pokemon/swadloon/anim_front.png differ diff --git a/graphics/pokemon/swadloon/back.png b/graphics/pokemon/swadloon/back.png index affc20a06..f1f6961ee 100644 Binary files a/graphics/pokemon/swadloon/back.png and b/graphics/pokemon/swadloon/back.png differ diff --git a/graphics/pokemon/swadloon/icon.png b/graphics/pokemon/swadloon/icon.png index 12d071651..c477fb8dd 100644 Binary files a/graphics/pokemon/swadloon/icon.png and b/graphics/pokemon/swadloon/icon.png differ diff --git a/graphics/pokemon/swalot/anim_front.png b/graphics/pokemon/swalot/anim_front.png index f00eea3f0..20e234a6c 100644 Binary files a/graphics/pokemon/swalot/anim_front.png and b/graphics/pokemon/swalot/anim_front.png differ diff --git a/graphics/pokemon/swampert/anim_front.png b/graphics/pokemon/swampert/anim_front.png index c85c936ab..26eedc617 100644 Binary files a/graphics/pokemon/swampert/anim_front.png and b/graphics/pokemon/swampert/anim_front.png differ diff --git a/graphics/pokemon/swampert/back.png b/graphics/pokemon/swampert/back.png index 557249cb3..f00f87b7f 100644 Binary files a/graphics/pokemon/swampert/back.png and b/graphics/pokemon/swampert/back.png differ diff --git a/graphics/pokemon/swampert/icon.png b/graphics/pokemon/swampert/icon.png index 814f79ab1..e545791f7 100644 Binary files a/graphics/pokemon/swampert/icon.png and b/graphics/pokemon/swampert/icon.png differ diff --git a/graphics/pokemon/swampert/mega/back.png b/graphics/pokemon/swampert/mega/back.png index 7d2693a24..bda6ad89e 100644 Binary files a/graphics/pokemon/swampert/mega/back.png and b/graphics/pokemon/swampert/mega/back.png differ diff --git a/graphics/pokemon/swampert/mega/front.png b/graphics/pokemon/swampert/mega/front.png index c7c02ceb1..c31891c50 100644 Binary files a/graphics/pokemon/swampert/mega/front.png and b/graphics/pokemon/swampert/mega/front.png differ diff --git a/graphics/pokemon/swampert/mega/icon.png b/graphics/pokemon/swampert/mega/icon.png index 847f10fb5..63b1ef079 100644 Binary files a/graphics/pokemon/swampert/mega/icon.png and b/graphics/pokemon/swampert/mega/icon.png differ diff --git a/graphics/pokemon/swanna/back.png b/graphics/pokemon/swanna/back.png index 783a4276f..bb657bb5e 100644 Binary files a/graphics/pokemon/swanna/back.png and b/graphics/pokemon/swanna/back.png differ diff --git a/graphics/pokemon/swanna/icon.png b/graphics/pokemon/swanna/icon.png index c34bc0045..e96ba22ca 100644 Binary files a/graphics/pokemon/swanna/icon.png and b/graphics/pokemon/swanna/icon.png differ diff --git a/graphics/pokemon/swellow/back.png b/graphics/pokemon/swellow/back.png index 3da736c47..f7b06a1f4 100644 Binary files a/graphics/pokemon/swellow/back.png and b/graphics/pokemon/swellow/back.png differ diff --git a/graphics/pokemon/swellow/icon.png b/graphics/pokemon/swellow/icon.png index 9615381a9..52b3f560b 100644 Binary files a/graphics/pokemon/swellow/icon.png and b/graphics/pokemon/swellow/icon.png differ diff --git a/graphics/pokemon/swinub/back.png b/graphics/pokemon/swinub/back.png index 7f75feb37..39bd6ebfa 100644 Binary files a/graphics/pokemon/swinub/back.png and b/graphics/pokemon/swinub/back.png differ diff --git a/graphics/pokemon/swinub/icon.png b/graphics/pokemon/swinub/icon.png index e6bd2126d..59f0779b4 100644 Binary files a/graphics/pokemon/swinub/icon.png and b/graphics/pokemon/swinub/icon.png differ diff --git a/graphics/pokemon/swirlix/anim_front.png b/graphics/pokemon/swirlix/anim_front.png index c6eb29293..1b64137bd 100644 Binary files a/graphics/pokemon/swirlix/anim_front.png and b/graphics/pokemon/swirlix/anim_front.png differ diff --git a/graphics/pokemon/swirlix/back.png b/graphics/pokemon/swirlix/back.png index b5712f8df..02f7f9b4f 100644 Binary files a/graphics/pokemon/swirlix/back.png and b/graphics/pokemon/swirlix/back.png differ diff --git a/graphics/pokemon/swirlix/icon.png b/graphics/pokemon/swirlix/icon.png index f172a6071..14ebf39b9 100644 Binary files a/graphics/pokemon/swirlix/icon.png and b/graphics/pokemon/swirlix/icon.png differ diff --git a/graphics/pokemon/swoobat/anim_front.png b/graphics/pokemon/swoobat/anim_front.png index 7580b1f9a..2b57a2e43 100644 Binary files a/graphics/pokemon/swoobat/anim_front.png and b/graphics/pokemon/swoobat/anim_front.png differ diff --git a/graphics/pokemon/swoobat/back.png b/graphics/pokemon/swoobat/back.png index cb31659de..20fef6994 100644 Binary files a/graphics/pokemon/swoobat/back.png and b/graphics/pokemon/swoobat/back.png differ diff --git a/graphics/pokemon/swoobat/icon.png b/graphics/pokemon/swoobat/icon.png index 2fa0fa314..45a78d583 100644 Binary files a/graphics/pokemon/swoobat/icon.png and b/graphics/pokemon/swoobat/icon.png differ diff --git a/graphics/pokemon/sylveon/anim_front.png b/graphics/pokemon/sylveon/anim_front.png index 5665f4ad4..a840f7cf8 100644 Binary files a/graphics/pokemon/sylveon/anim_front.png and b/graphics/pokemon/sylveon/anim_front.png differ diff --git a/graphics/pokemon/sylveon/back.png b/graphics/pokemon/sylveon/back.png index 634305e09..3eb857769 100644 Binary files a/graphics/pokemon/sylveon/back.png and b/graphics/pokemon/sylveon/back.png differ diff --git a/graphics/pokemon/sylveon/icon.png b/graphics/pokemon/sylveon/icon.png index 1c62d466d..717e4004a 100644 Binary files a/graphics/pokemon/sylveon/icon.png and b/graphics/pokemon/sylveon/icon.png differ diff --git a/graphics/pokemon/taillow/back.png b/graphics/pokemon/taillow/back.png index 463913226..5af45bc2e 100644 Binary files a/graphics/pokemon/taillow/back.png and b/graphics/pokemon/taillow/back.png differ diff --git a/graphics/pokemon/taillow/icon.png b/graphics/pokemon/taillow/icon.png index ec7ad8fdd..9df2e39b5 100644 Binary files a/graphics/pokemon/taillow/icon.png and b/graphics/pokemon/taillow/icon.png differ diff --git a/graphics/pokemon/talonflame/anim_front.png b/graphics/pokemon/talonflame/anim_front.png index 0c6e6e560..db505ac63 100644 Binary files a/graphics/pokemon/talonflame/anim_front.png and b/graphics/pokemon/talonflame/anim_front.png differ diff --git a/graphics/pokemon/talonflame/back.png b/graphics/pokemon/talonflame/back.png index e3f004d92..e80745d21 100644 Binary files a/graphics/pokemon/talonflame/back.png and b/graphics/pokemon/talonflame/back.png differ diff --git a/graphics/pokemon/talonflame/icon.png b/graphics/pokemon/talonflame/icon.png index dd0e2dc4e..622e77f21 100644 Binary files a/graphics/pokemon/talonflame/icon.png and b/graphics/pokemon/talonflame/icon.png differ diff --git a/graphics/pokemon/tangela/back.png b/graphics/pokemon/tangela/back.png index 4ee7c5cb5..0cec14c7d 100644 Binary files a/graphics/pokemon/tangela/back.png and b/graphics/pokemon/tangela/back.png differ diff --git a/graphics/pokemon/tangela/icon.png b/graphics/pokemon/tangela/icon.png index ab86e4482..bdb6f8cb0 100644 Binary files a/graphics/pokemon/tangela/icon.png and b/graphics/pokemon/tangela/icon.png differ diff --git a/graphics/pokemon/tangrowth/anim_front.png b/graphics/pokemon/tangrowth/anim_front.png index ffa498c7b..564dc5626 100644 Binary files a/graphics/pokemon/tangrowth/anim_front.png and b/graphics/pokemon/tangrowth/anim_front.png differ diff --git a/graphics/pokemon/tangrowth/back.png b/graphics/pokemon/tangrowth/back.png index 69faa8be3..61a6659d8 100644 Binary files a/graphics/pokemon/tangrowth/back.png and b/graphics/pokemon/tangrowth/back.png differ diff --git a/graphics/pokemon/tangrowth/icon.png b/graphics/pokemon/tangrowth/icon.png index 590ccc2b8..4e12c01e9 100644 Binary files a/graphics/pokemon/tangrowth/icon.png and b/graphics/pokemon/tangrowth/icon.png differ diff --git a/graphics/pokemon/tapu_bulu/anim_front.png b/graphics/pokemon/tapu_bulu/anim_front.png index 3df2f77b2..e5f6355bb 100644 Binary files a/graphics/pokemon/tapu_bulu/anim_front.png and b/graphics/pokemon/tapu_bulu/anim_front.png differ diff --git a/graphics/pokemon/tapu_bulu/back.png b/graphics/pokemon/tapu_bulu/back.png index d3788c044..df7f6bd6f 100644 Binary files a/graphics/pokemon/tapu_bulu/back.png and b/graphics/pokemon/tapu_bulu/back.png differ diff --git a/graphics/pokemon/tapu_bulu/icon.png b/graphics/pokemon/tapu_bulu/icon.png index 93f5f2a05..69261acb3 100644 Binary files a/graphics/pokemon/tapu_bulu/icon.png and b/graphics/pokemon/tapu_bulu/icon.png differ diff --git a/graphics/pokemon/tapu_fini/anim_front.png b/graphics/pokemon/tapu_fini/anim_front.png index c5dfc7fa3..ca583faab 100644 Binary files a/graphics/pokemon/tapu_fini/anim_front.png and b/graphics/pokemon/tapu_fini/anim_front.png differ diff --git a/graphics/pokemon/tapu_fini/back.png b/graphics/pokemon/tapu_fini/back.png index c371524b7..5ca65ca78 100644 Binary files a/graphics/pokemon/tapu_fini/back.png and b/graphics/pokemon/tapu_fini/back.png differ diff --git a/graphics/pokemon/tapu_fini/icon.png b/graphics/pokemon/tapu_fini/icon.png index 740b5c2c0..fcd74bbd1 100644 Binary files a/graphics/pokemon/tapu_fini/icon.png and b/graphics/pokemon/tapu_fini/icon.png differ diff --git a/graphics/pokemon/tapu_koko/anim_front.png b/graphics/pokemon/tapu_koko/anim_front.png index 31f12b859..f98c83b47 100644 Binary files a/graphics/pokemon/tapu_koko/anim_front.png and b/graphics/pokemon/tapu_koko/anim_front.png differ diff --git a/graphics/pokemon/tapu_koko/back.png b/graphics/pokemon/tapu_koko/back.png index c546fdcf4..b18e937ea 100644 Binary files a/graphics/pokemon/tapu_koko/back.png and b/graphics/pokemon/tapu_koko/back.png differ diff --git a/graphics/pokemon/tapu_koko/icon.png b/graphics/pokemon/tapu_koko/icon.png index 645f6e84d..73470d55a 100644 Binary files a/graphics/pokemon/tapu_koko/icon.png and b/graphics/pokemon/tapu_koko/icon.png differ diff --git a/graphics/pokemon/tapu_lele/anim_front.png b/graphics/pokemon/tapu_lele/anim_front.png index 78b7e99cc..93a703879 100644 Binary files a/graphics/pokemon/tapu_lele/anim_front.png and b/graphics/pokemon/tapu_lele/anim_front.png differ diff --git a/graphics/pokemon/tapu_lele/back.png b/graphics/pokemon/tapu_lele/back.png index eb013a3b3..b251ad107 100644 Binary files a/graphics/pokemon/tapu_lele/back.png and b/graphics/pokemon/tapu_lele/back.png differ diff --git a/graphics/pokemon/tapu_lele/icon.png b/graphics/pokemon/tapu_lele/icon.png index 4340bf0d2..e92e3fd3f 100644 Binary files a/graphics/pokemon/tapu_lele/icon.png and b/graphics/pokemon/tapu_lele/icon.png differ diff --git a/graphics/pokemon/tauros/back.png b/graphics/pokemon/tauros/back.png index feeb4d57d..774f70a88 100644 Binary files a/graphics/pokemon/tauros/back.png and b/graphics/pokemon/tauros/back.png differ diff --git a/graphics/pokemon/teddiursa/back.png b/graphics/pokemon/teddiursa/back.png index 47278f283..fc4f9e9ce 100644 Binary files a/graphics/pokemon/teddiursa/back.png and b/graphics/pokemon/teddiursa/back.png differ diff --git a/graphics/pokemon/teddiursa/icon.png b/graphics/pokemon/teddiursa/icon.png index 04d832b83..788734b15 100644 Binary files a/graphics/pokemon/teddiursa/icon.png and b/graphics/pokemon/teddiursa/icon.png differ diff --git a/graphics/pokemon/tentacool/anim_front.png b/graphics/pokemon/tentacool/anim_front.png index 14c2c916f..ad3f1fa28 100644 Binary files a/graphics/pokemon/tentacool/anim_front.png and b/graphics/pokemon/tentacool/anim_front.png differ diff --git a/graphics/pokemon/tentacool/back.png b/graphics/pokemon/tentacool/back.png index 7bee70568..3847409a4 100644 Binary files a/graphics/pokemon/tentacool/back.png and b/graphics/pokemon/tentacool/back.png differ diff --git a/graphics/pokemon/tentacool/normal.pal b/graphics/pokemon/tentacool/normal.pal index ab750d2ed..be1a6b52b 100644 --- a/graphics/pokemon/tentacool/normal.pal +++ b/graphics/pokemon/tentacool/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 82 131 -106 16 16 -131 213 246 -106 180 230 -180 41 32 -255 255 255 -255 197 189 -255 82 74 -65 148 172 0 0 0 +255 255 255 213 213 213 +32 82 131 +65 148 172 +106 180 230 +131 213 246 +106 16 16 +180 41 32 +255 82 74 +255 197 189 82 82 32 -213 197 148 131 131 65 180 172 115 +213 197 148 diff --git a/graphics/pokemon/tentacool/shiny.pal b/graphics/pokemon/tentacool/shiny.pal index 57149a02b..2059850de 100644 --- a/graphics/pokemon/tentacool/shiny.pal +++ b/graphics/pokemon/tentacool/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 +208 152 160 +0 0 0 +255 255 255 +213 213 213 80 72 112 -0 96 24 -224 208 248 -192 176 224 -0 152 80 -248 248 248 -120 240 200 -24 192 136 144 120 168 -16 16 16 -208 208 208 -80 80 48 -208 192 144 -128 128 64 -176 168 112 +197 180 230 +230 213 255 +0 98 24 +0 156 82 +24 197 139 +74 246 189 +82 82 32 +131 131 65 +180 172 115 +213 197 148 diff --git a/graphics/pokemon/tentacruel/anim_front.png b/graphics/pokemon/tentacruel/anim_front.png index be51d3443..b4c5ed300 100644 Binary files a/graphics/pokemon/tentacruel/anim_front.png and b/graphics/pokemon/tentacruel/anim_front.png differ diff --git a/graphics/pokemon/tentacruel/back.png b/graphics/pokemon/tentacruel/back.png index 1bb5b0fff..407e89132 100644 Binary files a/graphics/pokemon/tentacruel/back.png and b/graphics/pokemon/tentacruel/back.png differ diff --git a/graphics/pokemon/tentacruel/normal.pal b/graphics/pokemon/tentacruel/normal.pal index 878043437..1f8e690b4 100644 --- a/graphics/pokemon/tentacruel/normal.pal +++ b/graphics/pokemon/tentacruel/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 82 131 -131 205 230 +255 255 255 +255 189 172 +246 65 82 +180 41 32 131 16 16 +168 160 176 +128 120 136 +120 112 120 +96 96 104 +200 200 200 +131 205 230 106 180 230 65 148 172 +32 82 131 16 16 16 -246 65 82 -255 189 172 -255 255 255 -180 41 32 -213 213 213 -82 82 32 -180 172 115 -131 131 65 -230 213 164 diff --git a/graphics/pokemon/tentacruel/shiny.pal b/graphics/pokemon/tentacruel/shiny.pal index bfd3f5057..4849df7cd 100644 --- a/graphics/pokemon/tentacruel/shiny.pal +++ b/graphics/pokemon/tentacruel/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -248 160 176 -56 72 112 -192 208 248 -64 80 32 -152 168 224 -120 128 192 +208 152 160 +255 255 255 +189 230 172 +148 197 131 +98 156 90 +82 98 41 +238 213 164 +189 172 115 +139 131 65 +90 82 32 +213 213 213 +205 230 255 +156 172 230 +123 131 197 +82 98 156 16 16 16 -144 192 128 -200 224 184 -248 248 248 -80 152 72 -208 208 208 -88 80 40 -184 168 112 -136 128 64 -232 208 160 diff --git a/graphics/pokemon/tepig/anim_front.png b/graphics/pokemon/tepig/anim_front.png index 57eff5d22..e2e6da880 100644 Binary files a/graphics/pokemon/tepig/anim_front.png and b/graphics/pokemon/tepig/anim_front.png differ diff --git a/graphics/pokemon/tepig/back.png b/graphics/pokemon/tepig/back.png index cf9e14660..1e150f96c 100644 Binary files a/graphics/pokemon/tepig/back.png and b/graphics/pokemon/tepig/back.png differ diff --git a/graphics/pokemon/tepig/icon.png b/graphics/pokemon/tepig/icon.png index 6daf46186..13ab925f1 100644 Binary files a/graphics/pokemon/tepig/icon.png and b/graphics/pokemon/tepig/icon.png differ diff --git a/graphics/pokemon/terrakion/anim_front.png b/graphics/pokemon/terrakion/anim_front.png index 604712945..ec6c37876 100644 Binary files a/graphics/pokemon/terrakion/anim_front.png and b/graphics/pokemon/terrakion/anim_front.png differ diff --git a/graphics/pokemon/terrakion/back.png b/graphics/pokemon/terrakion/back.png index 9ec0ab2fe..fe4d4ee06 100644 Binary files a/graphics/pokemon/terrakion/back.png and b/graphics/pokemon/terrakion/back.png differ diff --git a/graphics/pokemon/terrakion/icon.png b/graphics/pokemon/terrakion/icon.png index 6a9b132bf..b146d5ad4 100644 Binary files a/graphics/pokemon/terrakion/icon.png and b/graphics/pokemon/terrakion/icon.png differ diff --git a/graphics/pokemon/thievul/back.png b/graphics/pokemon/thievul/back.png index 4d792471c..7658e0ec2 100644 Binary files a/graphics/pokemon/thievul/back.png and b/graphics/pokemon/thievul/back.png differ diff --git a/graphics/pokemon/thievul/front.png b/graphics/pokemon/thievul/front.png index 7db853327..447aeaf02 100644 Binary files a/graphics/pokemon/thievul/front.png and b/graphics/pokemon/thievul/front.png differ diff --git a/graphics/pokemon/thievul/icon.png b/graphics/pokemon/thievul/icon.png index 322f316cc..b96aa7477 100644 Binary files a/graphics/pokemon/thievul/icon.png and b/graphics/pokemon/thievul/icon.png differ diff --git a/graphics/pokemon/throh/anim_front.png b/graphics/pokemon/throh/anim_front.png index 267e718b9..d99b04374 100644 Binary files a/graphics/pokemon/throh/anim_front.png and b/graphics/pokemon/throh/anim_front.png differ diff --git a/graphics/pokemon/throh/back.png b/graphics/pokemon/throh/back.png index bc4caa45f..f000479fd 100644 Binary files a/graphics/pokemon/throh/back.png and b/graphics/pokemon/throh/back.png differ diff --git a/graphics/pokemon/throh/icon.png b/graphics/pokemon/throh/icon.png index 65f641b80..0d7c78776 100644 Binary files a/graphics/pokemon/throh/icon.png and b/graphics/pokemon/throh/icon.png differ diff --git a/graphics/pokemon/thundurus/anim_front.png b/graphics/pokemon/thundurus/anim_front.png index e6ada5d15..1a16e76c2 100644 Binary files a/graphics/pokemon/thundurus/anim_front.png and b/graphics/pokemon/thundurus/anim_front.png differ diff --git a/graphics/pokemon/thundurus/back.png b/graphics/pokemon/thundurus/back.png index f08489969..1bd089be6 100644 Binary files a/graphics/pokemon/thundurus/back.png and b/graphics/pokemon/thundurus/back.png differ diff --git a/graphics/pokemon/thundurus/therian/anim_front.png b/graphics/pokemon/thundurus/therian/anim_front.png index 05e0b7372..e87cf107b 100644 Binary files a/graphics/pokemon/thundurus/therian/anim_front.png and b/graphics/pokemon/thundurus/therian/anim_front.png differ diff --git a/graphics/pokemon/thundurus/therian/back.png b/graphics/pokemon/thundurus/therian/back.png index e021218db..16a5d8711 100644 Binary files a/graphics/pokemon/thundurus/therian/back.png and b/graphics/pokemon/thundurus/therian/back.png differ diff --git a/graphics/pokemon/thundurus/therian/icon.png b/graphics/pokemon/thundurus/therian/icon.png index d18aa8d2b..5f35c5f83 100644 Binary files a/graphics/pokemon/thundurus/therian/icon.png and b/graphics/pokemon/thundurus/therian/icon.png differ diff --git a/graphics/pokemon/thwackey/back.png b/graphics/pokemon/thwackey/back.png index 85f662150..1063cd33b 100644 Binary files a/graphics/pokemon/thwackey/back.png and b/graphics/pokemon/thwackey/back.png differ diff --git a/graphics/pokemon/thwackey/front.png b/graphics/pokemon/thwackey/front.png index 0b8257542..8bf484e9a 100644 Binary files a/graphics/pokemon/thwackey/front.png and b/graphics/pokemon/thwackey/front.png differ diff --git a/graphics/pokemon/thwackey/icon.png b/graphics/pokemon/thwackey/icon.png index 442b292e9..d093da09a 100644 Binary files a/graphics/pokemon/thwackey/icon.png and b/graphics/pokemon/thwackey/icon.png differ diff --git a/graphics/pokemon/timburr/anim_front.png b/graphics/pokemon/timburr/anim_front.png index 13a9bb4d6..4e32b20fd 100644 Binary files a/graphics/pokemon/timburr/anim_front.png and b/graphics/pokemon/timburr/anim_front.png differ diff --git a/graphics/pokemon/timburr/back.png b/graphics/pokemon/timburr/back.png index d2ff47e6a..a1eff2627 100644 Binary files a/graphics/pokemon/timburr/back.png and b/graphics/pokemon/timburr/back.png differ diff --git a/graphics/pokemon/timburr/icon.png b/graphics/pokemon/timburr/icon.png index 7f0370f3f..8528484be 100644 Binary files a/graphics/pokemon/timburr/icon.png and b/graphics/pokemon/timburr/icon.png differ diff --git a/graphics/pokemon/tirtouga/anim_front.png b/graphics/pokemon/tirtouga/anim_front.png index 626c59fa0..37cdaff8e 100644 Binary files a/graphics/pokemon/tirtouga/anim_front.png and b/graphics/pokemon/tirtouga/anim_front.png differ diff --git a/graphics/pokemon/tirtouga/back.png b/graphics/pokemon/tirtouga/back.png index 125d61a24..9ead99cdf 100644 Binary files a/graphics/pokemon/tirtouga/back.png and b/graphics/pokemon/tirtouga/back.png differ diff --git a/graphics/pokemon/togedemaru/back.png b/graphics/pokemon/togedemaru/back.png index a49e69226..71b2b1daa 100644 Binary files a/graphics/pokemon/togedemaru/back.png and b/graphics/pokemon/togedemaru/back.png differ diff --git a/graphics/pokemon/togedemaru/front.png b/graphics/pokemon/togedemaru/front.png index 6ca0558a2..aa0202eef 100644 Binary files a/graphics/pokemon/togedemaru/front.png and b/graphics/pokemon/togedemaru/front.png differ diff --git a/graphics/pokemon/togedemaru/icon.png b/graphics/pokemon/togedemaru/icon.png index aa4de5eb5..2ccf7d60d 100644 Binary files a/graphics/pokemon/togedemaru/icon.png and b/graphics/pokemon/togedemaru/icon.png differ diff --git a/graphics/pokemon/togekiss/anim_front.png b/graphics/pokemon/togekiss/anim_front.png index 8077a9f49..f902aff3b 100644 Binary files a/graphics/pokemon/togekiss/anim_front.png and b/graphics/pokemon/togekiss/anim_front.png differ diff --git a/graphics/pokemon/togekiss/back.png b/graphics/pokemon/togekiss/back.png index 15f417f02..d0ba96a40 100644 Binary files a/graphics/pokemon/togekiss/back.png and b/graphics/pokemon/togekiss/back.png differ diff --git a/graphics/pokemon/togekiss/icon.png b/graphics/pokemon/togekiss/icon.png index 68930f1d8..4f133436a 100644 Binary files a/graphics/pokemon/togekiss/icon.png and b/graphics/pokemon/togekiss/icon.png differ diff --git a/graphics/pokemon/togepi/back.png b/graphics/pokemon/togepi/back.png index 3a2330096..a923825bf 100644 Binary files a/graphics/pokemon/togepi/back.png and b/graphics/pokemon/togepi/back.png differ diff --git a/graphics/pokemon/togepi/icon.png b/graphics/pokemon/togepi/icon.png index 7e2be562d..eea4a651c 100644 Binary files a/graphics/pokemon/togepi/icon.png and b/graphics/pokemon/togepi/icon.png differ diff --git a/graphics/pokemon/togetic/icon.png b/graphics/pokemon/togetic/icon.png index fbe51df34..a5ecea87f 100644 Binary files a/graphics/pokemon/togetic/icon.png and b/graphics/pokemon/togetic/icon.png differ diff --git a/graphics/pokemon/torchic/anim_front.png b/graphics/pokemon/torchic/anim_front.png index 201710c47..f7eb75e3d 100644 Binary files a/graphics/pokemon/torchic/anim_front.png and b/graphics/pokemon/torchic/anim_front.png differ diff --git a/graphics/pokemon/torchic/icon.png b/graphics/pokemon/torchic/icon.png index 76284d3af..cd2618784 100644 Binary files a/graphics/pokemon/torchic/icon.png and b/graphics/pokemon/torchic/icon.png differ diff --git a/graphics/pokemon/torkoal/anim_front.png b/graphics/pokemon/torkoal/anim_front.png index 998e6cfa3..71f1b97fc 100644 Binary files a/graphics/pokemon/torkoal/anim_front.png and b/graphics/pokemon/torkoal/anim_front.png differ diff --git a/graphics/pokemon/torkoal/back.png b/graphics/pokemon/torkoal/back.png index 7deddc9c4..e5bc082fc 100644 Binary files a/graphics/pokemon/torkoal/back.png and b/graphics/pokemon/torkoal/back.png differ diff --git a/graphics/pokemon/torkoal/icon.png b/graphics/pokemon/torkoal/icon.png index 2dfd9eb09..2d0e50dc3 100644 Binary files a/graphics/pokemon/torkoal/icon.png and b/graphics/pokemon/torkoal/icon.png differ diff --git a/graphics/pokemon/tornadus/anim_front.png b/graphics/pokemon/tornadus/anim_front.png index 258b1b4d4..675dfa020 100644 Binary files a/graphics/pokemon/tornadus/anim_front.png and b/graphics/pokemon/tornadus/anim_front.png differ diff --git a/graphics/pokemon/tornadus/back.png b/graphics/pokemon/tornadus/back.png index 04d787070..7080e4db1 100644 Binary files a/graphics/pokemon/tornadus/back.png and b/graphics/pokemon/tornadus/back.png differ diff --git a/graphics/pokemon/tornadus/therian/anim_front.png b/graphics/pokemon/tornadus/therian/anim_front.png index cec4cf024..574aa1cc7 100644 Binary files a/graphics/pokemon/tornadus/therian/anim_front.png and b/graphics/pokemon/tornadus/therian/anim_front.png differ diff --git a/graphics/pokemon/tornadus/therian/back.png b/graphics/pokemon/tornadus/therian/back.png index 6f533999f..327d3cf6f 100644 Binary files a/graphics/pokemon/tornadus/therian/back.png and b/graphics/pokemon/tornadus/therian/back.png differ diff --git a/graphics/pokemon/tornadus/therian/icon.png b/graphics/pokemon/tornadus/therian/icon.png index 238330e1f..fea79288d 100644 Binary files a/graphics/pokemon/tornadus/therian/icon.png and b/graphics/pokemon/tornadus/therian/icon.png differ diff --git a/graphics/pokemon/torracat/back.png b/graphics/pokemon/torracat/back.png index 44d1a66f2..1fe2d1b17 100644 Binary files a/graphics/pokemon/torracat/back.png and b/graphics/pokemon/torracat/back.png differ diff --git a/graphics/pokemon/torracat/front.png b/graphics/pokemon/torracat/front.png index 9f4bc90a4..488f5fa58 100644 Binary files a/graphics/pokemon/torracat/front.png and b/graphics/pokemon/torracat/front.png differ diff --git a/graphics/pokemon/torracat/icon.png b/graphics/pokemon/torracat/icon.png index 83ade2247..b266274f5 100644 Binary files a/graphics/pokemon/torracat/icon.png and b/graphics/pokemon/torracat/icon.png differ diff --git a/graphics/pokemon/torterra/anim_front.png b/graphics/pokemon/torterra/anim_front.png index 8bc02bed7..cbc7c3e52 100644 Binary files a/graphics/pokemon/torterra/anim_front.png and b/graphics/pokemon/torterra/anim_front.png differ diff --git a/graphics/pokemon/torterra/back.png b/graphics/pokemon/torterra/back.png index 280bb08a7..8cea79358 100644 Binary files a/graphics/pokemon/torterra/back.png and b/graphics/pokemon/torterra/back.png differ diff --git a/graphics/pokemon/torterra/icon.png b/graphics/pokemon/torterra/icon.png index b927b722a..b0b1860ce 100644 Binary files a/graphics/pokemon/torterra/icon.png and b/graphics/pokemon/torterra/icon.png differ diff --git a/graphics/pokemon/totodile/back.png b/graphics/pokemon/totodile/back.png index aa8a461bd..b01f0d33e 100644 Binary files a/graphics/pokemon/totodile/back.png and b/graphics/pokemon/totodile/back.png differ diff --git a/graphics/pokemon/totodile/icon.png b/graphics/pokemon/totodile/icon.png index 80d3d1766..786d20e1f 100644 Binary files a/graphics/pokemon/totodile/icon.png and b/graphics/pokemon/totodile/icon.png differ diff --git a/graphics/pokemon/toucannon/back.png b/graphics/pokemon/toucannon/back.png index a6cad05e4..109a356dd 100644 Binary files a/graphics/pokemon/toucannon/back.png and b/graphics/pokemon/toucannon/back.png differ diff --git a/graphics/pokemon/toucannon/front.png b/graphics/pokemon/toucannon/front.png index 4856768d6..e9131805a 100644 Binary files a/graphics/pokemon/toucannon/front.png and b/graphics/pokemon/toucannon/front.png differ diff --git a/graphics/pokemon/toucannon/icon.png b/graphics/pokemon/toucannon/icon.png index a92f5a20b..349c72376 100644 Binary files a/graphics/pokemon/toucannon/icon.png and b/graphics/pokemon/toucannon/icon.png differ diff --git a/graphics/pokemon/toxapex/back.png b/graphics/pokemon/toxapex/back.png index 07ab77c5d..cca9b2dac 100644 Binary files a/graphics/pokemon/toxapex/back.png and b/graphics/pokemon/toxapex/back.png differ diff --git a/graphics/pokemon/toxapex/front.png b/graphics/pokemon/toxapex/front.png index d318e7435..a3da78e43 100644 Binary files a/graphics/pokemon/toxapex/front.png and b/graphics/pokemon/toxapex/front.png differ diff --git a/graphics/pokemon/toxapex/icon.png b/graphics/pokemon/toxapex/icon.png index 3da7e09c6..5de471d4f 100644 Binary files a/graphics/pokemon/toxapex/icon.png and b/graphics/pokemon/toxapex/icon.png differ diff --git a/graphics/pokemon/toxel/back.png b/graphics/pokemon/toxel/back.png index adee6bdc7..d426e0ecb 100644 Binary files a/graphics/pokemon/toxel/back.png and b/graphics/pokemon/toxel/back.png differ diff --git a/graphics/pokemon/toxel/front.png b/graphics/pokemon/toxel/front.png index 542da1bc3..01bd66240 100644 Binary files a/graphics/pokemon/toxel/front.png and b/graphics/pokemon/toxel/front.png differ diff --git a/graphics/pokemon/toxel/icon.png b/graphics/pokemon/toxel/icon.png index 36acaeb6e..b1989e50c 100644 Binary files a/graphics/pokemon/toxel/icon.png and b/graphics/pokemon/toxel/icon.png differ diff --git a/graphics/pokemon/toxicroak/anim_front.png b/graphics/pokemon/toxicroak/anim_front.png index b9d8ae4ba..105ad18cb 100644 Binary files a/graphics/pokemon/toxicroak/anim_front.png and b/graphics/pokemon/toxicroak/anim_front.png differ diff --git a/graphics/pokemon/toxicroak/back.png b/graphics/pokemon/toxicroak/back.png index 779e8730a..d5dc5644e 100644 Binary files a/graphics/pokemon/toxicroak/back.png and b/graphics/pokemon/toxicroak/back.png differ diff --git a/graphics/pokemon/toxicroak/icon.png b/graphics/pokemon/toxicroak/icon.png index d1bd119d0..11f349571 100644 Binary files a/graphics/pokemon/toxicroak/icon.png and b/graphics/pokemon/toxicroak/icon.png differ diff --git a/graphics/pokemon/toxtricity/back.png b/graphics/pokemon/toxtricity/back.png index 2e6931423..04c4ac300 100644 Binary files a/graphics/pokemon/toxtricity/back.png and b/graphics/pokemon/toxtricity/back.png differ diff --git a/graphics/pokemon/toxtricity/front.png b/graphics/pokemon/toxtricity/front.png index 31acd889c..29ccc2fec 100644 Binary files a/graphics/pokemon/toxtricity/front.png and b/graphics/pokemon/toxtricity/front.png differ diff --git a/graphics/pokemon/toxtricity/icon.png b/graphics/pokemon/toxtricity/icon.png index c91578d6b..e3d8123b5 100644 Binary files a/graphics/pokemon/toxtricity/icon.png and b/graphics/pokemon/toxtricity/icon.png differ diff --git a/graphics/pokemon/toxtricity/low_key/back.png b/graphics/pokemon/toxtricity/low_key/back.png index 5d2efb666..dd81b3259 100644 Binary files a/graphics/pokemon/toxtricity/low_key/back.png and b/graphics/pokemon/toxtricity/low_key/back.png differ diff --git a/graphics/pokemon/toxtricity/low_key/front.png b/graphics/pokemon/toxtricity/low_key/front.png index b853144ae..41fdaff6a 100644 Binary files a/graphics/pokemon/toxtricity/low_key/front.png and b/graphics/pokemon/toxtricity/low_key/front.png differ diff --git a/graphics/pokemon/toxtricity/low_key/icon.png b/graphics/pokemon/toxtricity/low_key/icon.png index 5e4e3d264..daf034d6a 100644 Binary files a/graphics/pokemon/toxtricity/low_key/icon.png and b/graphics/pokemon/toxtricity/low_key/icon.png differ diff --git a/graphics/pokemon/tranquill/anim_front.png b/graphics/pokemon/tranquill/anim_front.png index ab62cd2b1..a3063146b 100644 Binary files a/graphics/pokemon/tranquill/anim_front.png and b/graphics/pokemon/tranquill/anim_front.png differ diff --git a/graphics/pokemon/tranquill/back.png b/graphics/pokemon/tranquill/back.png index a2912b2a1..b62587c38 100644 Binary files a/graphics/pokemon/tranquill/back.png and b/graphics/pokemon/tranquill/back.png differ diff --git a/graphics/pokemon/tranquill/icon.png b/graphics/pokemon/tranquill/icon.png index 44bfe5297..5c98e7e06 100644 Binary files a/graphics/pokemon/tranquill/icon.png and b/graphics/pokemon/tranquill/icon.png differ diff --git a/graphics/pokemon/trapinch/anim_front.png b/graphics/pokemon/trapinch/anim_front.png index f12a25f55..e8ee63af6 100644 Binary files a/graphics/pokemon/trapinch/anim_front.png and b/graphics/pokemon/trapinch/anim_front.png differ diff --git a/graphics/pokemon/trapinch/back.png b/graphics/pokemon/trapinch/back.png index 2e1465f9e..6207b7290 100644 Binary files a/graphics/pokemon/trapinch/back.png and b/graphics/pokemon/trapinch/back.png differ diff --git a/graphics/pokemon/trapinch/icon.png b/graphics/pokemon/trapinch/icon.png index eb5c2d658..df67b41f8 100644 Binary files a/graphics/pokemon/trapinch/icon.png and b/graphics/pokemon/trapinch/icon.png differ diff --git a/graphics/pokemon/treecko/anim_front.png b/graphics/pokemon/treecko/anim_front.png index 930e9b9a4..867137cfc 100644 Binary files a/graphics/pokemon/treecko/anim_front.png and b/graphics/pokemon/treecko/anim_front.png differ diff --git a/graphics/pokemon/treecko/back.png b/graphics/pokemon/treecko/back.png index dce21e214..2b7d82f53 100644 Binary files a/graphics/pokemon/treecko/back.png and b/graphics/pokemon/treecko/back.png differ diff --git a/graphics/pokemon/treecko/icon.png b/graphics/pokemon/treecko/icon.png index d20191b30..fde464372 100644 Binary files a/graphics/pokemon/treecko/icon.png and b/graphics/pokemon/treecko/icon.png differ diff --git a/graphics/pokemon/trevenant/anim_front.png b/graphics/pokemon/trevenant/anim_front.png index c6ac720eb..3a51361f7 100644 Binary files a/graphics/pokemon/trevenant/anim_front.png and b/graphics/pokemon/trevenant/anim_front.png differ diff --git a/graphics/pokemon/trevenant/back.png b/graphics/pokemon/trevenant/back.png index ab240f83d..3bcd02603 100644 Binary files a/graphics/pokemon/trevenant/back.png and b/graphics/pokemon/trevenant/back.png differ diff --git a/graphics/pokemon/trevenant/icon.png b/graphics/pokemon/trevenant/icon.png index 10f8b2ab0..334c87efa 100644 Binary files a/graphics/pokemon/trevenant/icon.png and b/graphics/pokemon/trevenant/icon.png differ diff --git a/graphics/pokemon/tropius/anim_front.png b/graphics/pokemon/tropius/anim_front.png index 99d2f62cd..a8ce49059 100644 Binary files a/graphics/pokemon/tropius/anim_front.png and b/graphics/pokemon/tropius/anim_front.png differ diff --git a/graphics/pokemon/tropius/back.png b/graphics/pokemon/tropius/back.png index 22dc17d2a..1e61019c3 100644 Binary files a/graphics/pokemon/tropius/back.png and b/graphics/pokemon/tropius/back.png differ diff --git a/graphics/pokemon/trubbish/anim_front.png b/graphics/pokemon/trubbish/anim_front.png index e127937fc..3ed705609 100644 Binary files a/graphics/pokemon/trubbish/anim_front.png and b/graphics/pokemon/trubbish/anim_front.png differ diff --git a/graphics/pokemon/trubbish/back.png b/graphics/pokemon/trubbish/back.png index 646e25cf3..4641d9650 100644 Binary files a/graphics/pokemon/trubbish/back.png and b/graphics/pokemon/trubbish/back.png differ diff --git a/graphics/pokemon/trumbeak/back.png b/graphics/pokemon/trumbeak/back.png index 2608ac0ed..552c32d26 100644 Binary files a/graphics/pokemon/trumbeak/back.png and b/graphics/pokemon/trumbeak/back.png differ diff --git a/graphics/pokemon/trumbeak/front.png b/graphics/pokemon/trumbeak/front.png index f0cac2430..b51466e30 100644 Binary files a/graphics/pokemon/trumbeak/front.png and b/graphics/pokemon/trumbeak/front.png differ diff --git a/graphics/pokemon/trumbeak/icon.png b/graphics/pokemon/trumbeak/icon.png index 7438dd3ea..7f13c97ae 100644 Binary files a/graphics/pokemon/trumbeak/icon.png and b/graphics/pokemon/trumbeak/icon.png differ diff --git a/graphics/pokemon/tsareena/back.png b/graphics/pokemon/tsareena/back.png index d4719e4b3..ea66ff8a2 100644 Binary files a/graphics/pokemon/tsareena/back.png and b/graphics/pokemon/tsareena/back.png differ diff --git a/graphics/pokemon/tsareena/front.png b/graphics/pokemon/tsareena/front.png index d8db63b14..9072ce865 100644 Binary files a/graphics/pokemon/tsareena/front.png and b/graphics/pokemon/tsareena/front.png differ diff --git a/graphics/pokemon/tsareena/icon.png b/graphics/pokemon/tsareena/icon.png index 0703826aa..f44119562 100644 Binary files a/graphics/pokemon/tsareena/icon.png and b/graphics/pokemon/tsareena/icon.png differ diff --git a/graphics/pokemon/turtonator/back.png b/graphics/pokemon/turtonator/back.png index ec9b524ad..80e6f6c4f 100644 Binary files a/graphics/pokemon/turtonator/back.png and b/graphics/pokemon/turtonator/back.png differ diff --git a/graphics/pokemon/turtonator/icon.png b/graphics/pokemon/turtonator/icon.png index 7a47b6dd4..4e1b8dbfa 100644 Binary files a/graphics/pokemon/turtonator/icon.png and b/graphics/pokemon/turtonator/icon.png differ diff --git a/graphics/pokemon/turtwig/anim_front.png b/graphics/pokemon/turtwig/anim_front.png index 745865f2c..84e5fc8eb 100644 Binary files a/graphics/pokemon/turtwig/anim_front.png and b/graphics/pokemon/turtwig/anim_front.png differ diff --git a/graphics/pokemon/turtwig/back.png b/graphics/pokemon/turtwig/back.png index d2baa9abf..066867525 100644 Binary files a/graphics/pokemon/turtwig/back.png and b/graphics/pokemon/turtwig/back.png differ diff --git a/graphics/pokemon/turtwig/icon.png b/graphics/pokemon/turtwig/icon.png index f3f86a716..ca26164b2 100644 Binary files a/graphics/pokemon/turtwig/icon.png and b/graphics/pokemon/turtwig/icon.png differ diff --git a/graphics/pokemon/tympole/anim_front.png b/graphics/pokemon/tympole/anim_front.png index 1dfbe191a..2d72a92d1 100644 Binary files a/graphics/pokemon/tympole/anim_front.png and b/graphics/pokemon/tympole/anim_front.png differ diff --git a/graphics/pokemon/tympole/back.png b/graphics/pokemon/tympole/back.png index f74467547..c5e156acb 100644 Binary files a/graphics/pokemon/tympole/back.png and b/graphics/pokemon/tympole/back.png differ diff --git a/graphics/pokemon/tympole/icon.png b/graphics/pokemon/tympole/icon.png index 6e31deb8e..7fcb7cabd 100644 Binary files a/graphics/pokemon/tympole/icon.png and b/graphics/pokemon/tympole/icon.png differ diff --git a/graphics/pokemon/tynamo/back.png b/graphics/pokemon/tynamo/back.png index ddc039c4d..5cbf8d727 100644 Binary files a/graphics/pokemon/tynamo/back.png and b/graphics/pokemon/tynamo/back.png differ diff --git a/graphics/pokemon/tynamo/icon.png b/graphics/pokemon/tynamo/icon.png index 0eff4a825..4aa481670 100644 Binary files a/graphics/pokemon/tynamo/icon.png and b/graphics/pokemon/tynamo/icon.png differ diff --git a/graphics/pokemon/type_null/back.png b/graphics/pokemon/type_null/back.png index 7042478d3..16369b59f 100644 Binary files a/graphics/pokemon/type_null/back.png and b/graphics/pokemon/type_null/back.png differ diff --git a/graphics/pokemon/type_null/front.png b/graphics/pokemon/type_null/front.png index ae939692c..a9fd54ba3 100644 Binary files a/graphics/pokemon/type_null/front.png and b/graphics/pokemon/type_null/front.png differ diff --git a/graphics/pokemon/type_null/icon.png b/graphics/pokemon/type_null/icon.png index 0a9393e4d..e00748e13 100644 Binary files a/graphics/pokemon/type_null/icon.png and b/graphics/pokemon/type_null/icon.png differ diff --git a/graphics/pokemon/typhlosion/hisuian/back.png b/graphics/pokemon/typhlosion/hisuian/back.png index baa232379..8e808ecf6 100755 Binary files a/graphics/pokemon/typhlosion/hisuian/back.png and b/graphics/pokemon/typhlosion/hisuian/back.png differ diff --git a/graphics/pokemon/typhlosion/hisuian/icon.png b/graphics/pokemon/typhlosion/hisuian/icon.png index fa4b6477b..c3e047496 100644 Binary files a/graphics/pokemon/typhlosion/hisuian/icon.png and b/graphics/pokemon/typhlosion/hisuian/icon.png differ diff --git a/graphics/pokemon/tyranitar/anim_front.png b/graphics/pokemon/tyranitar/anim_front.png index 8e2956dc0..0c39b74f9 100644 Binary files a/graphics/pokemon/tyranitar/anim_front.png and b/graphics/pokemon/tyranitar/anim_front.png differ diff --git a/graphics/pokemon/tyranitar/back.png b/graphics/pokemon/tyranitar/back.png index 69b9c5709..443142162 100644 Binary files a/graphics/pokemon/tyranitar/back.png and b/graphics/pokemon/tyranitar/back.png differ diff --git a/graphics/pokemon/tyranitar/mega/back.png b/graphics/pokemon/tyranitar/mega/back.png index 765ac92c3..b3747005a 100644 Binary files a/graphics/pokemon/tyranitar/mega/back.png and b/graphics/pokemon/tyranitar/mega/back.png differ diff --git a/graphics/pokemon/tyranitar/mega/front.png b/graphics/pokemon/tyranitar/mega/front.png index 8a6fc3a12..05cc2cd18 100644 Binary files a/graphics/pokemon/tyranitar/mega/front.png and b/graphics/pokemon/tyranitar/mega/front.png differ diff --git a/graphics/pokemon/tyranitar/mega/icon.png b/graphics/pokemon/tyranitar/mega/icon.png index a5b4da5ae..a327aa37e 100644 Binary files a/graphics/pokemon/tyranitar/mega/icon.png and b/graphics/pokemon/tyranitar/mega/icon.png differ diff --git a/graphics/pokemon/tyrantrum/anim_front.png b/graphics/pokemon/tyrantrum/anim_front.png index 941224b5a..22f83b3bc 100644 Binary files a/graphics/pokemon/tyrantrum/anim_front.png and b/graphics/pokemon/tyrantrum/anim_front.png differ diff --git a/graphics/pokemon/tyrantrum/back.png b/graphics/pokemon/tyrantrum/back.png index 06f156310..f857bfbfd 100644 Binary files a/graphics/pokemon/tyrantrum/back.png and b/graphics/pokemon/tyrantrum/back.png differ diff --git a/graphics/pokemon/tyrantrum/icon.png b/graphics/pokemon/tyrantrum/icon.png index 212f587d8..ec2d0dbe5 100644 Binary files a/graphics/pokemon/tyrantrum/icon.png and b/graphics/pokemon/tyrantrum/icon.png differ diff --git a/graphics/pokemon/tyrogue/anim_front.png b/graphics/pokemon/tyrogue/anim_front.png index d969be36b..b5c0a3d87 100644 Binary files a/graphics/pokemon/tyrogue/anim_front.png and b/graphics/pokemon/tyrogue/anim_front.png differ diff --git a/graphics/pokemon/tyrogue/back.png b/graphics/pokemon/tyrogue/back.png index 04644c6bf..fab71c971 100644 Binary files a/graphics/pokemon/tyrogue/back.png and b/graphics/pokemon/tyrogue/back.png differ diff --git a/graphics/pokemon/tyrogue/icon.png b/graphics/pokemon/tyrogue/icon.png index df1849c89..8229cba52 100644 Binary files a/graphics/pokemon/tyrogue/icon.png and b/graphics/pokemon/tyrogue/icon.png differ diff --git a/graphics/pokemon/tyrunt/anim_front.png b/graphics/pokemon/tyrunt/anim_front.png index 2b954fc2f..240f7679a 100644 Binary files a/graphics/pokemon/tyrunt/anim_front.png and b/graphics/pokemon/tyrunt/anim_front.png differ diff --git a/graphics/pokemon/tyrunt/back.png b/graphics/pokemon/tyrunt/back.png index 8acdb8785..e90499035 100644 Binary files a/graphics/pokemon/tyrunt/back.png and b/graphics/pokemon/tyrunt/back.png differ diff --git a/graphics/pokemon/tyrunt/icon.png b/graphics/pokemon/tyrunt/icon.png index 3c4034f8e..64d14d8dc 100644 Binary files a/graphics/pokemon/tyrunt/icon.png and b/graphics/pokemon/tyrunt/icon.png differ diff --git a/graphics/pokemon/umbreon/anim_front.png b/graphics/pokemon/umbreon/anim_front.png index b634277e0..74c7e1c79 100644 Binary files a/graphics/pokemon/umbreon/anim_front.png and b/graphics/pokemon/umbreon/anim_front.png differ diff --git a/graphics/pokemon/umbreon/back.png b/graphics/pokemon/umbreon/back.png index 72d83fdaa..8dbad9640 100644 Binary files a/graphics/pokemon/umbreon/back.png and b/graphics/pokemon/umbreon/back.png differ diff --git a/graphics/pokemon/umbreon/icon.png b/graphics/pokemon/umbreon/icon.png index 8743bf3f7..b81590db1 100644 Binary files a/graphics/pokemon/umbreon/icon.png and b/graphics/pokemon/umbreon/icon.png differ diff --git a/graphics/pokemon/unfezant/anim_front.png b/graphics/pokemon/unfezant/anim_front.png index f659a21ee..8e564674d 100644 Binary files a/graphics/pokemon/unfezant/anim_front.png and b/graphics/pokemon/unfezant/anim_front.png differ diff --git a/graphics/pokemon/unfezant/anim_frontf.png b/graphics/pokemon/unfezant/anim_frontf.png index 2f81f81a4..46fbed1c2 100644 Binary files a/graphics/pokemon/unfezant/anim_frontf.png and b/graphics/pokemon/unfezant/anim_frontf.png differ diff --git a/graphics/pokemon/unfezant/back.png b/graphics/pokemon/unfezant/back.png index 6b3b9e87d..829367c68 100644 Binary files a/graphics/pokemon/unfezant/back.png and b/graphics/pokemon/unfezant/back.png differ diff --git a/graphics/pokemon/unfezant/frontf.png b/graphics/pokemon/unfezant/frontf.png index 1cf49c9f9..76e532526 100644 Binary files a/graphics/pokemon/unfezant/frontf.png and b/graphics/pokemon/unfezant/frontf.png differ diff --git a/graphics/pokemon/unfezant/iconf.png b/graphics/pokemon/unfezant/iconf.png index 68d3b8976..4c4a809ad 100644 Binary files a/graphics/pokemon/unfezant/iconf.png and b/graphics/pokemon/unfezant/iconf.png differ diff --git a/graphics/pokemon/unown/anim_front.png b/graphics/pokemon/unown/anim_front.png index 252872d2e..065d82a47 100644 Binary files a/graphics/pokemon/unown/anim_front.png and b/graphics/pokemon/unown/anim_front.png differ diff --git a/graphics/pokemon/unown/b/anim_front.png b/graphics/pokemon/unown/b/anim_front.png index 99238cf54..bedc98634 100644 Binary files a/graphics/pokemon/unown/b/anim_front.png and b/graphics/pokemon/unown/b/anim_front.png differ diff --git a/graphics/pokemon/unown/b/back.png b/graphics/pokemon/unown/b/back.png index c6501736f..b398754ca 100644 Binary files a/graphics/pokemon/unown/b/back.png and b/graphics/pokemon/unown/b/back.png differ diff --git a/graphics/pokemon/unown/b/icon.png b/graphics/pokemon/unown/b/icon.png index ec784d2f6..47654aba5 100644 Binary files a/graphics/pokemon/unown/b/icon.png and b/graphics/pokemon/unown/b/icon.png differ diff --git a/graphics/pokemon/unown/back.png b/graphics/pokemon/unown/back.png index 7bbf37951..b90973023 100644 Binary files a/graphics/pokemon/unown/back.png and b/graphics/pokemon/unown/back.png differ diff --git a/graphics/pokemon/unown/c/anim_front.png b/graphics/pokemon/unown/c/anim_front.png index b00481170..6699bbbb5 100644 Binary files a/graphics/pokemon/unown/c/anim_front.png and b/graphics/pokemon/unown/c/anim_front.png differ diff --git a/graphics/pokemon/unown/c/back.png b/graphics/pokemon/unown/c/back.png index b007751f6..b9bccf4c5 100644 Binary files a/graphics/pokemon/unown/c/back.png and b/graphics/pokemon/unown/c/back.png differ diff --git a/graphics/pokemon/unown/c/icon.png b/graphics/pokemon/unown/c/icon.png index 8773c2108..7b8721a7d 100644 Binary files a/graphics/pokemon/unown/c/icon.png and b/graphics/pokemon/unown/c/icon.png differ diff --git a/graphics/pokemon/unown/d/anim_front.png b/graphics/pokemon/unown/d/anim_front.png index dda58bedd..7491a13fb 100644 Binary files a/graphics/pokemon/unown/d/anim_front.png and b/graphics/pokemon/unown/d/anim_front.png differ diff --git a/graphics/pokemon/unown/d/back.png b/graphics/pokemon/unown/d/back.png index 37bafa6c8..1b3f19b09 100644 Binary files a/graphics/pokemon/unown/d/back.png and b/graphics/pokemon/unown/d/back.png differ diff --git a/graphics/pokemon/unown/d/icon.png b/graphics/pokemon/unown/d/icon.png index 29f4bb9d3..db6b0cf8a 100644 Binary files a/graphics/pokemon/unown/d/icon.png and b/graphics/pokemon/unown/d/icon.png differ diff --git a/graphics/pokemon/unown/e/anim_front.png b/graphics/pokemon/unown/e/anim_front.png index b8eb9c6ea..a761cdd95 100644 Binary files a/graphics/pokemon/unown/e/anim_front.png and b/graphics/pokemon/unown/e/anim_front.png differ diff --git a/graphics/pokemon/unown/e/back.png b/graphics/pokemon/unown/e/back.png index bcf954704..1baaf759f 100644 Binary files a/graphics/pokemon/unown/e/back.png and b/graphics/pokemon/unown/e/back.png differ diff --git a/graphics/pokemon/unown/e/icon.png b/graphics/pokemon/unown/e/icon.png index d371238d8..6addb828e 100644 Binary files a/graphics/pokemon/unown/e/icon.png and b/graphics/pokemon/unown/e/icon.png differ diff --git a/graphics/pokemon/unown/exclamation_mark/anim_front.png b/graphics/pokemon/unown/exclamation_mark/anim_front.png index 6b0c06353..96c436e8c 100644 Binary files a/graphics/pokemon/unown/exclamation_mark/anim_front.png and b/graphics/pokemon/unown/exclamation_mark/anim_front.png differ diff --git a/graphics/pokemon/unown/exclamation_mark/back.png b/graphics/pokemon/unown/exclamation_mark/back.png index 2f34ebe11..cb05b906d 100644 Binary files a/graphics/pokemon/unown/exclamation_mark/back.png and b/graphics/pokemon/unown/exclamation_mark/back.png differ diff --git a/graphics/pokemon/unown/exclamation_mark/icon.png b/graphics/pokemon/unown/exclamation_mark/icon.png index ceb17355c..beeea4ae1 100644 Binary files a/graphics/pokemon/unown/exclamation_mark/icon.png and b/graphics/pokemon/unown/exclamation_mark/icon.png differ diff --git a/graphics/pokemon/unown/f/anim_front.png b/graphics/pokemon/unown/f/anim_front.png index 0bc5cf745..1c9685659 100644 Binary files a/graphics/pokemon/unown/f/anim_front.png and b/graphics/pokemon/unown/f/anim_front.png differ diff --git a/graphics/pokemon/unown/f/back.png b/graphics/pokemon/unown/f/back.png index c462579c7..30be252f9 100644 Binary files a/graphics/pokemon/unown/f/back.png and b/graphics/pokemon/unown/f/back.png differ diff --git a/graphics/pokemon/unown/f/icon.png b/graphics/pokemon/unown/f/icon.png index 114bec7b7..3c45017b1 100644 Binary files a/graphics/pokemon/unown/f/icon.png and b/graphics/pokemon/unown/f/icon.png differ diff --git a/graphics/pokemon/unown/g/anim_front.png b/graphics/pokemon/unown/g/anim_front.png index 65f88d7aa..028bd4cad 100644 Binary files a/graphics/pokemon/unown/g/anim_front.png and b/graphics/pokemon/unown/g/anim_front.png differ diff --git a/graphics/pokemon/unown/g/back.png b/graphics/pokemon/unown/g/back.png index ae7808824..ec5e708bf 100644 Binary files a/graphics/pokemon/unown/g/back.png and b/graphics/pokemon/unown/g/back.png differ diff --git a/graphics/pokemon/unown/g/icon.png b/graphics/pokemon/unown/g/icon.png index 6314807c1..ab00f8ad2 100644 Binary files a/graphics/pokemon/unown/g/icon.png and b/graphics/pokemon/unown/g/icon.png differ diff --git a/graphics/pokemon/unown/h/anim_front.png b/graphics/pokemon/unown/h/anim_front.png index 73f19d280..686e70d4b 100644 Binary files a/graphics/pokemon/unown/h/anim_front.png and b/graphics/pokemon/unown/h/anim_front.png differ diff --git a/graphics/pokemon/unown/h/back.png b/graphics/pokemon/unown/h/back.png index f668565b8..992e34e21 100644 Binary files a/graphics/pokemon/unown/h/back.png and b/graphics/pokemon/unown/h/back.png differ diff --git a/graphics/pokemon/unown/h/icon.png b/graphics/pokemon/unown/h/icon.png index 0e1e19437..bd4fd96bf 100644 Binary files a/graphics/pokemon/unown/h/icon.png and b/graphics/pokemon/unown/h/icon.png differ diff --git a/graphics/pokemon/unown/i/anim_front.png b/graphics/pokemon/unown/i/anim_front.png index 2563d3f3b..04a748fa0 100644 Binary files a/graphics/pokemon/unown/i/anim_front.png and b/graphics/pokemon/unown/i/anim_front.png differ diff --git a/graphics/pokemon/unown/i/back.png b/graphics/pokemon/unown/i/back.png index 49382e50a..5640fd5e0 100644 Binary files a/graphics/pokemon/unown/i/back.png and b/graphics/pokemon/unown/i/back.png differ diff --git a/graphics/pokemon/unown/i/icon.png b/graphics/pokemon/unown/i/icon.png index db5ebdfdc..6973196bb 100644 Binary files a/graphics/pokemon/unown/i/icon.png and b/graphics/pokemon/unown/i/icon.png differ diff --git a/graphics/pokemon/unown/icon.png b/graphics/pokemon/unown/icon.png index c1cac2351..cd9056ab2 100644 Binary files a/graphics/pokemon/unown/icon.png and b/graphics/pokemon/unown/icon.png differ diff --git a/graphics/pokemon/unown/j/anim_front.png b/graphics/pokemon/unown/j/anim_front.png index 1b0f5c0a9..e2906d253 100644 Binary files a/graphics/pokemon/unown/j/anim_front.png and b/graphics/pokemon/unown/j/anim_front.png differ diff --git a/graphics/pokemon/unown/j/back.png b/graphics/pokemon/unown/j/back.png index f7b451bb5..619ebb75b 100644 Binary files a/graphics/pokemon/unown/j/back.png and b/graphics/pokemon/unown/j/back.png differ diff --git a/graphics/pokemon/unown/j/icon.png b/graphics/pokemon/unown/j/icon.png index c5c50312e..b85a45a71 100644 Binary files a/graphics/pokemon/unown/j/icon.png and b/graphics/pokemon/unown/j/icon.png differ diff --git a/graphics/pokemon/unown/k/anim_front.png b/graphics/pokemon/unown/k/anim_front.png index cf0ac7e6c..b83ef195f 100644 Binary files a/graphics/pokemon/unown/k/anim_front.png and b/graphics/pokemon/unown/k/anim_front.png differ diff --git a/graphics/pokemon/unown/k/back.png b/graphics/pokemon/unown/k/back.png index 06f64a1f6..46ac175bc 100644 Binary files a/graphics/pokemon/unown/k/back.png and b/graphics/pokemon/unown/k/back.png differ diff --git a/graphics/pokemon/unown/k/icon.png b/graphics/pokemon/unown/k/icon.png index ed6a8122e..81bcb385e 100644 Binary files a/graphics/pokemon/unown/k/icon.png and b/graphics/pokemon/unown/k/icon.png differ diff --git a/graphics/pokemon/unown/l/anim_front.png b/graphics/pokemon/unown/l/anim_front.png index 65834fbc7..9d8b23af4 100644 Binary files a/graphics/pokemon/unown/l/anim_front.png and b/graphics/pokemon/unown/l/anim_front.png differ diff --git a/graphics/pokemon/unown/l/back.png b/graphics/pokemon/unown/l/back.png index 4a1bb7aa5..da0c6c5f5 100644 Binary files a/graphics/pokemon/unown/l/back.png and b/graphics/pokemon/unown/l/back.png differ diff --git a/graphics/pokemon/unown/l/icon.png b/graphics/pokemon/unown/l/icon.png index e2d08d23c..5f6fb9db8 100644 Binary files a/graphics/pokemon/unown/l/icon.png and b/graphics/pokemon/unown/l/icon.png differ diff --git a/graphics/pokemon/unown/m/anim_front.png b/graphics/pokemon/unown/m/anim_front.png index 058adf1b7..ee9c7c7a8 100644 Binary files a/graphics/pokemon/unown/m/anim_front.png and b/graphics/pokemon/unown/m/anim_front.png differ diff --git a/graphics/pokemon/unown/m/back.png b/graphics/pokemon/unown/m/back.png index a3eac9955..37dd0a97f 100644 Binary files a/graphics/pokemon/unown/m/back.png and b/graphics/pokemon/unown/m/back.png differ diff --git a/graphics/pokemon/unown/m/icon.png b/graphics/pokemon/unown/m/icon.png index e463969af..c9b8d0fb4 100644 Binary files a/graphics/pokemon/unown/m/icon.png and b/graphics/pokemon/unown/m/icon.png differ diff --git a/graphics/pokemon/unown/n/anim_front.png b/graphics/pokemon/unown/n/anim_front.png index a49128470..47cac4516 100644 Binary files a/graphics/pokemon/unown/n/anim_front.png and b/graphics/pokemon/unown/n/anim_front.png differ diff --git a/graphics/pokemon/unown/n/back.png b/graphics/pokemon/unown/n/back.png index fe73d302c..17163be73 100644 Binary files a/graphics/pokemon/unown/n/back.png and b/graphics/pokemon/unown/n/back.png differ diff --git a/graphics/pokemon/unown/n/icon.png b/graphics/pokemon/unown/n/icon.png index 03bf1b5d0..b1e5c5abb 100644 Binary files a/graphics/pokemon/unown/n/icon.png and b/graphics/pokemon/unown/n/icon.png differ diff --git a/graphics/pokemon/unown/o/anim_front.png b/graphics/pokemon/unown/o/anim_front.png index 24c6bcafe..b32cdb325 100644 Binary files a/graphics/pokemon/unown/o/anim_front.png and b/graphics/pokemon/unown/o/anim_front.png differ diff --git a/graphics/pokemon/unown/o/back.png b/graphics/pokemon/unown/o/back.png index 0ec47e704..7260da757 100644 Binary files a/graphics/pokemon/unown/o/back.png and b/graphics/pokemon/unown/o/back.png differ diff --git a/graphics/pokemon/unown/o/icon.png b/graphics/pokemon/unown/o/icon.png index 42f16007b..14a88d062 100644 Binary files a/graphics/pokemon/unown/o/icon.png and b/graphics/pokemon/unown/o/icon.png differ diff --git a/graphics/pokemon/unown/p/anim_front.png b/graphics/pokemon/unown/p/anim_front.png index c3e207aa2..01aa0329c 100644 Binary files a/graphics/pokemon/unown/p/anim_front.png and b/graphics/pokemon/unown/p/anim_front.png differ diff --git a/graphics/pokemon/unown/p/back.png b/graphics/pokemon/unown/p/back.png index 45d23a7f5..e275a3a96 100644 Binary files a/graphics/pokemon/unown/p/back.png and b/graphics/pokemon/unown/p/back.png differ diff --git a/graphics/pokemon/unown/p/icon.png b/graphics/pokemon/unown/p/icon.png index ae40ea062..7a7afb8de 100644 Binary files a/graphics/pokemon/unown/p/icon.png and b/graphics/pokemon/unown/p/icon.png differ diff --git a/graphics/pokemon/unown/q/anim_front.png b/graphics/pokemon/unown/q/anim_front.png index 960f60f3d..18c930e69 100644 Binary files a/graphics/pokemon/unown/q/anim_front.png and b/graphics/pokemon/unown/q/anim_front.png differ diff --git a/graphics/pokemon/unown/q/back.png b/graphics/pokemon/unown/q/back.png index fa7f9459e..08d5a0d0a 100644 Binary files a/graphics/pokemon/unown/q/back.png and b/graphics/pokemon/unown/q/back.png differ diff --git a/graphics/pokemon/unown/q/icon.png b/graphics/pokemon/unown/q/icon.png index 657782681..2270f8373 100644 Binary files a/graphics/pokemon/unown/q/icon.png and b/graphics/pokemon/unown/q/icon.png differ diff --git a/graphics/pokemon/unown/question_mark/anim_front.png b/graphics/pokemon/unown/question_mark/anim_front.png index ebf7d9004..8a2f8bb6c 100644 Binary files a/graphics/pokemon/unown/question_mark/anim_front.png and b/graphics/pokemon/unown/question_mark/anim_front.png differ diff --git a/graphics/pokemon/unown/question_mark/back.png b/graphics/pokemon/unown/question_mark/back.png index 0e80d551a..3d9ae3ee3 100644 Binary files a/graphics/pokemon/unown/question_mark/back.png and b/graphics/pokemon/unown/question_mark/back.png differ diff --git a/graphics/pokemon/unown/question_mark/icon.png b/graphics/pokemon/unown/question_mark/icon.png index 38b50b84d..a9bb50930 100644 Binary files a/graphics/pokemon/unown/question_mark/icon.png and b/graphics/pokemon/unown/question_mark/icon.png differ diff --git a/graphics/pokemon/unown/r/anim_front.png b/graphics/pokemon/unown/r/anim_front.png index cee32e532..0b861d277 100644 Binary files a/graphics/pokemon/unown/r/anim_front.png and b/graphics/pokemon/unown/r/anim_front.png differ diff --git a/graphics/pokemon/unown/r/back.png b/graphics/pokemon/unown/r/back.png index 3be20b136..9ea2bd6f7 100644 Binary files a/graphics/pokemon/unown/r/back.png and b/graphics/pokemon/unown/r/back.png differ diff --git a/graphics/pokemon/unown/r/icon.png b/graphics/pokemon/unown/r/icon.png index 5e13542d8..6ba4d5764 100644 Binary files a/graphics/pokemon/unown/r/icon.png and b/graphics/pokemon/unown/r/icon.png differ diff --git a/graphics/pokemon/unown/s/anim_front.png b/graphics/pokemon/unown/s/anim_front.png index df15f8db3..17016ac1c 100644 Binary files a/graphics/pokemon/unown/s/anim_front.png and b/graphics/pokemon/unown/s/anim_front.png differ diff --git a/graphics/pokemon/unown/s/back.png b/graphics/pokemon/unown/s/back.png index bc73cf26d..c85571503 100644 Binary files a/graphics/pokemon/unown/s/back.png and b/graphics/pokemon/unown/s/back.png differ diff --git a/graphics/pokemon/unown/s/icon.png b/graphics/pokemon/unown/s/icon.png index 1d7392031..44f17718b 100644 Binary files a/graphics/pokemon/unown/s/icon.png and b/graphics/pokemon/unown/s/icon.png differ diff --git a/graphics/pokemon/unown/t/anim_front.png b/graphics/pokemon/unown/t/anim_front.png index 20e30043e..556ab78ce 100644 Binary files a/graphics/pokemon/unown/t/anim_front.png and b/graphics/pokemon/unown/t/anim_front.png differ diff --git a/graphics/pokemon/unown/t/back.png b/graphics/pokemon/unown/t/back.png index ed0a5278c..f840953b8 100644 Binary files a/graphics/pokemon/unown/t/back.png and b/graphics/pokemon/unown/t/back.png differ diff --git a/graphics/pokemon/unown/t/icon.png b/graphics/pokemon/unown/t/icon.png index a506e206f..9023b7366 100644 Binary files a/graphics/pokemon/unown/t/icon.png and b/graphics/pokemon/unown/t/icon.png differ diff --git a/graphics/pokemon/unown/u/anim_front.png b/graphics/pokemon/unown/u/anim_front.png index 7e10c0424..cea47fd5b 100644 Binary files a/graphics/pokemon/unown/u/anim_front.png and b/graphics/pokemon/unown/u/anim_front.png differ diff --git a/graphics/pokemon/unown/u/back.png b/graphics/pokemon/unown/u/back.png index af2917fc9..8d99bd088 100644 Binary files a/graphics/pokemon/unown/u/back.png and b/graphics/pokemon/unown/u/back.png differ diff --git a/graphics/pokemon/unown/u/icon.png b/graphics/pokemon/unown/u/icon.png index dfedcc8b5..3d315ebf2 100644 Binary files a/graphics/pokemon/unown/u/icon.png and b/graphics/pokemon/unown/u/icon.png differ diff --git a/graphics/pokemon/unown/v/anim_front.png b/graphics/pokemon/unown/v/anim_front.png index cb5182434..d073949e5 100644 Binary files a/graphics/pokemon/unown/v/anim_front.png and b/graphics/pokemon/unown/v/anim_front.png differ diff --git a/graphics/pokemon/unown/v/back.png b/graphics/pokemon/unown/v/back.png index de7241f08..41e215720 100644 Binary files a/graphics/pokemon/unown/v/back.png and b/graphics/pokemon/unown/v/back.png differ diff --git a/graphics/pokemon/unown/v/icon.png b/graphics/pokemon/unown/v/icon.png index b0dadd195..f973a3d85 100644 Binary files a/graphics/pokemon/unown/v/icon.png and b/graphics/pokemon/unown/v/icon.png differ diff --git a/graphics/pokemon/unown/w/anim_front.png b/graphics/pokemon/unown/w/anim_front.png index 64f472a82..d34a16f05 100644 Binary files a/graphics/pokemon/unown/w/anim_front.png and b/graphics/pokemon/unown/w/anim_front.png differ diff --git a/graphics/pokemon/unown/w/back.png b/graphics/pokemon/unown/w/back.png index 170e9f643..3d42e4eb2 100644 Binary files a/graphics/pokemon/unown/w/back.png and b/graphics/pokemon/unown/w/back.png differ diff --git a/graphics/pokemon/unown/w/icon.png b/graphics/pokemon/unown/w/icon.png index 285d71bd5..aabb0663e 100644 Binary files a/graphics/pokemon/unown/w/icon.png and b/graphics/pokemon/unown/w/icon.png differ diff --git a/graphics/pokemon/unown/x/anim_front.png b/graphics/pokemon/unown/x/anim_front.png index 190a2c471..a75ab916c 100644 Binary files a/graphics/pokemon/unown/x/anim_front.png and b/graphics/pokemon/unown/x/anim_front.png differ diff --git a/graphics/pokemon/unown/x/back.png b/graphics/pokemon/unown/x/back.png index 18ad8f825..a21d5a9c3 100644 Binary files a/graphics/pokemon/unown/x/back.png and b/graphics/pokemon/unown/x/back.png differ diff --git a/graphics/pokemon/unown/x/icon.png b/graphics/pokemon/unown/x/icon.png index 5ed41d519..b5be9e10b 100644 Binary files a/graphics/pokemon/unown/x/icon.png and b/graphics/pokemon/unown/x/icon.png differ diff --git a/graphics/pokemon/unown/y/anim_front.png b/graphics/pokemon/unown/y/anim_front.png index ba3e67866..8b5221943 100644 Binary files a/graphics/pokemon/unown/y/anim_front.png and b/graphics/pokemon/unown/y/anim_front.png differ diff --git a/graphics/pokemon/unown/y/back.png b/graphics/pokemon/unown/y/back.png index de9cef002..3ccca08e8 100644 Binary files a/graphics/pokemon/unown/y/back.png and b/graphics/pokemon/unown/y/back.png differ diff --git a/graphics/pokemon/unown/y/icon.png b/graphics/pokemon/unown/y/icon.png index 38e5549d0..8923810aa 100644 Binary files a/graphics/pokemon/unown/y/icon.png and b/graphics/pokemon/unown/y/icon.png differ diff --git a/graphics/pokemon/unown/z/anim_front.png b/graphics/pokemon/unown/z/anim_front.png index 18b98510d..3080f7347 100644 Binary files a/graphics/pokemon/unown/z/anim_front.png and b/graphics/pokemon/unown/z/anim_front.png differ diff --git a/graphics/pokemon/unown/z/back.png b/graphics/pokemon/unown/z/back.png index 51b410b97..e1f528a2b 100644 Binary files a/graphics/pokemon/unown/z/back.png and b/graphics/pokemon/unown/z/back.png differ diff --git a/graphics/pokemon/unown/z/icon.png b/graphics/pokemon/unown/z/icon.png index 16a390e2a..a14f73696 100644 Binary files a/graphics/pokemon/unown/z/icon.png and b/graphics/pokemon/unown/z/icon.png differ diff --git a/graphics/pokemon/ursaluna/back.png b/graphics/pokemon/ursaluna/back.png index 8fa2657d8..e221d873e 100644 Binary files a/graphics/pokemon/ursaluna/back.png and b/graphics/pokemon/ursaluna/back.png differ diff --git a/graphics/pokemon/ursaluna/front.png b/graphics/pokemon/ursaluna/front.png index 35b3b4e09..954e6b802 100644 Binary files a/graphics/pokemon/ursaluna/front.png and b/graphics/pokemon/ursaluna/front.png differ diff --git a/graphics/pokemon/ursaluna/icon.png b/graphics/pokemon/ursaluna/icon.png index e2689cf35..8a8470407 100644 Binary files a/graphics/pokemon/ursaluna/icon.png and b/graphics/pokemon/ursaluna/icon.png differ diff --git a/graphics/pokemon/ursaring/anim_front.png b/graphics/pokemon/ursaring/anim_front.png index 567adef8d..3a8e048b2 100644 Binary files a/graphics/pokemon/ursaring/anim_front.png and b/graphics/pokemon/ursaring/anim_front.png differ diff --git a/graphics/pokemon/ursaring/back.png b/graphics/pokemon/ursaring/back.png index 95001242b..8fea60bf0 100644 Binary files a/graphics/pokemon/ursaring/back.png and b/graphics/pokemon/ursaring/back.png differ diff --git a/graphics/pokemon/ursaring/icon.png b/graphics/pokemon/ursaring/icon.png index ff59818c7..41fce53c4 100644 Binary files a/graphics/pokemon/ursaring/icon.png and b/graphics/pokemon/ursaring/icon.png differ diff --git a/graphics/pokemon/urshifu/back.png b/graphics/pokemon/urshifu/back.png index 219918198..c47c55139 100644 Binary files a/graphics/pokemon/urshifu/back.png and b/graphics/pokemon/urshifu/back.png differ diff --git a/graphics/pokemon/urshifu/front.png b/graphics/pokemon/urshifu/front.png index 216c97161..cbb462be2 100644 Binary files a/graphics/pokemon/urshifu/front.png and b/graphics/pokemon/urshifu/front.png differ diff --git a/graphics/pokemon/urshifu/icon.png b/graphics/pokemon/urshifu/icon.png index e8311b69f..28f64a50f 100644 Binary files a/graphics/pokemon/urshifu/icon.png and b/graphics/pokemon/urshifu/icon.png differ diff --git a/graphics/pokemon/urshifu/rapid_strike_style/back.png b/graphics/pokemon/urshifu/rapid_strike_style/back.png index 02d3d9f7d..f7ea0239b 100644 Binary files a/graphics/pokemon/urshifu/rapid_strike_style/back.png and b/graphics/pokemon/urshifu/rapid_strike_style/back.png differ diff --git a/graphics/pokemon/urshifu/rapid_strike_style/front.png b/graphics/pokemon/urshifu/rapid_strike_style/front.png index cdead5434..09d729714 100644 Binary files a/graphics/pokemon/urshifu/rapid_strike_style/front.png and b/graphics/pokemon/urshifu/rapid_strike_style/front.png differ diff --git a/graphics/pokemon/uxie/anim_front.png b/graphics/pokemon/uxie/anim_front.png index ff1fcdac1..4753ea3cb 100644 Binary files a/graphics/pokemon/uxie/anim_front.png and b/graphics/pokemon/uxie/anim_front.png differ diff --git a/graphics/pokemon/uxie/back.png b/graphics/pokemon/uxie/back.png index 2e3850f81..5f6292d52 100644 Binary files a/graphics/pokemon/uxie/back.png and b/graphics/pokemon/uxie/back.png differ diff --git a/graphics/pokemon/uxie/icon.png b/graphics/pokemon/uxie/icon.png index 66987daf4..e5d255ee0 100644 Binary files a/graphics/pokemon/uxie/icon.png and b/graphics/pokemon/uxie/icon.png differ diff --git a/graphics/pokemon/vanillish/anim_front.png b/graphics/pokemon/vanillish/anim_front.png index b16b247db..6ccecc5c8 100644 Binary files a/graphics/pokemon/vanillish/anim_front.png and b/graphics/pokemon/vanillish/anim_front.png differ diff --git a/graphics/pokemon/vanillish/back.png b/graphics/pokemon/vanillish/back.png index 6ed0a18a4..90fa81b18 100644 Binary files a/graphics/pokemon/vanillish/back.png and b/graphics/pokemon/vanillish/back.png differ diff --git a/graphics/pokemon/vanillish/icon.png b/graphics/pokemon/vanillish/icon.png index 22abc9a90..5196c8de7 100644 Binary files a/graphics/pokemon/vanillish/icon.png and b/graphics/pokemon/vanillish/icon.png differ diff --git a/graphics/pokemon/vanillite/anim_front.png b/graphics/pokemon/vanillite/anim_front.png index 8ffcd3551..a837f0dcd 100644 Binary files a/graphics/pokemon/vanillite/anim_front.png and b/graphics/pokemon/vanillite/anim_front.png differ diff --git a/graphics/pokemon/vanillite/back.png b/graphics/pokemon/vanillite/back.png index c23e5aee1..b91c11e61 100644 Binary files a/graphics/pokemon/vanillite/back.png and b/graphics/pokemon/vanillite/back.png differ diff --git a/graphics/pokemon/vanillite/icon.png b/graphics/pokemon/vanillite/icon.png index 94e639532..164a9a7d9 100644 Binary files a/graphics/pokemon/vanillite/icon.png and b/graphics/pokemon/vanillite/icon.png differ diff --git a/graphics/pokemon/vanilluxe/anim_front.png b/graphics/pokemon/vanilluxe/anim_front.png index ced406c17..c2dc106e7 100644 Binary files a/graphics/pokemon/vanilluxe/anim_front.png and b/graphics/pokemon/vanilluxe/anim_front.png differ diff --git a/graphics/pokemon/vanilluxe/back.png b/graphics/pokemon/vanilluxe/back.png index e120edf84..40f9ad9cb 100644 Binary files a/graphics/pokemon/vanilluxe/back.png and b/graphics/pokemon/vanilluxe/back.png differ diff --git a/graphics/pokemon/vaporeon/back.png b/graphics/pokemon/vaporeon/back.png index 34b9d1e79..67c3e6475 100644 Binary files a/graphics/pokemon/vaporeon/back.png and b/graphics/pokemon/vaporeon/back.png differ diff --git a/graphics/pokemon/vaporeon/icon.png b/graphics/pokemon/vaporeon/icon.png index 7c598553f..151f588b2 100644 Binary files a/graphics/pokemon/vaporeon/icon.png and b/graphics/pokemon/vaporeon/icon.png differ diff --git a/graphics/pokemon/venipede/anim_front.png b/graphics/pokemon/venipede/anim_front.png index 3bee7fa0b..27bad5955 100644 Binary files a/graphics/pokemon/venipede/anim_front.png and b/graphics/pokemon/venipede/anim_front.png differ diff --git a/graphics/pokemon/venipede/back.png b/graphics/pokemon/venipede/back.png index 5f4bfdce0..cf86f166a 100644 Binary files a/graphics/pokemon/venipede/back.png and b/graphics/pokemon/venipede/back.png differ diff --git a/graphics/pokemon/venipede/icon.png b/graphics/pokemon/venipede/icon.png index 6377953d2..c53e2a084 100644 Binary files a/graphics/pokemon/venipede/icon.png and b/graphics/pokemon/venipede/icon.png differ diff --git a/graphics/pokemon/venomoth/anim_front.png b/graphics/pokemon/venomoth/anim_front.png index 9f219239b..aafa830fd 100644 Binary files a/graphics/pokemon/venomoth/anim_front.png and b/graphics/pokemon/venomoth/anim_front.png differ diff --git a/graphics/pokemon/venomoth/back.png b/graphics/pokemon/venomoth/back.png index 9a3eff9cd..d648e3e04 100644 Binary files a/graphics/pokemon/venomoth/back.png and b/graphics/pokemon/venomoth/back.png differ diff --git a/graphics/pokemon/venomoth/icon.png b/graphics/pokemon/venomoth/icon.png index 71e457ef3..fa61967d9 100644 Binary files a/graphics/pokemon/venomoth/icon.png and b/graphics/pokemon/venomoth/icon.png differ diff --git a/graphics/pokemon/venomoth/normal.pal b/graphics/pokemon/venomoth/normal.pal index 92234d0a0..56c25c37b 100644 --- a/graphics/pokemon/venomoth/normal.pal +++ b/graphics/pokemon/venomoth/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 88 120 -156 139 189 -246 222 255 -213 172 222 -16 16 16 -213 172 222 -98 74 115 -238 197 255 -156 139 189 -248 248 248 +255 255 255 +230 230 230 172 197 197 -98 82 57 -164 131 123 +230 213 172 197 172 139 -224 224 224 +164 131 123 +98 82 57 +255 0 255 +255 0 255 +16 16 16 +246 222 255 +238 197 255 +213 172 222 +156 139 189 +98 74 115 diff --git a/graphics/pokemon/venomoth/shiny.pal b/graphics/pokemon/venomoth/shiny.pal index 5f3aaa698..75da213e0 100644 --- a/graphics/pokemon/venomoth/shiny.pal +++ b/graphics/pokemon/venomoth/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 72 120 -104 136 192 -192 224 248 -168 192 248 +255 255 255 +230 222 230 +180 189 197 +230 205 172 +197 164 139 +164 123 123 +98 74 57 +255 0 255 +255 0 255 16 16 16 -168 192 248 -56 72 120 -192 224 248 -104 136 192 -248 248 248 -176 184 192 -104 80 72 -168 128 128 -208 176 152 -224 224 224 +180 222 255 +156 189 255 +131 164 230 +98 131 197 +49 65 123 diff --git a/graphics/pokemon/venonat/anim_front.png b/graphics/pokemon/venonat/anim_front.png index bfa77a5a2..87ff5d526 100644 Binary files a/graphics/pokemon/venonat/anim_front.png and b/graphics/pokemon/venonat/anim_front.png differ diff --git a/graphics/pokemon/venonat/back.png b/graphics/pokemon/venonat/back.png index da5e27e7d..90b1898a1 100644 Binary files a/graphics/pokemon/venonat/back.png and b/graphics/pokemon/venonat/back.png differ diff --git a/graphics/pokemon/venonat/icon.png b/graphics/pokemon/venonat/icon.png index f68202770..5e8a47d2e 100644 Binary files a/graphics/pokemon/venonat/icon.png and b/graphics/pokemon/venonat/icon.png differ diff --git a/graphics/pokemon/venonat/normal.pal b/graphics/pokemon/venonat/normal.pal index 237a56d26..385b31ce6 100644 --- a/graphics/pokemon/venonat/normal.pal +++ b/graphics/pokemon/venonat/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -123 123 123 255 255 255 213 213 213 -16 16 16 -98 74 123 -139 106 164 -82 16 16 -180 65 90 -255 90 90 +123 123 123 255 172 180 -49 41 82 -115 65 41 +255 90 90 +180 65 90 +82 16 16 238 189 156 189 148 106 -144 136 200 +115 65 41 +164 139 189 +139 106 164 +98 74 123 +49 41 82 +16 16 16 diff --git a/graphics/pokemon/venonat/shiny.pal b/graphics/pokemon/venonat/shiny.pal index 731050656..deff2ef88 100644 --- a/graphics/pokemon/venonat/shiny.pal +++ b/graphics/pokemon/venonat/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 112 120 -248 248 248 -200 200 208 +255 255 255 +205 205 213 +115 115 123 +172 230 255 +90 156 255 +41 98 197 +0 41 148 +246 189 156 +197 148 106 +123 65 41 +164 139 197 +139 106 172 +98 74 131 +49 41 90 16 16 16 -96 72 128 -136 104 168 -0 40 144 -40 96 192 -88 152 248 -168 224 248 -48 40 88 -120 64 40 -240 184 152 -192 144 104 -160 136 192 diff --git a/graphics/pokemon/venusaur/anim_front.png b/graphics/pokemon/venusaur/anim_front.png index 90c41e5b1..e224c3741 100644 Binary files a/graphics/pokemon/venusaur/anim_front.png and b/graphics/pokemon/venusaur/anim_front.png differ diff --git a/graphics/pokemon/venusaur/anim_frontf.png b/graphics/pokemon/venusaur/anim_frontf.png index 57aec1294..b32f1dd45 100644 Binary files a/graphics/pokemon/venusaur/anim_frontf.png and b/graphics/pokemon/venusaur/anim_frontf.png differ diff --git a/graphics/pokemon/venusaur/back.png b/graphics/pokemon/venusaur/back.png index e5c2a3d0b..f00ff70ae 100644 Binary files a/graphics/pokemon/venusaur/back.png and b/graphics/pokemon/venusaur/back.png differ diff --git a/graphics/pokemon/venusaur/backf.png b/graphics/pokemon/venusaur/backf.png index 7c8661f8b..ff3d45016 100644 Binary files a/graphics/pokemon/venusaur/backf.png and b/graphics/pokemon/venusaur/backf.png differ diff --git a/graphics/pokemon/venusaur/mega/back.png b/graphics/pokemon/venusaur/mega/back.png index c91b7db3d..5da7c6cb8 100644 Binary files a/graphics/pokemon/venusaur/mega/back.png and b/graphics/pokemon/venusaur/mega/back.png differ diff --git a/graphics/pokemon/venusaur/mega/front.png b/graphics/pokemon/venusaur/mega/front.png index a6fccf64e..ec8e1057c 100644 Binary files a/graphics/pokemon/venusaur/mega/front.png and b/graphics/pokemon/venusaur/mega/front.png differ diff --git a/graphics/pokemon/venusaur/normal.pal b/graphics/pokemon/venusaur/normal.pal index d6751ffe0..9fef14fce 100644 --- a/graphics/pokemon/venusaur/normal.pal +++ b/graphics/pokemon/venusaur/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -248 192 248 -128 48 0 -248 184 184 +152 160 208 +16 82 65 +16 120 104 +32 176 152 +88 208 192 +222 65 65 248 120 112 -216 64 64 -184 104 48 -216 184 40 +131 49 0 +189 106 49 +222 189 41 +255 238 82 16 16 16 -248 232 80 -16 80 64 +248 184 184 88 152 56 128 216 120 -88 208 192 -32 176 152 -16 120 104 -248 248 248 +255 255 255 diff --git a/graphics/pokemon/venusaur/shiny.pal b/graphics/pokemon/venusaur/shiny.pal index 82c1e5167..35e0d1025 100644 --- a/graphics/pokemon/venusaur/shiny.pal +++ b/graphics/pokemon/venusaur/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -208 248 184 -128 48 8 -248 248 216 -248 216 24 -224 144 16 -184 112 64 -216 184 40 -16 16 16 +152 160 208 +57 90 32 +120 152 40 +164 213 74 +205 238 82 +230 139 0 +255 213 0 +128 48 0 +189 106 49 +192 160 32 248 232 80 -56 88 32 +16 16 16 +248 248 216 88 152 56 128 216 120 -200 232 80 -160 208 72 -120 152 40 -248 248 248 +255 255 255 diff --git a/graphics/pokemon/vespiquen/anim_front.png b/graphics/pokemon/vespiquen/anim_front.png index ba2a75308..abaa335c8 100644 Binary files a/graphics/pokemon/vespiquen/anim_front.png and b/graphics/pokemon/vespiquen/anim_front.png differ diff --git a/graphics/pokemon/vespiquen/back.png b/graphics/pokemon/vespiquen/back.png index 7586f4f6e..ebc7afaa7 100644 Binary files a/graphics/pokemon/vespiquen/back.png and b/graphics/pokemon/vespiquen/back.png differ diff --git a/graphics/pokemon/vespiquen/icon.png b/graphics/pokemon/vespiquen/icon.png index c636fb86c..8c6c93516 100644 Binary files a/graphics/pokemon/vespiquen/icon.png and b/graphics/pokemon/vespiquen/icon.png differ diff --git a/graphics/pokemon/vibrava/back.png b/graphics/pokemon/vibrava/back.png index 1515c97e3..5f5ad457a 100644 Binary files a/graphics/pokemon/vibrava/back.png and b/graphics/pokemon/vibrava/back.png differ diff --git a/graphics/pokemon/vibrava/icon.png b/graphics/pokemon/vibrava/icon.png index 27a2ef9e3..638aa724a 100644 Binary files a/graphics/pokemon/vibrava/icon.png and b/graphics/pokemon/vibrava/icon.png differ diff --git a/graphics/pokemon/victini/anim_front.png b/graphics/pokemon/victini/anim_front.png index 8cd13f515..a6b9408ee 100644 Binary files a/graphics/pokemon/victini/anim_front.png and b/graphics/pokemon/victini/anim_front.png differ diff --git a/graphics/pokemon/victini/back.png b/graphics/pokemon/victini/back.png index 5062634ea..cfef55fef 100644 Binary files a/graphics/pokemon/victini/back.png and b/graphics/pokemon/victini/back.png differ diff --git a/graphics/pokemon/victreebel/anim_front.png b/graphics/pokemon/victreebel/anim_front.png index 2d7ed01da..b633b6f4b 100644 Binary files a/graphics/pokemon/victreebel/anim_front.png and b/graphics/pokemon/victreebel/anim_front.png differ diff --git a/graphics/pokemon/victreebel/back.png b/graphics/pokemon/victreebel/back.png index 10afd1c67..a8eaef0d0 100644 Binary files a/graphics/pokemon/victreebel/back.png and b/graphics/pokemon/victreebel/back.png differ diff --git a/graphics/pokemon/victreebel/icon.png b/graphics/pokemon/victreebel/icon.png index 7bbad038d..553104e51 100644 Binary files a/graphics/pokemon/victreebel/icon.png and b/graphics/pokemon/victreebel/icon.png differ diff --git a/graphics/pokemon/victreebel/normal.pal b/graphics/pokemon/victreebel/normal.pal index ef9c40982..4e2238e77 100644 --- a/graphics/pokemon/victreebel/normal.pal +++ b/graphics/pokemon/victreebel/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 -98 82 41 -16 98 57 -164 123 49 +152 160 208 0 0 0 -139 197 123 -74 164 123 -197 90 32 -238 139 82 -248 248 248 -200 216 208 +189 197 197 +255 255 255 +98 82 41 +164 123 49 222 189 82 -144 152 32 238 213 106 246 238 148 131 24 0 +197 90 32 +238 139 82 +16 98 57 +74 164 123 +139 197 123 +180 230 156 diff --git a/graphics/pokemon/victreebel/shiny.pal b/graphics/pokemon/victreebel/shiny.pal index 1aac75ff4..173dbf31f 100644 --- a/graphics/pokemon/victreebel/shiny.pal +++ b/graphics/pokemon/victreebel/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -96 80 40 -80 64 24 -160 120 48 -16 16 16 -192 176 88 -144 128 80 -72 104 176 -96 152 240 -248 248 248 -184 192 192 -176 224 72 -144 152 32 -216 248 88 -232 248 152 -0 40 152 +208 152 160 +0 0 0 +189 197 197 +255 255 255 +98 82 41 +164 123 49 +180 230 57 +222 255 90 +230 255 131 +0 41 156 +41 90 197 +74 139 246 +98 82 24 +164 148 90 +197 180 90 +230 213 123 diff --git a/graphics/pokemon/vigoroth/anim_front.png b/graphics/pokemon/vigoroth/anim_front.png index bb4686a74..deb372530 100644 Binary files a/graphics/pokemon/vigoroth/anim_front.png and b/graphics/pokemon/vigoroth/anim_front.png differ diff --git a/graphics/pokemon/vigoroth/back.png b/graphics/pokemon/vigoroth/back.png index 97113dc06..e0e351912 100644 Binary files a/graphics/pokemon/vigoroth/back.png and b/graphics/pokemon/vigoroth/back.png differ diff --git a/graphics/pokemon/vigoroth/icon.png b/graphics/pokemon/vigoroth/icon.png index 5a414bd5c..866b8ee55 100644 Binary files a/graphics/pokemon/vigoroth/icon.png and b/graphics/pokemon/vigoroth/icon.png differ diff --git a/graphics/pokemon/vikavolt/back.png b/graphics/pokemon/vikavolt/back.png index 1bf9dc71a..d63b50f29 100644 Binary files a/graphics/pokemon/vikavolt/back.png and b/graphics/pokemon/vikavolt/back.png differ diff --git a/graphics/pokemon/vikavolt/icon.png b/graphics/pokemon/vikavolt/icon.png index 94700b0f7..7a8f2cff4 100644 Binary files a/graphics/pokemon/vikavolt/icon.png and b/graphics/pokemon/vikavolt/icon.png differ diff --git a/graphics/pokemon/vileplume/anim_front.png b/graphics/pokemon/vileplume/anim_front.png index f21019e3c..ca062889d 100644 Binary files a/graphics/pokemon/vileplume/anim_front.png and b/graphics/pokemon/vileplume/anim_front.png differ diff --git a/graphics/pokemon/vileplume/anim_frontf.png b/graphics/pokemon/vileplume/anim_frontf.png index b77e9aadf..9ba0298e1 100644 Binary files a/graphics/pokemon/vileplume/anim_frontf.png and b/graphics/pokemon/vileplume/anim_frontf.png differ diff --git a/graphics/pokemon/vileplume/back.png b/graphics/pokemon/vileplume/back.png index 43f520ddf..2ddd23e8f 100644 Binary files a/graphics/pokemon/vileplume/back.png and b/graphics/pokemon/vileplume/back.png differ diff --git a/graphics/pokemon/vileplume/backf.png b/graphics/pokemon/vileplume/backf.png index 0aa3c338c..ff5be8baf 100644 Binary files a/graphics/pokemon/vileplume/backf.png and b/graphics/pokemon/vileplume/backf.png differ diff --git a/graphics/pokemon/vileplume/normal.pal b/graphics/pokemon/vileplume/normal.pal index f7f01cae2..425069bf0 100644 --- a/graphics/pokemon/vileplume/normal.pal +++ b/graphics/pokemon/vileplume/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -189 49 74 -123 24 16 -255 98 98 +240 112 112 +248 128 40 +200 96 24 +144 72 0 +240 136 136 +152 56 64 +216 72 88 +112 24 16 255 205 213 -238 49 49 246 172 180 -16 16 16 -255 164 41 -180 98 32 -40 40 40 -197 139 32 -24 41 74 -57 82 82 +115 131 164 90 98 131 -40 40 40 +56 64 96 +24 41 74 +16 16 16 diff --git a/graphics/pokemon/vileplume/shiny.pal b/graphics/pokemon/vileplume/shiny.pal index 1480c0cb6..fd75dec7d 100644 --- a/graphics/pokemon/vileplume/shiny.pal +++ b/graphics/pokemon/vileplume/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 -184 96 40 -128 64 16 -248 184 80 -248 232 208 -232 144 64 -240 208 176 +152 160 208 +248 176 64 +255 164 41 +192 152 40 +176 104 32 +248 184 96 +197 115 57 +232 136 48 +131 65 16 +255 238 213 +246 213 180 +139 213 164 +98 172 106 +65 123 65 +32 74 24 16 16 16 -248 184 104 -136 112 56 -16 16 16 -184 152 64 -32 72 24 -64 120 64 -104 160 112 -40 40 40 diff --git a/graphics/pokemon/virizion/back.png b/graphics/pokemon/virizion/back.png index dd29f04de..21e5ee93b 100644 Binary files a/graphics/pokemon/virizion/back.png and b/graphics/pokemon/virizion/back.png differ diff --git a/graphics/pokemon/vivillon/anim_front.png b/graphics/pokemon/vivillon/anim_front.png index 802b633be..f4c3ee9ca 100644 Binary files a/graphics/pokemon/vivillon/anim_front.png and b/graphics/pokemon/vivillon/anim_front.png differ diff --git a/graphics/pokemon/vivillon/archipelago/anim_front.png b/graphics/pokemon/vivillon/archipelago/anim_front.png index 15b85bde5..533118f35 100644 Binary files a/graphics/pokemon/vivillon/archipelago/anim_front.png and b/graphics/pokemon/vivillon/archipelago/anim_front.png differ diff --git a/graphics/pokemon/vivillon/archipelago/back.png b/graphics/pokemon/vivillon/archipelago/back.png index cce89b39a..7d8e5b890 100644 Binary files a/graphics/pokemon/vivillon/archipelago/back.png and b/graphics/pokemon/vivillon/archipelago/back.png differ diff --git a/graphics/pokemon/vivillon/archipelago/icon.png b/graphics/pokemon/vivillon/archipelago/icon.png index d184bec24..5dfb32bb6 100644 Binary files a/graphics/pokemon/vivillon/archipelago/icon.png and b/graphics/pokemon/vivillon/archipelago/icon.png differ diff --git a/graphics/pokemon/vivillon/back.png b/graphics/pokemon/vivillon/back.png index 112a8e79a..99ff947df 100644 Binary files a/graphics/pokemon/vivillon/back.png and b/graphics/pokemon/vivillon/back.png differ diff --git a/graphics/pokemon/vivillon/continental/anim_front.png b/graphics/pokemon/vivillon/continental/anim_front.png index b7b2dc14c..269c3762c 100644 Binary files a/graphics/pokemon/vivillon/continental/anim_front.png and b/graphics/pokemon/vivillon/continental/anim_front.png differ diff --git a/graphics/pokemon/vivillon/continental/back.png b/graphics/pokemon/vivillon/continental/back.png index 1c4147ca8..8fe8b49ca 100644 Binary files a/graphics/pokemon/vivillon/continental/back.png and b/graphics/pokemon/vivillon/continental/back.png differ diff --git a/graphics/pokemon/vivillon/elegant/anim_front.png b/graphics/pokemon/vivillon/elegant/anim_front.png index 34c9f7428..bf3e2aabb 100644 Binary files a/graphics/pokemon/vivillon/elegant/anim_front.png and b/graphics/pokemon/vivillon/elegant/anim_front.png differ diff --git a/graphics/pokemon/vivillon/elegant/back.png b/graphics/pokemon/vivillon/elegant/back.png index d649638a2..28beb285c 100644 Binary files a/graphics/pokemon/vivillon/elegant/back.png and b/graphics/pokemon/vivillon/elegant/back.png differ diff --git a/graphics/pokemon/vivillon/fancy/anim_front.png b/graphics/pokemon/vivillon/fancy/anim_front.png index e62332c3f..3a6cdae3a 100644 Binary files a/graphics/pokemon/vivillon/fancy/anim_front.png and b/graphics/pokemon/vivillon/fancy/anim_front.png differ diff --git a/graphics/pokemon/vivillon/fancy/back.png b/graphics/pokemon/vivillon/fancy/back.png index 152dbc179..4ee61c5d1 100644 Binary files a/graphics/pokemon/vivillon/fancy/back.png and b/graphics/pokemon/vivillon/fancy/back.png differ diff --git a/graphics/pokemon/vivillon/garden/anim_front.png b/graphics/pokemon/vivillon/garden/anim_front.png index c3023d7a0..7fab9a646 100644 Binary files a/graphics/pokemon/vivillon/garden/anim_front.png and b/graphics/pokemon/vivillon/garden/anim_front.png differ diff --git a/graphics/pokemon/vivillon/garden/back.png b/graphics/pokemon/vivillon/garden/back.png index dfc02180b..06fb8e032 100644 Binary files a/graphics/pokemon/vivillon/garden/back.png and b/graphics/pokemon/vivillon/garden/back.png differ diff --git a/graphics/pokemon/vivillon/high_plains/anim_front.png b/graphics/pokemon/vivillon/high_plains/anim_front.png index ac5bc1dc0..5302ef41b 100644 Binary files a/graphics/pokemon/vivillon/high_plains/anim_front.png and b/graphics/pokemon/vivillon/high_plains/anim_front.png differ diff --git a/graphics/pokemon/vivillon/high_plains/back.png b/graphics/pokemon/vivillon/high_plains/back.png index 83b11cb86..457fcdd9e 100644 Binary files a/graphics/pokemon/vivillon/high_plains/back.png and b/graphics/pokemon/vivillon/high_plains/back.png differ diff --git a/graphics/pokemon/vivillon/high_plains/icon.png b/graphics/pokemon/vivillon/high_plains/icon.png index 40bb49bc7..6e2313e90 100644 Binary files a/graphics/pokemon/vivillon/high_plains/icon.png and b/graphics/pokemon/vivillon/high_plains/icon.png differ diff --git a/graphics/pokemon/vivillon/icon.png b/graphics/pokemon/vivillon/icon.png index b52804ed2..b9d27d02e 100644 Binary files a/graphics/pokemon/vivillon/icon.png and b/graphics/pokemon/vivillon/icon.png differ diff --git a/graphics/pokemon/vivillon/jungle/anim_front.png b/graphics/pokemon/vivillon/jungle/anim_front.png index f55738302..5b8b38534 100644 Binary files a/graphics/pokemon/vivillon/jungle/anim_front.png and b/graphics/pokemon/vivillon/jungle/anim_front.png differ diff --git a/graphics/pokemon/vivillon/jungle/back.png b/graphics/pokemon/vivillon/jungle/back.png index 9ffa11f99..03ebae21c 100644 Binary files a/graphics/pokemon/vivillon/jungle/back.png and b/graphics/pokemon/vivillon/jungle/back.png differ diff --git a/graphics/pokemon/vivillon/marine/anim_front.png b/graphics/pokemon/vivillon/marine/anim_front.png index 1a2336848..67b9959e7 100644 Binary files a/graphics/pokemon/vivillon/marine/anim_front.png and b/graphics/pokemon/vivillon/marine/anim_front.png differ diff --git a/graphics/pokemon/vivillon/marine/back.png b/graphics/pokemon/vivillon/marine/back.png index a22ef17ff..67146a43f 100644 Binary files a/graphics/pokemon/vivillon/marine/back.png and b/graphics/pokemon/vivillon/marine/back.png differ diff --git a/graphics/pokemon/vivillon/meadow/anim_front.png b/graphics/pokemon/vivillon/meadow/anim_front.png index b32ea4fdd..01f1afda7 100644 Binary files a/graphics/pokemon/vivillon/meadow/anim_front.png and b/graphics/pokemon/vivillon/meadow/anim_front.png differ diff --git a/graphics/pokemon/vivillon/meadow/back.png b/graphics/pokemon/vivillon/meadow/back.png index b05f45013..3aed33d08 100644 Binary files a/graphics/pokemon/vivillon/meadow/back.png and b/graphics/pokemon/vivillon/meadow/back.png differ diff --git a/graphics/pokemon/vivillon/meadow/icon.png b/graphics/pokemon/vivillon/meadow/icon.png index f206f3986..362158596 100644 Binary files a/graphics/pokemon/vivillon/meadow/icon.png and b/graphics/pokemon/vivillon/meadow/icon.png differ diff --git a/graphics/pokemon/vivillon/modern/anim_front.png b/graphics/pokemon/vivillon/modern/anim_front.png index 5f9ceb40d..43cda25e5 100644 Binary files a/graphics/pokemon/vivillon/modern/anim_front.png and b/graphics/pokemon/vivillon/modern/anim_front.png differ diff --git a/graphics/pokemon/vivillon/modern/back.png b/graphics/pokemon/vivillon/modern/back.png index 18d0edf6c..a1d309446 100644 Binary files a/graphics/pokemon/vivillon/modern/back.png and b/graphics/pokemon/vivillon/modern/back.png differ diff --git a/graphics/pokemon/vivillon/monsoon/anim_front.png b/graphics/pokemon/vivillon/monsoon/anim_front.png index e537884c7..c71d84993 100644 Binary files a/graphics/pokemon/vivillon/monsoon/anim_front.png and b/graphics/pokemon/vivillon/monsoon/anim_front.png differ diff --git a/graphics/pokemon/vivillon/monsoon/back.png b/graphics/pokemon/vivillon/monsoon/back.png index 73fb47e2e..e89b96057 100644 Binary files a/graphics/pokemon/vivillon/monsoon/back.png and b/graphics/pokemon/vivillon/monsoon/back.png differ diff --git a/graphics/pokemon/vivillon/ocean/anim_front.png b/graphics/pokemon/vivillon/ocean/anim_front.png index f5cd02218..d0cfcc35b 100644 Binary files a/graphics/pokemon/vivillon/ocean/anim_front.png and b/graphics/pokemon/vivillon/ocean/anim_front.png differ diff --git a/graphics/pokemon/vivillon/ocean/back.png b/graphics/pokemon/vivillon/ocean/back.png index 25f829b1f..bcf68c4ba 100644 Binary files a/graphics/pokemon/vivillon/ocean/back.png and b/graphics/pokemon/vivillon/ocean/back.png differ diff --git a/graphics/pokemon/vivillon/poke_ball/anim_front.png b/graphics/pokemon/vivillon/poke_ball/anim_front.png index a6f031757..4fca83e97 100644 Binary files a/graphics/pokemon/vivillon/poke_ball/anim_front.png and b/graphics/pokemon/vivillon/poke_ball/anim_front.png differ diff --git a/graphics/pokemon/vivillon/poke_ball/back.png b/graphics/pokemon/vivillon/poke_ball/back.png index 565d24fce..eae833dcf 100644 Binary files a/graphics/pokemon/vivillon/poke_ball/back.png and b/graphics/pokemon/vivillon/poke_ball/back.png differ diff --git a/graphics/pokemon/vivillon/polar/anim_front.png b/graphics/pokemon/vivillon/polar/anim_front.png index 0127fdbb5..d6c1c1a50 100644 Binary files a/graphics/pokemon/vivillon/polar/anim_front.png and b/graphics/pokemon/vivillon/polar/anim_front.png differ diff --git a/graphics/pokemon/vivillon/polar/back.png b/graphics/pokemon/vivillon/polar/back.png index 03d40abd2..b0b7bd93e 100644 Binary files a/graphics/pokemon/vivillon/polar/back.png and b/graphics/pokemon/vivillon/polar/back.png differ diff --git a/graphics/pokemon/vivillon/river/anim_front.png b/graphics/pokemon/vivillon/river/anim_front.png index d10057db9..e0544c089 100644 Binary files a/graphics/pokemon/vivillon/river/anim_front.png and b/graphics/pokemon/vivillon/river/anim_front.png differ diff --git a/graphics/pokemon/vivillon/river/back.png b/graphics/pokemon/vivillon/river/back.png index 33efc0d6a..01e70a38f 100644 Binary files a/graphics/pokemon/vivillon/river/back.png and b/graphics/pokemon/vivillon/river/back.png differ diff --git a/graphics/pokemon/vivillon/sandstorm/anim_front.png b/graphics/pokemon/vivillon/sandstorm/anim_front.png index 1f166b45b..71ce2181c 100644 Binary files a/graphics/pokemon/vivillon/sandstorm/anim_front.png and b/graphics/pokemon/vivillon/sandstorm/anim_front.png differ diff --git a/graphics/pokemon/vivillon/sandstorm/back.png b/graphics/pokemon/vivillon/sandstorm/back.png index 551174102..8ea799362 100644 Binary files a/graphics/pokemon/vivillon/sandstorm/back.png and b/graphics/pokemon/vivillon/sandstorm/back.png differ diff --git a/graphics/pokemon/vivillon/savanna/anim_front.png b/graphics/pokemon/vivillon/savanna/anim_front.png index d19799795..86090c1c3 100644 Binary files a/graphics/pokemon/vivillon/savanna/anim_front.png and b/graphics/pokemon/vivillon/savanna/anim_front.png differ diff --git a/graphics/pokemon/vivillon/savanna/back.png b/graphics/pokemon/vivillon/savanna/back.png index 2310291e5..fd46e2111 100644 Binary files a/graphics/pokemon/vivillon/savanna/back.png and b/graphics/pokemon/vivillon/savanna/back.png differ diff --git a/graphics/pokemon/vivillon/sun/anim_front.png b/graphics/pokemon/vivillon/sun/anim_front.png index 4d9eb6ac5..be28b3b4c 100644 Binary files a/graphics/pokemon/vivillon/sun/anim_front.png and b/graphics/pokemon/vivillon/sun/anim_front.png differ diff --git a/graphics/pokemon/vivillon/sun/back.png b/graphics/pokemon/vivillon/sun/back.png index 74dc2fe52..7e5acd4ad 100644 Binary files a/graphics/pokemon/vivillon/sun/back.png and b/graphics/pokemon/vivillon/sun/back.png differ diff --git a/graphics/pokemon/vivillon/tundra/anim_front.png b/graphics/pokemon/vivillon/tundra/anim_front.png index 614fafc45..fe7d7739c 100644 Binary files a/graphics/pokemon/vivillon/tundra/anim_front.png and b/graphics/pokemon/vivillon/tundra/anim_front.png differ diff --git a/graphics/pokemon/vivillon/tundra/back.png b/graphics/pokemon/vivillon/tundra/back.png index ddf9b97e8..b95140c11 100644 Binary files a/graphics/pokemon/vivillon/tundra/back.png and b/graphics/pokemon/vivillon/tundra/back.png differ diff --git a/graphics/pokemon/volbeat/anim_front.png b/graphics/pokemon/volbeat/anim_front.png index 9a118adf8..b635eae4e 100644 Binary files a/graphics/pokemon/volbeat/anim_front.png and b/graphics/pokemon/volbeat/anim_front.png differ diff --git a/graphics/pokemon/volbeat/back.png b/graphics/pokemon/volbeat/back.png index 9f5193db3..adbbc01e9 100644 Binary files a/graphics/pokemon/volbeat/back.png and b/graphics/pokemon/volbeat/back.png differ diff --git a/graphics/pokemon/volbeat/icon.png b/graphics/pokemon/volbeat/icon.png index 9b1e6ddee..6b16934cb 100644 Binary files a/graphics/pokemon/volbeat/icon.png and b/graphics/pokemon/volbeat/icon.png differ diff --git a/graphics/pokemon/volcanion/anim_front.png b/graphics/pokemon/volcanion/anim_front.png index 56acf1167..af2f7e37f 100644 Binary files a/graphics/pokemon/volcanion/anim_front.png and b/graphics/pokemon/volcanion/anim_front.png differ diff --git a/graphics/pokemon/volcanion/back.png b/graphics/pokemon/volcanion/back.png index 5d95a1c5f..21a33f9c6 100644 Binary files a/graphics/pokemon/volcanion/back.png and b/graphics/pokemon/volcanion/back.png differ diff --git a/graphics/pokemon/volcanion/icon.png b/graphics/pokemon/volcanion/icon.png index 1b39eef4b..9d3ee0321 100644 Binary files a/graphics/pokemon/volcanion/icon.png and b/graphics/pokemon/volcanion/icon.png differ diff --git a/graphics/pokemon/volcarona/anim_front.png b/graphics/pokemon/volcarona/anim_front.png index eae08ad0e..a200fe516 100644 Binary files a/graphics/pokemon/volcarona/anim_front.png and b/graphics/pokemon/volcarona/anim_front.png differ diff --git a/graphics/pokemon/volcarona/back.png b/graphics/pokemon/volcarona/back.png index 56dac62ed..6388e505b 100644 Binary files a/graphics/pokemon/volcarona/back.png and b/graphics/pokemon/volcarona/back.png differ diff --git a/graphics/pokemon/voltorb/back.png b/graphics/pokemon/voltorb/back.png index 2aeb2475b..6010acc3b 100644 Binary files a/graphics/pokemon/voltorb/back.png and b/graphics/pokemon/voltorb/back.png differ diff --git a/graphics/pokemon/voltorb/hisuian/back.png b/graphics/pokemon/voltorb/hisuian/back.png index 52fa8d909..74016e36f 100644 Binary files a/graphics/pokemon/voltorb/hisuian/back.png and b/graphics/pokemon/voltorb/hisuian/back.png differ diff --git a/graphics/pokemon/voltorb/hisuian/front.png b/graphics/pokemon/voltorb/hisuian/front.png index 63a2a234e..12052e98d 100644 Binary files a/graphics/pokemon/voltorb/hisuian/front.png and b/graphics/pokemon/voltorb/hisuian/front.png differ diff --git a/graphics/pokemon/voltorb/hisuian/icon.png b/graphics/pokemon/voltorb/hisuian/icon.png index cb756ddb8..2a35e4ec3 100644 Binary files a/graphics/pokemon/voltorb/hisuian/icon.png and b/graphics/pokemon/voltorb/hisuian/icon.png differ diff --git a/graphics/pokemon/vullaby/anim_front.png b/graphics/pokemon/vullaby/anim_front.png index e6a13d228..4af9402a1 100644 Binary files a/graphics/pokemon/vullaby/anim_front.png and b/graphics/pokemon/vullaby/anim_front.png differ diff --git a/graphics/pokemon/vullaby/back.png b/graphics/pokemon/vullaby/back.png index e60bef856..e1e8fe0a1 100644 Binary files a/graphics/pokemon/vullaby/back.png and b/graphics/pokemon/vullaby/back.png differ diff --git a/graphics/pokemon/vullaby/icon.png b/graphics/pokemon/vullaby/icon.png index c8d08b61d..0f9e1d135 100644 Binary files a/graphics/pokemon/vullaby/icon.png and b/graphics/pokemon/vullaby/icon.png differ diff --git a/graphics/pokemon/vulpix/alolan/back.png b/graphics/pokemon/vulpix/alolan/back.png index 0e0287de4..f3ea2e305 100644 Binary files a/graphics/pokemon/vulpix/alolan/back.png and b/graphics/pokemon/vulpix/alolan/back.png differ diff --git a/graphics/pokemon/vulpix/alolan/front.png b/graphics/pokemon/vulpix/alolan/front.png index 38ab0f7cc..0f138a684 100644 Binary files a/graphics/pokemon/vulpix/alolan/front.png and b/graphics/pokemon/vulpix/alolan/front.png differ diff --git a/graphics/pokemon/vulpix/alolan/icon.png b/graphics/pokemon/vulpix/alolan/icon.png index 62ba1518a..f49562751 100644 Binary files a/graphics/pokemon/vulpix/alolan/icon.png and b/graphics/pokemon/vulpix/alolan/icon.png differ diff --git a/graphics/pokemon/vulpix/anim_front.png b/graphics/pokemon/vulpix/anim_front.png index 97f5b0f62..53119cae2 100644 Binary files a/graphics/pokemon/vulpix/anim_front.png and b/graphics/pokemon/vulpix/anim_front.png differ diff --git a/graphics/pokemon/vulpix/back.png b/graphics/pokemon/vulpix/back.png index 5562fabf6..bf02a4e49 100644 Binary files a/graphics/pokemon/vulpix/back.png and b/graphics/pokemon/vulpix/back.png differ diff --git a/graphics/pokemon/vulpix/icon.png b/graphics/pokemon/vulpix/icon.png index 03b4bc564..57f0f7e45 100644 Binary files a/graphics/pokemon/vulpix/icon.png and b/graphics/pokemon/vulpix/icon.png differ diff --git a/graphics/pokemon/vulpix/normal.pal b/graphics/pokemon/vulpix/normal.pal index aefc8e87c..4c352ac2f 100644 --- a/graphics/pokemon/vulpix/normal.pal +++ b/graphics/pokemon/vulpix/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -115 32 0 +255 255 255 +255 230 180 +255 222 148 +16 16 16 +238 156 74 +160 112 64 +128 80 48 255 148 90 222 115 41 189 74 41 -16 16 16 -115 49 0 -189 115 90 -230 148 106 -172 90 8 -205 123 41 -255 255 255 -160 120 112 -168 0 0 +115 32 0 246 189 123 -0 0 0 +230 148 106 +189 115 90 +88 48 0 diff --git a/graphics/pokemon/vulpix/shiny.pal b/graphics/pokemon/vulpix/shiny.pal index bf8fadc0c..6096470d2 100644 --- a/graphics/pokemon/vulpix/shiny.pal +++ b/graphics/pokemon/vulpix/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -128 64 24 -248 232 128 -240 200 48 -208 136 40 +152 160 208 +255 255 255 +246 238 180 +246 230 148 16 16 16 +189 205 98 +156 164 49 +104 128 24 +255 238 131 +246 197 0 +213 131 24 +131 57 0 +255 255 164 +238 238 57 +197 180 32 80 88 48 -192 176 64 -232 232 88 -104 128 32 -152 160 48 -248 248 248 -152 136 104 -208 136 40 -240 224 144 -0 0 0 diff --git a/graphics/pokemon/wailmer/back.png b/graphics/pokemon/wailmer/back.png index f16af0d0f..77b6b6eb9 100644 Binary files a/graphics/pokemon/wailmer/back.png and b/graphics/pokemon/wailmer/back.png differ diff --git a/graphics/pokemon/wailmer/icon.png b/graphics/pokemon/wailmer/icon.png index 4253d1687..b8c692642 100644 Binary files a/graphics/pokemon/wailmer/icon.png and b/graphics/pokemon/wailmer/icon.png differ diff --git a/graphics/pokemon/wailord/anim_front.png b/graphics/pokemon/wailord/anim_front.png index 82218db3e..887ecbcf3 100644 Binary files a/graphics/pokemon/wailord/anim_front.png and b/graphics/pokemon/wailord/anim_front.png differ diff --git a/graphics/pokemon/wailord/back.png b/graphics/pokemon/wailord/back.png index a98c5ba19..04dde11d5 100644 Binary files a/graphics/pokemon/wailord/back.png and b/graphics/pokemon/wailord/back.png differ diff --git a/graphics/pokemon/walrein/anim_front.png b/graphics/pokemon/walrein/anim_front.png index 014bab5ed..9a087634e 100644 Binary files a/graphics/pokemon/walrein/anim_front.png and b/graphics/pokemon/walrein/anim_front.png differ diff --git a/graphics/pokemon/walrein/back.png b/graphics/pokemon/walrein/back.png index 2ace978eb..ec0a57ab7 100644 Binary files a/graphics/pokemon/walrein/back.png and b/graphics/pokemon/walrein/back.png differ diff --git a/graphics/pokemon/walrein/icon.png b/graphics/pokemon/walrein/icon.png index f659ee87b..8d1588b69 100644 Binary files a/graphics/pokemon/walrein/icon.png and b/graphics/pokemon/walrein/icon.png differ diff --git a/graphics/pokemon/wartortle/anim_front.png b/graphics/pokemon/wartortle/anim_front.png index 9798863f1..7d01eb257 100644 Binary files a/graphics/pokemon/wartortle/anim_front.png and b/graphics/pokemon/wartortle/anim_front.png differ diff --git a/graphics/pokemon/wartortle/back.png b/graphics/pokemon/wartortle/back.png index 0f47279c3..485fda646 100644 Binary files a/graphics/pokemon/wartortle/back.png and b/graphics/pokemon/wartortle/back.png differ diff --git a/graphics/pokemon/wartortle/icon.png b/graphics/pokemon/wartortle/icon.png index ba74d21af..355cc0f84 100644 Binary files a/graphics/pokemon/wartortle/icon.png and b/graphics/pokemon/wartortle/icon.png differ diff --git a/graphics/pokemon/wartortle/normal.pal b/graphics/pokemon/wartortle/normal.pal index c2c7c0db7..26b0e2dc8 100644 --- a/graphics/pokemon/wartortle/normal.pal +++ b/graphics/pokemon/wartortle/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -139 172 246 +152 208 160 255 255 255 -16 16 16 -189 197 230 -41 65 106 -98 123 197 -213 238 246 -172 197 255 -106 74 24 +208 232 240 +184 192 224 +197 49 0 +205 131 32 148 98 98 -172 139 98 -49 65 74 +90 57 8 222 197 139 -200 48 0 +168 136 96 139 90 32 +168 192 248 +136 168 240 +96 120 192 +40 64 104 +16 16 16 diff --git a/graphics/pokemon/wartortle/shiny.pal b/graphics/pokemon/wartortle/shiny.pal index b8ca2cfbc..6b16c8bb4 100644 --- a/graphics/pokemon/wartortle/shiny.pal +++ b/graphics/pokemon/wartortle/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -188 188 244 +208 152 160 255 255 255 -16 16 16 -180 222 189 -98 82 148 -145 132 188 213 246 197 -222 222 255 -57 90 16 +180 222 189 +197 49 0 +156 197 49 90 139 16 -222 164 65 -65 65 82 +57 90 16 246 213 123 -192 24 0 -136 96 24 +222 164 65 +164 98 32 +222 222 255 +180 180 246 +139 123 189 +98 82 148 +16 16 16 diff --git a/graphics/pokemon/watchog/anim_front.png b/graphics/pokemon/watchog/anim_front.png index 1bd13da96..c47a88e1b 100644 Binary files a/graphics/pokemon/watchog/anim_front.png and b/graphics/pokemon/watchog/anim_front.png differ diff --git a/graphics/pokemon/watchog/back.png b/graphics/pokemon/watchog/back.png index 8f2f11964..fe1325645 100644 Binary files a/graphics/pokemon/watchog/back.png and b/graphics/pokemon/watchog/back.png differ diff --git a/graphics/pokemon/weavile/anim_front.png b/graphics/pokemon/weavile/anim_front.png index d190e4cef..c98cdf564 100644 Binary files a/graphics/pokemon/weavile/anim_front.png and b/graphics/pokemon/weavile/anim_front.png differ diff --git a/graphics/pokemon/weavile/back.png b/graphics/pokemon/weavile/back.png index 3d9e5bce8..c30db799f 100644 Binary files a/graphics/pokemon/weavile/back.png and b/graphics/pokemon/weavile/back.png differ diff --git a/graphics/pokemon/weavile/icon.png b/graphics/pokemon/weavile/icon.png index 88ee0a9af..6b4d86766 100644 Binary files a/graphics/pokemon/weavile/icon.png and b/graphics/pokemon/weavile/icon.png differ diff --git a/graphics/pokemon/weedle/anim_front.png b/graphics/pokemon/weedle/anim_front.png index 4f2247207..684677599 100644 Binary files a/graphics/pokemon/weedle/anim_front.png and b/graphics/pokemon/weedle/anim_front.png differ diff --git a/graphics/pokemon/weedle/back.png b/graphics/pokemon/weedle/back.png index 16d3c7f61..53a6242fc 100644 Binary files a/graphics/pokemon/weedle/back.png and b/graphics/pokemon/weedle/back.png differ diff --git a/graphics/pokemon/weedle/icon.png b/graphics/pokemon/weedle/icon.png index 686b1e83f..f6c16767f 100644 Binary files a/graphics/pokemon/weedle/icon.png and b/graphics/pokemon/weedle/icon.png differ diff --git a/graphics/pokemon/weedle/normal.pal b/graphics/pokemon/weedle/normal.pal index b1d97250e..ac1acc09b 100644 --- a/graphics/pokemon/weedle/normal.pal +++ b/graphics/pokemon/weedle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -139 139 148 255 255 255 -90 90 98 197 197 197 -148 90 8 +139 139 148 +90 90 98 +24 24 24 +255 213 123 238 172 65 205 115 16 +148 90 8 106 57 8 -255 230 123 -24 24 24 -156 41 32 -222 90 82 -238 156 139 255 222 205 +238 156 139 +222 90 82 +156 41 32 0 0 0 diff --git a/graphics/pokemon/weedle/shiny.pal b/graphics/pokemon/weedle/shiny.pal index b7150af41..060a627e5 100644 --- a/graphics/pokemon/weedle/shiny.pal +++ b/graphics/pokemon/weedle/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 136 144 -248 248 248 -88 88 96 -192 192 192 -216 136 16 -248 240 48 -240 176 48 -184 120 32 -248 248 184 +255 255 255 +197 197 197 +139 139 148 +90 90 98 24 24 24 -168 80 120 -224 152 168 -224 200 208 -0 0 0 +255 255 172 +255 238 0 +255 180 0 +222 139 16 +189 106 0 +230 238 246 +230 205 213 +230 156 172 +172 82 123 0 0 0 diff --git a/graphics/pokemon/weepinbell/anim_front.png b/graphics/pokemon/weepinbell/anim_front.png index 4afac268b..0a1797168 100644 Binary files a/graphics/pokemon/weepinbell/anim_front.png and b/graphics/pokemon/weepinbell/anim_front.png differ diff --git a/graphics/pokemon/weepinbell/back.png b/graphics/pokemon/weepinbell/back.png index 0d848af39..3062fb205 100644 Binary files a/graphics/pokemon/weepinbell/back.png and b/graphics/pokemon/weepinbell/back.png differ diff --git a/graphics/pokemon/weepinbell/icon.png b/graphics/pokemon/weepinbell/icon.png index 104e77f4d..d63521d79 100644 Binary files a/graphics/pokemon/weepinbell/icon.png and b/graphics/pokemon/weepinbell/icon.png differ diff --git a/graphics/pokemon/weepinbell/normal.pal b/graphics/pokemon/weepinbell/normal.pal index 27931063f..8bc872b29 100644 --- a/graphics/pokemon/weepinbell/normal.pal +++ b/graphics/pokemon/weepinbell/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 -8 90 49 -57 172 90 -156 222 131 +152 160 208 +0 0 0 +255 255 255 98 74 49 164 123 49 -0 0 0 -255 246 172 -255 230 106 -106 197 82 213 197 82 +255 230 106 +255 246 172 123 41 41 -255 255 255 180 65 74 -238 156 172 205 106 131 +238 156 172 +8 90 49 +57 152 80 +106 197 82 +156 222 131 diff --git a/graphics/pokemon/weepinbell/shiny.pal b/graphics/pokemon/weepinbell/shiny.pal index 87c68f5b2..b64d3917c 100644 --- a/graphics/pokemon/weepinbell/shiny.pal +++ b/graphics/pokemon/weepinbell/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 -96 136 0 -144 184 24 -216 248 96 -104 80 48 -160 128 64 -16 16 16 -240 248 160 -216 248 88 -184 224 64 -184 200 56 -144 88 104 -248 248 248 -152 104 120 -232 200 208 -192 152 168 +152 160 208 +0 0 0 +255 255 255 +98 74 49 +164 123 49 +189 205 49 +222 255 90 +246 255 164 +148 90 106 +172 123 139 +197 156 172 +238 205 213 +98 139 0 +139 189 8 +189 238 49 +222 255 98 diff --git a/graphics/pokemon/weezing/back.png b/graphics/pokemon/weezing/back.png index bd751ca00..92fd4020b 100644 Binary files a/graphics/pokemon/weezing/back.png and b/graphics/pokemon/weezing/back.png differ diff --git a/graphics/pokemon/weezing/galarian/back.png b/graphics/pokemon/weezing/galarian/back.png index ee946f6a0..e4ecb384a 100644 Binary files a/graphics/pokemon/weezing/galarian/back.png and b/graphics/pokemon/weezing/galarian/back.png differ diff --git a/graphics/pokemon/weezing/galarian/front.png b/graphics/pokemon/weezing/galarian/front.png index 0110c3410..c66352bb0 100644 Binary files a/graphics/pokemon/weezing/galarian/front.png and b/graphics/pokemon/weezing/galarian/front.png differ diff --git a/graphics/pokemon/weezing/galarian/icon.png b/graphics/pokemon/weezing/galarian/icon.png index ccb2a9652..79c7dd6bf 100644 Binary files a/graphics/pokemon/weezing/galarian/icon.png and b/graphics/pokemon/weezing/galarian/icon.png differ diff --git a/graphics/pokemon/whimsicott/back.png b/graphics/pokemon/whimsicott/back.png index 43ad29ebe..dc8c82a3d 100644 Binary files a/graphics/pokemon/whimsicott/back.png and b/graphics/pokemon/whimsicott/back.png differ diff --git a/graphics/pokemon/whimsicott/icon.png b/graphics/pokemon/whimsicott/icon.png index 2731a8989..c90bb3280 100644 Binary files a/graphics/pokemon/whimsicott/icon.png and b/graphics/pokemon/whimsicott/icon.png differ diff --git a/graphics/pokemon/whirlipede/anim_front.png b/graphics/pokemon/whirlipede/anim_front.png index 49945f2d1..de69698e2 100644 Binary files a/graphics/pokemon/whirlipede/anim_front.png and b/graphics/pokemon/whirlipede/anim_front.png differ diff --git a/graphics/pokemon/whirlipede/back.png b/graphics/pokemon/whirlipede/back.png index 51b64d995..adcf644f6 100644 Binary files a/graphics/pokemon/whirlipede/back.png and b/graphics/pokemon/whirlipede/back.png differ diff --git a/graphics/pokemon/whirlipede/icon.png b/graphics/pokemon/whirlipede/icon.png index 13c034531..11ae9535e 100644 Binary files a/graphics/pokemon/whirlipede/icon.png and b/graphics/pokemon/whirlipede/icon.png differ diff --git a/graphics/pokemon/whiscash/anim_front.png b/graphics/pokemon/whiscash/anim_front.png index 3caa2c05e..b11b3a8a7 100644 Binary files a/graphics/pokemon/whiscash/anim_front.png and b/graphics/pokemon/whiscash/anim_front.png differ diff --git a/graphics/pokemon/whiscash/icon.png b/graphics/pokemon/whiscash/icon.png index 40888dd02..09646263a 100644 Binary files a/graphics/pokemon/whiscash/icon.png and b/graphics/pokemon/whiscash/icon.png differ diff --git a/graphics/pokemon/whismur/anim_front.png b/graphics/pokemon/whismur/anim_front.png index 8b54945c6..098910d89 100644 Binary files a/graphics/pokemon/whismur/anim_front.png and b/graphics/pokemon/whismur/anim_front.png differ diff --git a/graphics/pokemon/whismur/back.png b/graphics/pokemon/whismur/back.png index 5093b4573..1ee861a0b 100644 Binary files a/graphics/pokemon/whismur/back.png and b/graphics/pokemon/whismur/back.png differ diff --git a/graphics/pokemon/whismur/icon.png b/graphics/pokemon/whismur/icon.png index 74b06276d..d605398f6 100644 Binary files a/graphics/pokemon/whismur/icon.png and b/graphics/pokemon/whismur/icon.png differ diff --git a/graphics/pokemon/wigglytuff/anim_front.png b/graphics/pokemon/wigglytuff/anim_front.png index 7bf33d701..43d9a2e23 100644 Binary files a/graphics/pokemon/wigglytuff/anim_front.png and b/graphics/pokemon/wigglytuff/anim_front.png differ diff --git a/graphics/pokemon/wigglytuff/back.png b/graphics/pokemon/wigglytuff/back.png index 7666a5fe3..d093212b9 100644 Binary files a/graphics/pokemon/wigglytuff/back.png and b/graphics/pokemon/wigglytuff/back.png differ diff --git a/graphics/pokemon/wigglytuff/icon.png b/graphics/pokemon/wigglytuff/icon.png index 427f6518c..c7644c616 100644 Binary files a/graphics/pokemon/wigglytuff/icon.png and b/graphics/pokemon/wigglytuff/icon.png differ diff --git a/graphics/pokemon/wigglytuff/normal.pal b/graphics/pokemon/wigglytuff/normal.pal index 9e5a19944..ef750b0d7 100644 --- a/graphics/pokemon/wigglytuff/normal.pal +++ b/graphics/pokemon/wigglytuff/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -139 65 65 +152 160 208 255 255 255 -115 115 115 230 222 230 -16 16 16 +115 115 115 +148 222 205 +82 164 139 +32 90 98 +230 49 49 +156 106 32 +115 65 24 +255 222 205 255 172 189 246 123 148 205 106 98 -255 222 205 -82 164 139 -32 90 98 -148 222 205 -115 65 24 -230 49 49 -0 0 0 +139 65 65 +16 16 16 diff --git a/graphics/pokemon/wigglytuff/shiny.pal b/graphics/pokemon/wigglytuff/shiny.pal index d781c0acc..a9c87f98f 100644 --- a/graphics/pokemon/wigglytuff/shiny.pal +++ b/graphics/pokemon/wigglytuff/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -128 56 128 -248 248 248 -104 104 112 -216 216 224 +152 160 208 +255 255 255 +222 222 230 +115 115 115 +180 255 139 +139 213 98 +74 164 49 +230 49 49 +148 106 65 +106 65 57 +255 222 205 +238 180 246 +213 148 205 +164 106 172 +131 57 131 16 16 16 -232 176 240 -208 144 200 -160 104 168 -216 216 224 -136 208 96 -72 160 48 -176 248 136 -112 72 40 -224 96 96 -0 0 0 diff --git a/graphics/pokemon/wimpod/back.png b/graphics/pokemon/wimpod/back.png index 8e9587c1a..8a5a437dc 100644 Binary files a/graphics/pokemon/wimpod/back.png and b/graphics/pokemon/wimpod/back.png differ diff --git a/graphics/pokemon/wimpod/icon.png b/graphics/pokemon/wimpod/icon.png index 6fa8d9b2c..77a804889 100644 Binary files a/graphics/pokemon/wimpod/icon.png and b/graphics/pokemon/wimpod/icon.png differ diff --git a/graphics/pokemon/wingull/anim_front.png b/graphics/pokemon/wingull/anim_front.png index 0e9dff754..8580fac15 100644 Binary files a/graphics/pokemon/wingull/anim_front.png and b/graphics/pokemon/wingull/anim_front.png differ diff --git a/graphics/pokemon/wingull/icon.png b/graphics/pokemon/wingull/icon.png index 5613f1432..a7aa25e49 100644 Binary files a/graphics/pokemon/wingull/icon.png and b/graphics/pokemon/wingull/icon.png differ diff --git a/graphics/pokemon/wishiwashi/back.png b/graphics/pokemon/wishiwashi/back.png index fff05a337..5eb1f87b1 100644 Binary files a/graphics/pokemon/wishiwashi/back.png and b/graphics/pokemon/wishiwashi/back.png differ diff --git a/graphics/pokemon/wishiwashi/front.png b/graphics/pokemon/wishiwashi/front.png index 79578a35e..69c224a3d 100644 Binary files a/graphics/pokemon/wishiwashi/front.png and b/graphics/pokemon/wishiwashi/front.png differ diff --git a/graphics/pokemon/wishiwashi/icon.png b/graphics/pokemon/wishiwashi/icon.png index dd53ddb48..0b9df6baf 100644 Binary files a/graphics/pokemon/wishiwashi/icon.png and b/graphics/pokemon/wishiwashi/icon.png differ diff --git a/graphics/pokemon/wishiwashi/school/back.png b/graphics/pokemon/wishiwashi/school/back.png index e59d22ea4..c390fb6e1 100644 Binary files a/graphics/pokemon/wishiwashi/school/back.png and b/graphics/pokemon/wishiwashi/school/back.png differ diff --git a/graphics/pokemon/wishiwashi/school/front.png b/graphics/pokemon/wishiwashi/school/front.png index 62bbb5b21..8885af142 100644 Binary files a/graphics/pokemon/wishiwashi/school/front.png and b/graphics/pokemon/wishiwashi/school/front.png differ diff --git a/graphics/pokemon/wishiwashi/school/icon.png b/graphics/pokemon/wishiwashi/school/icon.png index 809719bf2..2cf411fd1 100644 Binary files a/graphics/pokemon/wishiwashi/school/icon.png and b/graphics/pokemon/wishiwashi/school/icon.png differ diff --git a/graphics/pokemon/wobbuffet/anim_front.png b/graphics/pokemon/wobbuffet/anim_front.png index fd3fb1fb3..e5ca905e0 100644 Binary files a/graphics/pokemon/wobbuffet/anim_front.png and b/graphics/pokemon/wobbuffet/anim_front.png differ diff --git a/graphics/pokemon/wobbuffet/back.png b/graphics/pokemon/wobbuffet/back.png index 772240c15..796ad48be 100644 Binary files a/graphics/pokemon/wobbuffet/back.png and b/graphics/pokemon/wobbuffet/back.png differ diff --git a/graphics/pokemon/wobbuffet/icon.png b/graphics/pokemon/wobbuffet/icon.png index b55ab8e4a..4a2c88dc7 100644 Binary files a/graphics/pokemon/wobbuffet/icon.png and b/graphics/pokemon/wobbuffet/icon.png differ diff --git a/graphics/pokemon/woobat/anim_front.png b/graphics/pokemon/woobat/anim_front.png index 067121349..675498484 100644 Binary files a/graphics/pokemon/woobat/anim_front.png and b/graphics/pokemon/woobat/anim_front.png differ diff --git a/graphics/pokemon/woobat/back.png b/graphics/pokemon/woobat/back.png index 7f80040d4..1fd2a6b7b 100644 Binary files a/graphics/pokemon/woobat/back.png and b/graphics/pokemon/woobat/back.png differ diff --git a/graphics/pokemon/wooloo/back.png b/graphics/pokemon/wooloo/back.png index 3d3382e8f..b72d445ce 100644 Binary files a/graphics/pokemon/wooloo/back.png and b/graphics/pokemon/wooloo/back.png differ diff --git a/graphics/pokemon/wooloo/front.png b/graphics/pokemon/wooloo/front.png index 3663a1dcc..2978778a4 100644 Binary files a/graphics/pokemon/wooloo/front.png and b/graphics/pokemon/wooloo/front.png differ diff --git a/graphics/pokemon/wooloo/icon.png b/graphics/pokemon/wooloo/icon.png index f39dd65d9..205d15416 100644 Binary files a/graphics/pokemon/wooloo/icon.png and b/graphics/pokemon/wooloo/icon.png differ diff --git a/graphics/pokemon/wooper/anim_front.png b/graphics/pokemon/wooper/anim_front.png index ca9366e4e..7e35c55c0 100644 Binary files a/graphics/pokemon/wooper/anim_front.png and b/graphics/pokemon/wooper/anim_front.png differ diff --git a/graphics/pokemon/wooper/back.png b/graphics/pokemon/wooper/back.png index e958c8a11..1e33cd094 100644 Binary files a/graphics/pokemon/wooper/back.png and b/graphics/pokemon/wooper/back.png differ diff --git a/graphics/pokemon/wooper/icon.png b/graphics/pokemon/wooper/icon.png index 16151f24a..707b820f2 100644 Binary files a/graphics/pokemon/wooper/icon.png and b/graphics/pokemon/wooper/icon.png differ diff --git a/graphics/pokemon/wormadam/back.png b/graphics/pokemon/wormadam/back.png index a94982fbe..a33fb009c 100644 Binary files a/graphics/pokemon/wormadam/back.png and b/graphics/pokemon/wormadam/back.png differ diff --git a/graphics/pokemon/wormadam/sandy_cloak/back.png b/graphics/pokemon/wormadam/sandy_cloak/back.png index 29a693103..45ced1e81 100644 Binary files a/graphics/pokemon/wormadam/sandy_cloak/back.png and b/graphics/pokemon/wormadam/sandy_cloak/back.png differ diff --git a/graphics/pokemon/wormadam/trash_cloak/back.png b/graphics/pokemon/wormadam/trash_cloak/back.png index 9888b1aa1..2820cb3f0 100644 Binary files a/graphics/pokemon/wormadam/trash_cloak/back.png and b/graphics/pokemon/wormadam/trash_cloak/back.png differ diff --git a/graphics/pokemon/wurmple/anim_front.png b/graphics/pokemon/wurmple/anim_front.png index 53e16307b..d214a22e5 100644 Binary files a/graphics/pokemon/wurmple/anim_front.png and b/graphics/pokemon/wurmple/anim_front.png differ diff --git a/graphics/pokemon/wurmple/back.png b/graphics/pokemon/wurmple/back.png index ae50d80eb..b3c9a478c 100644 Binary files a/graphics/pokemon/wurmple/back.png and b/graphics/pokemon/wurmple/back.png differ diff --git a/graphics/pokemon/wurmple/icon.png b/graphics/pokemon/wurmple/icon.png index 327af5e5e..fb69fffaf 100644 Binary files a/graphics/pokemon/wurmple/icon.png and b/graphics/pokemon/wurmple/icon.png differ diff --git a/graphics/pokemon/wynaut/anim_front.png b/graphics/pokemon/wynaut/anim_front.png index 8b00c87d4..3dad81357 100644 Binary files a/graphics/pokemon/wynaut/anim_front.png and b/graphics/pokemon/wynaut/anim_front.png differ diff --git a/graphics/pokemon/wynaut/back.png b/graphics/pokemon/wynaut/back.png index 09ab9095f..ac1b60b15 100644 Binary files a/graphics/pokemon/wynaut/back.png and b/graphics/pokemon/wynaut/back.png differ diff --git a/graphics/pokemon/wyrdeer/back.png b/graphics/pokemon/wyrdeer/back.png index 5c538bc95..00f1ba932 100755 Binary files a/graphics/pokemon/wyrdeer/back.png and b/graphics/pokemon/wyrdeer/back.png differ diff --git a/graphics/pokemon/wyrdeer/front.png b/graphics/pokemon/wyrdeer/front.png index f9923402f..9e5bffce5 100755 Binary files a/graphics/pokemon/wyrdeer/front.png and b/graphics/pokemon/wyrdeer/front.png differ diff --git a/graphics/pokemon/wyrdeer/icon.png b/graphics/pokemon/wyrdeer/icon.png index 8221d6ac4..905dfe083 100644 Binary files a/graphics/pokemon/wyrdeer/icon.png and b/graphics/pokemon/wyrdeer/icon.png differ diff --git a/graphics/pokemon/xatu/back.png b/graphics/pokemon/xatu/back.png index ac5e61647..e838094e5 100644 Binary files a/graphics/pokemon/xatu/back.png and b/graphics/pokemon/xatu/back.png differ diff --git a/graphics/pokemon/xatu/icon.png b/graphics/pokemon/xatu/icon.png index 43e505aaf..ef8580ece 100644 Binary files a/graphics/pokemon/xatu/icon.png and b/graphics/pokemon/xatu/icon.png differ diff --git a/graphics/pokemon/xerneas/active/anim_front.png b/graphics/pokemon/xerneas/active/anim_front.png index bdb214b2c..aef637817 100644 Binary files a/graphics/pokemon/xerneas/active/anim_front.png and b/graphics/pokemon/xerneas/active/anim_front.png differ diff --git a/graphics/pokemon/xerneas/active/back.png b/graphics/pokemon/xerneas/active/back.png index d99ad7f04..6632a08fa 100644 Binary files a/graphics/pokemon/xerneas/active/back.png and b/graphics/pokemon/xerneas/active/back.png differ diff --git a/graphics/pokemon/xerneas/active/icon.png b/graphics/pokemon/xerneas/active/icon.png index c65199fe7..cc63a8202 100644 Binary files a/graphics/pokemon/xerneas/active/icon.png and b/graphics/pokemon/xerneas/active/icon.png differ diff --git a/graphics/pokemon/xurkitree/back.png b/graphics/pokemon/xurkitree/back.png index 063f29de6..fb65978be 100644 Binary files a/graphics/pokemon/xurkitree/back.png and b/graphics/pokemon/xurkitree/back.png differ diff --git a/graphics/pokemon/xurkitree/front.png b/graphics/pokemon/xurkitree/front.png index 6c49cea67..91f3c82e3 100644 Binary files a/graphics/pokemon/xurkitree/front.png and b/graphics/pokemon/xurkitree/front.png differ diff --git a/graphics/pokemon/xurkitree/icon.png b/graphics/pokemon/xurkitree/icon.png index 475ba800e..26cce62f0 100644 Binary files a/graphics/pokemon/xurkitree/icon.png and b/graphics/pokemon/xurkitree/icon.png differ diff --git a/graphics/pokemon/yamask/anim_front.png b/graphics/pokemon/yamask/anim_front.png index 4387eec5d..daf3ec638 100644 Binary files a/graphics/pokemon/yamask/anim_front.png and b/graphics/pokemon/yamask/anim_front.png differ diff --git a/graphics/pokemon/yamask/back.png b/graphics/pokemon/yamask/back.png index bfe1e9f6a..fa2cbf349 100644 Binary files a/graphics/pokemon/yamask/back.png and b/graphics/pokemon/yamask/back.png differ diff --git a/graphics/pokemon/yamask/galarian/back.png b/graphics/pokemon/yamask/galarian/back.png index 01fab9808..06f46eae0 100644 Binary files a/graphics/pokemon/yamask/galarian/back.png and b/graphics/pokemon/yamask/galarian/back.png differ diff --git a/graphics/pokemon/yamask/galarian/front.png b/graphics/pokemon/yamask/galarian/front.png index 56e3ffc9e..0a259f87d 100644 Binary files a/graphics/pokemon/yamask/galarian/front.png and b/graphics/pokemon/yamask/galarian/front.png differ diff --git a/graphics/pokemon/yamask/galarian/icon.png b/graphics/pokemon/yamask/galarian/icon.png index 0b37e8356..918473372 100644 Binary files a/graphics/pokemon/yamask/galarian/icon.png and b/graphics/pokemon/yamask/galarian/icon.png differ diff --git a/graphics/pokemon/yamask/icon.png b/graphics/pokemon/yamask/icon.png index b038fe21e..d73bfbe62 100644 Binary files a/graphics/pokemon/yamask/icon.png and b/graphics/pokemon/yamask/icon.png differ diff --git a/graphics/pokemon/yamper/back.png b/graphics/pokemon/yamper/back.png index 175421d0e..43bd20452 100644 Binary files a/graphics/pokemon/yamper/back.png and b/graphics/pokemon/yamper/back.png differ diff --git a/graphics/pokemon/yamper/front.png b/graphics/pokemon/yamper/front.png index 00b5aec4b..d5addebbf 100644 Binary files a/graphics/pokemon/yamper/front.png and b/graphics/pokemon/yamper/front.png differ diff --git a/graphics/pokemon/yamper/icon.png b/graphics/pokemon/yamper/icon.png index 068d99f31..4c445402e 100644 Binary files a/graphics/pokemon/yamper/icon.png and b/graphics/pokemon/yamper/icon.png differ diff --git a/graphics/pokemon/yanma/anim_front.png b/graphics/pokemon/yanma/anim_front.png index b7ad16378..cc4df48ea 100644 Binary files a/graphics/pokemon/yanma/anim_front.png and b/graphics/pokemon/yanma/anim_front.png differ diff --git a/graphics/pokemon/yanma/back.png b/graphics/pokemon/yanma/back.png index 2e7d721cb..4c7a5e724 100644 Binary files a/graphics/pokemon/yanma/back.png and b/graphics/pokemon/yanma/back.png differ diff --git a/graphics/pokemon/yanma/icon.png b/graphics/pokemon/yanma/icon.png index faa882ad1..4f9c0addf 100644 Binary files a/graphics/pokemon/yanma/icon.png and b/graphics/pokemon/yanma/icon.png differ diff --git a/graphics/pokemon/yanmega/back.png b/graphics/pokemon/yanmega/back.png index b14ea4b61..a776de840 100644 Binary files a/graphics/pokemon/yanmega/back.png and b/graphics/pokemon/yanmega/back.png differ diff --git a/graphics/pokemon/yanmega/icon.png b/graphics/pokemon/yanmega/icon.png index 6ea20cdb4..351c02a8f 100644 Binary files a/graphics/pokemon/yanmega/icon.png and b/graphics/pokemon/yanmega/icon.png differ diff --git a/graphics/pokemon/yungoos/back.png b/graphics/pokemon/yungoos/back.png index 4eada2321..de1e8576a 100644 Binary files a/graphics/pokemon/yungoos/back.png and b/graphics/pokemon/yungoos/back.png differ diff --git a/graphics/pokemon/yungoos/front.png b/graphics/pokemon/yungoos/front.png index ce00b6639..4476a445b 100644 Binary files a/graphics/pokemon/yungoos/front.png and b/graphics/pokemon/yungoos/front.png differ diff --git a/graphics/pokemon/yungoos/icon.png b/graphics/pokemon/yungoos/icon.png index 202f82412..657e0b676 100644 Binary files a/graphics/pokemon/yungoos/icon.png and b/graphics/pokemon/yungoos/icon.png differ diff --git a/graphics/pokemon/yveltal/anim_front.png b/graphics/pokemon/yveltal/anim_front.png index eedb0c59d..cf09975e1 100644 Binary files a/graphics/pokemon/yveltal/anim_front.png and b/graphics/pokemon/yveltal/anim_front.png differ diff --git a/graphics/pokemon/yveltal/back.png b/graphics/pokemon/yveltal/back.png index e77483c67..a926d4a84 100644 Binary files a/graphics/pokemon/yveltal/back.png and b/graphics/pokemon/yveltal/back.png differ diff --git a/graphics/pokemon/yveltal/icon.png b/graphics/pokemon/yveltal/icon.png index 06cd32413..1d4a29ee2 100644 Binary files a/graphics/pokemon/yveltal/icon.png and b/graphics/pokemon/yveltal/icon.png differ diff --git a/graphics/pokemon/zacian/back.png b/graphics/pokemon/zacian/back.png index b663e2dd9..51804d365 100644 Binary files a/graphics/pokemon/zacian/back.png and b/graphics/pokemon/zacian/back.png differ diff --git a/graphics/pokemon/zacian/crowned_sword/back.png b/graphics/pokemon/zacian/crowned_sword/back.png index 28f6af3f3..1d8d85681 100644 Binary files a/graphics/pokemon/zacian/crowned_sword/back.png and b/graphics/pokemon/zacian/crowned_sword/back.png differ diff --git a/graphics/pokemon/zacian/crowned_sword/front.png b/graphics/pokemon/zacian/crowned_sword/front.png index 631bd42e8..59fb0af21 100644 Binary files a/graphics/pokemon/zacian/crowned_sword/front.png and b/graphics/pokemon/zacian/crowned_sword/front.png differ diff --git a/graphics/pokemon/zacian/crowned_sword/icon.png b/graphics/pokemon/zacian/crowned_sword/icon.png index b9beb442e..7136f24cc 100644 Binary files a/graphics/pokemon/zacian/crowned_sword/icon.png and b/graphics/pokemon/zacian/crowned_sword/icon.png differ diff --git a/graphics/pokemon/zacian/front.png b/graphics/pokemon/zacian/front.png index 4b244ebd2..4370a52b4 100644 Binary files a/graphics/pokemon/zacian/front.png and b/graphics/pokemon/zacian/front.png differ diff --git a/graphics/pokemon/zacian/icon.png b/graphics/pokemon/zacian/icon.png index 248edb472..474e53ff9 100644 Binary files a/graphics/pokemon/zacian/icon.png and b/graphics/pokemon/zacian/icon.png differ diff --git a/graphics/pokemon/zamazenta/back.png b/graphics/pokemon/zamazenta/back.png index 0f18a6e6f..25314d5cd 100644 Binary files a/graphics/pokemon/zamazenta/back.png and b/graphics/pokemon/zamazenta/back.png differ diff --git a/graphics/pokemon/zamazenta/crowned_shield/back.png b/graphics/pokemon/zamazenta/crowned_shield/back.png index 7ae50eaf2..c5a07e1dd 100644 Binary files a/graphics/pokemon/zamazenta/crowned_shield/back.png and b/graphics/pokemon/zamazenta/crowned_shield/back.png differ diff --git a/graphics/pokemon/zamazenta/crowned_shield/front.png b/graphics/pokemon/zamazenta/crowned_shield/front.png index d16ef83dc..4d36d30e8 100644 Binary files a/graphics/pokemon/zamazenta/crowned_shield/front.png and b/graphics/pokemon/zamazenta/crowned_shield/front.png differ diff --git a/graphics/pokemon/zamazenta/crowned_shield/icon.png b/graphics/pokemon/zamazenta/crowned_shield/icon.png index 79fd5c12d..52be47e34 100644 Binary files a/graphics/pokemon/zamazenta/crowned_shield/icon.png and b/graphics/pokemon/zamazenta/crowned_shield/icon.png differ diff --git a/graphics/pokemon/zamazenta/front.png b/graphics/pokemon/zamazenta/front.png index 0df694e10..194a205f3 100644 Binary files a/graphics/pokemon/zamazenta/front.png and b/graphics/pokemon/zamazenta/front.png differ diff --git a/graphics/pokemon/zamazenta/icon.png b/graphics/pokemon/zamazenta/icon.png index bd00dfea0..7d9d722e0 100644 Binary files a/graphics/pokemon/zamazenta/icon.png and b/graphics/pokemon/zamazenta/icon.png differ diff --git a/graphics/pokemon/zangoose/back.png b/graphics/pokemon/zangoose/back.png index 043ae5ffc..c1b96cf04 100644 Binary files a/graphics/pokemon/zangoose/back.png and b/graphics/pokemon/zangoose/back.png differ diff --git a/graphics/pokemon/zapdos/galarian/back.png b/graphics/pokemon/zapdos/galarian/back.png index 4308e1b6d..5c1c47832 100644 Binary files a/graphics/pokemon/zapdos/galarian/back.png and b/graphics/pokemon/zapdos/galarian/back.png differ diff --git a/graphics/pokemon/zapdos/galarian/front.png b/graphics/pokemon/zapdos/galarian/front.png index 00a7c8b1c..391df5cb0 100644 Binary files a/graphics/pokemon/zapdos/galarian/front.png and b/graphics/pokemon/zapdos/galarian/front.png differ diff --git a/graphics/pokemon/zapdos/galarian/icon.png b/graphics/pokemon/zapdos/galarian/icon.png index c49c77888..2d9f031ff 100644 Binary files a/graphics/pokemon/zapdos/galarian/icon.png and b/graphics/pokemon/zapdos/galarian/icon.png differ diff --git a/graphics/pokemon/zapdos/icon.png b/graphics/pokemon/zapdos/icon.png index 613adbd3e..eb4951bc0 100644 Binary files a/graphics/pokemon/zapdos/icon.png and b/graphics/pokemon/zapdos/icon.png differ diff --git a/graphics/pokemon/zarude/back.png b/graphics/pokemon/zarude/back.png index a87e94fc8..ed458dd47 100644 Binary files a/graphics/pokemon/zarude/back.png and b/graphics/pokemon/zarude/back.png differ diff --git a/graphics/pokemon/zarude/dada/back.png b/graphics/pokemon/zarude/dada/back.png index d1d02e5fb..b5c51e1df 100644 Binary files a/graphics/pokemon/zarude/dada/back.png and b/graphics/pokemon/zarude/dada/back.png differ diff --git a/graphics/pokemon/zarude/dada/front.png b/graphics/pokemon/zarude/dada/front.png index cb686d169..caa9efff7 100644 Binary files a/graphics/pokemon/zarude/dada/front.png and b/graphics/pokemon/zarude/dada/front.png differ diff --git a/graphics/pokemon/zarude/dada/icon.png b/graphics/pokemon/zarude/dada/icon.png index 38ffe6af8..e3a39e36d 100644 Binary files a/graphics/pokemon/zarude/dada/icon.png and b/graphics/pokemon/zarude/dada/icon.png differ diff --git a/graphics/pokemon/zarude/front.png b/graphics/pokemon/zarude/front.png index a886a37db..f8af30a08 100644 Binary files a/graphics/pokemon/zarude/front.png and b/graphics/pokemon/zarude/front.png differ diff --git a/graphics/pokemon/zarude/icon.png b/graphics/pokemon/zarude/icon.png index ec56f9676..58dfa077b 100644 Binary files a/graphics/pokemon/zarude/icon.png and b/graphics/pokemon/zarude/icon.png differ diff --git a/graphics/pokemon/zebstrika/anim_front.png b/graphics/pokemon/zebstrika/anim_front.png index 02a135fb3..db28f434f 100644 Binary files a/graphics/pokemon/zebstrika/anim_front.png and b/graphics/pokemon/zebstrika/anim_front.png differ diff --git a/graphics/pokemon/zebstrika/back.png b/graphics/pokemon/zebstrika/back.png index 04693bc3f..b111e64f3 100644 Binary files a/graphics/pokemon/zebstrika/back.png and b/graphics/pokemon/zebstrika/back.png differ diff --git a/graphics/pokemon/zebstrika/icon.png b/graphics/pokemon/zebstrika/icon.png index 3d38addfd..a929b95c5 100644 Binary files a/graphics/pokemon/zebstrika/icon.png and b/graphics/pokemon/zebstrika/icon.png differ diff --git a/graphics/pokemon/zekrom/anim_front.png b/graphics/pokemon/zekrom/anim_front.png index b0de1e751..a987b70e3 100644 Binary files a/graphics/pokemon/zekrom/anim_front.png and b/graphics/pokemon/zekrom/anim_front.png differ diff --git a/graphics/pokemon/zekrom/back.png b/graphics/pokemon/zekrom/back.png index baa6f52ea..6d352f9f8 100644 Binary files a/graphics/pokemon/zekrom/back.png and b/graphics/pokemon/zekrom/back.png differ diff --git a/graphics/pokemon/zeraora/back.png b/graphics/pokemon/zeraora/back.png index be61b2721..01bd0842f 100644 Binary files a/graphics/pokemon/zeraora/back.png and b/graphics/pokemon/zeraora/back.png differ diff --git a/graphics/pokemon/zeraora/front.png b/graphics/pokemon/zeraora/front.png index ccacf134b..be400956b 100644 Binary files a/graphics/pokemon/zeraora/front.png and b/graphics/pokemon/zeraora/front.png differ diff --git a/graphics/pokemon/zeraora/icon.png b/graphics/pokemon/zeraora/icon.png index 71142b64b..b8dadd7ba 100644 Binary files a/graphics/pokemon/zeraora/icon.png and b/graphics/pokemon/zeraora/icon.png differ diff --git a/graphics/pokemon/zigzagoon/back.png b/graphics/pokemon/zigzagoon/back.png index 67a3c1dab..cefc91e91 100644 Binary files a/graphics/pokemon/zigzagoon/back.png and b/graphics/pokemon/zigzagoon/back.png differ diff --git a/graphics/pokemon/zigzagoon/galarian/back.png b/graphics/pokemon/zigzagoon/galarian/back.png index 079b05290..ef2e41c18 100644 Binary files a/graphics/pokemon/zigzagoon/galarian/back.png and b/graphics/pokemon/zigzagoon/galarian/back.png differ diff --git a/graphics/pokemon/zigzagoon/galarian/front.png b/graphics/pokemon/zigzagoon/galarian/front.png index f7c5ce9f3..e5c9b481a 100644 Binary files a/graphics/pokemon/zigzagoon/galarian/front.png and b/graphics/pokemon/zigzagoon/galarian/front.png differ diff --git a/graphics/pokemon/zigzagoon/galarian/icon.png b/graphics/pokemon/zigzagoon/galarian/icon.png index 7d03b88f3..d83d717d0 100644 Binary files a/graphics/pokemon/zigzagoon/galarian/icon.png and b/graphics/pokemon/zigzagoon/galarian/icon.png differ diff --git a/graphics/pokemon/zigzagoon/icon.png b/graphics/pokemon/zigzagoon/icon.png index ca55ef97e..2c1325f64 100644 Binary files a/graphics/pokemon/zigzagoon/icon.png and b/graphics/pokemon/zigzagoon/icon.png differ diff --git a/graphics/pokemon/zoroark/anim_front.png b/graphics/pokemon/zoroark/anim_front.png index f446856e0..1cec32288 100644 Binary files a/graphics/pokemon/zoroark/anim_front.png and b/graphics/pokemon/zoroark/anim_front.png differ diff --git a/graphics/pokemon/zoroark/back.png b/graphics/pokemon/zoroark/back.png index ddfcbf381..66ee6c43b 100644 Binary files a/graphics/pokemon/zoroark/back.png and b/graphics/pokemon/zoroark/back.png differ diff --git a/graphics/pokemon/zoroark/hisuian/back.png b/graphics/pokemon/zoroark/hisuian/back.png index 0f3d8d5d1..8a252b305 100644 Binary files a/graphics/pokemon/zoroark/hisuian/back.png and b/graphics/pokemon/zoroark/hisuian/back.png differ diff --git a/graphics/pokemon/zoroark/hisuian/front.png b/graphics/pokemon/zoroark/hisuian/front.png index 94c8be2d8..bf4e40c15 100644 Binary files a/graphics/pokemon/zoroark/hisuian/front.png and b/graphics/pokemon/zoroark/hisuian/front.png differ diff --git a/graphics/pokemon/zoroark/hisuian/icon.png b/graphics/pokemon/zoroark/hisuian/icon.png index 41ab83177..6c4f6faf1 100644 Binary files a/graphics/pokemon/zoroark/hisuian/icon.png and b/graphics/pokemon/zoroark/hisuian/icon.png differ diff --git a/graphics/pokemon/zorua/anim_front.png b/graphics/pokemon/zorua/anim_front.png index 1f0b52e1e..a01ab6211 100644 Binary files a/graphics/pokemon/zorua/anim_front.png and b/graphics/pokemon/zorua/anim_front.png differ diff --git a/graphics/pokemon/zorua/back.png b/graphics/pokemon/zorua/back.png index f7e41d1d0..4d9458f3f 100644 Binary files a/graphics/pokemon/zorua/back.png and b/graphics/pokemon/zorua/back.png differ diff --git a/graphics/pokemon/zorua/hisuian/back.png b/graphics/pokemon/zorua/hisuian/back.png index 6af0fb8de..1268b09e0 100644 Binary files a/graphics/pokemon/zorua/hisuian/back.png and b/graphics/pokemon/zorua/hisuian/back.png differ diff --git a/graphics/pokemon/zorua/hisuian/front.png b/graphics/pokemon/zorua/hisuian/front.png index fbe3cb156..68e861aff 100644 Binary files a/graphics/pokemon/zorua/hisuian/front.png and b/graphics/pokemon/zorua/hisuian/front.png differ diff --git a/graphics/pokemon/zorua/hisuian/icon.png b/graphics/pokemon/zorua/hisuian/icon.png index 5ab4e4c59..17f9229a2 100644 Binary files a/graphics/pokemon/zorua/hisuian/icon.png and b/graphics/pokemon/zorua/hisuian/icon.png differ diff --git a/graphics/pokemon/zorua/icon.png b/graphics/pokemon/zorua/icon.png index 55307fcdf..8ec29b843 100644 Binary files a/graphics/pokemon/zorua/icon.png and b/graphics/pokemon/zorua/icon.png differ diff --git a/graphics/pokemon/zubat/anim_front.png b/graphics/pokemon/zubat/anim_front.png index 6060e7b77..3ef6a453a 100644 Binary files a/graphics/pokemon/zubat/anim_front.png and b/graphics/pokemon/zubat/anim_front.png differ diff --git a/graphics/pokemon/zubat/anim_frontf.png b/graphics/pokemon/zubat/anim_frontf.png index f0cd843a4..b9383adb4 100644 Binary files a/graphics/pokemon/zubat/anim_frontf.png and b/graphics/pokemon/zubat/anim_frontf.png differ diff --git a/graphics/pokemon/zubat/back.png b/graphics/pokemon/zubat/back.png index 64a5cf8da..d4ab3b87a 100644 Binary files a/graphics/pokemon/zubat/back.png and b/graphics/pokemon/zubat/back.png differ diff --git a/graphics/pokemon/zubat/backf.png b/graphics/pokemon/zubat/backf.png index 59ad49e13..a8bed93d0 100644 Binary files a/graphics/pokemon/zubat/backf.png and b/graphics/pokemon/zubat/backf.png differ diff --git a/graphics/pokemon/zubat/icon.png b/graphics/pokemon/zubat/icon.png index edc22ee6e..47937015d 100644 Binary files a/graphics/pokemon/zubat/icon.png and b/graphics/pokemon/zubat/icon.png differ diff --git a/graphics/pokemon/zubat/normal.pal b/graphics/pokemon/zubat/normal.pal index 13f001cc1..2994d5960 100644 --- a/graphics/pokemon/zubat/normal.pal +++ b/graphics/pokemon/zubat/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -99 123 181 -189 206 255 -140 181 239 -74 66 123 -99 123 181 -181 82 156 -115 33 90 -214 115 189 255 255 255 -208 208 208 -99 99 99 -0 0 0 -0 0 0 -0 0 0 +213 213 213 +98 98 98 +16 16 16 +255 0 255 +189 205 255 +139 180 238 +98 123 180 +74 65 123 +246 131 222 +213 115 189 +180 82 156 +115 32 90 +255 0 255 +255 0 255 diff --git a/graphics/pokemon/zubat/shiny.pal b/graphics/pokemon/zubat/shiny.pal index 290d12c52..508d47898 100644 --- a/graphics/pokemon/zubat/shiny.pal +++ b/graphics/pokemon/zubat/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 +152 160 208 +255 255 255 +213 213 213 +98 98 98 16 16 16 -64 120 24 -144 200 104 -112 152 56 -8 72 0 -64 120 24 -184 152 112 -120 96 48 -224 200 168 -248 248 248 -208 208 208 -96 96 96 -0 0 0 -0 0 0 -0 0 0 +255 0 255 +131 213 74 +106 156 41 +49 115 0 +8 74 0 +246 131 222 +238 213 156 +189 156 115 +139 115 57 +255 0 255 +255 0 255 diff --git a/graphics/pokemon/zweilous/anim_front.png b/graphics/pokemon/zweilous/anim_front.png index 0c8d34991..622db80f6 100644 Binary files a/graphics/pokemon/zweilous/anim_front.png and b/graphics/pokemon/zweilous/anim_front.png differ diff --git a/graphics/pokemon/zweilous/back.png b/graphics/pokemon/zweilous/back.png index 7713199d0..a02b323d1 100644 Binary files a/graphics/pokemon/zweilous/back.png and b/graphics/pokemon/zweilous/back.png differ diff --git a/graphics/pokemon/zygarde/10_percent/anim_front.png b/graphics/pokemon/zygarde/10_percent/anim_front.png index 6f4464421..88643c991 100644 Binary files a/graphics/pokemon/zygarde/10_percent/anim_front.png and b/graphics/pokemon/zygarde/10_percent/anim_front.png differ diff --git a/graphics/pokemon/zygarde/10_percent/back.png b/graphics/pokemon/zygarde/10_percent/back.png index 0c8e53ecd..b9935ebac 100644 Binary files a/graphics/pokemon/zygarde/10_percent/back.png and b/graphics/pokemon/zygarde/10_percent/back.png differ diff --git a/graphics/pokemon/zygarde/anim_front.png b/graphics/pokemon/zygarde/anim_front.png index 42e30b046..bfcf3c32e 100644 Binary files a/graphics/pokemon/zygarde/anim_front.png and b/graphics/pokemon/zygarde/anim_front.png differ diff --git a/graphics/pokemon/zygarde/back.png b/graphics/pokemon/zygarde/back.png index 78b9253b3..f8b91dd91 100644 Binary files a/graphics/pokemon/zygarde/back.png and b/graphics/pokemon/zygarde/back.png differ diff --git a/graphics/pokemon/zygarde/complete/anim_front.png b/graphics/pokemon/zygarde/complete/anim_front.png index 510a02660..a1a81bad6 100644 Binary files a/graphics/pokemon/zygarde/complete/anim_front.png and b/graphics/pokemon/zygarde/complete/anim_front.png differ diff --git a/graphics/pokemon/zygarde/complete/back.png b/graphics/pokemon/zygarde/complete/back.png index ac19b0d42..0c50a0a79 100644 Binary files a/graphics/pokemon/zygarde/complete/back.png and b/graphics/pokemon/zygarde/complete/back.png differ diff --git a/graphics/pokemon/zygarde/icon.png b/graphics/pokemon/zygarde/icon.png index a158456ea..bc960850f 100644 Binary files a/graphics/pokemon/zygarde/icon.png and b/graphics/pokemon/zygarde/icon.png differ diff --git a/include/battle.h b/include/battle.h index 00893d105..91c81958e 100644 --- a/include/battle.h +++ b/include/battle.h @@ -212,6 +212,7 @@ struct SideTimer u8 toxicSpikesAmount; u8 stealthRockAmount; u8 stickyWebAmount; + u8 stickyWebBattlerId; u8 stickyWebBattlerSide; // Used for Court Change u8 auroraVeilTimer; u8 auroraVeilBattlerId; @@ -291,6 +292,8 @@ struct AiLogicData s32 simulatedDmg[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex u8 effectiveness[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex u8 moveLimitations[MAX_BATTLERS_COUNT]; + bool8 shouldSwitchMon; // Because all available moves have no/little effect. Each bit per battler. + u8 monToSwitchId[MAX_BATTLERS_COUNT]; // ID of the mon to switch. }; struct AI_ThinkingStruct @@ -303,8 +306,7 @@ struct AI_ThinkingStruct u32 aiFlags; u8 aiAction; u8 aiLogicId; - struct AI_SavedBattleMon saved[4]; - bool8 switchMon; // Because all available moves have no/little effect. + struct AI_SavedBattleMon saved[MAX_BATTLERS_COUNT]; }; #define AI_MOVE_HISTORY_COUNT 3 @@ -486,6 +488,15 @@ struct MegaEvolutionData u8 triggerSpriteId; }; +struct UltraBurstData +{ + u8 toBurst; // As flags using gBitTable. + bool8 alreadyBursted[4]; // Array id is used for mon position. + u8 battlerId; + bool8 playerSelect; + u8 triggerSpriteId; +}; + struct Illusion { u8 on; @@ -614,6 +625,7 @@ struct BattleStruct u8 abilityPopUpSpriteIds[MAX_BATTLERS_COUNT][2]; // two per battler bool8 throwingPokeBall; struct MegaEvolutionData mega; + struct UltraBurstData burst; struct ZMoveData zmove; const u8 *trainerSlideMsg; bool8 trainerSlideLowHpMsgDone; @@ -642,7 +654,6 @@ struct BattleStruct u8 forcedSwitch:4; // For each battler u8 switchInAbilityPostponed:4; // To not activate against an empty field, each bit for battler u8 ballSpriteIds[2]; // item gfx, window gfx - u8 stickyWebUser; u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change u8 skyDropTargets[MAX_BATTLERS_COUNT]; // For Sky Drop, to account for if multiple Pokemon use Sky Drop in a double battle. // 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. @@ -1002,14 +1013,14 @@ extern void (*gPreBattleCallback1)(void); extern void (*gBattleMainFunc)(void); extern struct BattleResults gBattleResults; extern u8 gLeveledUpInBattle; -extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void); extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT]; extern u8 gMultiUsePlayerCursor; extern u8 gNumberOfMovesToChoose; -extern u8 gBattleControllerData[MAX_BATTLERS_COUNT]; extern bool8 gHasFetchedBall; extern u8 gLastUsedBall; extern u16 gLastThrownBall; +extern u16 gBallToDisplay; +extern bool8 gLastUsedBallMenuPresent; extern u8 gPartyCriticalHits[PARTY_SIZE]; #endif // GUARD_BATTLE_H diff --git a/include/battle_controllers.h b/include/battle_controllers.h index e1ab98b0c..b9f9868fa 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -99,6 +99,7 @@ enum { // Special return values in gBattleBufferB from Battle Controller functions. #define RET_VALUE_LEVELED_UP 11 #define RET_MEGA_EVOLUTION 0x80 +#define RET_ULTRA_BURST 0x70 struct UnusedControllerStruct { @@ -129,6 +130,7 @@ struct ChooseMoveStruct u8 monType2; u8 monType3; struct MegaEvolutionData mega; + struct UltraBurstData burst; struct ZMoveData zmove; }; @@ -197,6 +199,9 @@ enum }; extern struct UnusedControllerStruct gUnusedControllerStruct; +extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(u32 battler); +extern void (*gBattlerControllerEndFuncs[MAX_BATTLERS_COUNT])(u32 battler); +extern u8 gBattleControllerData[MAX_BATTLERS_COUNT]; // general functions void HandleLinkBattleSetup(void); @@ -251,43 +256,88 @@ void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId); void BtlController_EmitEndLinkBattle(u8 bufferId, u8 battleOutcome); void BtlController_EmitDebugMenu(u8 bufferId); +void BattleControllerComplete(u32 battler); // Can be used for all the controllers. +void BtlController_Empty(u32 battler); // Empty command, does nothing, only completes the execution. +void BtlController_TerminatorNop(u32 battler); // Dummy function at the end of the table. +void BattleControllerDummy(u32 battler); +void StartSendOutAnim(u32 battler, bool32 dontClearSubstituteBit); +void Controller_WaitForString(u32 battler); +void Controller_WaitForHealthBar(u32 battler); + +// handlers +void BtlController_HandleGetMonData(u32 battler); +void BtlController_HandleGetRawMonData(u32 battler); +void BtlController_HandleSetMonData(u32 battler); +void BtlController_HandleSetRawMonData(u32 battler); +void BtlController_HandleLoadMonSprite(u32 battler, void (*controllerCallback)(u32 battler)); +void BtlController_HandleSwitchInAnim(u32 battler, bool32 isPlayerSide, void (*controllerCallback)(u32 battler)); +void BtlController_HandleReturnMonToBall(u32 battler); +void BtlController_HandleDrawTrainerPic(u32 battlerId, u32 trainerPicId, bool32 isFrontPic, s16 xPos, s16 yPos, s32 subpriority); +void BtlController_HandleTrainerSlide(u32 battler, u32 trainerPicId); +void BtlController_HandleTrainerSlideBack(u32 battlerId, s16 data0, bool32 startAnim); +void BtlController_HandleFaintAnimation(u32 battler); +void BtlController_HandleSuccessBallThrowAnim(u32 battler, u32 target, u32 animId, bool32 allowCriticalCapture); +void BtlController_HandleBallThrowAnim(u32 battler, u32 target, u32 animId, bool32 allowCriticalCapture); +void BtlController_HandleMoveAnimation(u32 battler, bool32 updateTvData); +void BtlController_HandlePrintString(u32 battler, bool32 updateTvData, bool32 arenaPtsDeduct); +void BtlController_HandleHealthBarUpdate(u32 battler, bool32 updateHpText); +void DoStatusIconUpdate(u32 battler); +void BtlController_HandleStatusIconUpdate(u32 battler); +void BtlController_HandleStatusAnimation(u32 battler); +void BtlController_HandleClearUnkVar(u32 battler); +void BtlController_HandleSetUnkVar(u32 battler); +void BtlController_HandleClearUnkFlag(u32 battler); +void BtlController_HandleToggleUnkFlag(u32 battler); +void BtlController_HandleHitAnimation(u32 battler); +void BtlController_HandlePlaySE(u32 battler); +void BtlController_HandlePlayFanfareOrBGM(u32 battler); +void BtlController_HandleFaintingCry(u32 battler); +void BtlController_HandleIntroSlide(u32 battler); +void BtlController_HandleSpriteInvisibility(u32 battler); +bool32 TwoPlayerIntroMons(u32 battlerId); // Double battle with both player pokemon active. +bool32 TwoOpponentIntroMons(u32 battlerId); // Double battle with both opponent pokemon active. +void BtlController_HandleIntroTrainerBallThrow(u32 battler, u16 tagTrainerPal, const u32 *trainerPal, s16 framesToWait, void (*controllerCallback)(u32 battler)); +void BtlController_HandleDrawPartyStatusSummary(u32 battler, u32 side, bool32 considerDelay); +void BtlController_HandleHidePartyStatusSummary(u32 battler); +void BtlController_HandleBattleAnimation(u32 battler, bool32 ignoreSE, bool32 updateTvData); + // player controller -void SetControllerToPlayer(void); -void BattleControllerDummy(void); -void PlayerHandleGetRawMonData(void); -void SetBattleEndCallbacks(void); -void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite); +void SetControllerToPlayer(u32 battler); +void SetBattleEndCallbacks(u32 battler); +void PlayerHandleExpUpdate(u32 battler); +u32 LinkPlayerGetTrainerPicId(u32 multiplayerId); void CB2_SetUpReshowBattleScreenAfterMenu(void); void CB2_SetUpReshowBattleScreenAfterMenu2(void); void Task_PlayerController_RestoreBgmAfterCry(u8 taskId); void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused); void ActionSelectionDestroyCursorAt(u8 cursorPos); -void InitMoveSelectionsVarsAndStrings(void); +void InitMoveSelectionsVarsAndStrings(u32 battler); void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1); void MoveSelectionDestroyCursorAt(u8 cursorPosition); // recorded player controller -void SetControllerToRecordedPlayer(void); +void SetControllerToRecordedPlayer(u32 battler); // opponent controller -void SetControllerToOpponent(void); +void SetControllerToOpponent(u32 battler); // player partner controller -void SetControllerToPlayerPartner(void); +void Controller_PlayerPartnerShowIntroHealthbox(u32 battler); // Also used by the link partner. +void SetControllerToPlayerPartner(u32 battler); // safari controller -void SetControllerToSafari(void); +void SetControllerToSafari(u32 battler); // wally controller -void SetControllerToWally(void); +void SetControllerToWally(u32 battler); // recorded opponent controller -void SetControllerToRecordedOpponent(void); +void SetControllerToRecordedOpponent(u32 battler); // link opponent -void SetControllerToLinkOpponent(void); +void SetControllerToLinkOpponent(u32 battler); // link partner -void SetControllerToLinkPartner(void); +void SetControllerToLinkPartner(u32 battler); #endif // GUARD_BATTLE_CONTROLLERS_H diff --git a/include/battle_dome.h b/include/battle_dome.h index 900508c4b..b7572451c 100644 --- a/include/battle_dome.h +++ b/include/battle_dome.h @@ -1,8 +1,6 @@ #ifndef GUARD_BATTLE_DOME_H #define GUARD_BATTLE_DOME_H -extern u32 gPlayerPartyLostHP; - int GetDomeTrainerSelectedMons(u16 tournamentTrainerId); int TrainerIdToDomeTournamentId(u16 trainerId); diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h index 0b1bd52fb..794447446 100644 --- a/include/battle_gfx_sfx_util.h +++ b/include/battle_gfx_sfx_util.h @@ -10,12 +10,10 @@ void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status); bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId, u16 argument); void InitAndLaunchSpecialAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId); bool8 IsBattleSEPlaying(u8 battlerId); -void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId); -void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId); +void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId); void BattleGfxSfxDummy2(u16 species); void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId); void DecompressTrainerBackPic(u16 backPicId, u8 battlerId); -void BattleGfxSfxDummy3(u8 gender); void FreeTrainerFrontPicPalette(u16 frontPicId); bool8 BattleLoadAllHealthBoxesGfx(u8 state); void LoadBattleBarGfx(u8 unused); diff --git a/include/battle_interface.h b/include/battle_interface.h index e2937748a..2c8747db0 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -53,11 +53,13 @@ enum #define TAG_ALPHA_INDICATOR_TILE 0xD779 #define TAG_OMEGA_INDICATOR_TILE 0xD77A #define TAG_ZMOVE_TRIGGER_TILE 0xD77B +#define TAG_BURST_TRIGGER_TILE 0xD77C #define TAG_MEGA_TRIGGER_PAL 0xD777 #define TAG_MEGA_INDICATOR_PAL 0xD778 #define TAG_ALPHA_OMEGA_INDICATOR_PAL 0xD779 // Alpha and Omega indicators use the same palette as each of them only uses 4 different colors. #define TAG_ZMOVE_TRIGGER_PAL 0xD77B +#define TAG_BURST_TRIGGER_PAL 0xD77C enum { @@ -91,6 +93,11 @@ void CreateMegaTriggerSprite(u8 battlerId, u8 palId); bool32 IsMegaTriggerSpriteActive(void); void HideMegaTriggerSprite(void); void DestroyMegaTriggerSprite(void); +void ChangeBurstTriggerSprite(u8 spriteId, u8 animId); +void CreateBurstTriggerSprite(u8 battlerId, u8 palId); +bool32 IsBurstTriggerSpriteActive(void); +void HideBurstTriggerSprite(void); +void DestroyBurstTriggerSprite(void); void MegaIndicator_LoadSpritesGfx(void); u8 CreatePartyStatusSummarySprites(u8 battler, struct HpAndStatus *partyInfo, bool8 skipPlayer, bool8 isBattleStart); void Task_HidePartyStatusSummary(u8 taskId); @@ -105,6 +112,8 @@ bool32 CanThrowLastUsedBall(void); void TryHideLastUsedBall(void); void TryRestoreLastUsedBall(void); void TryAddLastUsedBallItemSprites(void); +void SwapBallToDisplay(bool32 sameBall); +void ArrowsChangeColorLastBallCycle(bool32 showArrows); void UpdateAbilityPopup(u8 battlerId); #endif // GUARD_BATTLE_INTERFACE_H diff --git a/include/battle_main.h b/include/battle_main.h index 5f603654b..8a13213b8 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -72,7 +72,7 @@ bool32 IsWildMonSmart(void); u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags); void ModifyPersonalityForNature(u32 *personality, u32 newNature); u32 GeneratePersonalityForGender(u32 gender, u32 species); -void CustomTrainerPartyAssignMoves(struct Pokemon *mon, const struct TrainerMonCustomized *partyEntry); +void CustomTrainerPartyAssignMoves(struct Pokemon *mon, const struct TrainerMon *partyEntry); extern struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE]; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index bcc8632a4..98ea8ba15 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -472,6 +472,7 @@ extern const u8 BattleScript_SpikesActivates[]; extern const u8 BattleScript_BerserkGeneRet[]; extern const u8 BattleScript_TargetFormChangeWithStringNoPopup[]; extern const u8 BattleScript_DefDown[]; +extern const u8 BattleScript_UltraBurst[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/battle_util.h b/include/battle_util.h index 9de5d6ded..8a1bce851 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -177,8 +177,10 @@ uq4_12_t GetTypeModifier(u8 atkType, u8 defType); s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId); s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp); bool32 CanMegaEvolve(u8 battlerId); +bool32 CanUltraBurst(u8 battlerId); bool32 IsBattlerMegaEvolved(u8 battlerId); bool32 IsBattlerPrimalReverted(u8 battlerId); +bool32 IsBattlerUltraBursted(u8 battlerId); u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method); bool32 TryBattleFormChange(u8 battlerId, u16 method); bool32 DoBattlersShareType(u32 battler1, u32 battler2); @@ -209,14 +211,12 @@ void BufferStatChange(u8 battlerId, u8 statId, u8 stringId); bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u8 battlerDef, bool32 checkTarget); u16 GetUsedHeldItem(u8 battler); bool32 IsBattlerWeatherAffected(u8 battlerId, u32 weatherFlags); -u32 ApplyWeatherDamageMultiplier(u8 battlerAtk, u16 move, u8 moveType, u32 dmg, u16 holdEffectAtk, u16 holdEffectDef); u32 GetBattlerMoveTargetType(u8 battlerId, u16 move); bool32 CanTargetBattler(u8 battlerAtk, u8 battlerDef, u16 move); bool8 IsMoveAffectedByParentalBond(u16 move, u8 battlerId); void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon); void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon); void RecalcBattlerStats(u32 battler, struct Pokemon *mon); -void MulModifier(u16 *modifier, u16 val); bool32 IsAlly(u32 battlerAtk, u32 battlerDef); // Ability checks @@ -245,9 +245,4 @@ u8 GetBattlerGender(u8 battlerId); bool8 AreBattlersOfOppositeGender(u8 battler1, u8 battler2); u32 CalcSecondaryEffectChance(u8 battlerId, u8 secondaryEffectChance); -static inline u32 ApplyModifier(uq4_12_t modifier, u32 val) -{ - return UQ_4_12_TO_INT((modifier * val) + UQ_4_12_ROUND); -} - #endif // GUARD_BATTLE_UTIL_H diff --git a/include/config/battle.h b/include/config/battle.h index 3a173138b..403da76e4 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -192,6 +192,7 @@ #define B_CRITICAL_CAPTURE TRUE // If set to TRUE, Critical Capture will be enabled. #define B_LAST_USED_BALL TRUE // If TRUE, the "last used ball" feature from Gen 7 will be implemented #define B_LAST_USED_BALL_BUTTON R_BUTTON // If last used ball is implemented, this button (or button combo) will trigger throwing the last used ball. +#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 // Other settings #define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. diff --git a/include/constants/battle.h b/include/constants/battle.h index 7f2cb164e..d99eae919 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -495,4 +495,9 @@ #define PARENTAL_BOND_2ND_HIT 1 #define PARENTAL_BOND_OFF 0 +// Constants for if HandleScriptMegaPrimalBurst should handle Mega Evolution, Primal Reversion, or Ultra Burst. +#define HANDLE_TYPE_MEGA_EVOLUTION 0 +#define HANDLE_TYPE_PRIMAL_REVERSION 1 +#define HANDLE_TYPE_ULTRA_BURST 2 + #endif // GUARD_CONSTANTS_BATTLE_H diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 29c39b689..e70eba0fd 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -548,6 +548,7 @@ #define B_ANIM_ZMOVE_ACTIVATE 34 // Using Z Moves #define B_ANIM_AFFECTION_HANGED_ON 35 #define B_ANIM_SNOW_CONTINUES 36 +#define B_ANIM_ULTRA_BURST 37 // special animations table (gBattleAnims_Special) #define B_ANIM_LVL_UP 0 diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 387800da4..20e6d7e45 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -257,6 +257,7 @@ #define VARIOUS_TRY_REVIVAL_BLESSING 165 #define VARIOUS_TRY_TRAINER_SLIDE_MSG_Z_MOVE 166 #define VARIOUS_TRY_TRAINER_SLIDE_MSG_MEGA_EVOLUTION 167 +#define VARIOUS_HANDLE_ULTRA_BURST 168 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 97284d6fe..35d991bb8 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -665,8 +665,10 @@ #define STRINGID_SNOWSTOPPED 663 #define STRINGID_SNOWWARNINGSNOW 664 #define STRINGID_PKMNITEMMELTED 665 +#define STRINGID_ULTRABURSTREACTING 666 +#define STRINGID_ULTRABURSTCOMPLETED 667 -#define BATTLESTRINGS_COUNT 666 +#define BATTLESTRINGS_COUNT 668 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index 81d1b045b..db96b0657 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -96,4 +96,9 @@ // param1: ability to check. #define FORM_CHANGE_BATTLE_TURN_END 15 +// Form change that activates when the mon has the defined item. +// If it's on the player's side, it also requires for the player to trigger it by pressing START before selecting a move. +// param1: item to hold. +#define FORM_CHANGE_BATTLE_ULTRA_BURST 16 + #endif // GUARD_CONSTANTS_FORM_CHANGE_TYPES_H diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index af7178041..3b54f9851 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -327,6 +327,7 @@ #define SPECIES_FLAG_HISUIAN_FORM (1 << 7) #define SPECIES_FLAG_ALL_PERFECT_IVS (1 << 8) #define SPECIES_FLAG_CANNOT_BE_TRADED (1 << 9) +#define SPECIES_FLAG_ULTRA_BURST (1 << 10) #define LEGENDARY_PERFECT_IV_COUNT 3 diff --git a/include/constants/trainers.h b/include/constants/trainers.h index 25660ac07..16904bcd1 100644 --- a/include/constants/trainers.h +++ b/include/constants/trainers.h @@ -371,13 +371,6 @@ #define F_TRAINER_FEMALE (1 << 7) -// All trainer parties specify the IV, level, and species for each Pokémon in the -// party. Some trainer parties also specify held items and custom moves for each -// Pokémon. -#define F_TRAINER_PARTY_CUSTOM_MOVESET (1 << 0) -#define F_TRAINER_PARTY_HELD_ITEM (1 << 1) -#define F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED (1 << 3) - // Trainer party defines #define TRAINER_MON_MALE 1 #define TRAINER_MON_FEMALE 2 diff --git a/include/data.h b/include/data.h index d8e25df82..d2248820e 100644 --- a/include/data.h +++ b/include/data.h @@ -35,7 +35,7 @@ struct MonCoords #define TRAINER_PARTY_EVS(hp, atk, def, speed, spatk, spdef) ((const u8[6]){hp,atk,def,spatk,spdef,speed}) #define TRAINER_PARTY_NATURE(nature) (nature+1) -struct TrainerMonCustomized +struct TrainerMon { const u8 *nickname; const u8 *ev; @@ -52,64 +52,19 @@ struct TrainerMonCustomized bool8 isShiny : 1; }; -struct TrainerMonNoItemDefaultMoves -{ - u16 iv; - u8 lvl; - u16 species; -}; - -struct TrainerMonItemDefaultMoves -{ - u16 iv; - u8 lvl; - u16 species; - u16 heldItem; -}; - -struct TrainerMonNoItemCustomMoves -{ - u16 iv; - u8 lvl; - u16 species; - u16 moves[MAX_MON_MOVES]; -}; - -struct TrainerMonItemCustomMoves -{ - u16 iv; - u8 lvl; - u16 species; - u16 heldItem; - u16 moves[MAX_MON_MOVES]; -}; - -#define NO_ITEM_DEFAULT_MOVES(party) { .NoItemDefaultMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = 0 -#define NO_ITEM_CUSTOM_MOVES(party) { .NoItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET -#define ITEM_DEFAULT_MOVES(party) { .ItemDefaultMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_HELD_ITEM -#define ITEM_CUSTOM_MOVES(party) { .ItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM -#define EVERYTHING_CUSTOMIZED(party) { .EverythingCustomized = party}, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED - -union TrainerMonPtr -{ - const struct TrainerMonNoItemDefaultMoves *NoItemDefaultMoves; - const struct TrainerMonNoItemCustomMoves *NoItemCustomMoves; - const struct TrainerMonItemDefaultMoves *ItemDefaultMoves; - const struct TrainerMonItemCustomMoves *ItemCustomMoves; - const struct TrainerMonCustomized *EverythingCustomized; -}; +#define TRAINER_PARTY(partyArray) partyArray, .partySize = ARRAY_COUNT(partyArray) struct Trainer { /*0x00*/ u32 aiFlags; - /*0x04*/ union TrainerMonPtr party; + /*0x04*/ const struct TrainerMon *party; /*0x08*/ u16 items[MAX_TRAINER_ITEMS]; /*0x10*/ u8 trainerClass; /*0x11*/ u8 encounterMusic_gender; // last bit is gender /*0x12*/ u8 trainerPic; /*0x13*/ u8 trainerName[TRAINER_NAME_LENGTH + 1]; /*0x1E*/ bool8 doubleBattle:1; - u8 partyFlags:7; + u8 padding:7; /*0x1F*/ u8 partySize; }; diff --git a/include/fpmath.h b/include/fpmath.h index 987c59d5a..6e3edd64e 100644 --- a/include/fpmath.h +++ b/include/fpmath.h @@ -52,10 +52,30 @@ static inline uq4_12_t uq4_12_multiply(uq4_12_t a, uq4_12_t b) return (product + UQ_4_12_ROUND) >> UQ_4_12_SHIFT; } +static inline uq4_12_t uq4_12_multiply_half_down(uq4_12_t a, uq4_12_t b) +{ + u32 product = (u32) a * b; + return (product + UQ_4_12_ROUND - 1) >> UQ_4_12_SHIFT; +} + static inline uq4_12_t uq4_12_divide(uq4_12_t dividend, uq4_12_t divisor) { if (divisor == UQ_4_12(0.0)) return UQ_4_12(0); return (dividend << UQ_4_12_SHIFT) / divisor; } +// Multiplies value by the UQ_4_12 number modifier. +// Returns an integer, rounded to nearest (rounding down on n.5) +static inline u32 uq4_12_multiply_by_int_half_down(uq4_12_t modifier, u32 value) +{ + return UQ_4_12_TO_INT((modifier * value) + UQ_4_12_ROUND - 1); +} + +// Multiplies value by the UQ_4_12 number modifier. +// Returns an integer, rounded to nearest (rounding up on n.5) +static inline u32 uq4_12_multiply_by_int_half_up(uq4_12_t modifier, u32 value) +{ + return UQ_4_12_TO_INT((modifier * value) + UQ_4_12_ROUND); +} + #endif // FPMATH_H_ diff --git a/include/item.h b/include/item.h index a99782f80..34faa8983 100644 --- a/include/item.h +++ b/include/item.h @@ -14,12 +14,11 @@ struct Item u8 holdEffectParam; const u8 *description; u8 importance; - bool8 registrability; // unused u8 pocket; u8 type; ItemUseFunc fieldUseFunc; u8 battleUsage; - u8 secondaryId; + u16 secondaryId; u8 flingPower; }; diff --git a/include/party_menu.h b/include/party_menu.h index 31e591074..38139cc96 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -57,7 +57,6 @@ void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task); void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task); void ItemUseCB_PPUp(u8 taskId, TaskFunc task); u16 ItemIdToBattleMoveId(u16 item); -bool8 IsMoveHm(u16 move); bool8 MonKnowsMove(struct Pokemon *mon, u16 move); bool8 BoxMonKnowsMove(struct BoxPokemon *boxMon, u16 move); void ItemUseCB_TMHM(u8 taskId, TaskFunc task); diff --git a/include/pokemon.h b/include/pokemon.h index 73726f985..8303f3223 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -579,7 +579,7 @@ const u32 *GetMonFrontSpritePal(struct Pokemon *mon); const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality); const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon); const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality); -bool32 IsHMMove2(u16 move); +bool8 IsMoveHM(u16 move); bool8 IsMonSpriteNotFlipped(u16 species); s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor); s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor); diff --git a/test/test_battle.h b/include/test/battle.h similarity index 99% rename from test/test_battle.h rename to include/test/battle.h index 74a3bc2e8..c3109da17 100644 --- a/test/test_battle.h +++ b/include/test/battle.h @@ -447,13 +447,13 @@ #ifndef GUARD_TEST_BATTLE_H #define GUARD_TEST_BATTLE_H +#include "global.h" #include "battle.h" #include "battle_anim.h" #include "data.h" #include "item.h" #include "random.h" #include "recorded_battle.h" -#include "test.h" #include "util.h" #include "constants/abilities.h" #include "constants/battle_anim.h" @@ -462,6 +462,7 @@ #include "constants/items.h" #include "constants/moves.h" #include "constants/species.h" +#include "test/test.h" // NOTE: If the stack is too small the test runner will probably crash // or loop. @@ -795,6 +796,8 @@ struct MoveContext u16 explicitSecondaryEffect:1; u16 megaEvolve:1; u16 explicitMegaEvolve:1; + u16 ultraBurst:1; + u16 explicitUltraBurst:1; // TODO: u8 zMove:1; u16 allowed:1; u16 explicitAllowed:1; diff --git a/test/test.h b/include/test/test.h similarity index 100% rename from test/test.h rename to include/test/test.h diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index 618c610e6..dc15e0f04 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -2080,6 +2080,8 @@ gCryTable:: @ Calyrex cry Cry_CalyrexIceRider cry Cry_CalyrexShadowRider + @ Basculegion + cry Cry_Basculegion .else @ Cramorant cry Cry_Unown @@ -2118,6 +2120,8 @@ gCryTable:: @ Calyrex cry Cry_Unown cry Cry_Unown + @ Basculegion + cry Cry_Unown .endif .align 2 @@ -4163,6 +4167,8 @@ gCryTable_Reverse:: @ Calyrex cry_reverse Cry_CalyrexIceRider cry_reverse Cry_CalyrexShadowRider + @ Basculegion + cry_reverse Cry_Basculegion .else cry_reverse Cry_Unown cry_reverse Cry_Unown @@ -4187,4 +4193,5 @@ gCryTable_Reverse:: cry_reverse Cry_Unown cry_reverse Cry_Unown cry_reverse Cry_Unown + cry_reverse Cry_Unown .endif diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index e231d3d1f..4c4251bf4 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -403,6 +403,78 @@ void GetAiLogicData(void) } } +static bool32 AI_SwitchMonIfSuitable(u32 battlerId) +{ + u32 monToSwitchId = GetMostSuitableMonToSwitchInto(); + if (monToSwitchId != PARTY_SIZE) + { + AI_DATA->shouldSwitchMon |= gBitTable[battlerId]; + AI_DATA->monToSwitchId[battlerId] = monToSwitchId; + return TRUE; + } + return FALSE; +} + +static bool32 AI_ShouldSwitchIfBadMoves(u32 battlerId, bool32 doubleBattle) +{ + u32 i, j; + // If can switch. + if (CountUsablePartyMons(battlerId) > 0 + && !IsBattlerTrapped(battlerId, TRUE) + && !(gBattleTypeFlags & (BATTLE_TYPE_ARENA | BATTLE_TYPE_PALACE)) + && AI_THINKING_STRUCT->aiFlags & (AI_FLAG_CHECK_VIABILITY | AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_PREFER_BATON_PASS)) + { + // Consider switching if all moves are worthless to use. + if (GetTotalBaseStat(gBattleMons[battlerId].species) >= 310 // Mon is not weak. + && gBattleMons[battlerId].hp >= gBattleMons[battlerId].maxHP / 2) // Mon has more than 50% of its HP + { + s32 cap = AI_THINKING_STRUCT->aiFlags & (AI_FLAG_CHECK_VIABILITY) ? 95 : 93; + if (doubleBattle) + { + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (i != battlerId && IsBattlerAlive(i)) + { + for (j = 0; j < MAX_MON_MOVES; j++) + { + if (gBattleStruct->aiFinalScore[battlerId][i][j] > cap) + break; + } + if (j != MAX_MON_MOVES) + break; + } + } + if (i == MAX_BATTLERS_COUNT && AI_SwitchMonIfSuitable(battlerId)) + return TRUE; + } + else + { + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (AI_THINKING_STRUCT->score[i] > cap) + break; + } + + if (i == MAX_MON_MOVES && AI_SwitchMonIfSuitable(battlerId)) + return TRUE; + } + + } + + // Consider switching if your mon with truant is bodied by Protect spam. + // Or is using a double turn semi invulnerable move(such as Fly) and is faster. + if (GetBattlerAbility(battlerId) == ABILITY_TRUANT + && IsTruantMonVulnerable(battlerId, gBattlerTarget) + && gDisableStructs[battlerId].truantCounter + && gBattleMons[battlerId].hp >= gBattleMons[battlerId].maxHP / 2 + && AI_SwitchMonIfSuitable(battlerId)) + { + return TRUE; + } + } + return FALSE; +} + static u8 ChooseMoveOrAction_Singles(void) { u8 currentMoveArray[MAX_MON_MOVES]; @@ -436,46 +508,9 @@ static u8 ChooseMoveOrAction_Singles(void) gActiveBattler = sBattler_AI; - // If can switch. - if (CountUsablePartyMons(sBattler_AI) > 0 - && !IsAbilityPreventingEscape(sBattler_AI) - && !(gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) - && !(gStatuses3[gActiveBattler] & STATUS3_ROOTED) - && !(gBattleTypeFlags & (BATTLE_TYPE_ARENA | BATTLE_TYPE_PALACE)) - && AI_THINKING_STRUCT->aiFlags & (AI_FLAG_CHECK_VIABILITY | AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_PREFER_BATON_PASS)) - { - // Consider switching if all moves are worthless to use. - if (GetTotalBaseStat(gBattleMons[sBattler_AI].species) >= 310 // Mon is not weak. - && gBattleMons[sBattler_AI].hp >= gBattleMons[sBattler_AI].maxHP / 2) - { - s32 cap = AI_THINKING_STRUCT->aiFlags & (AI_FLAG_CHECK_VIABILITY) ? 95 : 93; - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (AI_THINKING_STRUCT->score[i] > cap) - break; - } - - if (i == MAX_MON_MOVES && GetMostSuitableMonToSwitchInto() != PARTY_SIZE) - { - AI_THINKING_STRUCT->switchMon = TRUE; - return AI_CHOICE_SWITCH; - } - } - - // Consider switching if your mon with truant is bodied by Protect spam. - // Or is using a double turn semi invulnerable move(such as Fly) and is faster. - if (GetBattlerAbility(sBattler_AI) == ABILITY_TRUANT - && IsTruantMonVulnerable(sBattler_AI, gBattlerTarget) - && gDisableStructs[sBattler_AI].truantCounter - && gBattleMons[sBattler_AI].hp >= gBattleMons[sBattler_AI].maxHP / 2) - { - if (GetMostSuitableMonToSwitchInto() != PARTY_SIZE) - { - AI_THINKING_STRUCT->switchMon = TRUE; - return AI_CHOICE_SWITCH; - } - } - } + // Switch mon if there are no good moves to use. + if (AI_ShouldSwitchIfBadMoves(sBattler_AI, FALSE)) + return AI_CHOICE_SWITCH; numOfBestMoves = 1; currentMoveArray[0] = AI_THINKING_STRUCT->score[0]; @@ -590,7 +625,6 @@ static u8 ChooseMoveOrAction_Doubles(void) if (i == BATTLE_PARTNER(sBattler_AI) && bestMovePointsForTarget[i] < 100) { bestMovePointsForTarget[i] = -1; - mostViableMovesScores[0] = mostViableMovesScores[0]; // Needed to match. } } @@ -600,6 +634,10 @@ static u8 ChooseMoveOrAction_Doubles(void) } } + // Switch mon if all of the moves are bad to use against any of the target. + if (AI_ShouldSwitchIfBadMoves(sBattler_AI, TRUE)) + return AI_CHOICE_SWITCH; + mostMovePoints = bestMovePointsForTarget[0]; mostViableTargetsArray[0] = 0; mostViableTargetsNo = 1; @@ -1647,18 +1685,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_FAKE_OUT: if (!gDisableStructs[battlerAtk].isFirstTurn) - { score -= 10; - } - else if (move == MOVE_FAKE_OUT) // filter out first impression - { - if ((AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CHOICE_BAND || AI_DATA->abilities[battlerAtk] == ABILITY_GORILLA_TACTICS) - && (CountUsablePartyMons(battlerDef) > 0 || !CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0))) - { - if (CountUsablePartyMons(battlerAtk) == 0) - score -= 10; // Don't lock the attacker into Fake Out if they can't switch out afterwards. - } - } break; case EFFECT_STOCKPILE: if (gDisableStructs[battlerAtk].stockpileCounter >= 3) @@ -3094,7 +3121,7 @@ static s16 AI_DoubleBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_POISON) || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_ROCK)) score -= 10; // partner will be hit by earthquake and is weak to it - else + else if (IsBattlerAlive(battlerAtkPartner)) score -= 3; break; } @@ -4137,9 +4164,13 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score); break; case EFFECT_FAKE_OUT: - if (move == MOVE_FAKE_OUT // filter out first impression - && ShouldFakeOut(battlerAtk, battlerDef, move)) - score += 8; + if (move == MOVE_FAKE_OUT) // filter out first impression + { + if (ShouldFakeOut(battlerAtk, battlerDef, move)) + score += 4; + else + score -= 10; + } break; case EFFECT_STOCKPILE: if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 67f3e2dd8..8808784d2 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -60,10 +60,10 @@ void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId) static bool8 ShouldSwitchIfAllBadMoves(void) { - if (gBattleResources->ai->switchMon) + if (AI_DATA->shouldSwitchMon & gBitTable[gActiveBattler]) { - gBattleResources->ai->switchMon = 0; - *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; + AI_DATA->shouldSwitchMon &= ~(gBitTable[gActiveBattler]); + gBattleStruct->AI_monToSwitchIntoId[gActiveBattler] = AI_DATA->monToSwitchId[gActiveBattler]; BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0); return TRUE; } @@ -142,11 +142,12 @@ static bool8 ShouldSwitchIfWonderGuard(void) static bool8 FindMonThatAbsorbsOpponentsMove(void) { u8 battlerIn1, battlerIn2; - u16 absorbingTypeAbility; + u8 numAbsorbingAbilities = 0; + u16 absorbingTypeAbilities[3]; // Array size is maximum number of absorbing abilities for a single type s32 firstId; s32 lastId; // + 1 struct Pokemon *party; - s32 i; + s32 i, j; if (HasSuperEffectiveMoveAgainstOpponents(TRUE) && Random() % 3 != 0) return FALSE; @@ -171,17 +172,42 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) battlerIn2 = gActiveBattler; } + // Create an array of possible absorb abilities so the AI considers all of them if (gBattleMoves[gLastLandedMoves[gActiveBattler]].type == TYPE_FIRE) - absorbingTypeAbility = ABILITY_FLASH_FIRE; + { + absorbingTypeAbilities[0] = ABILITY_FLASH_FIRE; + numAbsorbingAbilities = 1; + } else if (gBattleMoves[gLastLandedMoves[gActiveBattler]].type == TYPE_WATER) - absorbingTypeAbility = ABILITY_WATER_ABSORB; + { + absorbingTypeAbilities[0] = ABILITY_WATER_ABSORB; + absorbingTypeAbilities[1] = ABILITY_STORM_DRAIN; + absorbingTypeAbilities[2] = ABILITY_DRY_SKIN; + numAbsorbingAbilities = 3; + } else if (gBattleMoves[gLastLandedMoves[gActiveBattler]].type == TYPE_ELECTRIC) - absorbingTypeAbility = ABILITY_VOLT_ABSORB; + { + absorbingTypeAbilities[0] = ABILITY_VOLT_ABSORB; + absorbingTypeAbilities[1] = ABILITY_MOTOR_DRIVE; + absorbingTypeAbilities[2] = ABILITY_LIGHTNING_ROD; + numAbsorbingAbilities = 3; + } + else if (gBattleMoves[gLastLandedMoves[gActiveBattler]].type == TYPE_GRASS) + { + absorbingTypeAbilities[0] = ABILITY_SAP_SIPPER; + numAbsorbingAbilities = 1; + } else + { return FALSE; + } - if (AI_DATA->abilities[gActiveBattler] == absorbingTypeAbility) - return FALSE; + // Check current mon for all absorbing abilities + for (i = 0; i < numAbsorbingAbilities; i++) + { + if (AI_DATA->abilities[gActiveBattler] == absorbingTypeAbilities[i]) + return FALSE; + } GetAIPartyIndexes(gActiveBattler, &firstId, &lastId); @@ -208,15 +234,18 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) continue; monAbility = GetMonAbility(&party[i]); - if (absorbingTypeAbility == monAbility && Random() & 1) + + for (j = 0; j < numAbsorbingAbilities; j++) { - // we found a mon. - *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i; - BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0); - return TRUE; + if (absorbingTypeAbilities[j] == monAbility && Random() & 1) + { + // we found a mon. + *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i; + BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); + return TRUE; + } } } - return FALSE; } diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 6d7b74b3b..71fb0f108 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2975,24 +2975,23 @@ bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility) u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move) { - if (defAbility == ABILITY_INNER_FOCUS + if (((AI_DATA->abilities[battlerAtk] != ABILITY_MOLD_BREAKER && (defAbility == ABILITY_SHIELD_DUST || defAbility == ABILITY_INNER_FOCUS)) + || AI_GetHoldEffect(battlerDef) == HOLD_EFFECT_COVERT_CLOAK || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) - || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent goes first + || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER)) // Opponent goes first { - return 0; // don't try to flinch + return 0; } - else if ((gBattleMons[battlerDef].status1 & STATUS1_SLEEP) && !HasMoveEffect(battlerDef, EFFECT_SLEEP_TALK) && !HasMoveEffect(battlerDef, EFFECT_SNORE)) - { - return 0; // don't try to flinch sleeping pokemon - } - else if (atkAbility == ABILITY_SERENE_GRACE + else if ((atkAbility == ABILITY_SERENE_GRACE || gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION || gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) + || ((AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) && CanTargetFaintAi(battlerDef, battlerAtk))) { return 2; // good idea to flinch } - return 1; // decent idea to flinch + + return 0; // don't try to flinch } bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move) @@ -3011,15 +3010,16 @@ bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move) bool32 ShouldFakeOut(u8 battlerAtk, u8 battlerDef, u16 move) { - if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CHOICE_BAND && CountUsablePartyMons(battlerAtk) == 0) - return FALSE; // don't lock attacker into fake out if can't switch out + if (!gDisableStructs[battlerAtk].isFirstTurn + || AI_DATA->abilities[battlerAtk] == ABILITY_GORILLA_TACTICS + || AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CHOICE_BAND + || AI_GetHoldEffect(battlerDef) == HOLD_EFFECT_COVERT_CLOAK + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) + || (AI_DATA->abilities[battlerAtk] != ABILITY_MOLD_BREAKER + && (AI_DATA->abilities[battlerDef] == ABILITY_SHIELD_DUST || AI_DATA->abilities[battlerDef] == ABILITY_INNER_FOCUS))) + return FALSE; - if (gDisableStructs[battlerAtk].isFirstTurn - && ShouldTryToFlinch(battlerAtk, battlerDef, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], move) - && !DoesSubstituteBlockMove(battlerAtk, battlerDef, move)) - return TRUE; - - return FALSE; + return TRUE; } static u32 FindMoveUsedXTurnsAgo(u32 battlerId, u32 x) @@ -3687,7 +3687,8 @@ void IncreaseStatUpScore(u8 battlerAtk, u8 battlerDef, u8 statId, s16 *score) void IncreasePoisonScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) { - if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + if (((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_PSN || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_STATUS) return; if (AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove) && AI_DATA->hpPercents[battlerDef] > 20) @@ -3710,7 +3711,8 @@ void IncreasePoisonScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) void IncreaseBurnScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) { - if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + if (((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_BRN || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_STATUS) return; if (AI_CanBurn(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) @@ -3729,7 +3731,8 @@ void IncreaseBurnScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) void IncreaseParalyzeScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) { - if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + if (((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_PAR || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_STATUS) return; if (AI_CanParalyze(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) @@ -3750,7 +3753,8 @@ void IncreaseParalyzeScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) void IncreaseSleepScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) { - if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + if (((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_SLP || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_STATUS) return; if (AI_CanPutToSleep(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) @@ -3768,7 +3772,8 @@ void IncreaseSleepScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) void IncreaseConfusionScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) { - if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + if (((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_CONFUSION || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_STATUS) return; if (AI_CanConfuse(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) diff --git a/src/battle_anim.c b/src/battle_anim.c index 5691e21e2..808676c2e 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -275,6 +275,7 @@ void LaunchBattleAnimation(u32 animType, u32 animId) case B_ANIM_WISH_HEAL: case B_ANIM_MEGA_EVOLUTION: case B_ANIM_PRIMAL_REVERSION: + case B_ANIM_ULTRA_BURST: case B_ANIM_GULP_MISSILE: sAnimHideHpBoxes = TRUE; break; diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 608e6ae94..966887b25 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -4761,6 +4761,18 @@ const struct SpriteTemplate gSpriteTemplate_BitterMaliceRing = { .callback = AnimParticleInVortex }; +//ultra burst +const struct SpriteTemplate gUltraBurstSymbolSpriteTemplate = +{ + .tileTag = ANIM_TAG_ULTRA_BURST_SYMBOL, + .paletteTag = ANIM_TAG_ULTRA_BURST_SYMBOL, + .oam = &gOamData_AffineDouble_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_LusterPurgeCircle, + .callback = AnimSpriteOnMonPos +}; + // Z MOVES //activate const struct SpriteTemplate gZMoveSymbolSpriteTemplate = diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 69e2f6bde..4f1c3da97 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -29,205 +29,126 @@ #include "constants/trainers.h" #include "recorded_battle.h" -static void LinkOpponentHandleGetMonData(void); -static void LinkOpponentHandleGetRawMonData(void); -static void LinkOpponentHandleSetMonData(void); -static void LinkOpponentHandleSetRawMonData(void); -static void LinkOpponentHandleLoadMonSprite(void); -static void LinkOpponentHandleSwitchInAnim(void); -static void LinkOpponentHandleReturnMonToBall(void); -static void LinkOpponentHandleDrawTrainerPic(void); -static void LinkOpponentHandleTrainerSlide(void); -static void LinkOpponentHandleTrainerSlideBack(void); -static void LinkOpponentHandleFaintAnimation(void); -static void LinkOpponentHandlePaletteFade(void); -static void LinkOpponentHandleSuccessBallThrowAnim(void); -static void LinkOpponentHandleBallThrowAnim(void); -static void LinkOpponentHandlePause(void); -static void LinkOpponentHandleMoveAnimation(void); -static void LinkOpponentHandlePrintString(void); -static void LinkOpponentHandlePrintSelectionString(void); -static void LinkOpponentHandleChooseAction(void); -static void LinkOpponentHandleYesNoBox(void); -static void LinkOpponentHandleChooseMove(void); -static void LinkOpponentHandleChooseItem(void); -static void LinkOpponentHandleChoosePokemon(void); -static void LinkOpponentHandleCmd23(void); -static void LinkOpponentHandleHealthBarUpdate(void); -static void LinkOpponentHandleExpUpdate(void); -static void LinkOpponentHandleStatusIconUpdate(void); -static void LinkOpponentHandleStatusAnimation(void); -static void LinkOpponentHandleStatusXor(void); -static void LinkOpponentHandleDataTransfer(void); -static void LinkOpponentHandleDMA3Transfer(void); -static void LinkOpponentHandlePlayBGM(void); -static void LinkOpponentHandleCmd32(void); -static void LinkOpponentHandleTwoReturnValues(void); -static void LinkOpponentHandleChosenMonReturnValue(void); -static void LinkOpponentHandleOneReturnValue(void); -static void LinkOpponentHandleOneReturnValue_Duplicate(void); -static void LinkOpponentHandleClearUnkVar(void); -static void LinkOpponentHandleSetUnkVar(void); -static void LinkOpponentHandleClearUnkFlag(void); -static void LinkOpponentHandleToggleUnkFlag(void); -static void LinkOpponentHandleHitAnimation(void); -static void LinkOpponentHandleCantSwitch(void); -static void LinkOpponentHandlePlaySE(void); -static void LinkOpponentHandlePlayFanfareOrBGM(void); -static void LinkOpponentHandleFaintingCry(void); -static void LinkOpponentHandleIntroSlide(void); -static void LinkOpponentHandleIntroTrainerBallThrow(void); -static void LinkOpponentHandleDrawPartyStatusSummary(void); -static void LinkOpponentHandleHidePartyStatusSummary(void); -static void LinkOpponentHandleEndBounceEffect(void); -static void LinkOpponentHandleSpriteInvisibility(void); -static void LinkOpponentHandleBattleAnimation(void); -static void LinkOpponentHandleLinkStandbyMsg(void); -static void LinkOpponentHandleResetActionMoveSelection(void); -static void LinkOpponentHandleEndLinkBattle(void); -static void LinkOpponentHandleBattleDebug(void); -static void LinkOpponentCmdEnd(void); +static void LinkOpponentHandleLoadMonSprite(u32 battler); +static void LinkOpponentHandleSwitchInAnim(u32 battler); +static void LinkOpponentHandleDrawTrainerPic(u32 battler); +static void LinkOpponentHandleTrainerSlide(u32 battler); +static void LinkOpponentHandleTrainerSlideBack(u32 battler); +static void LinkOpponentHandleMoveAnimation(u32 battler); +static void LinkOpponentHandlePrintString(u32 battler); +static void LinkOpponentHandleHealthBarUpdate(u32 battler); +static void LinkOpponentHandleIntroTrainerBallThrow(u32 battler); +static void LinkOpponentHandleDrawPartyStatusSummary(u32 battler); +static void LinkOpponentHandleBattleAnimation(u32 battler); +static void LinkOpponentHandleLinkStandbyMsg(u32 battler); +static void LinkOpponentHandleEndLinkBattle(u32 battler); -static void LinkOpponentBufferRunCommand(void); -static void LinkOpponentBufferExecCompleted(void); -static void SwitchIn_HandleSoundAndEnd(void); -static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst); -static void SetLinkOpponentMonData(u8 monId); -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); -static void DoSwitchOutAnimation(void); -static void LinkOpponentDoMoveAnimation(void); -static void Task_StartSendOutAnim(u8 taskId); -static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite); -static void EndDrawPartyStatusSummary(void); +static void LinkOpponentBufferRunCommand(u32 battler); +static void LinkOpponentBufferExecCompleted(u32 battler); +static void SwitchIn_HandleSoundAndEnd(u32 battler); -static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = +static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { - [CONTROLLER_GETMONDATA] = LinkOpponentHandleGetMonData, - [CONTROLLER_GETRAWMONDATA] = LinkOpponentHandleGetRawMonData, - [CONTROLLER_SETMONDATA] = LinkOpponentHandleSetMonData, - [CONTROLLER_SETRAWMONDATA] = LinkOpponentHandleSetRawMonData, + [CONTROLLER_GETMONDATA] = BtlController_HandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, + [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, [CONTROLLER_LOADMONSPRITE] = LinkOpponentHandleLoadMonSprite, [CONTROLLER_SWITCHINANIM] = LinkOpponentHandleSwitchInAnim, - [CONTROLLER_RETURNMONTOBALL] = LinkOpponentHandleReturnMonToBall, + [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = LinkOpponentHandleDrawTrainerPic, [CONTROLLER_TRAINERSLIDE] = LinkOpponentHandleTrainerSlide, [CONTROLLER_TRAINERSLIDEBACK] = LinkOpponentHandleTrainerSlideBack, - [CONTROLLER_FAINTANIMATION] = LinkOpponentHandleFaintAnimation, - [CONTROLLER_PALETTEFADE] = LinkOpponentHandlePaletteFade, - [CONTROLLER_SUCCESSBALLTHROWANIM] = LinkOpponentHandleSuccessBallThrowAnim, - [CONTROLLER_BALLTHROWANIM] = LinkOpponentHandleBallThrowAnim, - [CONTROLLER_PAUSE] = LinkOpponentHandlePause, + [CONTROLLER_FAINTANIMATION] = BtlController_HandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = BtlController_Empty, + [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_PAUSE] = BtlController_Empty, [CONTROLLER_MOVEANIMATION] = LinkOpponentHandleMoveAnimation, [CONTROLLER_PRINTSTRING] = LinkOpponentHandlePrintString, - [CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkOpponentHandlePrintSelectionString, - [CONTROLLER_CHOOSEACTION] = LinkOpponentHandleChooseAction, - [CONTROLLER_YESNOBOX] = LinkOpponentHandleYesNoBox, - [CONTROLLER_CHOOSEMOVE] = LinkOpponentHandleChooseMove, - [CONTROLLER_OPENBAG] = LinkOpponentHandleChooseItem, - [CONTROLLER_CHOOSEPOKEMON] = LinkOpponentHandleChoosePokemon, - [CONTROLLER_23] = LinkOpponentHandleCmd23, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, + [CONTROLLER_CHOOSEACTION] = BtlController_Empty, + [CONTROLLER_YESNOBOX] = BtlController_Empty, + [CONTROLLER_CHOOSEMOVE] = BtlController_Empty, + [CONTROLLER_OPENBAG] = BtlController_Empty, + [CONTROLLER_CHOOSEPOKEMON] = BtlController_Empty, + [CONTROLLER_23] = BtlController_Empty, [CONTROLLER_HEALTHBARUPDATE] = LinkOpponentHandleHealthBarUpdate, - [CONTROLLER_EXPUPDATE] = LinkOpponentHandleExpUpdate, - [CONTROLLER_STATUSICONUPDATE] = LinkOpponentHandleStatusIconUpdate, - [CONTROLLER_STATUSANIMATION] = LinkOpponentHandleStatusAnimation, - [CONTROLLER_STATUSXOR] = LinkOpponentHandleStatusXor, - [CONTROLLER_DATATRANSFER] = LinkOpponentHandleDataTransfer, - [CONTROLLER_DMA3TRANSFER] = LinkOpponentHandleDMA3Transfer, - [CONTROLLER_PLAYBGM] = LinkOpponentHandlePlayBGM, - [CONTROLLER_32] = LinkOpponentHandleCmd32, - [CONTROLLER_TWORETURNVALUES] = LinkOpponentHandleTwoReturnValues, - [CONTROLLER_CHOSENMONRETURNVALUE] = LinkOpponentHandleChosenMonReturnValue, - [CONTROLLER_ONERETURNVALUE] = LinkOpponentHandleOneReturnValue, - [CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkOpponentHandleOneReturnValue_Duplicate, - [CONTROLLER_CLEARUNKVAR] = LinkOpponentHandleClearUnkVar, - [CONTROLLER_SETUNKVAR] = LinkOpponentHandleSetUnkVar, - [CONTROLLER_CLEARUNKFLAG] = LinkOpponentHandleClearUnkFlag, - [CONTROLLER_TOGGLEUNKFLAG] = LinkOpponentHandleToggleUnkFlag, - [CONTROLLER_HITANIMATION] = LinkOpponentHandleHitAnimation, - [CONTROLLER_CANTSWITCH] = LinkOpponentHandleCantSwitch, - [CONTROLLER_PLAYSE] = LinkOpponentHandlePlaySE, - [CONTROLLER_PLAYFANFAREORBGM] = LinkOpponentHandlePlayFanfareOrBGM, - [CONTROLLER_FAINTINGCRY] = LinkOpponentHandleFaintingCry, - [CONTROLLER_INTROSLIDE] = LinkOpponentHandleIntroSlide, + [CONTROLLER_EXPUPDATE] = BtlController_Empty, + [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, + [CONTROLLER_STATUSXOR] = BtlController_Empty, + [CONTROLLER_DATATRANSFER] = BtlController_Empty, + [CONTROLLER_DMA3TRANSFER] = BtlController_Empty, + [CONTROLLER_PLAYBGM] = BtlController_Empty, + [CONTROLLER_32] = BtlController_Empty, + [CONTROLLER_TWORETURNVALUES] = BtlController_Empty, + [CONTROLLER_CHOSENMONRETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, + [CONTROLLER_CLEARUNKVAR] = BtlController_HandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = BtlController_HandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = BtlController_HandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = BtlController_HandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, + [CONTROLLER_CANTSWITCH] = BtlController_Empty, + [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = BtlController_HandleFaintingCry, + [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, [CONTROLLER_INTROTRAINERBALLTHROW] = LinkOpponentHandleIntroTrainerBallThrow, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkOpponentHandleDrawPartyStatusSummary, - [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkOpponentHandleHidePartyStatusSummary, - [CONTROLLER_ENDBOUNCE] = LinkOpponentHandleEndBounceEffect, - [CONTROLLER_SPRITEINVISIBILITY] = LinkOpponentHandleSpriteInvisibility, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = BtlController_Empty, + [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, [CONTROLLER_BATTLEANIMATION] = LinkOpponentHandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = LinkOpponentHandleLinkStandbyMsg, - [CONTROLLER_RESETACTIONMOVESELECTION] = LinkOpponentHandleResetActionMoveSelection, + [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = LinkOpponentHandleEndLinkBattle, - [CONTROLLER_DEBUGMENU] = LinkOpponentHandleBattleDebug, - [CONTROLLER_TERMINATOR_NOP] = LinkOpponentCmdEnd + [CONTROLLER_DEBUGMENU] = BtlController_Empty, + [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; -static void LinkOpponentDummy(void) +void SetControllerToLinkOpponent(u32 battler) { + gBattlerControllerEndFuncs[battler] = LinkOpponentBufferExecCompleted; + gBattlerControllerFuncs[battler] = LinkOpponentBufferRunCommand; } -void SetControllerToLinkOpponent(void) +static void LinkOpponentBufferRunCommand(u32 battler) { - gBattlerControllerFuncs[gActiveBattler] = LinkOpponentBufferRunCommand; -} - -static void LinkOpponentBufferRunCommand(void) -{ - if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) + if (gBattleControllerExecFlags & gBitTable[battler]) { - if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands)) - sLinkOpponentBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands)) + sLinkOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - LinkOpponentBufferExecCompleted(); + LinkOpponentBufferExecCompleted(battler); } } -static void CompleteOnBattlerSpriteCallbackDummy(void) +static void Intro_DelayAndEnd(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - LinkOpponentBufferExecCompleted(); -} - -static void CompleteOnBankSpriteCallbackDummy2(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - LinkOpponentBufferExecCompleted(); -} - -static void FreeTrainerSpriteAfterSlide(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) { - FreeTrainerFrontPicPalette(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam); - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - LinkOpponentBufferExecCompleted(); + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; + LinkOpponentBufferExecCompleted(battler); } } -static void Intro_DelayAndEnd(void) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; - LinkOpponentBufferExecCompleted(); - } -} - -static void Intro_WaitForShinyAnimAndHealthbox(void) +static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) { bool32 healthboxAnimDone = FALSE; bool32 twoMons = FALSE; if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) healthboxAnimDone = TRUE; } else { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) { healthboxAnimDone = TRUE; } @@ -236,88 +157,87 @@ static void Intro_WaitForShinyAnimAndHealthbox(void) if (healthboxAnimDone) { - if (twoMons || !IsBattlerSpriteVisible(BATTLE_PARTNER(gActiveBattler))) + if (twoMons || !IsBattlerSpriteVisible(BATTLE_PARTNER(battler))) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) return; - if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim) + if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim) return; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); } else { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) return; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT) + if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT) { FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); } } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; - gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; + gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; } } -static void Intro_TryShinyAnimShowHealthbox(void) +static void Intro_TryShinyAnimShowHealthbox(u32 battler) { bool32 bgmRestored = FALSE; - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive + && !gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) { - TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + TryShinyAnimation(battler, &gEnemyParty[gBattlerPartyIndexes[battler]]); } if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim) + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim) { - TryShinyAnimation(BATTLE_PARTNER(gActiveBattler), &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]]); + TryShinyAnimation(BATTLE_PARTNER(battler), &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]]); } - - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted) { if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)], &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], HEALTHBOX_ALL); - StartHealthboxSlideIn(BATTLE_PARTNER(gActiveBattler)); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(battler)], &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], HEALTHBOX_ALL); + StartHealthboxSlideIn(BATTLE_PARTNER(battler)); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(battler)]); } - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gEnemyParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted = TRUE; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = TRUE; } - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].waitForCry - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].waitForCry + if (!gBattleSpritesDataPtr->healthBoxesData[battler].waitForCry + && gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].waitForCry && !IsCryPlayingOrClearCrySongs()) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) { - if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT) + if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_LEFT) m4aMPlayContinue(&gMPlayInfo_BGM); } else @@ -326,937 +246,189 @@ static void Intro_TryShinyAnimShowHealthbox(void) } } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = TRUE; + gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = TRUE; bgmRestored = TRUE; } if (bgmRestored) { - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT) { - if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 1) + if (++gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == 1) return; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; } if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(gActiveBattler)]]); - SetBattlerShadowSpriteCallback(BATTLE_PARTNER(gActiveBattler), GetMonData(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], MON_DATA_SPECIES)); + DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); + SetBattlerShadowSpriteCallback(BATTLE_PARTNER(battler), GetMonData(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], MON_DATA_SPECIES)); } - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); + DestroySprite(&gSprites[gBattleControllerData[battler]]); + SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = FALSE; - gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; + gBattlerControllerFuncs[battler] = Intro_WaitForShinyAnimAndHealthbox; } } } -static void TryShinyAnimAfterMonAnim(void) +static void TryShinyAnimAfterMonAnim(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].x2 == 0) + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].x2 == 0) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim) { - TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + TryShinyAnimation(battler, &gEnemyParty[gBattlerPartyIndexes[battler]]); } - else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) + else if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); - LinkOpponentBufferExecCompleted(); + LinkOpponentBufferExecCompleted(battler); } } } -static void CompleteOnHealthbarDone(void) +static void SwitchIn_ShowSubstitute(u32 battler) { - s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); - - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - - if (hpValue != -1) - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); - else - LinkOpponentBufferExecCompleted(); -} - -static void HideHealthboxAfterMonFaint(void) -{ - if (!gSprites[gBattlerSpriteIds[gActiveBattler]].inUse) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) { - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - LinkOpponentBufferExecCompleted(); + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); + + gBattlerControllerFuncs[battler] = SwitchIn_HandleSoundAndEnd; } } -static void FreeMonSpriteAfterSwitchOutAnim(void) +static void SwitchIn_HandleSoundAndEnd(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - HideBattlerShadowSprite(gActiveBattler); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - LinkOpponentBufferExecCompleted(); - } -} - -static void CompleteOnInactiveTextPrinter(void) -{ - if (!IsTextPrinterActive(B_WIN_MSG)) - LinkOpponentBufferExecCompleted(); -} - -static void DoHitAnimBlinkSpriteEffect(void) -{ - u8 spriteId = gBattlerSpriteIds[gActiveBattler]; - - if (gSprites[spriteId].data[1] == 32) - { - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = FALSE; - LinkOpponentBufferExecCompleted(); - } - else - { - if ((gSprites[spriteId].data[1] % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data[1]++; - } -} - -static void SwitchIn_ShowSubstitute(void) -{ - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - { - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_HandleSoundAndEnd; - } -} - -static void SwitchIn_HandleSoundAndEnd(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) - { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - || gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy_2) + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + || gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy_2) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); - LinkOpponentBufferExecCompleted(); + LinkOpponentBufferExecCompleted(battler); } } } -static void SwitchIn_ShowHealthbox(void) +static void SwitchIn_ShowHealthbox(u32 battler) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0); - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - CopyBattleSpriteInvisibility(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowSubstitute; + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gEnemyParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); + CopyBattleSpriteInvisibility(battler); + gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; } } -static void SwitchIn_TryShinyAnim(void) +static void SwitchIn_TryShinyAnim(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive + && !gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim) { - TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + TryShinyAnimation(battler, &gEnemyParty[gBattlerPartyIndexes[battler]]); } - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) { - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowHealthbox; + DestroySprite(&gSprites[gBattleControllerData[battler]]); + SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); + gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; } } -static void CompleteOnFinishedStatusAnimation(void) +static void LinkOpponentBufferExecCompleted(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) - LinkOpponentBufferExecCompleted(); -} - -static void CompleteOnFinishedBattleAnimation(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive) - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentBufferExecCompleted(void) -{ - gBattlerControllerFuncs[gActiveBattler] = LinkOpponentBufferRunCommand; + gBattlerControllerFuncs[battler] = LinkOpponentBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP; } else { - gBattleControllerExecFlags &= ~gBitTable[gActiveBattler]; + gBattleControllerExecFlags &= ~gBitTable[battler]; } } -static void LinkOpponentHandleGetMonData(void) +static void LinkOpponentHandleLoadMonSprite(u32 battler) { - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data - u32 size = 0; - u8 monToCheck; - s32 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - size += CopyLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - size += CopyLinkOpponentMonData(i, monData + size); - monToCheck >>= 1; - } - } - BtlController_EmitDataTransfer(BUFFER_B, size, monData); - LinkOpponentBufferExecCompleted(); + BtlController_HandleLoadMonSprite(battler, TryShinyAnimAfterMonAnim); } -static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst) +static void LinkOpponentHandleSwitchInAnim(u32 battler) { - struct BattlePokemon battleMon; - struct MovePpInfo moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES); - battleMon.item = GetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM); - for (size = 0; size < MAX_MON_MOVES; size++) - { - battleMon.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size); - battleMon.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); - } - battleMon.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - battleMon.friendship = GetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP); - battleMon.experience = GetMonData(&gEnemyParty[monId], MON_DATA_EXP); - battleMon.hpIV = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV); - battleMon.attackIV = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV); - battleMon.defenseIV = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV); - battleMon.speedIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV); - battleMon.spAttackIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV); - battleMon.spDefenseIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV); - battleMon.personality = GetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY); - battleMon.status1 = GetMonData(&gEnemyParty[monId], MON_DATA_STATUS); - battleMon.level = GetMonData(&gEnemyParty[monId], MON_DATA_LEVEL); - battleMon.hp = GetMonData(&gEnemyParty[monId], MON_DATA_HP); - battleMon.maxHP = GetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP); - battleMon.attack = GetMonData(&gEnemyParty[monId], MON_DATA_ATK); - battleMon.defense = GetMonData(&gEnemyParty[monId], MON_DATA_DEF); - battleMon.speed = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED); - battleMon.spAttack = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK); - battleMon.spDefense = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); - battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); - battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); - battleMon.metLevel = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL); - GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy_Nickname(battleMon.nickname, nickname); - GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName); - src = (u8 *)&battleMon; - for (size = 0; size < sizeof(battleMon); size++) - dst[size] = src[size]; - break; - case REQUEST_SPECIES_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_HELDITEM_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MOVES_PP_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - { - moveData.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - src = (u8 *)(&moveData); - for (size = 0; size < sizeof(moveData); size++) - dst[size] = src[size]; - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_PP_DATA_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); - dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - size++; - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); - size = 1; - break; - case REQUEST_OTID_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_EXP_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_EXP); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_HP_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_HP_EV); - size = 1; - break; - case REQUEST_ATK_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV); - size = 1; - break; - case REQUEST_DEF_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV); - size = 1; - break; - case REQUEST_SPEED_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV); - size = 1; - break; - case REQUEST_SPATK_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV); - size = 1; - break; - case REQUEST_SPDEF_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV); - size = 1; - break; - case REQUEST_FRIENDSHIP_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP); - size = 1; - break; - case REQUEST_POKERUS_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_POKERUS); - size = 1; - break; - case REQUEST_MET_LOCATION_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION); - size = 1; - break; - case REQUEST_MET_LEVEL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL); - size = 1; - break; - case REQUEST_MET_GAME_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME); - size = 1; - break; - case REQUEST_POKEBALL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL); - size = 1; - break; - case REQUEST_ALL_IVS_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV); - dst[1] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV); - dst[2] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV); - dst[3] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV); - dst[4] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV); - dst[5] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV); - size = 6; - break; - case REQUEST_HP_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV); - size = 1; - break; - case REQUEST_ATK_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV); - size = 1; - break; - case REQUEST_DEF_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV); - size = 1; - break; - case REQUEST_SPEED_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV); - size = 1; - break; - case REQUEST_SPATK_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV); - size = 1; - break; - case REQUEST_SPDEF_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV); - size = 1; - break; - case REQUEST_PERSONALITY_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_CHECKSUM_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_STATUS_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_STATUS); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_LEVEL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_LEVEL); - size = 1; - break; - case REQUEST_HP_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MAX_HP_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_ATK_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_ATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_DEF_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_DEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPEED_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPATK_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPDEF_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_COOL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_COOL); - size = 1; - break; - case REQUEST_BEAUTY_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY); - size = 1; - break; - case REQUEST_CUTE_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_CUTE); - size = 1; - break; - case REQUEST_SMART_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SMART); - size = 1; - break; - case REQUEST_TOUGH_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_TOUGH); - size = 1; - break; - case REQUEST_SHEEN_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SHEEN); - size = 1; - break; - case REQUEST_COOL_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON); - size = 1; - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case REQUEST_CUTE_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case REQUEST_SMART_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON); - size = 1; - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - - return size; + BtlController_HandleSwitchInAnim(battler, FALSE, SwitchIn_TryShinyAnim); } -static void LinkOpponentHandleGetRawMonData(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleSetMonData(void) -{ - u8 monToCheck; - u8 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - SetLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler]); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - SetLinkOpponentMonData(i); - monToCheck >>= 1; - } - } - LinkOpponentBufferExecCompleted(); -} - -static void SetLinkOpponentMonData(u8 monId) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; - s32 i; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - { - u8 iv; - - SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &battlePokemon->species); - SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); - } - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); - SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); - SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &iv); - iv = battlePokemon->attackIV; - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &iv); - iv = battlePokemon->defenseIV; - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &iv); - iv = battlePokemon->speedIV; - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &iv); - SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality); - SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &battlePokemon->status1); - SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &battlePokemon->level); - SetMonData(&gEnemyParty[monId], MON_DATA_HP, &battlePokemon->hp); - SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP); - SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &battlePokemon->attack); - SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &battlePokemon->defense); - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &battlePokemon->speed); - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack); - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense); - } - break; - case REQUEST_SPECIES_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HELDITEM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MOVES_PP_BATTLE: - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]); - } - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PP_DATA_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_OTID_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_EXP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKERUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_GAME_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKEBALL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); - break; - case REQUEST_HP_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_STATUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MAX_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SHEEN_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - } -} - -static void LinkOpponentHandleSetRawMonData(void) -{ - u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; - u8 i; - - for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) - dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; - - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleLoadMonSprite(void) -{ - u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); - - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); - - SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - - gBattlerControllerFuncs[gActiveBattler] = TryShinyAnimAfterMonAnim; -} - -static void LinkOpponentHandleSwitchInAnim(void) -{ - gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; - StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; -} - -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) -{ - u16 species; - - ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetIllusionMonSpecies(battlerId); - if (species == SPECIES_NONE) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); - - gBattlerSpriteIds[battlerId] = CreateSprite( - &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSpriteSubpriority(battlerId)); - - gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; - gSprites[gBattleControllerData[battlerId]].data[2] = battlerId; - - gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; - gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; - gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - - StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); - - gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; - gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - - gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); -} - -static void LinkOpponentHandleReturnMonToBall(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] == 0) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; - } - else - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - HideBattlerShadowSprite(gActiveBattler); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - LinkOpponentBufferExecCompleted(); - } -} - -static void DoSwitchOutAnimation(void) -{ - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_OPPONENT_MON); - gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim; - } - break; - } -} - -#define sSpeedX data[0] - -static void LinkOpponentHandleDrawTrainerPic(void) +static void LinkOpponentHandleDrawTrainerPic(u32 battler) { s16 xPos; u32 trainerPicId; if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != 0) // second mon + if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon xPos = 152; else // first mon xPos = 200; if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) { - if (gActiveBattler == B_POSITION_OPPONENT_LEFT) + if (battler == B_POSITION_OPPONENT_LEFT) trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A); else trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B); } else { - if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_FIRE_RED - || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_LEAF_GREEN) + if ((gLinkPlayers[GetBattlerMultiplayerId(battler)].version & 0xFF) == VERSION_FIRE_RED + || (gLinkPlayers[GetBattlerMultiplayerId(battler)].version & 0xFF) == VERSION_LEAF_GREEN) { - if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != MALE) + if (gLinkPlayers[GetBattlerMultiplayerId(battler)].gender != MALE) trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_LEAF]; else trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_RED]; } - else if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY - || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE) + else if ((gLinkPlayers[GetBattlerMultiplayerId(battler)].version & 0xFF) == VERSION_RUBY + || (gLinkPlayers[GetBattlerMultiplayerId(battler)].version & 0xFF) == VERSION_SAPPHIRE) { - if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != MALE) + if (gLinkPlayers[GetBattlerMultiplayerId(battler)].gender != MALE) trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_RS_MAY]; else trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_RS_BRENDAN]; } else { - trainerPicId = PlayerGenderToFrontTrainerPicId(gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender); + trainerPicId = PlayerGenderToFrontTrainerPicId(gLinkPlayers[GetBattlerMultiplayerId(battler)].gender); } } } @@ -1289,566 +461,77 @@ static void LinkOpponentHandleDrawTrainerPic(void) } } - DecompressTrainerFrontPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - xPos, - (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40, - GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 2; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; + BtlController_HandleDrawTrainerPic(battler, trainerPicId, TRUE, + xPos, 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicId].size), + -1); } -static void LinkOpponentHandleTrainerSlide(void) +static void LinkOpponentHandleTrainerSlide(u32 battler) { u32 trainerPicId; - if (gActiveBattler == 1) + if (battler == B_POSITION_OPPONENT_LEFT) trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A); else trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B); - DecompressTrainerFrontPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, 176, (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40, 0x1E); - - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 96; - gSprites[gBattlerSpriteIds[gActiveBattler]].x += 32; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy2; // this line is redundant, because LinkOpponentBufferExecCompleted changes the battle battlerId function - LinkOpponentBufferExecCompleted(); + BtlController_HandleTrainerSlide(battler, trainerPicId); + LinkOpponentBufferExecCompleted(battler); // Possibly a bug, because execution should be completed after the slide in finishes. See Controller_WaitForTrainerPic. } -#undef sSpeedX - -static void LinkOpponentHandleTrainerSlideBack(void) +static void LinkOpponentHandleTrainerSlideBack(u32 battler) { - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy); - gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; + BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void LinkOpponentHandleFaintAnimation(void) +static void LinkOpponentHandleMoveAnimation(u32 battler) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0) - { - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++; - } + BtlController_HandleMoveAnimation(battler, TRUE); +} + +static void LinkOpponentHandlePrintString(u32 battler) +{ + BtlController_HandlePrintString(battler, TRUE, FALSE); +} + +static void LinkOpponentHandleHealthBarUpdate(u32 battler) +{ + BtlController_HandleHealthBarUpdate(battler, FALSE); +} + +static void LinkOpponentHandleIntroTrainerBallThrow(u32 battler) +{ + BtlController_HandleIntroTrainerBallThrow(battler, 0, NULL, 0, Intro_TryShinyAnimShowHealthbox); +} + +static void LinkOpponentHandleDrawPartyStatusSummary(u32 battler) +{ + BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_OPPONENT, TRUE); +} + +static void LinkOpponentHandleBattleAnimation(u32 battler) +{ + BtlController_HandleBattleAnimation(battler, FALSE, TRUE); +} + +static void LinkOpponentHandleLinkStandbyMsg(u32 battler) +{ + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[battler][2]); + LinkOpponentBufferExecCompleted(battler); +} + +static void LinkOpponentHandleEndLinkBattle(u32 battler) +{ + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[battler][4]); + + if (gBattleResources->bufferA[battler][1] == B_OUTCOME_DREW) + gBattleOutcome = gBattleResources->bufferA[battler][1]; else - { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - PlaySE12WithPanning(SE_FAINT, SOUND_PAN_TARGET); - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon; - gBattlerControllerFuncs[gActiveBattler] = HideHealthboxAfterMonFaint; - } - } -} + gBattleOutcome = gBattleResources->bufferA[battler][1] ^ B_OUTCOME_DREW; -static void LinkOpponentHandlePaletteFade(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleSuccessBallThrowAnim(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleBallThrowAnim(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandlePause(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleMoveAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - - gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; - gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; - gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDoMoveAnimation; - BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); - } -} - -static void LinkOpponentDoMoveAnimation(void) -{ - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; - - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute - && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8) - { - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF); - DoMoveAnim(move); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL); - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) - { - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 0; - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; - } - break; - case 3: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - LinkOpponentBufferExecCompleted(); - } - break; - } -} - -static void LinkOpponentHandlePrintString(void) -{ - u16 *stringId; - - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); - BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; - BattleTv_SetDataBasedOnString(*stringId); -} - -static void LinkOpponentHandlePrintSelectionString(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleChooseAction(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleYesNoBox(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleChooseMove(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleChooseItem(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleChoosePokemon(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleCmd23(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleHealthBarUpdate(void) -{ - s16 hpVal; - - LoadBattleBarGfx(0); - hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (hpVal != INSTANT_HP_BAR_DROP) - { - u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - u32 curHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); - } - else - { - u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); - } - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; -} - -static void LinkOpponentHandleExpUpdate(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleStatusIconUpdate(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 battlerId; - - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - battlerId = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } -} - -static void LinkOpponentHandleStatusAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], - gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } -} - -static void LinkOpponentHandleStatusXor(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleDataTransfer(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleDMA3Transfer(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandlePlayBGM(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleCmd32(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleTwoReturnValues(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleChosenMonReturnValue(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleOneReturnValue(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleOneReturnValue_Duplicate(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleClearUnkVar(void) -{ - gUnusedControllerStruct.unk = 0; - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleSetUnkVar(void) -{ - gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleClearUnkFlag(void) -{ - gUnusedControllerStruct.flag = 0; - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleToggleUnkFlag(void) -{ - gUnusedControllerStruct.flag ^= 1; - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleHitAnimation(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE) - { - LinkOpponentBufferExecCompleted(); - } - else - { - gDoingBattleAnim = TRUE; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; - DoHitAnimHealthboxEffect(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect; - } -} - -static void LinkOpponentHandleCantSwitch(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandlePlaySE(void) -{ - s8 pan; - - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - pan = SOUND_PAN_ATTACKER; - else - pan = SOUND_PAN_TARGET; - - PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandlePlayFanfareOrBGM(void) -{ - if (gBattleResources->bufferA[gActiveBattler][3]) - { - BattleStopLowHpSound(); - PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - else - { - PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleFaintingCry(void) -{ - u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - PlayCry_ByMode(species, 25, CRY_MODE_FAINT); - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleIntroSlide(void) -{ - HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); - gIntroSlideFlags |= 1; - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleIntroTrainerBallThrow(void) -{ - u8 taskId; - - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreeOpponentSprite); - - taskId = CreateTask(Task_StartSendOutAnim, 5); - gTasks[taskId].data[0] = gActiveBattler; - - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - - gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; - gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDummy; -} - -static void Task_StartSendOutAnim(u8 taskId) -{ - u8 savedActiveBank = gActiveBattler; - - gActiveBattler = gTasks[taskId].data[0]; - if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - } - else - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler = BATTLE_PARTNER(gActiveBattler); - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler = BATTLE_PARTNER(gActiveBattler); - } - gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; - gActiveBattler = savedActiveBank; - DestroyTask(taskId); -} - -static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite) -{ - FreeTrainerFrontPicPalette(sprite->oam.affineParam); - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); -} - -static void LinkOpponentHandleDrawPartyStatusSummary(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - LinkOpponentBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - - if (gBattleResources->bufferA[gActiveBattler][2] != 0) - { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay++; - return; - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay = 0; - } - } - - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - - if (gBattleResources->bufferA[gActiveBattler][2] != 0) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; - - gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; - } -} - -static void EndDrawPartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 92) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - LinkOpponentBufferExecCompleted(); - } -} - -static void LinkOpponentHandleHidePartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleEndBounceEffect(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleSpriteInvisibility(void) -{ - if (IsBattlerSpritePresent(gActiveBattler)) - { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; - CopyBattleSpriteInvisibility(gActiveBattler); - } - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleBattleAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; - u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) - LinkOpponentBufferExecCompleted(); - else - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation; - - BattleTv_SetDataBasedOnAnimation(animationId); - } -} - -static void LinkOpponentHandleLinkStandbyMsg(void) -{ - RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][2]); - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleResetActionMoveSelection(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentHandleEndLinkBattle(void) -{ - RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][4]); - - if (gBattleResources->bufferA[gActiveBattler][1] == B_OUTCOME_DREW) - gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; - else - gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1] ^ B_OUTCOME_DREW; - - gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[gActiveBattler][2]; + gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[battler][2]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - LinkOpponentBufferExecCompleted(); - gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; -} - -static void LinkOpponentHandleBattleDebug(void) -{ - LinkOpponentBufferExecCompleted(); -} - -static void LinkOpponentCmdEnd(void) -{ + LinkOpponentBufferExecCompleted(battler); + gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 8684ba70e..c4b4e2112 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -29,1093 +29,200 @@ #include "constants/trainers.h" #include "recorded_battle.h" -static void LinkPartnerHandleGetMonData(void); -static void LinkPartnerHandleGetRawMonData(void); -static void LinkPartnerHandleSetMonData(void); -static void LinkPartnerHandleSetRawMonData(void); -static void LinkPartnerHandleLoadMonSprite(void); -static void LinkPartnerHandleSwitchInAnim(void); -static void LinkPartnerHandleReturnMonToBall(void); -static void LinkPartnerHandleDrawTrainerPic(void); -static void LinkPartnerHandleTrainerSlide(void); -static void LinkPartnerHandleTrainerSlideBack(void); -static void LinkPartnerHandleFaintAnimation(void); -static void LinkPartnerHandlePaletteFade(void); -static void LinkPartnerHandleSuccessBallThrowAnim(void); -static void LinkPartnerHandleBallThrowAnim(void); -static void LinkPartnerHandlePause(void); -static void LinkPartnerHandleMoveAnimation(void); -static void LinkPartnerHandlePrintString(void); -static void LinkPartnerHandlePrintSelectionString(void); -static void LinkPartnerHandleChooseAction(void); -static void LinkPartnerHandleYesNoBox(void); -static void LinkPartnerHandleChooseMove(void); -static void LinkPartnerHandleChooseItem(void); -static void LinkPartnerHandleChoosePokemon(void); -static void LinkPartnerHandleCmd23(void); -static void LinkPartnerHandleHealthBarUpdate(void); -static void LinkPartnerHandleExpUpdate(void); -static void LinkPartnerHandleStatusIconUpdate(void); -static void LinkPartnerHandleStatusAnimation(void); -static void LinkPartnerHandleStatusXor(void); -static void LinkPartnerHandleDataTransfer(void); -static void LinkPartnerHandleDMA3Transfer(void); -static void LinkPartnerHandlePlayBGM(void); -static void LinkPartnerHandleCmd32(void); -static void LinkPartnerHandleTwoReturnValues(void); -static void LinkPartnerHandleChosenMonReturnValue(void); -static void LinkPartnerHandleOneReturnValue(void); -static void LinkPartnerHandleOneReturnValue_Duplicate(void); -static void LinkPartnerHandleClearUnkVar(void); -static void LinkPartnerHandleSetUnkVar(void); -static void LinkPartnerHandleClearUnkFlag(void); -static void LinkPartnerHandleToggleUnkFlag(void); -static void LinkPartnerHandleHitAnimation(void); -static void LinkPartnerHandleCantSwitch(void); -static void LinkPartnerHandlePlaySE(void); -static void LinkPartnerHandlePlayFanfareOrBGM(void); -static void LinkPartnerHandleFaintingCry(void); -static void LinkPartnerHandleIntroSlide(void); -static void LinkPartnerHandleIntroTrainerBallThrow(void); -static void LinkPartnerHandleDrawPartyStatusSummary(void); -static void LinkPartnerHandleHidePartyStatusSummary(void); -static void LinkPartnerHandleEndBounceEffect(void); -static void LinkPartnerHandleSpriteInvisibility(void); -static void LinkPartnerHandleBattleAnimation(void); -static void LinkPartnerHandleLinkStandbyMsg(void); -static void LinkPartnerHandleResetActionMoveSelection(void); -static void LinkPartnerHandleEndLinkBattle(void); -static void LinkPartnerHandleBattleDebug(void); -static void LinkPartnerCmdEnd(void); +static void LinkPartnerHandleLoadMonSprite(u32 battler); +static void LinkPartnerHandleSwitchInAnim(u32 battler); +static void LinkPartnerHandleDrawTrainerPic(u32 battler); +static void LinkPartnerHandleTrainerSlideBack(u32 battler); +static void LinkPartnerHandleMoveAnimation(u32 battler); +static void LinkPartnerHandlePrintString(u32 battler); +static void LinkPartnerHandleHealthBarUpdate(u32 battler); +static void LinkPartnerHandleIntroTrainerBallThrow(u32 battler); +static void LinkPartnerHandleDrawPartyStatusSummary(u32 battler); +static void LinkPartnerHandleBattleAnimation(u32 battler); +static void LinkPartnerHandleLinkStandbyMsg(u32 battler); +static void LinkPartnerHandleEndLinkBattle(u32 battler); -static void LinkPartnerBufferRunCommand(void); -static void LinkPartnerBufferExecCompleted(void); -static void SwitchIn_WaitAndEnd(void); -static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst); -static void SetLinkPartnerMonData(u8 monId); -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); -static void DoSwitchOutAnimation(void); -static void LinkPartnerDoMoveAnimation(void); -static void Task_StartSendOutAnim(u8 taskId); -static void EndDrawPartyStatusSummary(void); +static void LinkPartnerBufferRunCommand(u32 battler); +static void LinkPartnerBufferExecCompleted(u32 battler); +static void SwitchIn_WaitAndEnd(u32 battler); -static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = +static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { - [CONTROLLER_GETMONDATA] = LinkPartnerHandleGetMonData, - [CONTROLLER_GETRAWMONDATA] = LinkPartnerHandleGetRawMonData, - [CONTROLLER_SETMONDATA] = LinkPartnerHandleSetMonData, - [CONTROLLER_SETRAWMONDATA] = LinkPartnerHandleSetRawMonData, + [CONTROLLER_GETMONDATA] = BtlController_HandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, + [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, [CONTROLLER_LOADMONSPRITE] = LinkPartnerHandleLoadMonSprite, [CONTROLLER_SWITCHINANIM] = LinkPartnerHandleSwitchInAnim, - [CONTROLLER_RETURNMONTOBALL] = LinkPartnerHandleReturnMonToBall, + [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = LinkPartnerHandleDrawTrainerPic, - [CONTROLLER_TRAINERSLIDE] = LinkPartnerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDE] = BtlController_Empty, [CONTROLLER_TRAINERSLIDEBACK] = LinkPartnerHandleTrainerSlideBack, - [CONTROLLER_FAINTANIMATION] = LinkPartnerHandleFaintAnimation, - [CONTROLLER_PALETTEFADE] = LinkPartnerHandlePaletteFade, - [CONTROLLER_SUCCESSBALLTHROWANIM] = LinkPartnerHandleSuccessBallThrowAnim, - [CONTROLLER_BALLTHROWANIM] = LinkPartnerHandleBallThrowAnim, - [CONTROLLER_PAUSE] = LinkPartnerHandlePause, + [CONTROLLER_FAINTANIMATION] = BtlController_HandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = BtlController_Empty, + [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_PAUSE] = BtlController_Empty, [CONTROLLER_MOVEANIMATION] = LinkPartnerHandleMoveAnimation, [CONTROLLER_PRINTSTRING] = LinkPartnerHandlePrintString, - [CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkPartnerHandlePrintSelectionString, - [CONTROLLER_CHOOSEACTION] = LinkPartnerHandleChooseAction, - [CONTROLLER_YESNOBOX] = LinkPartnerHandleYesNoBox, - [CONTROLLER_CHOOSEMOVE] = LinkPartnerHandleChooseMove, - [CONTROLLER_OPENBAG] = LinkPartnerHandleChooseItem, - [CONTROLLER_CHOOSEPOKEMON] = LinkPartnerHandleChoosePokemon, - [CONTROLLER_23] = LinkPartnerHandleCmd23, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, + [CONTROLLER_CHOOSEACTION] = BtlController_Empty, + [CONTROLLER_YESNOBOX] = BtlController_Empty, + [CONTROLLER_CHOOSEMOVE] = BtlController_Empty, + [CONTROLLER_OPENBAG] = BtlController_Empty, + [CONTROLLER_CHOOSEPOKEMON] = BtlController_Empty, + [CONTROLLER_23] = BtlController_Empty, [CONTROLLER_HEALTHBARUPDATE] = LinkPartnerHandleHealthBarUpdate, - [CONTROLLER_EXPUPDATE] = LinkPartnerHandleExpUpdate, - [CONTROLLER_STATUSICONUPDATE] = LinkPartnerHandleStatusIconUpdate, - [CONTROLLER_STATUSANIMATION] = LinkPartnerHandleStatusAnimation, - [CONTROLLER_STATUSXOR] = LinkPartnerHandleStatusXor, - [CONTROLLER_DATATRANSFER] = LinkPartnerHandleDataTransfer, - [CONTROLLER_DMA3TRANSFER] = LinkPartnerHandleDMA3Transfer, - [CONTROLLER_PLAYBGM] = LinkPartnerHandlePlayBGM, - [CONTROLLER_32] = LinkPartnerHandleCmd32, - [CONTROLLER_TWORETURNVALUES] = LinkPartnerHandleTwoReturnValues, - [CONTROLLER_CHOSENMONRETURNVALUE] = LinkPartnerHandleChosenMonReturnValue, - [CONTROLLER_ONERETURNVALUE] = LinkPartnerHandleOneReturnValue, - [CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkPartnerHandleOneReturnValue_Duplicate, - [CONTROLLER_CLEARUNKVAR] = LinkPartnerHandleClearUnkVar, - [CONTROLLER_SETUNKVAR] = LinkPartnerHandleSetUnkVar, - [CONTROLLER_CLEARUNKFLAG] = LinkPartnerHandleClearUnkFlag, - [CONTROLLER_TOGGLEUNKFLAG] = LinkPartnerHandleToggleUnkFlag, - [CONTROLLER_HITANIMATION] = LinkPartnerHandleHitAnimation, - [CONTROLLER_CANTSWITCH] = LinkPartnerHandleCantSwitch, - [CONTROLLER_PLAYSE] = LinkPartnerHandlePlaySE, - [CONTROLLER_PLAYFANFAREORBGM] = LinkPartnerHandlePlayFanfareOrBGM, - [CONTROLLER_FAINTINGCRY] = LinkPartnerHandleFaintingCry, - [CONTROLLER_INTROSLIDE] = LinkPartnerHandleIntroSlide, + [CONTROLLER_EXPUPDATE] = BtlController_Empty, + [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, + [CONTROLLER_STATUSXOR] = BtlController_Empty, + [CONTROLLER_DATATRANSFER] = BtlController_Empty, + [CONTROLLER_DMA3TRANSFER] = BtlController_Empty, + [CONTROLLER_PLAYBGM] = BtlController_Empty, + [CONTROLLER_32] = BtlController_Empty, + [CONTROLLER_TWORETURNVALUES] = BtlController_Empty, + [CONTROLLER_CHOSENMONRETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, + [CONTROLLER_CLEARUNKVAR] = BtlController_HandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = BtlController_HandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = BtlController_HandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = BtlController_HandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, + [CONTROLLER_CANTSWITCH] = BtlController_Empty, + [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = BtlController_HandleFaintingCry, + [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, [CONTROLLER_INTROTRAINERBALLTHROW] = LinkPartnerHandleIntroTrainerBallThrow, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkPartnerHandleDrawPartyStatusSummary, - [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkPartnerHandleHidePartyStatusSummary, - [CONTROLLER_ENDBOUNCE] = LinkPartnerHandleEndBounceEffect, - [CONTROLLER_SPRITEINVISIBILITY] = LinkPartnerHandleSpriteInvisibility, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = BtlController_Empty, + [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, [CONTROLLER_BATTLEANIMATION] = LinkPartnerHandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = LinkPartnerHandleLinkStandbyMsg, - [CONTROLLER_RESETACTIONMOVESELECTION] = LinkPartnerHandleResetActionMoveSelection, + [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = LinkPartnerHandleEndLinkBattle, - [CONTROLLER_DEBUGMENU] = LinkPartnerHandleBattleDebug, - [CONTROLLER_TERMINATOR_NOP] = LinkPartnerCmdEnd + [CONTROLLER_DEBUGMENU] = BtlController_Empty, + [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; -static void SpriteCB_Null2(void) +void SetControllerToLinkPartner(u32 battler) { + gBattlerControllerEndFuncs[battler] = LinkPartnerBufferExecCompleted; + gBattlerControllerFuncs[battler] = LinkPartnerBufferRunCommand; } -void SetControllerToLinkPartner(void) +static void LinkPartnerBufferRunCommand(u32 battler) { - gBattlerControllerFuncs[gActiveBattler] = LinkPartnerBufferRunCommand; -} - -static void LinkPartnerBufferRunCommand(void) -{ - if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) + if (gBattleControllerExecFlags & gBitTable[battler]) { - if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands)) - sLinkPartnerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands)) + sLinkPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - LinkPartnerBufferExecCompleted(); + LinkPartnerBufferExecCompleted(battler); } } -static void CompleteOnBattlerSpriteCallbackDummy(void) +static void WaitForMonAnimAfterLoad(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - LinkPartnerBufferExecCompleted(); + if (gSprites[gBattlerSpriteIds[battler]].animEnded && gSprites[gBattlerSpriteIds[battler]].x2 == 0) + LinkPartnerBufferExecCompleted(battler); } -static void FreeTrainerSpriteAfterSlide(void) +static void SwitchIn_ShowSubstitute(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) { - BattleGfxSfxDummy3(MALE); - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - LinkPartnerBufferExecCompleted(); + CopyBattleSpriteInvisibility(battler); + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); + + gBattlerControllerFuncs[battler] = SwitchIn_WaitAndEnd; } } -static void Intro_DelayAndEnd(void) +static void SwitchIn_WaitAndEnd(u32 battler) { - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; - LinkPartnerBufferExecCompleted(); + LinkPartnerBufferExecCompleted(battler); } } -static void Intro_WaitForHealthbox(void) +static void SwitchIn_ShowHealthbox(u32 battler) { - bool32 finished = FALSE; - - if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) + if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - finished = TRUE; - } - else - { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy) - { - finished = TRUE; - } - } - - if (IsCryPlayingOrClearCrySongs()) - finished = FALSE; - - if (finished) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; - gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; - } -} - -static void Intro_ShowHealthbox(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive - && gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay != 1) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; - - if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(gActiveBattler)]]); - UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)], &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], HEALTHBOX_ALL); - StartHealthboxSlideIn(BATTLE_PARTNER(gActiveBattler)); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]); - } - - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - - gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; - - gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForHealthbox; - } -} - -static void WaitForMonAnimAfterLoad(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded && gSprites[gBattlerSpriteIds[gActiveBattler]].x2 == 0) - LinkPartnerBufferExecCompleted(); -} - -static void CompleteOnHealthbarDone(void) -{ - s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); - - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - - if (hpValue != -1) - { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); - } - else - { - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - LinkPartnerBufferExecCompleted(); - } -} - -static void FreeMonSpriteAfterFaintAnim(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].y + gSprites[gBattlerSpriteIds[gActiveBattler]].y2 > DISPLAY_HEIGHT) - { - u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - BattleGfxSfxDummy2(species); - FreeOamMatrix(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.matrixNum); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - LinkPartnerBufferExecCompleted(); - } -} - -static void FreeMonSpriteAfterSwitchOutAnim(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - LinkPartnerBufferExecCompleted(); - } -} - -static void CompleteOnInactiveTextPrinter(void) -{ - if (!IsTextPrinterActive(B_WIN_MSG)) - LinkPartnerBufferExecCompleted(); -} - -static void DoHitAnimBlinkSpriteEffect(void) -{ - u8 spriteId = gBattlerSpriteIds[gActiveBattler]; - - if (gSprites[spriteId].data[1] == 32) - { - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = FALSE; - LinkPartnerBufferExecCompleted(); - } - else - { - if ((gSprites[spriteId].data[1] % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data[1]++; - } -} - -static void SwitchIn_ShowSubstitute(void) -{ - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - { - CopyBattleSpriteInvisibility(gActiveBattler); - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_WaitAndEnd; - } -} - -static void SwitchIn_WaitAndEnd(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - { - LinkPartnerBufferExecCompleted(); - } -} - -static void SwitchIn_ShowHealthbox(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowSubstitute; + gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; } } -static void SwitchIn_TryShinyAnim(void) +static void SwitchIn_TryShinyAnim(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) { - TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + TryShinyAnimation(battler, &gPlayerParty[gBattlerPartyIndexes[battler]]); } - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) { - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowHealthbox; + DestroySprite(&gSprites[gBattleControllerData[battler]]); + gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; } } -static void LinkPartnerBufferExecCompleted(void) +static void LinkPartnerBufferExecCompleted(u32 battler) { - gBattlerControllerFuncs[gActiveBattler] = LinkPartnerBufferRunCommand; + gBattlerControllerFuncs[battler] = LinkPartnerBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP; } else { - gBattleControllerExecFlags &= ~gBitTable[gActiveBattler]; + gBattleControllerExecFlags &= ~gBitTable[battler]; } } -static void CompleteOnFinishedStatusAnimation(void) +static void LinkPartnerHandleLoadMonSprite(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) - LinkPartnerBufferExecCompleted(); + BtlController_HandleLoadMonSprite(battler, WaitForMonAnimAfterLoad); } -static void CompleteOnFinishedBattleAnimation(void) +static void LinkPartnerHandleSwitchInAnim(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive) - LinkPartnerBufferExecCompleted(); + BtlController_HandleSwitchInAnim(battler, TRUE, SwitchIn_TryShinyAnim); } -static void LinkPartnerHandleGetMonData(void) -{ - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data - u32 size = 0; - u8 monToCheck; - s32 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - size += CopyLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - size += CopyLinkPartnerMonData(i, monData + size); - monToCheck >>= 1; - } - } - BtlController_EmitDataTransfer(BUFFER_B, size, monData); - LinkPartnerBufferExecCompleted(); -} - -static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst) -{ - struct BattlePokemon battleMon; - struct MovePpInfo moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); - for (size = 0; size < MAX_MON_MOVES; size++) - { - battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); - battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - } - battleMon.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - battleMon.friendship = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP); - battleMon.experience = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); - battleMon.hpIV = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - battleMon.attackIV = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - battleMon.defenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - battleMon.speedIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - battleMon.spAttackIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - battleMon.spDefenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - battleMon.personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - battleMon.status1 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS); - battleMon.level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - battleMon.hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP); - battleMon.maxHP = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP); - battleMon.attack = GetMonData(&gPlayerParty[monId], MON_DATA_ATK); - battleMon.defense = GetMonData(&gPlayerParty[monId], MON_DATA_DEF); - battleMon.speed = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED); - battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); - battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); - battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); - battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); - battleMon.metLevel = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); - GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy_Nickname(battleMon.nickname, nickname); - GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); - src = (u8 *)&battleMon; - for (size = 0; size < sizeof(battleMon); size++) - dst[size] = src[size]; - break; - case REQUEST_SPECIES_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_HELDITEM_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MOVES_PP_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - { - moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - src = (u8 *)(&moveData); - for (size = 0; size < sizeof(moveData); size++) - dst[size] = src[size]; - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_PP_DATA_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - size++; - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); - size = 1; - break; - case REQUEST_OTID_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_EXP_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_HP_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_EV); - size = 1; - break; - case REQUEST_ATK_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV); - size = 1; - break; - case REQUEST_DEF_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV); - size = 1; - break; - case REQUEST_SPEED_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV); - size = 1; - break; - case REQUEST_SPATK_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV); - size = 1; - break; - case REQUEST_SPDEF_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV); - size = 1; - break; - case REQUEST_FRIENDSHIP_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP); - size = 1; - break; - case REQUEST_POKERUS_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKERUS); - size = 1; - break; - case REQUEST_MET_LOCATION_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION); - size = 1; - break; - case REQUEST_MET_LEVEL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); - size = 1; - break; - case REQUEST_MET_GAME_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME); - size = 1; - break; - case REQUEST_POKEBALL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL); - size = 1; - break; - case REQUEST_ALL_IVS_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - dst[1] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - dst[2] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - dst[3] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - dst[4] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - dst[5] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - size = 6; - break; - case REQUEST_HP_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - size = 1; - break; - case REQUEST_ATK_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - size = 1; - break; - case REQUEST_DEF_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - size = 1; - break; - case REQUEST_SPEED_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - size = 1; - break; - case REQUEST_SPATK_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - size = 1; - break; - case REQUEST_SPDEF_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - size = 1; - break; - case REQUEST_PERSONALITY_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_CHECKSUM_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_STATUS_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_LEVEL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - size = 1; - break; - case REQUEST_HP_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MAX_HP_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_ATK_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_ATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_DEF_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_DEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPEED_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPATK_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPDEF_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_COOL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL); - size = 1; - break; - case REQUEST_BEAUTY_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY); - size = 1; - break; - case REQUEST_CUTE_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE); - size = 1; - break; - case REQUEST_SMART_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART); - size = 1; - break; - case REQUEST_TOUGH_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH); - size = 1; - break; - case REQUEST_SHEEN_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SHEEN); - size = 1; - break; - case REQUEST_COOL_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON); - size = 1; - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case REQUEST_CUTE_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case REQUEST_SMART_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON); - size = 1; - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - - return size; -} - -static void LinkPartnerHandleGetRawMonData(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleSetMonData(void) -{ - u8 monToCheck; - u8 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - SetLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler]); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - SetLinkPartnerMonData(i); - monToCheck >>= 1; - } - } - LinkPartnerBufferExecCompleted(); -} - -static void SetLinkPartnerMonData(u8 monId) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; - s32 i; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - { - u8 iv; - - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species); - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); - } - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &iv); - iv = battlePokemon->attackIV; - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &iv); - iv = battlePokemon->defenseIV; - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &iv); - iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &iv); - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality); - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &battlePokemon->status1); - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &battlePokemon->level); - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &battlePokemon->hp); - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &battlePokemon->attack); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &battlePokemon->defense); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &battlePokemon->speed); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense); - } - break; - case REQUEST_SPECIES_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HELDITEM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MOVES_PP_BATTLE: - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]); - } - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PP_DATA_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_OTID_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_EXP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKERUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_GAME_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKEBALL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); - break; - case REQUEST_HP_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_STATUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MAX_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SHEEN_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - } - - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); -} - -static void LinkPartnerHandleSetRawMonData(void) -{ - u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; - u8 i; - - for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) - dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; - - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleLoadMonSprite(void) -{ - u16 species; - - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); - - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSpriteSubpriority(gActiveBattler)); - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); - gBattlerControllerFuncs[gActiveBattler] = WaitForMonAnimAfterLoad; -} - -static void LinkPartnerHandleSwitchInAnim(void) -{ - ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); - gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; -} - -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) -{ - u16 species; - - ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); - - gBattlerSpriteIds[battlerId] = CreateSprite( - &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSpriteSubpriority(battlerId)); - - gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; - gSprites[gBattleControllerData[battlerId]].data[2] = battlerId; - - gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; - gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; - gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - - StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); - - gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; - gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - - gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); -} - -static void LinkPartnerHandleReturnMonToBall(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] == 0) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; - } - else - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - LinkPartnerBufferExecCompleted(); - } -} - -static void DoSwitchOutAnimation(void) -{ - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); - gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim; - } - break; - } -} - -#define sSpeedX data[0] - -static void LinkPartnerHandleDrawTrainerPic(void) +static void LinkPartnerHandleDrawTrainerPic(u32 battler) { s16 xPos; u32 trainerPicId; if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != 0) // second mon + if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon xPos = 90; else // first mon xPos = 32; @@ -1125,574 +232,63 @@ static void LinkPartnerHandleDrawTrainerPic(void) xPos = 80; } - if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_FIRE_RED - || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_LEAF_GREEN) - { - trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RED; - } - else if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY - || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE) - { - trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN; - } - else - { - trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender; - } - - DecompressTrainerBackPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; + trainerPicId = LinkPlayerGetTrainerPicId(GetBattlerMultiplayerId(battler)); + BtlController_HandleDrawTrainerPic(battler, trainerPicId, FALSE, + xPos, 80 + 4 * (8 - gTrainerBackPicCoords[trainerPicId].size), + -1); } -#undef sSpeedX - -static void LinkPartnerHandleTrainerSlide(void) +static void LinkPartnerHandleTrainerSlideBack(u32 battler) { - LinkPartnerBufferExecCompleted(); + BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void LinkPartnerHandleTrainerSlideBack(void) +static void LinkPartnerHandleMoveAnimation(u32 battler) { - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy); - gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; + BtlController_HandleMoveAnimation(battler, TRUE); } -#define sSpeedX data[1] -#define sSpeedY data[2] - -static void LinkPartnerHandleFaintAnimation(void) +static void LinkPartnerHandlePrintString(u32 battler) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0) - { - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++; - } - else - { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 0; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedY = 5; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim; - gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim; - } - } + BtlController_HandlePrintString(battler, TRUE, FALSE); } -#undef sSpeedX -#undef sSpeedY - -static void LinkPartnerHandlePaletteFade(void) +static void LinkPartnerHandleHealthBarUpdate(u32 battler) { - LinkPartnerBufferExecCompleted(); + BtlController_HandleHealthBarUpdate(battler, FALSE); } -static void LinkPartnerHandleSuccessBallThrowAnim(void) +static void LinkPartnerHandleIntroTrainerBallThrow(u32 battler) { - LinkPartnerBufferExecCompleted(); + u32 trainerPicId = LinkPlayerGetTrainerPicId(GetBattlerMultiplayerId(battler)); + const u32 *trainerPal = gTrainerBackPicPaletteTable[trainerPicId].data; + // Link partner uses the same intro sequence as the player partner. + BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F9, trainerPal, 24, Controller_PlayerPartnerShowIntroHealthbox); } -static void LinkPartnerHandleBallThrowAnim(void) +static void LinkPartnerHandleDrawPartyStatusSummary(u32 battler) { - LinkPartnerBufferExecCompleted(); + BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_PLAYER, TRUE); } -static void LinkPartnerHandlePause(void) +static void LinkPartnerHandleBattleAnimation(u32 battler) { - LinkPartnerBufferExecCompleted(); + BtlController_HandleBattleAnimation(battler, FALSE, TRUE); } -static void LinkPartnerHandleMoveAnimation(void) +static void LinkPartnerHandleLinkStandbyMsg(u32 battler) { - if (!IsBattleSEPlaying(gActiveBattler)) - { - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - - gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; - gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; - gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDoMoveAnimation; - BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); - } + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[battler][2]); + LinkPartnerBufferExecCompleted(battler); } -static void LinkPartnerDoMoveAnimation(void) +static void LinkPartnerHandleEndLinkBattle(u32 battler) { - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; - - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute - && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8) - { - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF); - DoMoveAnim(move); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL); - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) - { - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 0; - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; - } - break; - case 3: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - LinkPartnerBufferExecCompleted(); - } - break; - } -} - -static void LinkPartnerHandlePrintString(void) -{ - u16 *stringId; - - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); - BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; - BattleTv_SetDataBasedOnString(*stringId); -} - -static void LinkPartnerHandlePrintSelectionString(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleChooseAction(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleYesNoBox(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleChooseMove(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleChooseItem(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleChoosePokemon(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleCmd23(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleHealthBarUpdate(void) -{ - s16 hpVal; - - LoadBattleBarGfx(0); - hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (hpVal != INSTANT_HP_BAR_DROP) - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); - } - else - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); - } - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; -} - -static void LinkPartnerHandleExpUpdate(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleStatusIconUpdate(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 battlerId; - - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - battlerId = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } -} - -static void LinkPartnerHandleStatusAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], - gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } -} - -static void LinkPartnerHandleStatusXor(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleDataTransfer(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleDMA3Transfer(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandlePlayBGM(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleCmd32(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleTwoReturnValues(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleChosenMonReturnValue(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleOneReturnValue(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleOneReturnValue_Duplicate(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleClearUnkVar(void) -{ - gUnusedControllerStruct.unk = 0; - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleSetUnkVar(void) -{ - gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleClearUnkFlag(void) -{ - gUnusedControllerStruct.flag = 0; - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleToggleUnkFlag(void) -{ - gUnusedControllerStruct.flag ^= 1; - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleHitAnimation(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE) - { - LinkPartnerBufferExecCompleted(); - } - else - { - gDoingBattleAnim = TRUE; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; - DoHitAnimHealthboxEffect(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect; - } -} - -static void LinkPartnerHandleCantSwitch(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandlePlaySE(void) -{ - s8 pan; - - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - pan = SOUND_PAN_ATTACKER; - else - pan = SOUND_PAN_TARGET; - - PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandlePlayFanfareOrBGM(void) -{ - if (gBattleResources->bufferA[gActiveBattler][3]) - { - BattleStopLowHpSound(); - PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - else - { - PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleFaintingCry(void) -{ - u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - PlayCry_ByMode(species, -25, CRY_MODE_FAINT); - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleIntroSlide(void) -{ - HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); - gIntroSlideFlags |= 1; - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleIntroTrainerBallThrow(void) -{ - u8 paletteNum; - u8 taskId; - u32 trainerPicId; - - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; - - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); - - paletteNum = AllocSpritePalette(0xD6F9); - - if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_FIRE_RED - || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_LEAF_GREEN) - { - trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RED; - } - else if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY - || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE) - { - trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN; - } - else - { - trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender; - } - - LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); - - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; - - taskId = CreateTask(Task_StartSendOutAnim, 5); - gTasks[taskId].data[0] = gActiveBattler; - - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - - gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; - gBattlerControllerFuncs[gActiveBattler] = SpriteCB_Null2; -} - -static void Task_StartSendOutAnim(u8 taskId) -{ - if (gTasks[taskId].data[1] < 24) - { - gTasks[taskId].data[1]++; - } - else - { - u8 savedActiveBank = gActiveBattler; - - gActiveBattler = gTasks[taskId].data[0]; - if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - } - else - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - } - gBattlerControllerFuncs[gActiveBattler] = Intro_ShowHealthbox; - gActiveBattler = savedActiveBank; - DestroyTask(taskId); - } -} - -static void LinkPartnerHandleDrawPartyStatusSummary(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - LinkPartnerBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - - if (gBattleResources->bufferA[gActiveBattler][2] != 0) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; - - gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; - } -} - -static void EndDrawPartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 92) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - LinkPartnerBufferExecCompleted(); - } -} - -static void LinkPartnerHandleHidePartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleEndBounceEffect(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleSpriteInvisibility(void) -{ - if (IsBattlerSpritePresent(gActiveBattler)) - { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; - CopyBattleSpriteInvisibility(gActiveBattler); - } - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleBattleAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; - u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) - LinkPartnerBufferExecCompleted(); - else - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation; - - BattleTv_SetDataBasedOnAnimation(animationId); - } -} - -static void LinkPartnerHandleLinkStandbyMsg(void) -{ - RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][2]); - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleResetActionMoveSelection(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerHandleEndLinkBattle(void) -{ - RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][4]); - gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; - gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[gActiveBattler][2]; + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[battler][4]); + gBattleOutcome = gBattleResources->bufferA[battler][1]; + gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[battler][2]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - LinkPartnerBufferExecCompleted(); - gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; -} - -static void LinkPartnerHandleBattleDebug(void) -{ - LinkPartnerBufferExecCompleted(); -} - -static void LinkPartnerCmdEnd(void) -{ + LinkPartnerBufferExecCompleted(battler); + gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index a786dafa6..d439048eb 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -39,248 +39,162 @@ #include "constants/trainers.h" #include "trainer_hill.h" -static void OpponentHandleGetMonData(void); -static void OpponentHandleGetRawMonData(void); -static void OpponentHandleSetMonData(void); -static void OpponentHandleSetRawMonData(void); -static void OpponentHandleLoadMonSprite(void); -static void OpponentHandleSwitchInAnim(void); -static void OpponentHandleReturnMonToBall(void); -static void OpponentHandleDrawTrainerPic(void); -static void OpponentHandleTrainerSlide(void); -static void OpponentHandleTrainerSlideBack(void); -static void OpponentHandleFaintAnimation(void); -static void OpponentHandlePaletteFade(void); -static void OpponentHandleSuccessBallThrowAnim(void); -static void OpponentHandleBallThrow(void); -static void OpponentHandlePause(void); -static void OpponentHandleMoveAnimation(void); -static void OpponentHandlePrintString(void); -static void OpponentHandlePrintSelectionString(void); -static void OpponentHandleChooseAction(void); -static void OpponentHandleYesNoBox(void); -static void OpponentHandleChooseMove(void); -static void OpponentHandleChooseItem(void); -static void OpponentHandleChoosePokemon(void); -static void OpponentHandleCmd23(void); -static void OpponentHandleHealthBarUpdate(void); -static void OpponentHandleExpUpdate(void); -static void OpponentHandleStatusIconUpdate(void); -static void OpponentHandleStatusAnimation(void); -static void OpponentHandleStatusXor(void); -static void OpponentHandleDataTransfer(void); -static void OpponentHandleDMA3Transfer(void); -static void OpponentHandlePlayBGM(void); -static void OpponentHandleCmd32(void); -static void OpponentHandleTwoReturnValues(void); -static void OpponentHandleChosenMonReturnValue(void); -static void OpponentHandleOneReturnValue(void); -static void OpponentHandleOneReturnValue_Duplicate(void); -static void OpponentHandleClearUnkVar(void); -static void OpponentHandleSetUnkVar(void); -static void OpponentHandleClearUnkFlag(void); -static void OpponentHandleToggleUnkFlag(void); -static void OpponentHandleHitAnimation(void); -static void OpponentHandleCantSwitch(void); -static void OpponentHandlePlaySE(void); -static void OpponentHandlePlayFanfareOrBGM(void); -static void OpponentHandleFaintingCry(void); -static void OpponentHandleIntroSlide(void); -static void OpponentHandleIntroTrainerBallThrow(void); -static void OpponentHandleDrawPartyStatusSummary(void); -static void OpponentHandleHidePartyStatusSummary(void); -static void OpponentHandleEndBounceEffect(void); -static void OpponentHandleSpriteInvisibility(void); -static void OpponentHandleBattleAnimation(void); -static void OpponentHandleLinkStandbyMsg(void); -static void OpponentHandleResetActionMoveSelection(void); -static void OpponentHandleEndLinkBattle(void); -static void OpponentHandleDebugMenu(void); -static void OpponentCmdEnd(void); +static void OpponentHandleLoadMonSprite(u32 battler); +static void OpponentHandleSwitchInAnim(u32 battler); +static void OpponentHandleDrawTrainerPic(u32 battler); +static void OpponentHandleTrainerSlide(u32 battler); +static void OpponentHandleTrainerSlideBack(u32 battler); +static void OpponentHandleMoveAnimation(u32 battler); +static void OpponentHandlePrintString(u32 battler); +static void OpponentHandleChooseAction(u32 battler); +static void OpponentHandleChooseMove(u32 battler); +static void OpponentHandleChooseItem(u32 battler); +static void OpponentHandleChoosePokemon(u32 battler); +static void OpponentHandleHealthBarUpdate(u32 battler); +static void OpponentHandleIntroTrainerBallThrow(u32 battler); +static void OpponentHandleDrawPartyStatusSummary(u32 battler); +static void OpponentHandleBattleAnimation(u32 battler); +static void OpponentHandleEndLinkBattle(u32 battler); static u8 CountAIAliveNonEggMonsExcept(u8 slotToIgnore); -static void OpponentBufferRunCommand(void); -static void OpponentBufferExecCompleted(void); -static void SwitchIn_HandleSoundAndEnd(void); -static u32 GetOpponentMonData(u8 monId, u8 *dst); -static void SetOpponentMonData(u8 monId); -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); -static void DoSwitchOutAnimation(void); -static void OpponentDoMoveAnimation(void); -static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite); -static void Task_StartSendOutAnim(u8 taskId); -static void EndDrawPartyStatusSummary(void); +static void OpponentBufferRunCommand(u32 battler); +static void OpponentBufferExecCompleted(u32 battler); +static void SwitchIn_HandleSoundAndEnd(u32 battler); -static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = +static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { - [CONTROLLER_GETMONDATA] = OpponentHandleGetMonData, - [CONTROLLER_GETRAWMONDATA] = OpponentHandleGetRawMonData, - [CONTROLLER_SETMONDATA] = OpponentHandleSetMonData, - [CONTROLLER_SETRAWMONDATA] = OpponentHandleSetRawMonData, + [CONTROLLER_GETMONDATA] = BtlController_HandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = BtlController_HandleGetRawMonData, + [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, [CONTROLLER_LOADMONSPRITE] = OpponentHandleLoadMonSprite, [CONTROLLER_SWITCHINANIM] = OpponentHandleSwitchInAnim, - [CONTROLLER_RETURNMONTOBALL] = OpponentHandleReturnMonToBall, + [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = OpponentHandleDrawTrainerPic, [CONTROLLER_TRAINERSLIDE] = OpponentHandleTrainerSlide, [CONTROLLER_TRAINERSLIDEBACK] = OpponentHandleTrainerSlideBack, - [CONTROLLER_FAINTANIMATION] = OpponentHandleFaintAnimation, - [CONTROLLER_PALETTEFADE] = OpponentHandlePaletteFade, - [CONTROLLER_SUCCESSBALLTHROWANIM] = OpponentHandleSuccessBallThrowAnim, - [CONTROLLER_BALLTHROWANIM] = OpponentHandleBallThrow, - [CONTROLLER_PAUSE] = OpponentHandlePause, + [CONTROLLER_FAINTANIMATION] = BtlController_HandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = BtlController_Empty, + [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_PAUSE] = BtlController_Empty, [CONTROLLER_MOVEANIMATION] = OpponentHandleMoveAnimation, [CONTROLLER_PRINTSTRING] = OpponentHandlePrintString, - [CONTROLLER_PRINTSTRINGPLAYERONLY] = OpponentHandlePrintSelectionString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, [CONTROLLER_CHOOSEACTION] = OpponentHandleChooseAction, - [CONTROLLER_YESNOBOX] = OpponentHandleYesNoBox, + [CONTROLLER_YESNOBOX] = BtlController_Empty, [CONTROLLER_CHOOSEMOVE] = OpponentHandleChooseMove, [CONTROLLER_OPENBAG] = OpponentHandleChooseItem, [CONTROLLER_CHOOSEPOKEMON] = OpponentHandleChoosePokemon, - [CONTROLLER_23] = OpponentHandleCmd23, + [CONTROLLER_23] = BtlController_Empty, [CONTROLLER_HEALTHBARUPDATE] = OpponentHandleHealthBarUpdate, - [CONTROLLER_EXPUPDATE] = OpponentHandleExpUpdate, - [CONTROLLER_STATUSICONUPDATE] = OpponentHandleStatusIconUpdate, - [CONTROLLER_STATUSANIMATION] = OpponentHandleStatusAnimation, - [CONTROLLER_STATUSXOR] = OpponentHandleStatusXor, - [CONTROLLER_DATATRANSFER] = OpponentHandleDataTransfer, - [CONTROLLER_DMA3TRANSFER] = OpponentHandleDMA3Transfer, - [CONTROLLER_PLAYBGM] = OpponentHandlePlayBGM, - [CONTROLLER_32] = OpponentHandleCmd32, - [CONTROLLER_TWORETURNVALUES] = OpponentHandleTwoReturnValues, - [CONTROLLER_CHOSENMONRETURNVALUE] = OpponentHandleChosenMonReturnValue, - [CONTROLLER_ONERETURNVALUE] = OpponentHandleOneReturnValue, - [CONTROLLER_ONERETURNVALUE_DUPLICATE] = OpponentHandleOneReturnValue_Duplicate, - [CONTROLLER_CLEARUNKVAR] = OpponentHandleClearUnkVar, - [CONTROLLER_SETUNKVAR] = OpponentHandleSetUnkVar, - [CONTROLLER_CLEARUNKFLAG] = OpponentHandleClearUnkFlag, - [CONTROLLER_TOGGLEUNKFLAG] = OpponentHandleToggleUnkFlag, - [CONTROLLER_HITANIMATION] = OpponentHandleHitAnimation, - [CONTROLLER_CANTSWITCH] = OpponentHandleCantSwitch, - [CONTROLLER_PLAYSE] = OpponentHandlePlaySE, - [CONTROLLER_PLAYFANFAREORBGM] = OpponentHandlePlayFanfareOrBGM, - [CONTROLLER_FAINTINGCRY] = OpponentHandleFaintingCry, - [CONTROLLER_INTROSLIDE] = OpponentHandleIntroSlide, + [CONTROLLER_EXPUPDATE] = BtlController_Empty, + [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, + [CONTROLLER_STATUSXOR] = BtlController_Empty, + [CONTROLLER_DATATRANSFER] = BtlController_Empty, + [CONTROLLER_DMA3TRANSFER] = BtlController_Empty, + [CONTROLLER_PLAYBGM] = BtlController_Empty, + [CONTROLLER_32] = BtlController_Empty, + [CONTROLLER_TWORETURNVALUES] = BtlController_Empty, + [CONTROLLER_CHOSENMONRETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, + [CONTROLLER_CLEARUNKVAR] = BtlController_HandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = BtlController_HandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = BtlController_HandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = BtlController_HandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, + [CONTROLLER_CANTSWITCH] = BtlController_Empty, + [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = BtlController_HandleFaintingCry, + [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, [CONTROLLER_INTROTRAINERBALLTHROW] = OpponentHandleIntroTrainerBallThrow, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = OpponentHandleDrawPartyStatusSummary, - [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = OpponentHandleHidePartyStatusSummary, - [CONTROLLER_ENDBOUNCE] = OpponentHandleEndBounceEffect, - [CONTROLLER_SPRITEINVISIBILITY] = OpponentHandleSpriteInvisibility, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = BtlController_Empty, + [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, [CONTROLLER_BATTLEANIMATION] = OpponentHandleBattleAnimation, - [CONTROLLER_LINKSTANDBYMSG] = OpponentHandleLinkStandbyMsg, - [CONTROLLER_RESETACTIONMOVESELECTION] = OpponentHandleResetActionMoveSelection, + [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, + [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = OpponentHandleEndLinkBattle, - [CONTROLLER_DEBUGMENU] = OpponentHandleDebugMenu, - [CONTROLLER_TERMINATOR_NOP] = OpponentCmdEnd + [CONTROLLER_DEBUGMENU] = BtlController_Empty, + [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; -// unknown unused data -static const u8 sUnused[] = {0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20}; - -static void OpponentDummy(void) +void SetControllerToOpponent(u32 battler) { + gBattlerControllerEndFuncs[battler] = OpponentBufferExecCompleted; + gBattlerControllerFuncs[battler] = OpponentBufferRunCommand; } -void SetControllerToOpponent(void) +static void OpponentBufferRunCommand(u32 battler) { - gBattlerControllerFuncs[gActiveBattler] = OpponentBufferRunCommand; -} - -static void OpponentBufferRunCommand(void) -{ - if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) + if (gBattleControllerExecFlags & gBitTable[battler]) { - if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sOpponentBufferCommands)) - sOpponentBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sOpponentBufferCommands)) + sOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - OpponentBufferExecCompleted(); + OpponentBufferExecCompleted(battler); } } -static void CompleteOnBattlerSpriteCallbackDummy(void) +static void Intro_DelayAndEnd(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - OpponentBufferExecCompleted(); -} - -static void CompleteOnBankSpriteCallbackDummy2(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - OpponentBufferExecCompleted(); -} - -static void FreeTrainerSpriteAfterSlide(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) { - FreeTrainerFrontPicPalette(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam); - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - OpponentBufferExecCompleted(); + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; + OpponentBufferExecCompleted(battler); } } -static void Intro_DelayAndEnd(void) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; - OpponentBufferExecCompleted(); - } -} - -static bool32 TwoIntroMons(u32 battlerId) // Double battle with both opponent pokemon active. -{ - return (IsDoubleBattle() - && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[battlerId]]) - && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]])); -} - -static void Intro_WaitForShinyAnimAndHealthbox(void) +static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) { bool8 healthboxAnimDone = FALSE; bool8 twoMons; - twoMons = TwoIntroMons(gActiveBattler); + twoMons = TwoOpponentIntroMons(battler); if (!twoMons || ((twoMons && (gBattleTypeFlags & BATTLE_TYPE_MULTI) && !BATTLE_TWO_VS_ONE_OPPONENT) || (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS))) { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) healthboxAnimDone = TRUE; twoMons = FALSE; } else { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) healthboxAnimDone = TRUE; twoMons = TRUE; } - gBattleControllerOpponentHealthboxData = &gBattleSpritesDataPtr->healthBoxesData[gActiveBattler]; - gBattleControllerOpponentFlankHealthboxData = &gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)]; + gBattleControllerOpponentHealthboxData = &gBattleSpritesDataPtr->healthBoxesData[battler]; + gBattleControllerOpponentFlankHealthboxData = &gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)]; if (healthboxAnimDone) { if (twoMons == TRUE) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim - && gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim) + if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim + && gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); } else return; } - else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) + else if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) { - if (GetBattlerPosition(gActiveBattler) == 3) + if (GetBattlerPosition(battler) == 3) { - if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim) + if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim) { FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); @@ -288,87 +202,87 @@ static void Intro_WaitForShinyAnimAndHealthbox(void) else return; } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; } else return; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; - gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; + gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; } } -static void Intro_TryShinyAnimShowHealthbox(void) +static void Intro_TryShinyAnimShowHealthbox(u32 battler) { bool32 bgmRestored = FALSE; bool32 battlerAnimsDone = FALSE; bool32 twoMons; - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) - TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive + && !gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) + TryShinyAnimation(battler, &gEnemyParty[gBattlerPartyIndexes[battler]]); - twoMons = TwoIntroMons(gActiveBattler); + twoMons = TwoOpponentIntroMons(battler); if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) || BATTLE_TWO_VS_ONE_OPPONENT) && twoMons - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim) - TryShinyAnimation(BATTLE_PARTNER(gActiveBattler), &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]]); + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim) + TryShinyAnimation(BATTLE_PARTNER(battler), &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]]); - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted) { if (twoMons && (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) || BATTLE_TWO_VS_ONE_OPPONENT)) { - UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)], &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], HEALTHBOX_ALL); - StartHealthboxSlideIn(BATTLE_PARTNER(gActiveBattler)); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(battler)], &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], HEALTHBOX_ALL); + StartHealthboxSlideIn(BATTLE_PARTNER(battler)); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(battler)]); } - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gEnemyParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted = TRUE; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = TRUE; } - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].waitForCry - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].waitForCry + if (!gBattleSpritesDataPtr->healthBoxesData[battler].waitForCry + && gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].waitForCry && !IsCryPlayingOrClearCrySongs()) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) { - if (GetBattlerPosition(gActiveBattler) == 1) + if (GetBattlerPosition(battler) == 1) m4aMPlayContinue(&gMPlayInfo_BGM); } else m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = TRUE; + gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = TRUE; bgmRestored = TRUE; } if (!twoMons || (twoMons && gBattleTypeFlags & BATTLE_TYPE_MULTI && !BATTLE_TWO_VS_ONE_OPPONENT)) { - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { battlerAnimsDone = TRUE; } } else { - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattleControllerData[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) { battlerAnimsDone = TRUE; } @@ -378,881 +292,124 @@ static void Intro_TryShinyAnimShowHealthbox(void) { if (twoMons && (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) || BATTLE_TWO_VS_ONE_OPPONENT)) { - DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(gActiveBattler)]]); - SetBattlerShadowSpriteCallback(BATTLE_PARTNER(gActiveBattler), GetMonData(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], MON_DATA_SPECIES)); + DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); + SetBattlerShadowSpriteCallback(BATTLE_PARTNER(battler), GetMonData(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], MON_DATA_SPECIES)); } - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); + DestroySprite(&gSprites[gBattleControllerData[battler]]); + SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = FALSE; - gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; + gBattlerControllerFuncs[battler] = Intro_WaitForShinyAnimAndHealthbox; } } -static void TryShinyAnimAfterMonAnim(void) +static void TryShinyAnimAfterMonAnim(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].x2 == 0 - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) - TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + if (gSprites[gBattlerSpriteIds[battler]].x2 == 0 + && !gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) + TryShinyAnimation(battler, &gEnemyParty[gBattlerPartyIndexes[battler]]); - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); - OpponentBufferExecCompleted(); + OpponentBufferExecCompleted(battler); } } -static void CompleteOnHealthbarDone(void) +static void SwitchIn_ShowSubstitute(u32 battler) { - s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - if (hpValue != -1) - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); - else - OpponentBufferExecCompleted(); -} - -static void HideHealthboxAfterMonFaint(void) -{ - if (!gSprites[gBattlerSpriteIds[gActiveBattler]].inUse) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) { - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - OpponentBufferExecCompleted(); + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); + gBattlerControllerFuncs[battler] = SwitchIn_HandleSoundAndEnd; } } -static void FreeMonSpriteAfterSwitchOutAnim(void) +static void SwitchIn_HandleSoundAndEnd(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - HideBattlerShadowSprite(gActiveBattler); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - OpponentBufferExecCompleted(); - } -} - -static void CompleteOnInactiveTextPrinter(void) -{ - if (!IsTextPrinterActive(B_WIN_MSG)) - OpponentBufferExecCompleted(); -} - -static void DoHitAnimBlinkSpriteEffect(void) -{ - u8 spriteId = gBattlerSpriteIds[gActiveBattler]; - - if (gSprites[spriteId].data[1] == 32) - { - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = FALSE; - OpponentBufferExecCompleted(); - } - else - { - if ((gSprites[spriteId].data[1] % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data[1]++; - } -} - -static void SwitchIn_ShowSubstitute(void) -{ - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - { - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_HandleSoundAndEnd; - } -} - -static void SwitchIn_HandleSoundAndEnd(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) - { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - || gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy_2) + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + || gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy_2) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); - OpponentBufferExecCompleted(); + OpponentBufferExecCompleted(battler); } } } -static void SwitchIn_ShowHealthbox(void) +static void SwitchIn_ShowHealthbox(u32 battler) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - CopyBattleSpriteInvisibility(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowSubstitute; + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gEnemyParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); + CopyBattleSpriteInvisibility(battler); + gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; } } -static void SwitchIn_TryShinyAnim(void) +static void SwitchIn_TryShinyAnim(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) + TryShinyAnimation(battler, &gEnemyParty[gBattlerPartyIndexes[battler]]); - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) { - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowHealthbox; + DestroySprite(&gSprites[gBattleControllerData[battler]]); + SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); + gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; } } -static void CompleteOnFinishedStatusAnimation(void) +static void OpponentBufferExecCompleted(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) - OpponentBufferExecCompleted(); -} - -static void CompleteOnFinishedBattleAnimation(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive) - OpponentBufferExecCompleted(); -} - -static void OpponentBufferExecCompleted(void) -{ - gBattlerControllerFuncs[gActiveBattler] = OpponentBufferRunCommand; + gBattlerControllerFuncs[battler] = OpponentBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP; } else { - gBattleControllerExecFlags &= ~gBitTable[gActiveBattler]; + gBattleControllerExecFlags &= ~gBitTable[battler]; } } -static void OpponentHandleGetMonData(void) +static void OpponentHandleLoadMonSprite(u32 battler) { - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data - u32 size = 0; - u8 monToCheck; - s32 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - size += GetOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - size += GetOpponentMonData(i, monData + size); - monToCheck >>= 1; - } - } - BtlController_EmitDataTransfer(BUFFER_B, size, monData); - OpponentBufferExecCompleted(); + BtlController_HandleLoadMonSprite(battler, TryShinyAnimAfterMonAnim); } -static u32 GetOpponentMonData(u8 monId, u8 *dst) +static void OpponentHandleSwitchInAnim(u32 battler) { - struct BattlePokemon battleMon; - struct MovePpInfo moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES); - battleMon.item = GetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM); - for (size = 0; size < MAX_MON_MOVES; size++) - { - battleMon.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size); - battleMon.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); - } - battleMon.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - battleMon.friendship = GetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP); - battleMon.experience = GetMonData(&gEnemyParty[monId], MON_DATA_EXP); - battleMon.hpIV = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV); - battleMon.attackIV = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV); - battleMon.defenseIV = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV); - battleMon.speedIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV); - battleMon.spAttackIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV); - battleMon.spDefenseIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV); - battleMon.personality = GetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY); - battleMon.status1 = GetMonData(&gEnemyParty[monId], MON_DATA_STATUS); - battleMon.level = GetMonData(&gEnemyParty[monId], MON_DATA_LEVEL); - battleMon.hp = GetMonData(&gEnemyParty[monId], MON_DATA_HP); - battleMon.maxHP = GetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP); - battleMon.attack = GetMonData(&gEnemyParty[monId], MON_DATA_ATK); - battleMon.defense = GetMonData(&gEnemyParty[monId], MON_DATA_DEF); - battleMon.speed = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED); - battleMon.spAttack = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK); - battleMon.spDefense = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); - battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); - battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); - battleMon.metLevel = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL); - GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy_Nickname(battleMon.nickname, nickname); - GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName); - src = (u8 *)&battleMon; - for (size = 0; size < sizeof(battleMon); size++) - dst[size] = src[size]; - break; - case REQUEST_SPECIES_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_HELDITEM_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MOVES_PP_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - { - moveData.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - src = (u8 *)(&moveData); - for (size = 0; size < sizeof(moveData); size++) - dst[size] = src[size]; - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_PP_DATA_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); - dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - size++; - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); - size = 1; - break; - case REQUEST_OTID_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_EXP_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_EXP); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_HP_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_HP_EV); - size = 1; - break; - case REQUEST_ATK_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV); - size = 1; - break; - case REQUEST_DEF_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV); - size = 1; - break; - case REQUEST_SPEED_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV); - size = 1; - break; - case REQUEST_SPATK_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV); - size = 1; - break; - case REQUEST_SPDEF_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV); - size = 1; - break; - case REQUEST_FRIENDSHIP_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP); - size = 1; - break; - case REQUEST_POKERUS_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_POKERUS); - size = 1; - break; - case REQUEST_MET_LOCATION_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION); - size = 1; - break; - case REQUEST_MET_LEVEL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL); - size = 1; - break; - case REQUEST_MET_GAME_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME); - size = 1; - break; - case REQUEST_POKEBALL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL); - size = 1; - break; - case REQUEST_ALL_IVS_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV); - dst[1] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV); - dst[2] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV); - dst[3] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV); - dst[4] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV); - dst[5] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV); - size = 6; - break; - case REQUEST_HP_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV); - size = 1; - break; - case REQUEST_ATK_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV); - size = 1; - break; - case REQUEST_DEF_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV); - size = 1; - break; - case REQUEST_SPEED_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV); - size = 1; - break; - case REQUEST_SPATK_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV); - size = 1; - break; - case REQUEST_SPDEF_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV); - size = 1; - break; - case REQUEST_PERSONALITY_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_CHECKSUM_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_STATUS_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_STATUS); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_LEVEL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_LEVEL); - size = 1; - break; - case REQUEST_HP_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MAX_HP_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_ATK_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_ATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_DEF_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_DEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPEED_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPATK_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPDEF_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_COOL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_COOL); - size = 1; - break; - case REQUEST_BEAUTY_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY); - size = 1; - break; - case REQUEST_CUTE_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_CUTE); - size = 1; - break; - case REQUEST_SMART_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SMART); - size = 1; - break; - case REQUEST_TOUGH_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_TOUGH); - size = 1; - break; - case REQUEST_SHEEN_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SHEEN); - size = 1; - break; - case REQUEST_COOL_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON); - size = 1; - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case REQUEST_CUTE_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case REQUEST_SMART_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON); - size = 1; - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - - return size; + gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE; + BtlController_HandleSwitchInAnim(battler, FALSE, SwitchIn_TryShinyAnim); } -static void OpponentHandleGetRawMonData(void) -{ - struct BattlePokemon battleMon; - u8 *src = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; - u8 *dst = (u8 *)&battleMon + gBattleResources->bufferA[gActiveBattler][1]; - u8 i; - - for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) - dst[i] = src[i]; - - BtlController_EmitDataTransfer(BUFFER_B, gBattleResources->bufferA[gActiveBattler][2], dst); - OpponentBufferExecCompleted(); -} - -static void OpponentHandleSetMonData(void) -{ - u8 monToCheck; - u8 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - SetOpponentMonData(gBattlerPartyIndexes[gActiveBattler]); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - SetOpponentMonData(i); - monToCheck >>= 1; - } - } - OpponentBufferExecCompleted(); -} - -static void SetOpponentMonData(u8 monId) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; - s32 i; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - { - u8 iv; - - SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &battlePokemon->species); - SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); - } - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); - SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); - SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &iv); - iv = battlePokemon->attackIV; - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &iv); - iv = battlePokemon->defenseIV; - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &iv); - iv = battlePokemon->speedIV; - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &iv); - SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality); - SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &battlePokemon->status1); - SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &battlePokemon->level); - SetMonData(&gEnemyParty[monId], MON_DATA_HP, &battlePokemon->hp); - SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP); - SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &battlePokemon->attack); - SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &battlePokemon->defense); - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &battlePokemon->speed); - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack); - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense); - } - break; - case REQUEST_SPECIES_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HELDITEM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MOVES_PP_BATTLE: - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]); - } - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PP_DATA_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_OTID_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_EXP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKERUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_GAME_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKEBALL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); - break; - case REQUEST_HP_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_STATUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MAX_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SHEEN_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - } -} - -static void OpponentHandleSetRawMonData(void) -{ - u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; - u8 i; - - for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) - dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; - - OpponentBufferExecCompleted(); -} - -static void OpponentHandleLoadMonSprite(void) -{ - u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); - - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = species; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); - - SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - - gBattlerControllerFuncs[gActiveBattler] = TryShinyAnimAfterMonAnim; -} - -static void OpponentHandleSwitchInAnim(void) -{ - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; - gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; - StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; -} - -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) -{ - u16 species; - - ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetIllusionMonSpecies(battlerId); - if (species == SPECIES_NONE) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); - - gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSpriteSubpriority(battlerId)); - - gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; - gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; - - gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; - gSprites[gBattleControllerData[battlerId]].data[2] = battlerId; - - gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - - StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); - - gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; - gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - - gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); -} - -static void OpponentHandleReturnMonToBall(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] == 0) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; - } - else - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - HideBattlerShadowSprite(gActiveBattler); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - OpponentBufferExecCompleted(); - } -} - -static void DoSwitchOutAnimation(void) -{ - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_OPPONENT_MON); - gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim; - } - break; - } -} - -#define sSpeedX data[0] - -static void OpponentHandleDrawTrainerPic(void) +static u32 OpponentGetTrainerPicId(u32 battlerId) { u32 trainerPicId; - s16 xPos; if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) { @@ -1266,7 +423,7 @@ static void OpponentHandleDrawTrainerPic(void) { if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { - if (gActiveBattler == 1) + if (battlerId == 1) trainerPicId = GetTrainerHillTrainerFrontSpriteId(gTrainerBattleOpponent_A); else trainerPicId = GetTrainerHillTrainerFrontSpriteId(gTrainerBattleOpponent_B); @@ -1280,7 +437,7 @@ static void OpponentHandleDrawTrainerPic(void) { if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI)) { - if (gActiveBattler == 1) + if (battlerId == 1) trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A); else trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B); @@ -1296,7 +453,7 @@ static void OpponentHandleDrawTrainerPic(void) } else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { - if (gActiveBattler != 1) + if (battlerId != 1) trainerPicId = gTrainers[gTrainerBattleOpponent_B].trainerPic; else trainerPicId = gTrainers[gTrainerBattleOpponent_A].trainerPic; @@ -1306,9 +463,17 @@ static void OpponentHandleDrawTrainerPic(void) trainerPicId = gTrainers[gTrainerBattleOpponent_A].trainerPic; } + return trainerPicId; +} + +static void OpponentHandleDrawTrainerPic(u32 battler) +{ + s16 xPos; + u32 trainerPicId = OpponentGetTrainerPicId(battler); + if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) { - if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != 0) // second mon + if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon xPos = 152; else // first mon xPos = 200; @@ -1318,246 +483,42 @@ static void OpponentHandleDrawTrainerPic(void) xPos = 176; } - DecompressTrainerFrontPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - xPos, - (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40, - GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 2; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; + BtlController_HandleDrawTrainerPic(battler, trainerPicId, TRUE, + xPos, 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicId].size), + -1); } -static void OpponentHandleTrainerSlide(void) +static void OpponentHandleTrainerSlide(u32 battler) { - u32 trainerPicId; - - if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) - { - trainerPicId = GetSecretBaseTrainerPicIndex(); - } - else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) - { - trainerPicId = GetFrontierBrainTrainerPicIndex(); - } - else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) - { - if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) - { - if (gActiveBattler == 1) - trainerPicId = GetTrainerHillTrainerFrontSpriteId(gTrainerBattleOpponent_A); - else - trainerPicId = GetTrainerHillTrainerFrontSpriteId(gTrainerBattleOpponent_B); - } - else - { - trainerPicId = GetTrainerHillTrainerFrontSpriteId(gTrainerBattleOpponent_A); - } - } - else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - { - if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI)) - { - if (gActiveBattler == 1) - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A); - else - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B); - } - else - { - trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A); - } - } - else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - { - trainerPicId = GetEreaderTrainerFrontSpriteId(); - } - else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) - { - if (gActiveBattler != 1) - trainerPicId = gTrainers[gTrainerBattleOpponent_B].trainerPic; - else - trainerPicId = gTrainers[gTrainerBattleOpponent_A].trainerPic; - } - else - { - trainerPicId = gTrainers[gTrainerBattleOpponent_A].trainerPic; - } - - DecompressTrainerFrontPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, 176, (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40, 0x1E); - - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 96; - gSprites[gBattlerSpriteIds[gActiveBattler]].x += 32; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy2; + u32 trainerPicId = OpponentGetTrainerPicId(battler); + BtlController_HandleTrainerSlide(battler, trainerPicId); } -#undef sSpeedX - -static void OpponentHandleTrainerSlideBack(void) +static void OpponentHandleTrainerSlideBack(u32 battler) { - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy); - gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; + BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void OpponentHandleFaintAnimation(void) +static void OpponentHandleMoveAnimation(u32 battler) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0) - { - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++; - } - else - { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - PlaySE12WithPanning(SE_FAINT, SOUND_PAN_TARGET); - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon; - gBattlerControllerFuncs[gActiveBattler] = HideHealthboxAfterMonFaint; - } - } + BtlController_HandleMoveAnimation(battler, FALSE); } -static void OpponentHandlePaletteFade(void) +static void OpponentHandlePrintString(u32 battler) { - OpponentBufferExecCompleted(); + BtlController_HandlePrintString(battler, FALSE, TRUE); } -static void OpponentHandleSuccessBallThrowAnim(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleBallThrow(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandlePause(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleMoveAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - - gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; - gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; - gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = OpponentDoMoveAnimation; - } -} - -static void OpponentDoMoveAnimation(void) -{ - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; - - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute - && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8) - { - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF); - DoMoveAnim(move); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL); - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) - { - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 0; - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; - } - break; - case 3: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - OpponentBufferExecCompleted(); - } - break; - } -} - -static void OpponentHandlePrintString(void) -{ - u16 *stringId; - - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); - BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; - BattleArena_DeductSkillPoints(gActiveBattler, *stringId); -} - -static void OpponentHandlePrintSelectionString(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleChooseAction(void) +static void OpponentHandleChooseAction(u32 battler) { AI_TrySwitchOrUseItem(); - OpponentBufferExecCompleted(); + OpponentBufferExecCompleted(battler); } -static void OpponentHandleYesNoBox(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleChooseMove(void) +static void OpponentHandleChooseMove(u32 battler) { u8 chosenMoveId; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER) || IsWildMonSmart()) @@ -1568,8 +529,8 @@ static void OpponentHandleChooseMove(void) } else { - chosenMoveId = gBattleStruct->aiMoveOrAction[gActiveBattler]; - gBattlerTarget = gBattleStruct->aiChosenTarget[gActiveBattler]; + chosenMoveId = gBattleStruct->aiMoveOrAction[battler]; + gBattlerTarget = gBattleStruct->aiChosenTarget[battler]; switch (chosenMoveId) { case AI_CHOICE_WATCH: @@ -1588,25 +549,27 @@ static void OpponentHandleChooseMove(void) { u16 chosenMove = moveInfo->moves[chosenMoveId]; - if (GetBattlerMoveTargetType(gActiveBattler, chosenMove) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) - gBattlerTarget = gActiveBattler; - if (GetBattlerMoveTargetType(gActiveBattler, chosenMove) & MOVE_TARGET_BOTH) + if (GetBattlerMoveTargetType(battler, chosenMove) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) + gBattlerTarget = battler; + if (GetBattlerMoveTargetType(battler, chosenMove) & MOVE_TARGET_BOTH) { gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); } - if (ShouldUseZMove(gActiveBattler, gBattlerTarget, chosenMove)) - QueueZMove(gActiveBattler, chosenMove); - if (CanMegaEvolve(gActiveBattler)) // If opponent can mega evolve, do it. + if (ShouldUseZMove(battler, gBattlerTarget, chosenMove)) + QueueZMove(battler, chosenMove); + if (CanMegaEvolve(battler)) // If opponent can mega evolve, do it. BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8)); + else if (CanUltraBurst(gActiveBattler)) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (RET_ULTRA_BURST) | (gBattlerTarget << 8)); else BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); } break; } } - OpponentBufferExecCompleted(); + OpponentBufferExecCompleted(battler); } else // Wild pokemon - use random move { @@ -1618,13 +581,13 @@ static void OpponentHandleChooseMove(void) move = moveInfo->moves[chosenMoveId]; } while (move == MOVE_NONE); - if (GetBattlerMoveTargetType(gActiveBattler, move) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) - BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gActiveBattler << 8)); + if (GetBattlerMoveTargetType(battler, move) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (battler << 8)); else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { do { target = GetBattlerAtPosition(Random() & 2); - } while (!CanTargetBattler(gActiveBattler, target, move)); + } while (!CanTargetBattler(battler, target, move)); #if B_WILD_NATURAL_ENEMIES == TRUE // Don't bother to loop through table if the move can't attack ally @@ -1641,8 +604,8 @@ static void OpponentHandleChooseMove(void) {SPECIES_SABLEYE, SPECIES_CARBINK}, {SPECIES_MAREANIE, SPECIES_CORSOLA}, }; - speciesAttacker = gBattleMons[gActiveBattler].species; - speciesTarget = gBattleMons[GetBattlerAtPosition(BATTLE_PARTNER(gActiveBattler))].species; + speciesAttacker = gBattleMons[battler].species; + speciesTarget = gBattleMons[GetBattlerAtPosition(BATTLE_PARTNER(battler))].species; for (i = 0; i < ARRAY_COUNT(naturalEnemies); i++) { @@ -1652,8 +615,8 @@ static void OpponentHandleChooseMove(void) break; } } - if (isPartnerEnemy && CanTargetBattler(gActiveBattler, target, move)) - BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (GetBattlerAtPosition(BATTLE_PARTNER(gActiveBattler)) << 8)); + if (isPartnerEnemy && CanTargetBattler(battler, target, move)) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (GetBattlerAtPosition(BATTLE_PARTNER(battler)) << 8)); else BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (target << 8)); } @@ -1664,28 +627,28 @@ static void OpponentHandleChooseMove(void) else BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) << 8)); - OpponentBufferExecCompleted(); + OpponentBufferExecCompleted(battler); } } -static void OpponentHandleChooseItem(void) +static void OpponentHandleChooseItem(u32 battler) { - BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); - OpponentBufferExecCompleted(); + BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[battler]); + OpponentBufferExecCompleted(battler); } -static void OpponentHandleChoosePokemon(void) +static void OpponentHandleChoosePokemon(u32 battler) { s32 chosenMonId; s32 pokemonInBattle = 1; // Choosing Revival Blessing target - if ((gBattleResources->bufferA[gActiveBattler][1] & 0xF) == PARTY_ACTION_CHOOSE_FAINTED_MON) + if ((gBattleResources->bufferA[battler][1] & 0xF) == PARTY_ACTION_CHOOSE_FAINTED_MON) { - chosenMonId = gSelectedMonPartyId = GetFirstFaintedPartyIndex(gActiveBattler); + chosenMonId = gSelectedMonPartyId = GetFirstFaintedPartyIndex(battler); } // Switching out - else if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == PARTY_SIZE) + else if (*(gBattleStruct->AI_monToSwitchIntoId + battler) == PARTY_SIZE) { chosenMonId = GetMostSuitableMonToSwitchInto(); if (chosenMonId == PARTY_SIZE) @@ -1703,7 +666,7 @@ static void OpponentHandleChoosePokemon(void) pokemonInBattle = 2; } - GetAIPartyIndexes(gActiveBattler, &firstId, &lastId); + GetAIPartyIndexes(battler, &firstId, &lastId); for (chosenMonId = (lastId-1); chosenMonId >= firstId; chosenMonId--) { @@ -1718,16 +681,16 @@ static void OpponentHandleChoosePokemon(void) } } } - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; + *(gBattleStruct->monToSwitchIntoId + battler) = chosenMonId; } else { - chosenMonId = *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler); - *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; + chosenMonId = *(gBattleStruct->AI_monToSwitchIntoId + battler); + *(gBattleStruct->AI_monToSwitchIntoId + battler) = PARTY_SIZE; + *(gBattleStruct->monToSwitchIntoId + battler) = chosenMonId; } BtlController_EmitChosenMonReturnValue(BUFFER_B, chosenMonId, NULL); - OpponentBufferExecCompleted(); + OpponentBufferExecCompleted(battler); } @@ -1738,9 +701,7 @@ static u8 CountAIAliveNonEggMonsExcept(u8 slotToIgnore) for (i = 0, count = 0; i < PARTY_SIZE; i++) { if (i != slotToIgnore - && GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) != SPECIES_NONE - && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) - && GetMonData(&gEnemyParty[i], MON_DATA_HP) != 0) + && IsValidForBattle(&gEnemyParty[i])) { count++; } @@ -1749,343 +710,27 @@ static u8 CountAIAliveNonEggMonsExcept(u8 slotToIgnore) return count; } -static void OpponentHandleCmd23(void) +static void OpponentHandleHealthBarUpdate(u32 battler) { - OpponentBufferExecCompleted(); + BtlController_HandleHealthBarUpdate(battler, FALSE); } -static void OpponentHandleHealthBarUpdate(void) +static void OpponentHandleIntroTrainerBallThrow(u32 battler) { - s16 hpVal; - - LoadBattleBarGfx(0); - hpVal = (gBattleResources->bufferA[gActiveBattler][3] << 8) | gBattleResources->bufferA[gActiveBattler][2]; - - if (hpVal != INSTANT_HP_BAR_DROP) - { - u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - u32 curHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); - } - else - { - u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); - } - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; + BtlController_HandleIntroTrainerBallThrow(battler, 0, NULL, 0, Intro_TryShinyAnimShowHealthbox); } -static void OpponentHandleExpUpdate(void) +static void OpponentHandleDrawPartyStatusSummary(u32 battler) { - OpponentBufferExecCompleted(); + BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_OPPONENT, TRUE); } -static void OpponentHandleStatusIconUpdate(void) +static void OpponentHandleBattleAnimation(u32 battler) { - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 battlerId; - - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - battlerId = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } + BtlController_HandleBattleAnimation(battler, FALSE, FALSE); } -static void OpponentHandleStatusAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], - gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } -} - -static void OpponentHandleStatusXor(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleDataTransfer(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleDMA3Transfer(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandlePlayBGM(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleCmd32(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleTwoReturnValues(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleChosenMonReturnValue(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleOneReturnValue(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleOneReturnValue_Duplicate(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleClearUnkVar(void) -{ - gUnusedControllerStruct.unk = 0; - OpponentBufferExecCompleted(); -} - -static void OpponentHandleSetUnkVar(void) -{ - gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; - OpponentBufferExecCompleted(); -} - -static void OpponentHandleClearUnkFlag(void) -{ - gUnusedControllerStruct.flag = 0; - OpponentBufferExecCompleted(); -} - -static void OpponentHandleToggleUnkFlag(void) -{ - gUnusedControllerStruct.flag ^= 1; - OpponentBufferExecCompleted(); -} - -static void OpponentHandleHitAnimation(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE) - { - OpponentBufferExecCompleted(); - } - else - { - gDoingBattleAnim = TRUE; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; - DoHitAnimHealthboxEffect(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect; - } -} - -static void OpponentHandleCantSwitch(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandlePlaySE(void) -{ - s8 pan; - - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - pan = SOUND_PAN_ATTACKER; - else - pan = SOUND_PAN_TARGET; - - PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); - OpponentBufferExecCompleted(); -} - -static void OpponentHandlePlayFanfareOrBGM(void) -{ - if (gBattleResources->bufferA[gActiveBattler][3]) - { - BattleStopLowHpSound(); - PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - else - { - PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - - OpponentBufferExecCompleted(); -} - -static void OpponentHandleFaintingCry(void) -{ - u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - PlayCry_ByMode(species, 25, CRY_MODE_FAINT); - OpponentBufferExecCompleted(); -} - -static void OpponentHandleIntroSlide(void) -{ - HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); - gIntroSlideFlags |= 1; - OpponentBufferExecCompleted(); -} - -static void OpponentHandleIntroTrainerBallThrow(void) -{ - u8 taskId; - - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreeOpponentSprite); - - taskId = CreateTask(Task_StartSendOutAnim, 5); - gTasks[taskId].data[0] = gActiveBattler; - - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - - gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; - gBattlerControllerFuncs[gActiveBattler] = OpponentDummy; -} - -static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite) -{ - FreeTrainerFrontPicPalette(sprite->oam.affineParam); - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); -} - -static void Task_StartSendOutAnim(u8 taskId) -{ - u8 savedActiveBattler = gActiveBattler; - - gActiveBattler = gTasks[taskId].data[0]; - if ((!TwoIntroMons(gActiveBattler) || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) && !BATTLE_TWO_VS_ONE_OPPONENT) - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - } - else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) || (BATTLE_TWO_VS_ONE_OPPONENT && !TwoIntroMons(gActiveBattler))) - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - } - else - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - } - gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; - gActiveBattler = savedActiveBattler; - DestroyTask(taskId); -} - -static void OpponentHandleDrawPartyStatusSummary(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - OpponentBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - - if (gBattleResources->bufferA[gActiveBattler][2] != 0) - { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay++; - return; - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay = 0; - } - } - - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - - if (gBattleResources->bufferA[gActiveBattler][2] != 0) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; - - gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; - } -} - -static void EndDrawPartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 92) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - OpponentBufferExecCompleted(); - } -} - -static void OpponentHandleHidePartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - OpponentBufferExecCompleted(); -} - -static void OpponentHandleEndBounceEffect(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleSpriteInvisibility(void) -{ - if (IsBattlerSpritePresent(gActiveBattler)) - { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; - CopyBattleSpriteInvisibility(gActiveBattler); - } - OpponentBufferExecCompleted(); -} - -static void OpponentHandleBattleAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; - u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) - OpponentBufferExecCompleted(); - else - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation; - } -} - -static void OpponentHandleLinkStandbyMsg(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleResetActionMoveSelection(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentHandleEndLinkBattle(void) +static void OpponentHandleEndLinkBattle(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_LINK && !(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)) { @@ -2093,14 +738,5 @@ static void OpponentHandleEndLinkBattle(void) gMain.callback1 = gPreBattleCallback1; SetMainCallback2(gMain.savedCallback); } - OpponentBufferExecCompleted(); -} - -static void OpponentHandleDebugMenu(void) -{ - OpponentBufferExecCompleted(); -} - -static void OpponentCmdEnd(void) -{ + OpponentBufferExecCompleted(battler); } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index eb47db444..ba0aac220 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -37,104 +37,75 @@ #include "constants/trainers.h" #include "constants/rgb.h" -static void PlayerHandleGetMonData(void); -static void PlayerHandleSetMonData(void); -static void PlayerHandleSetRawMonData(void); -static void PlayerHandleLoadMonSprite(void); -static void PlayerHandleSwitchInAnim(void); -static void PlayerHandleReturnMonToBall(void); -static void PlayerHandleDrawTrainerPic(void); -static void PlayerHandleTrainerSlide(void); -static void PlayerHandleTrainerSlideBack(void); -static void PlayerHandleFaintAnimation(void); -static void PlayerHandlePaletteFade(void); -static void PlayerHandleSuccessBallThrowAnim(void); -static void PlayerHandleBallThrowAnim(void); -static void PlayerHandlePause(void); -static void PlayerHandleMoveAnimation(void); -static void PlayerHandlePrintString(void); -static void PlayerHandlePrintSelectionString(void); -static void PlayerHandleChooseAction(void); -static void PlayerHandleYesNoBox(void); -static void PlayerHandleChooseMove(void); -static void PlayerHandleChooseItem(void); -static void PlayerHandleChoosePokemon(void); -static void PlayerHandleCmd23(void); -static void PlayerHandleHealthBarUpdate(void); -static void PlayerHandleExpUpdate(void); -static void PlayerHandleStatusIconUpdate(void); -static void PlayerHandleStatusAnimation(void); -static void PlayerHandleStatusXor(void); -static void PlayerHandleDataTransfer(void); -static void PlayerHandleDMA3Transfer(void); -static void PlayerHandlePlayBGM(void); -static void PlayerHandleCmd32(void); -static void PlayerHandleTwoReturnValues(void); -static void PlayerHandleChosenMonReturnValue(void); -static void PlayerHandleOneReturnValue(void); -static void PlayerHandleOneReturnValue_Duplicate(void); -static void PlayerHandleClearUnkVar(void); -static void PlayerHandleSetUnkVar(void); -static void PlayerHandleClearUnkFlag(void); -static void PlayerHandleToggleUnkFlag(void); -static void PlayerHandleHitAnimation(void); -static void PlayerHandleCantSwitch(void); -static void PlayerHandlePlaySE(void); -static void PlayerHandlePlayFanfareOrBGM(void); -static void PlayerHandleFaintingCry(void); -static void PlayerHandleIntroSlide(void); -static void PlayerHandleIntroTrainerBallThrow(void); -static void PlayerHandleDrawPartyStatusSummary(void); -static void PlayerHandleHidePartyStatusSummary(void); -static void PlayerHandleEndBounceEffect(void); -static void PlayerHandleSpriteInvisibility(void); -static void PlayerHandleBattleAnimation(void); -static void PlayerHandleLinkStandbyMsg(void); -static void PlayerHandleResetActionMoveSelection(void); -static void PlayerHandleEndLinkBattle(void); -static void PlayerHandleBattleDebug(void); -static void PlayerCmdEnd(void); +static void PlayerBufferExecCompleted(u32 battler); +static void PlayerHandleLoadMonSprite(u32 battler); +static void PlayerHandleSwitchInAnim(u32 battler); +static void PlayerHandleDrawTrainerPic(u32 battler); +static void PlayerHandleTrainerSlide(u32 battler); +static void PlayerHandleTrainerSlideBack(u32 battler); +static void PlayerHandlePaletteFade(u32 battler); +static void PlayerHandleSuccessBallThrowAnim(u32 battler); +static void PlayerHandleBallThrowAnim(u32 battler); +static void PlayerHandlePause(u32 battler); +static void PlayerHandleMoveAnimation(u32 battler); +static void PlayerHandlePrintString(u32 battler); +static void PlayerHandlePrintSelectionString(u32 battler); +static void PlayerHandleChooseAction(u32 battler); +static void PlayerHandleYesNoBox(u32 battler); +static void PlayerHandleChooseMove(u32 battler); +static void PlayerHandleChooseItem(u32 battler); +static void PlayerHandleChoosePokemon(u32 battler); +static void PlayerHandleCmd23(u32 battler); +static void PlayerHandleHealthBarUpdate(u32 battler); +static void PlayerHandleStatusXor(u32 battler); +static void PlayerHandleDMA3Transfer(u32 battler); +static void PlayerHandlePlayBGM(u32 battler); +static void PlayerHandleTwoReturnValues(u32 battler); +static void PlayerHandleChosenMonReturnValue(u32 battler); +static void PlayerHandleOneReturnValue(u32 battler); +static void PlayerHandleOneReturnValue_Duplicate(u32 battler); +static void PlayerHandleIntroTrainerBallThrow(u32 battler); +static void PlayerHandleDrawPartyStatusSummary(u32 battler); +static void PlayerHandleEndBounceEffect(u32 battler); +static void PlayerHandleBattleAnimation(u32 battler); +static void PlayerHandleLinkStandbyMsg(u32 battler); +static void PlayerHandleResetActionMoveSelection(u32 battler); +static void PlayerHandleEndLinkBattle(u32 battler); +static void PlayerHandleBattleDebug(u32 battler); -static void PlayerBufferRunCommand(void); -static void HandleInputChooseTarget(void); -static void HandleInputChooseMove(void); -static void MoveSelectionDisplayPpNumber(void); -static void MoveSelectionDisplayPpString(void); -static void MoveSelectionDisplayMoveType(void); -static void MoveSelectionDisplayMoveNames(void); -static void HandleMoveSwitching(void); -static void SwitchIn_HandleSoundAndEnd(void); -static void WaitForMonSelection(void); -static void CompleteWhenChoseItem(void); +static void PlayerBufferRunCommand(u32 battler); +static void HandleInputChooseTarget(u32 battler); +static void HandleInputChooseMove(u32 battler); +static void MoveSelectionDisplayPpNumber(u32 battler); +static void MoveSelectionDisplayPpString(u32 battler); +static void MoveSelectionDisplayMoveType(u32 battler); +static void MoveSelectionDisplayMoveNames(u32 battler); +static void HandleMoveSwitching(u32 battler); +static void SwitchIn_HandleSoundAndEnd(u32 battler); +static void WaitForMonSelection(u32 battler); +static void CompleteWhenChoseItem(u32 battler); static void Task_LaunchLvlUpAnim(u8); static void Task_PrepareToGiveExpWithExpBar(u8); -static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8); +static void Task_SetControllerToWaitForString(u8); static void Task_GiveExpWithExpBar(u8); static void Task_UpdateLvlInHealthbox(u8); static void PrintLinkStandbyMsg(void); -static u32 CopyPlayerMonData(u8, u8 *); -static void SetPlayerMonData(u8); -static void StartSendOutAnim(u8, bool8); -static void DoSwitchOutAnimation(void); -static void PlayerDoMoveAnimation(void); -static void Task_StartSendOutAnim(u8); -static void EndDrawPartyStatusSummary(void); -static void ReloadMoveNames(void); +static void ReloadMoveNames(u32 battler); -static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = +static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { - [CONTROLLER_GETMONDATA] = PlayerHandleGetMonData, - [CONTROLLER_GETRAWMONDATA] = PlayerHandleGetRawMonData, - [CONTROLLER_SETMONDATA] = PlayerHandleSetMonData, - [CONTROLLER_SETRAWMONDATA] = PlayerHandleSetRawMonData, + [CONTROLLER_GETMONDATA] = BtlController_HandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = BtlController_HandleGetRawMonData, + [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, [CONTROLLER_LOADMONSPRITE] = PlayerHandleLoadMonSprite, [CONTROLLER_SWITCHINANIM] = PlayerHandleSwitchInAnim, - [CONTROLLER_RETURNMONTOBALL] = PlayerHandleReturnMonToBall, + [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = PlayerHandleDrawTrainerPic, [CONTROLLER_TRAINERSLIDE] = PlayerHandleTrainerSlide, [CONTROLLER_TRAINERSLIDEBACK] = PlayerHandleTrainerSlideBack, - [CONTROLLER_FAINTANIMATION] = PlayerHandleFaintAnimation, + [CONTROLLER_FAINTANIMATION] = BtlController_HandleFaintAnimation, [CONTROLLER_PALETTEFADE] = PlayerHandlePaletteFade, [CONTROLLER_SUCCESSBALLTHROWANIM] = PlayerHandleSuccessBallThrowAnim, [CONTROLLER_BALLTHROWANIM] = PlayerHandleBallThrowAnim, @@ -150,105 +121,201 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = [CONTROLLER_23] = PlayerHandleCmd23, [CONTROLLER_HEALTHBARUPDATE] = PlayerHandleHealthBarUpdate, [CONTROLLER_EXPUPDATE] = PlayerHandleExpUpdate, - [CONTROLLER_STATUSICONUPDATE] = PlayerHandleStatusIconUpdate, - [CONTROLLER_STATUSANIMATION] = PlayerHandleStatusAnimation, + [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, [CONTROLLER_STATUSXOR] = PlayerHandleStatusXor, - [CONTROLLER_DATATRANSFER] = PlayerHandleDataTransfer, + [CONTROLLER_DATATRANSFER] = BtlController_Empty, [CONTROLLER_DMA3TRANSFER] = PlayerHandleDMA3Transfer, [CONTROLLER_PLAYBGM] = PlayerHandlePlayBGM, - [CONTROLLER_32] = PlayerHandleCmd32, + [CONTROLLER_32] = BtlController_Empty, [CONTROLLER_TWORETURNVALUES] = PlayerHandleTwoReturnValues, [CONTROLLER_CHOSENMONRETURNVALUE] = PlayerHandleChosenMonReturnValue, [CONTROLLER_ONERETURNVALUE] = PlayerHandleOneReturnValue, [CONTROLLER_ONERETURNVALUE_DUPLICATE] = PlayerHandleOneReturnValue_Duplicate, - [CONTROLLER_CLEARUNKVAR] = PlayerHandleClearUnkVar, - [CONTROLLER_SETUNKVAR] = PlayerHandleSetUnkVar, - [CONTROLLER_CLEARUNKFLAG] = PlayerHandleClearUnkFlag, - [CONTROLLER_TOGGLEUNKFLAG] = PlayerHandleToggleUnkFlag, - [CONTROLLER_HITANIMATION] = PlayerHandleHitAnimation, - [CONTROLLER_CANTSWITCH] = PlayerHandleCantSwitch, - [CONTROLLER_PLAYSE] = PlayerHandlePlaySE, - [CONTROLLER_PLAYFANFAREORBGM] = PlayerHandlePlayFanfareOrBGM, - [CONTROLLER_FAINTINGCRY] = PlayerHandleFaintingCry, - [CONTROLLER_INTROSLIDE] = PlayerHandleIntroSlide, + [CONTROLLER_CLEARUNKVAR] = BtlController_HandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = BtlController_HandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = BtlController_HandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = BtlController_HandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, + [CONTROLLER_CANTSWITCH] = BtlController_Empty, + [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = BtlController_HandleFaintingCry, + [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, [CONTROLLER_INTROTRAINERBALLTHROW] = PlayerHandleIntroTrainerBallThrow, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = PlayerHandleDrawPartyStatusSummary, - [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = PlayerHandleHidePartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, [CONTROLLER_ENDBOUNCE] = PlayerHandleEndBounceEffect, - [CONTROLLER_SPRITEINVISIBILITY] = PlayerHandleSpriteInvisibility, + [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, [CONTROLLER_BATTLEANIMATION] = PlayerHandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = PlayerHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = PlayerHandleResetActionMoveSelection, [CONTROLLER_ENDLINKBATTLE] = PlayerHandleEndLinkBattle, [CONTROLLER_DEBUGMENU] = PlayerHandleBattleDebug, - [CONTROLLER_TERMINATOR_NOP] = PlayerCmdEnd + [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; -// unknown unused data -static const u8 sUnused[] = {0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58}; +static EWRAM_DATA bool8 sAckBallUseBtn = FALSE; +static EWRAM_DATA bool8 sBallSwapped = FALSE; -void BattleControllerDummy(void) +void SetControllerToPlayer(u32 battler) { -} - -void SetControllerToPlayer(void) -{ - gBattlerControllerFuncs[gActiveBattler] = PlayerBufferRunCommand; + gBattlerControllerEndFuncs[battler] = PlayerBufferExecCompleted; + gBattlerControllerFuncs[battler] = PlayerBufferRunCommand; gDoingBattleAnim = FALSE; gPlayerDpadHoldFrames = 0; } -static void PlayerBufferExecCompleted(void) +static void PlayerBufferExecCompleted(u32 battler) { - gBattlerControllerFuncs[gActiveBattler] = PlayerBufferRunCommand; + gBattlerControllerFuncs[battler] = PlayerBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP; } else { - gBattleControllerExecFlags &= ~gBitTable[gActiveBattler]; + gBattleControllerExecFlags &= ~gBitTable[battler]; } } -static void PlayerBufferRunCommand(void) +static void PlayerBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) + if (gBattleControllerExecFlags & gBitTable[battler]) { - if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sPlayerBufferCommands)) - sPlayerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sPlayerBufferCommands)) + sPlayerBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } } -static void CompleteOnBankSpritePosX_0(void) +static void CompleteOnBattlerSpritePosX_0(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].x2 == 0) - PlayerBufferExecCompleted(); + if (gSprites[gBattlerSpriteIds[battler]].x2 == 0) + PlayerBufferExecCompleted(battler); } -static void HandleInputChooseAction(void) +static u16 GetPrevBall(u16 ballId) { - u16 itemId = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); + u16 ballPrev; + u32 i, j; + CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]); + for (i = 0; i < gBagPockets[BALLS_POCKET].capacity; i++) + { + if (ballId == gBagPockets[BALLS_POCKET].itemSlots[i].itemId) + { + if (i <= 0) + { + for (j = gBagPockets[BALLS_POCKET].capacity - 1; j >= 0; j--) + { + ballPrev = gBagPockets[BALLS_POCKET].itemSlots[j].itemId; + if (ballPrev != ITEM_NONE) + return ballPrev; + } + } + i--; + return gBagPockets[BALLS_POCKET].itemSlots[i].itemId; + } + } +} - DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); - DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); +static u16 GetNextBall(u16 ballId) +{ + u16 ballNext; + u32 i; + CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]); + for (i = 0; i < gBagPockets[BALLS_POCKET].capacity; i++) + { + if (ballId == gBagPockets[BALLS_POCKET].itemSlots[i].itemId) + { + i++; + ballNext = gBagPockets[BALLS_POCKET].itemSlots[i].itemId; + if (ballNext == ITEM_NONE) + return gBagPockets[BALLS_POCKET].itemSlots[0].itemId; // Zeroth slot + else + return ballNext; + } + } +} + +static void HandleInputChooseAction(u32 battler) +{ + u16 itemId = gBattleResources->bufferA[battler][2] | (gBattleResources->bufferA[battler][3] << 8); + + DoBounceEffect(battler, BOUNCE_HEALTHBOX, 7, 1); + DoBounceEffect(battler, BOUNCE_MON, 7, 1); if (JOY_REPEAT(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; else gPlayerDpadHoldFrames = 0; +#if B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == TRUE + if (!gLastUsedBallMenuPresent) + { + sAckBallUseBtn = FALSE; + } + else if (JOY_NEW(B_LAST_USED_BALL_BUTTON)) + { + sAckBallUseBtn = TRUE; + sBallSwapped = FALSE; + ArrowsChangeColorLastBallCycle(TRUE); + } + if (sAckBallUseBtn) + { + if (JOY_HELD(B_LAST_USED_BALL_BUTTON) && (JOY_NEW(DPAD_DOWN) || JOY_NEW(DPAD_RIGHT))) + { + bool8 sameBall = FALSE; + u16 nextBall = GetNextBall(gBallToDisplay); + sBallSwapped = TRUE; + if (gBallToDisplay == nextBall) + sameBall = TRUE; + else + gBallToDisplay = nextBall; + SwapBallToDisplay(sameBall); + PlaySE(SE_SELECT); + } + else if (JOY_HELD(B_LAST_USED_BALL_BUTTON) && (JOY_NEW(DPAD_UP) || JOY_NEW(DPAD_LEFT))) + { + bool8 sameBall = FALSE; + u16 prevBall = GetPrevBall(gBallToDisplay); + sBallSwapped = TRUE; + if (gBallToDisplay == prevBall) + sameBall = TRUE; + else + gBallToDisplay = prevBall; + SwapBallToDisplay(sameBall); + PlaySE(SE_SELECT); + } + else if (JOY_NEW(B_BUTTON) || (!JOY_HELD(B_LAST_USED_BALL_BUTTON) && sBallSwapped)) + { + sAckBallUseBtn = FALSE; + sBallSwapped = FALSE; + ArrowsChangeColorLastBallCycle(FALSE); + } + else if (!JOY_HELD(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall()) + { + sAckBallUseBtn = FALSE; + PlaySE(SE_SELECT); + ArrowsChangeColorLastBallCycle(FALSE); + TryHideLastUsedBall(); + BtlController_EmitTwoReturnValues(1, B_ACTION_THROW_BALL, 0); + PlayerBufferExecCompleted(battler); + } + return; + } +#endif + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); TryHideLastUsedBall(); - switch (gActionSelectionCursor[gActiveBattler]) + switch (gActionSelectionCursor[battler]) { case 0: // Top left BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_MOVE, 0); @@ -263,63 +330,63 @@ static void HandleInputChooseAction(void) BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_RUN, 0); break; } - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } else if (JOY_NEW(DPAD_LEFT)) { - if (gActionSelectionCursor[gActiveBattler] & 1) // if is B_ACTION_USE_ITEM or B_ACTION_RUN + if (gActionSelectionCursor[battler] & 1) // if is B_ACTION_USE_ITEM or B_ACTION_RUN { PlaySE(SE_SELECT); - ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]); - gActionSelectionCursor[gActiveBattler] ^= 1; - ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + ActionSelectionDestroyCursorAt(gActionSelectionCursor[battler]); + gActionSelectionCursor[battler] ^= 1; + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); } } else if (JOY_NEW(DPAD_RIGHT)) { - if (!(gActionSelectionCursor[gActiveBattler] & 1)) // if is B_ACTION_USE_MOVE or B_ACTION_SWITCH + if (!(gActionSelectionCursor[battler] & 1)) // if is B_ACTION_USE_MOVE or B_ACTION_SWITCH { PlaySE(SE_SELECT); - ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]); - gActionSelectionCursor[gActiveBattler] ^= 1; - ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + ActionSelectionDestroyCursorAt(gActionSelectionCursor[battler]); + gActionSelectionCursor[battler] ^= 1; + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); } } else if (JOY_NEW(DPAD_UP)) { - if (gActionSelectionCursor[gActiveBattler] & 2) // if is B_ACTION_SWITCH or B_ACTION_RUN + if (gActionSelectionCursor[battler] & 2) // if is B_ACTION_SWITCH or B_ACTION_RUN { PlaySE(SE_SELECT); - ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]); - gActionSelectionCursor[gActiveBattler] ^= 2; - ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + ActionSelectionDestroyCursorAt(gActionSelectionCursor[battler]); + gActionSelectionCursor[battler] ^= 2; + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); } } else if (JOY_NEW(DPAD_DOWN)) { - if (!(gActionSelectionCursor[gActiveBattler] & 2)) // if is B_ACTION_USE_MOVE or B_ACTION_USE_ITEM + if (!(gActionSelectionCursor[battler] & 2)) // if is B_ACTION_USE_MOVE or B_ACTION_USE_ITEM { PlaySE(SE_SELECT); - ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]); - gActionSelectionCursor[gActiveBattler] ^= 2; - ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + ActionSelectionDestroyCursorAt(gActionSelectionCursor[battler]); + gActionSelectionCursor[battler] ^= 2; + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); } } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT + && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT && !(gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { // Return item to bag if partner had selected one. - if (gBattleResources->bufferA[gActiveBattler][1] == B_ACTION_USE_ITEM) + if (gBattleResources->bufferA[battler][1] == B_ACTION_USE_ITEM) { AddBagItem(itemId, 1); } PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_CANCEL_PARTNER, 0); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } } else if (JOY_NEW(START_BUTTON)) @@ -330,33 +397,26 @@ static void HandleInputChooseAction(void) else if (JOY_NEW(SELECT_BUTTON)) { BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_DEBUG, 0); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } #endif -#if B_LAST_USED_BALL == TRUE +#if B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == FALSE else if (JOY_NEW(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall()) { PlaySE(SE_SELECT); TryHideLastUsedBall(); BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_THROW_BALL, 0); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } #endif } -static void UnusedEndBounceEffect(void) -{ - EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX); - EndBounceEffect(gActiveBattler, BOUNCE_MON); - gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget; -} - -static void HandleInputChooseTarget(void) +static void HandleInputChooseTarget(u32 battler) { s32 i; static const u8 identities[MAX_BATTLERS_COUNT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT}; - u16 move = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler]); - u16 moveTarget = GetBattlerMoveTargetType(gActiveBattler, move); + u16 move = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_MOVE1 + gMoveSelectionCursor[battler]); + u16 moveTarget = GetBattlerMoveTargetType(battler, move); DoBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX, 15, 1); for (i = 0; i < gBattlersCount; i++) @@ -375,21 +435,23 @@ static void HandleInputChooseTarget(void) PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget; if (gBattleStruct->mega.playerSelect) - BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + else if (gBattleStruct->burst.playerSelect) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8)); else - BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); TryHideLastUsedBall(); HideTriggerSprites(); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget; - gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; - DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); - DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); + gBattlerControllerFuncs[battler] = HandleInputChooseMove; + DoBounceEffect(battler, BOUNCE_HEALTHBOX, 7, 1); + DoBounceEffect(battler, BOUNCE_MON, 7, 1); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); } else if (JOY_NEW(DPAD_LEFT | DPAD_UP)) @@ -424,7 +486,7 @@ static void HandleInputChooseTarget(void) { case B_POSITION_PLAYER_LEFT: case B_POSITION_PLAYER_RIGHT: - if (gActiveBattler != gMultiUsePlayerCursor) + if (battler != gMultiUsePlayerCursor) i++; else if (moveTarget & MOVE_TARGET_USER_OR_SELECTED) i++; @@ -436,7 +498,7 @@ static void HandleInputChooseTarget(void) } if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor] - || !CanTargetBattler(gActiveBattler, gMultiUsePlayerCursor, move)) + || !CanTargetBattler(battler, gMultiUsePlayerCursor, move)) i = 0; } while (i == 0); } @@ -474,7 +536,7 @@ static void HandleInputChooseTarget(void) { case B_POSITION_PLAYER_LEFT: case B_POSITION_PLAYER_RIGHT: - if (gActiveBattler != gMultiUsePlayerCursor) + if (battler != gMultiUsePlayerCursor) i++; else if (moveTarget & MOVE_TARGET_USER_OR_SELECTED) i++; @@ -486,7 +548,7 @@ static void HandleInputChooseTarget(void) } if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor] - || !CanTargetBattler(gActiveBattler, gMultiUsePlayerCursor, move)) + || !CanTargetBattler(battler, gMultiUsePlayerCursor, move)) i = 0; } while (i == 0); } @@ -508,12 +570,12 @@ static void HideAllTargets(void) } } -static void HideShownTargets(void) +static void HideShownTargets(u32 battler) { s32 i; for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - if (IsBattlerAlive(i) && gBattleSpritesDataPtr->healthBoxesData[i].healthboxIsBouncing && i != gActiveBattler) + if (IsBattlerAlive(i) && gBattleSpritesDataPtr->healthBoxesData[i].healthboxIsBouncing && i != battler) { gSprites[gBattlerSpriteIds[i]].callback = SpriteCB_HideAsMoveTarget; EndBounceEffect(i, BOUNCE_HEALTHBOX); @@ -521,7 +583,7 @@ static void HideShownTargets(void) } } -static void HandleInputShowEntireFieldTargets(void) +static void HandleInputShowEntireFieldTargets(u32 battler) { if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; @@ -533,23 +595,25 @@ static void HandleInputShowEntireFieldTargets(void) PlaySE(SE_SELECT); HideAllTargets(); if (gBattleStruct->mega.playerSelect) - BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + else if (gBattleStruct->burst.playerSelect) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8)); else - BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); - HideMegaTriggerSprite(); - PlayerBufferExecCompleted(); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); + HideTriggerSprites(); + PlayerBufferExecCompleted(battler); } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { PlaySE(SE_SELECT); HideAllTargets(); - gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; - DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); - DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); + gBattlerControllerFuncs[battler] = HandleInputChooseMove; + DoBounceEffect(battler, BOUNCE_HEALTHBOX, 7, 1); + DoBounceEffect(battler, BOUNCE_MON, 7, 1); } } -static void HandleInputShowTargets(void) +static void HandleInputShowTargets(u32 battler) { if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; @@ -559,22 +623,24 @@ static void HandleInputShowTargets(void) if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - HideShownTargets(); + HideShownTargets(battler); if (gBattleStruct->mega.playerSelect) - BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + else if (gBattleStruct->burst.playerSelect) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8)); else - BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); HideTriggerSprites(); TryHideLastUsedBall(); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { PlaySE(SE_SELECT); - HideShownTargets(); - gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; - DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); - DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); + HideShownTargets(battler); + gBattlerControllerFuncs[battler] = HandleInputChooseMove; + DoBounceEffect(battler, BOUNCE_HEALTHBOX, 7, 1); + DoBounceEffect(battler, BOUNCE_MON, 7, 1); } } @@ -587,11 +653,11 @@ static void TryShowAsTarget(u32 battlerId) } } -static void HandleInputChooseMove(void) +static void HandleInputChooseMove(u32 battler) { u16 moveTarget; u32 canSelectTarget = 0; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; @@ -601,7 +667,7 @@ static void HandleInputChooseMove(void) if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - if (moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] == MOVE_CURSE) + if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_CURSE) { if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST && moveInfo->monType3 != TYPE_GHOST) moveTarget = MOVE_TARGET_USER; @@ -610,43 +676,43 @@ static void HandleInputChooseMove(void) } else { - moveTarget = GetBattlerMoveTargetType(gActiveBattler, moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]); + moveTarget = GetBattlerMoveTargetType(battler, moveInfo->moves[gMoveSelectionCursor[battler]]); } if (gBattleStruct->zmove.viewing) { - u16 chosenMove = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]; + u16 chosenMove = moveInfo->moves[gMoveSelectionCursor[battler]]; - QueueZMove(gActiveBattler, chosenMove); + QueueZMove(battler, chosenMove); gBattleStruct->zmove.viewing = FALSE; - if (gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].split != SPLIT_STATUS) + if (gBattleMoves[moveInfo->moves[gMoveSelectionCursor[battler]]].split != SPLIT_STATUS) moveTarget = MOVE_TARGET_SELECTED; //damaging z moves always have selected target } if (moveTarget & MOVE_TARGET_USER) - gMultiUsePlayerCursor = gActiveBattler; + gMultiUsePlayerCursor = battler; else - gMultiUsePlayerCursor = GetBattlerAtPosition(BATTLE_OPPOSITE(GET_BATTLER_SIDE(gActiveBattler))); + gMultiUsePlayerCursor = GetBattlerAtPosition(BATTLE_OPPOSITE(GET_BATTLER_SIDE(battler))); - if (!gBattleResources->bufferA[gActiveBattler][1]) // not a double battle + if (!gBattleResources->bufferA[battler][1]) // not a double battle { - if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleResources->bufferA[gActiveBattler][2]) + if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleResources->bufferA[battler][2]) canSelectTarget = 1; } else // double battle { if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER | MOVE_TARGET_ALLY))) canSelectTarget = 1; // either selected or user - if (moveTarget == (MOVE_TARGET_USER | MOVE_TARGET_ALLY) && IsBattlerAlive(BATTLE_PARTNER(gActiveBattler))) + if (moveTarget == (MOVE_TARGET_USER | MOVE_TARGET_ALLY) && IsBattlerAlive(BATTLE_PARTNER(battler))) canSelectTarget = 1; - if (moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]] == 0) + if (moveInfo->currentPp[gMoveSelectionCursor[battler]] == 0) { canSelectTarget = 0; } else if (!(moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1) { - gMultiUsePlayerCursor = GetDefaultMoveTarget(gActiveBattler); + gMultiUsePlayerCursor = GetDefaultMoveTarget(battler); canSelectTarget = 0; } @@ -665,7 +731,7 @@ static void HandleInputChooseMove(void) TryShowAsTarget(gMultiUsePlayerCursor); TryShowAsTarget(BATTLE_PARTNER(gMultiUsePlayerCursor)); if (moveTarget & MOVE_TARGET_FOES_AND_ALLY) - TryShowAsTarget(BATTLE_PARTNER(gActiveBattler)); + TryShowAsTarget(BATTLE_PARTNER(battler)); canSelectTarget = 2; } #endif @@ -676,18 +742,20 @@ static void HandleInputChooseMove(void) case 0: default: if (gBattleStruct->mega.playerSelect) - BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + else if (gBattleStruct->burst.playerSelect) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8)); else - BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); HideTriggerSprites(); TryHideLastUsedBall(); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); break; case 1: - gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget; + gBattlerControllerFuncs[battler] = HandleInputChooseTarget; if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) - gMultiUsePlayerCursor = gActiveBattler; + gMultiUsePlayerCursor = battler; else if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]) gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); else @@ -696,10 +764,10 @@ static void HandleInputChooseMove(void) gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget; break; case 2: - gBattlerControllerFuncs[gActiveBattler] = HandleInputShowTargets; + gBattlerControllerFuncs[battler] = HandleInputShowTargets; break; case 3: // Entire field - gBattlerControllerFuncs[gActiveBattler] = HandleInputShowEntireFieldTargets; + gBattlerControllerFuncs[battler] = HandleInputShowEntireFieldTargets; break; } } @@ -708,95 +776,102 @@ static void HandleInputChooseMove(void) PlaySE(SE_SELECT); if (gBattleStruct->zmove.viewing) { - ReloadMoveNames(); + ReloadMoveNames(battler); } else { gBattleStruct->mega.playerSelect = FALSE; + gBattleStruct->burst.playerSelect = FALSE; gBattleStruct->zmove.viable = FALSE; BtlController_EmitTwoReturnValues(BUFFER_B, 10, 0xFFFF); HideTriggerSprites(); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } } else if (JOY_NEW(DPAD_LEFT) && !gBattleStruct->zmove.viewing) { - if (gMoveSelectionCursor[gActiveBattler] & 1) + if (gMoveSelectionCursor[battler] & 1) { - MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); - gMoveSelectionCursor[gActiveBattler] ^= 1; + MoveSelectionDestroyCursorAt(gMoveSelectionCursor[battler]); + gMoveSelectionCursor[battler] ^= 1; PlaySE(SE_SELECT); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); - MoveSelectionDisplayPpNumber(); - MoveSelectionDisplayMoveType(); - TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + MoveSelectionDisplayPpNumber(battler); + MoveSelectionDisplayMoveType(battler); + TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } else if (JOY_NEW(DPAD_RIGHT) && !gBattleStruct->zmove.viewing) { - if (!(gMoveSelectionCursor[gActiveBattler] & 1) - && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose) + if (!(gMoveSelectionCursor[battler] & 1) + && (gMoveSelectionCursor[battler] ^ 1) < gNumberOfMovesToChoose) { - MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); - gMoveSelectionCursor[gActiveBattler] ^= 1; + MoveSelectionDestroyCursorAt(gMoveSelectionCursor[battler]); + gMoveSelectionCursor[battler] ^= 1; PlaySE(SE_SELECT); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); - MoveSelectionDisplayPpNumber(); - MoveSelectionDisplayMoveType(); - TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + MoveSelectionDisplayPpNumber(battler); + MoveSelectionDisplayMoveType(battler); + TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } else if (JOY_NEW(DPAD_UP) && !gBattleStruct->zmove.viewing) { - if (gMoveSelectionCursor[gActiveBattler] & 2) + if (gMoveSelectionCursor[battler] & 2) { - MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); - gMoveSelectionCursor[gActiveBattler] ^= 2; + MoveSelectionDestroyCursorAt(gMoveSelectionCursor[battler]); + gMoveSelectionCursor[battler] ^= 2; PlaySE(SE_SELECT); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); - MoveSelectionDisplayPpNumber(); - MoveSelectionDisplayMoveType(); - TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + MoveSelectionDisplayPpNumber(battler); + MoveSelectionDisplayMoveType(battler); + TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } else if (JOY_NEW(DPAD_DOWN) && !gBattleStruct->zmove.viewing) { - if (!(gMoveSelectionCursor[gActiveBattler] & 2) - && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose) + if (!(gMoveSelectionCursor[battler] & 2) + && (gMoveSelectionCursor[battler] ^ 2) < gNumberOfMovesToChoose) { - MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); - gMoveSelectionCursor[gActiveBattler] ^= 2; + MoveSelectionDestroyCursorAt(gMoveSelectionCursor[battler]); + gMoveSelectionCursor[battler] ^= 2; PlaySE(SE_SELECT); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); - MoveSelectionDisplayPpNumber(); - MoveSelectionDisplayMoveType(); - TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + MoveSelectionDisplayPpNumber(battler); + MoveSelectionDisplayMoveType(battler); + TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing) { if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 29); - if (gMoveSelectionCursor[gActiveBattler] != 0) + if (gMoveSelectionCursor[battler] != 0) gMultiUsePlayerCursor = 0; else - gMultiUsePlayerCursor = gMoveSelectionCursor[gActiveBattler] + 1; + gMultiUsePlayerCursor = gMoveSelectionCursor[battler] + 1; MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); BattlePutTextOnWindow(gText_BattleSwitchWhich, B_WIN_SWITCH_PROMPT); - gBattlerControllerFuncs[gActiveBattler] = HandleMoveSwitching; + gBattlerControllerFuncs[battler] = HandleMoveSwitching; } } else if (JOY_NEW(START_BUTTON)) { - if (CanMegaEvolve(gActiveBattler)) + if (CanMegaEvolve(battler)) { gBattleStruct->mega.playerSelect ^= 1; ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, gBattleStruct->mega.playerSelect); PlaySE(SE_SELECT); } + else if (CanUltraBurst(gActiveBattler)) + { + gBattleStruct->burst.playerSelect ^= 1; + ChangeBurstTriggerSprite(gBattleStruct->burst.triggerSpriteId, gBattleStruct->burst.playerSelect); + PlaySE(SE_SELECT); + } else if (gBattleStruct->zmove.viable) { // show z move name / info @@ -805,23 +880,24 @@ static void HandleInputChooseMove(void) if (!gBattleStruct->zmove.viewing) MoveSelectionDisplayZMove(gBattleStruct->zmove.chosenZMove); else - ReloadMoveNames(); + ReloadMoveNames(battler); } } } -static void ReloadMoveNames(void) +static void ReloadMoveNames(u32 battler) { gBattleStruct->mega.playerSelect = FALSE; + gBattleStruct->burst.playerSelect = FALSE; gBattleStruct->zmove.viewing = FALSE; - MoveSelectionDestroyCursorAt(0); - MoveSelectionDisplayMoveNames(); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); - MoveSelectionDisplayPpNumber(); - MoveSelectionDisplayMoveType(); + MoveSelectionDestroyCursorAt(battler); + MoveSelectionDisplayMoveNames(battler); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + MoveSelectionDisplayPpNumber(battler); + MoveSelectionDisplayMoveType(battler); } -static u32 HandleMoveInputUnused(void) +static u32 HandleMoveInputUnused(u32 battler) { u32 var = 0; @@ -837,41 +913,41 @@ static u32 HandleMoveInputUnused(void) gBattle_BG0_Y = DISPLAY_HEIGHT * 2; var = 0xFF; } - if (JOY_NEW(DPAD_LEFT) && gMoveSelectionCursor[gActiveBattler] & 1) + if (JOY_NEW(DPAD_LEFT) && gMoveSelectionCursor[battler] & 1) { - MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); - gMoveSelectionCursor[gActiveBattler] ^= 1; + MoveSelectionDestroyCursorAt(gMoveSelectionCursor[battler]); + gMoveSelectionCursor[battler] ^= 1; PlaySE(SE_SELECT); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); } - if (JOY_NEW(DPAD_RIGHT) && !(gMoveSelectionCursor[gActiveBattler] & 1) - && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose) + if (JOY_NEW(DPAD_RIGHT) && !(gMoveSelectionCursor[battler] & 1) + && (gMoveSelectionCursor[battler] ^ 1) < gNumberOfMovesToChoose) { - MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); - gMoveSelectionCursor[gActiveBattler] ^= 1; + MoveSelectionDestroyCursorAt(gMoveSelectionCursor[battler]); + gMoveSelectionCursor[battler] ^= 1; PlaySE(SE_SELECT); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); } - if (JOY_NEW(DPAD_UP) && gMoveSelectionCursor[gActiveBattler] & 2) + if (JOY_NEW(DPAD_UP) && gMoveSelectionCursor[battler] & 2) { - MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); - gMoveSelectionCursor[gActiveBattler] ^= 2; + MoveSelectionDestroyCursorAt(gMoveSelectionCursor[battler]); + gMoveSelectionCursor[battler] ^= 2; PlaySE(SE_SELECT); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); } - if (JOY_NEW(DPAD_DOWN) && !(gMoveSelectionCursor[gActiveBattler] & 2) - && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose) + if (JOY_NEW(DPAD_DOWN) && !(gMoveSelectionCursor[battler] & 2) + && (gMoveSelectionCursor[battler] ^ 2) < gNumberOfMovesToChoose) { - MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); - gMoveSelectionCursor[gActiveBattler] ^= 2; + MoveSelectionDestroyCursorAt(gMoveSelectionCursor[battler]); + gMoveSelectionCursor[battler] ^= 2; PlaySE(SE_SELECT); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); } return var; } -static void HandleMoveSwitching(void) +static void HandleMoveSwitching(u32 battler) { u8 perMovePPBonuses[MAX_MON_MOVES]; struct ChooseMoveStruct moveStruct; @@ -879,76 +955,76 @@ static void HandleMoveSwitching(void) if (JOY_NEW(A_BUTTON | SELECT_BUTTON)) { - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); PlaySE(SE_SELECT); - if (gMoveSelectionCursor[gActiveBattler] != gMultiUsePlayerCursor) + if (gMoveSelectionCursor[battler] != gMultiUsePlayerCursor) { - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); s32 i; // swap moves and pp - i = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]; - moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] = moveInfo->moves[gMultiUsePlayerCursor]; + i = moveInfo->moves[gMoveSelectionCursor[battler]]; + moveInfo->moves[gMoveSelectionCursor[battler]] = moveInfo->moves[gMultiUsePlayerCursor]; moveInfo->moves[gMultiUsePlayerCursor] = i; - i = moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]]; - moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]] = moveInfo->currentPp[gMultiUsePlayerCursor]; + i = moveInfo->currentPp[gMoveSelectionCursor[battler]]; + moveInfo->currentPp[gMoveSelectionCursor[battler]] = moveInfo->currentPp[gMultiUsePlayerCursor]; moveInfo->currentPp[gMultiUsePlayerCursor] = i; - i = moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]]; - moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]] = moveInfo->maxPp[gMultiUsePlayerCursor]; + i = moveInfo->maxPp[gMoveSelectionCursor[battler]]; + moveInfo->maxPp[gMoveSelectionCursor[battler]] = moveInfo->maxPp[gMultiUsePlayerCursor]; moveInfo->maxPp[gMultiUsePlayerCursor] = i; - if (gDisableStructs[gActiveBattler].mimickedMoves & gBitTable[gMoveSelectionCursor[gActiveBattler]]) + if (gDisableStructs[battler].mimickedMoves & gBitTable[gMoveSelectionCursor[battler]]) { - gDisableStructs[gActiveBattler].mimickedMoves &= (~gBitTable[gMoveSelectionCursor[gActiveBattler]]); - gDisableStructs[gActiveBattler].mimickedMoves |= gBitTable[gMultiUsePlayerCursor]; + gDisableStructs[battler].mimickedMoves &= (~gBitTable[gMoveSelectionCursor[battler]]); + gDisableStructs[battler].mimickedMoves |= gBitTable[gMultiUsePlayerCursor]; } - MoveSelectionDisplayMoveNames(); + MoveSelectionDisplayMoveNames(battler); for (i = 0; i < MAX_MON_MOVES; i++) - perMovePPBonuses[i] = (gBattleMons[gActiveBattler].ppBonuses & (3 << (i * 2))) >> (i * 2); + perMovePPBonuses[i] = (gBattleMons[battler].ppBonuses & (3 << (i * 2))) >> (i * 2); - totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]]; - perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]] = perMovePPBonuses[gMultiUsePlayerCursor]; + totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[battler]]; + perMovePPBonuses[gMoveSelectionCursor[battler]] = perMovePPBonuses[gMultiUsePlayerCursor]; perMovePPBonuses[gMultiUsePlayerCursor] = totalPPBonuses; totalPPBonuses = 0; for (i = 0; i < MAX_MON_MOVES; i++) totalPPBonuses |= perMovePPBonuses[i] << (i * 2); - gBattleMons[gActiveBattler].ppBonuses = totalPPBonuses; + gBattleMons[battler].ppBonuses = totalPPBonuses; for (i = 0; i < MAX_MON_MOVES; i++) { - gBattleMons[gActiveBattler].moves[i] = moveInfo->moves[i]; - gBattleMons[gActiveBattler].pp[i] = moveInfo->currentPp[i]; + gBattleMons[battler].moves[i] = moveInfo->moves[i]; + gBattleMons[battler].pp[i] = moveInfo->currentPp[i]; } - if (!(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED)) + if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) { for (i = 0; i < MAX_MON_MOVES; i++) { - moveStruct.moves[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + i); - moveStruct.currentPp[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP1 + i); + moveStruct.moves[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_MOVE1 + i); + moveStruct.currentPp[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_PP1 + i); } - totalPPBonuses = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP_BONUSES); + totalPPBonuses = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_PP_BONUSES); for (i = 0; i < MAX_MON_MOVES; i++) perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2); - i = moveStruct.moves[gMoveSelectionCursor[gActiveBattler]]; - moveStruct.moves[gMoveSelectionCursor[gActiveBattler]] = moveStruct.moves[gMultiUsePlayerCursor]; + i = moveStruct.moves[gMoveSelectionCursor[battler]]; + moveStruct.moves[gMoveSelectionCursor[battler]] = moveStruct.moves[gMultiUsePlayerCursor]; moveStruct.moves[gMultiUsePlayerCursor] = i; - i = moveStruct.currentPp[gMoveSelectionCursor[gActiveBattler]]; - moveStruct.currentPp[gMoveSelectionCursor[gActiveBattler]] = moveStruct.currentPp[gMultiUsePlayerCursor]; + i = moveStruct.currentPp[gMoveSelectionCursor[battler]]; + moveStruct.currentPp[gMoveSelectionCursor[battler]] = moveStruct.currentPp[gMultiUsePlayerCursor]; moveStruct.currentPp[gMultiUsePlayerCursor] = i; - totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]]; - perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]] = perMovePPBonuses[gMultiUsePlayerCursor]; + totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[battler]]; + perMovePPBonuses[gMoveSelectionCursor[battler]] = perMovePPBonuses[gMultiUsePlayerCursor]; perMovePPBonuses[gMultiUsePlayerCursor] = totalPPBonuses; totalPPBonuses = 0; @@ -957,45 +1033,45 @@ static void HandleMoveSwitching(void) for (i = 0; i < MAX_MON_MOVES; i++) { - SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + i, &moveStruct.moves[i]); - SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP1 + i, &moveStruct.currentPp[i]); + SetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_MOVE1 + i, &moveStruct.moves[i]); + SetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_PP1 + i, &moveStruct.currentPp[i]); } - SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP_BONUSES, &totalPPBonuses); + SetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_PP_BONUSES, &totalPPBonuses); } } - gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; - gMoveSelectionCursor[gActiveBattler] = gMultiUsePlayerCursor; - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); - MoveSelectionDisplayPpString(); - MoveSelectionDisplayPpNumber(); - MoveSelectionDisplayMoveType(); - GetUsableZMoves(gActiveBattler, moveInfo->moves); + gBattlerControllerFuncs[battler] = HandleInputChooseMove; + gMoveSelectionCursor[battler] = gMultiUsePlayerCursor; + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + MoveSelectionDisplayPpString(battler); + MoveSelectionDisplayPpNumber(battler); + MoveSelectionDisplayMoveType(battler); + GetUsableZMoves(battler, moveInfo->moves); } else if (JOY_NEW(B_BUTTON | SELECT_BUTTON)) { PlaySE(SE_SELECT); MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); - gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; - MoveSelectionDisplayPpString(); - MoveSelectionDisplayPpNumber(); - MoveSelectionDisplayMoveType(); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + gBattlerControllerFuncs[battler] = HandleInputChooseMove; + MoveSelectionDisplayPpString(battler); + MoveSelectionDisplayPpNumber(battler); + MoveSelectionDisplayMoveType(battler); } else if (JOY_NEW(DPAD_LEFT)) { if (gMultiUsePlayerCursor & 1) { - if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler]) - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29); + if (gMultiUsePlayerCursor == gMoveSelectionCursor[battler]) + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 29); else MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor); gMultiUsePlayerCursor ^= 1; PlaySE(SE_SELECT); - if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler]) + if (gMultiUsePlayerCursor == gMoveSelectionCursor[battler]) MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0); else MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); @@ -1005,15 +1081,15 @@ static void HandleMoveSwitching(void) { if (!(gMultiUsePlayerCursor & 1) && (gMultiUsePlayerCursor ^ 1) < gNumberOfMovesToChoose) { - if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler]) - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29); + if (gMultiUsePlayerCursor == gMoveSelectionCursor[battler]) + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 29); else MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor); gMultiUsePlayerCursor ^= 1; PlaySE(SE_SELECT); - if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler]) + if (gMultiUsePlayerCursor == gMoveSelectionCursor[battler]) MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0); else MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); @@ -1023,15 +1099,15 @@ static void HandleMoveSwitching(void) { if (gMultiUsePlayerCursor & 2) { - if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler]) - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29); + if (gMultiUsePlayerCursor == gMoveSelectionCursor[battler]) + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 29); else MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor); gMultiUsePlayerCursor ^= 2; PlaySE(SE_SELECT); - if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler]) + if (gMultiUsePlayerCursor == gMoveSelectionCursor[battler]) MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0); else MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); @@ -1041,15 +1117,15 @@ static void HandleMoveSwitching(void) { if (!(gMultiUsePlayerCursor & 2) && (gMultiUsePlayerCursor ^ 2) < gNumberOfMovesToChoose) { - if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler]) - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29); + if (gMultiUsePlayerCursor == gMoveSelectionCursor[battler]) + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 29); else MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor); gMultiUsePlayerCursor ^= 2; PlaySE(SE_SELECT); - if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler]) + if (gMultiUsePlayerCursor == gMoveSelectionCursor[battler]) MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0); else MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); @@ -1057,7 +1133,7 @@ static void HandleMoveSwitching(void) } } -static void SetLinkBattleEndCallbacks(void) +static void SetLinkBattleEndCallbacks(u32 battler) { if (gWirelessCommType == 0) { @@ -1088,7 +1164,7 @@ static void SetLinkBattleEndCallbacks(void) } // Despite handling link battles separately, this is only ever used by link battles -void SetBattleEndCallbacks(void) +void SetBattleEndCallbacks(u32 battler) { if (!gPaletteFade.active) { @@ -1101,7 +1177,7 @@ void SetBattleEndCallbacks(void) else SetLinkStandbyCallback(); - gBattlerControllerFuncs[gActiveBattler] = SetLinkBattleEndCallbacks; + gBattlerControllerFuncs[battler] = SetLinkBattleEndCallbacks; } } else @@ -1114,148 +1190,120 @@ void SetBattleEndCallbacks(void) } } -static void CompleteOnBattlerSpriteCallbackDummy(void) +static void Intro_DelayAndEnd(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - PlayerBufferExecCompleted(); -} - -static void CompleteOnBankSpriteCallbackDummy2(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - PlayerBufferExecCompleted(); -} - -static void FreeTrainerSpriteAfterSlide(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) { - BattleGfxSfxDummy3(gSaveBlock2Ptr->playerGender); - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - PlayerBufferExecCompleted(); + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; + PlayerBufferExecCompleted(battler); } } -static void Intro_DelayAndEnd(void) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; - PlayerBufferExecCompleted(); - } -} - -static bool32 TwoIntroMons(u32 battlerId) // Double battle with both player pokemon active. -{ - return (IsDoubleBattle() && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[battlerId ^ BIT_FLANK]])); -} - -static void Intro_WaitForShinyAnimAndHealthbox(void) +static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) { bool8 healthboxAnimDone = FALSE; // Check if healthbox has finished sliding in - if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + if (TwoPlayerIntroMons(battler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) healthboxAnimDone = TRUE; } else { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) healthboxAnimDone = TRUE; } // If healthbox and shiny anim are done - if (healthboxAnimDone && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim - && gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim) + if (healthboxAnimDone && gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim + && gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim) { // Reset shiny anim (even if it didn't occur) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); - if (TwoIntroMons(gActiveBattler)) - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], BATTLE_PARTNER(gActiveBattler)); + if (TwoPlayerIntroMons(battler)) + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], BATTLE_PARTNER(battler)); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; - gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; + gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; } } -static void Intro_TryShinyAnimShowHealthbox(void) +static void Intro_TryShinyAnimShowHealthbox(u32 battler) { bool32 bgmRestored = FALSE; bool32 battlerAnimsDone = FALSE; // Start shiny animation if applicable for 1st pokemon - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) + TryShinyAnimation(battler, &gPlayerParty[gBattlerPartyIndexes[battler]]); // Start shiny animation if applicable for 2nd pokemon - if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive) - TryShinyAnimation(BATTLE_PARTNER(gActiveBattler), &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]]); + if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive) + TryShinyAnimation(BATTLE_PARTNER(battler), &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]]); // Show healthbox after ball anim - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted) { - if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + if (TwoPlayerIntroMons(battler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)], &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], HEALTHBOX_ALL); - StartHealthboxSlideIn(BATTLE_PARTNER(gActiveBattler)); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(battler)], &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], HEALTHBOX_ALL); + StartHealthboxSlideIn(BATTLE_PARTNER(battler)); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(battler)]); } - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted = TRUE; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = TRUE; } // Restore bgm after cry has played and healthbox anim is started - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].waitForCry - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].waitForCry + if (!gBattleSpritesDataPtr->healthBoxesData[battler].waitForCry + && gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].waitForCry && !IsCryPlayingOrClearCrySongs()) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) m4aMPlayContinue(&gMPlayInfo_BGM); else m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = TRUE; + gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = TRUE; bgmRestored = TRUE; } // Wait for battler anims - if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + if (TwoPlayerIntroMons(battler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattleControllerData[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) { battlerAnimsDone = TRUE; } } else { - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { battlerAnimsDone = TRUE; } @@ -1264,67 +1312,67 @@ static void Intro_TryShinyAnimShowHealthbox(void) // Clean up if (bgmRestored && battlerAnimsDone) { - if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(gActiveBattler)]]); - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); + if (TwoPlayerIntroMons(battler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); + DestroySprite(&gSprites[gBattleControllerData[battler]]); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = FALSE; - gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; + gBattlerControllerFuncs[battler] = Intro_WaitForShinyAnimAndHealthbox; } } -static void SwitchIn_CleanShinyAnimShowSubstitute(void) +static void SwitchIn_CleanShinyAnimShowSubstitute(u32 battler) { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy + && gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { - CopyBattleSpriteInvisibility(gActiveBattler); + CopyBattleSpriteInvisibility(battler); // Reset shiny anim (even if it didn't occur) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); // Check if Substitute should be shown - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_HandleSoundAndEnd; + gBattlerControllerFuncs[battler] = SwitchIn_HandleSoundAndEnd; } } -static void SwitchIn_HandleSoundAndEnd(void) +static void SwitchIn_HandleSoundAndEnd(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - PlayerBufferExecCompleted(); + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); + PlayerBufferExecCompleted(battler); } } -static void SwitchIn_TryShinyAnimShowHealthbox(void) +static void SwitchIn_TryShinyAnimShowHealthbox(u32 battler) { // Start shiny animation if applicable - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) + TryShinyAnimation(battler, &gPlayerParty[gBattlerPartyIndexes[battler]]); // Wait for ball anim, then show healthbox - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) { - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_CleanShinyAnimShowSubstitute; + DestroySprite(&gSprites[gBattleControllerData[battler]]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); + gBattlerControllerFuncs[battler] = SwitchIn_CleanShinyAnimShowSubstitute; } } @@ -1337,29 +1385,6 @@ void Task_PlayerController_RestoreBgmAfterCry(u8 taskId) } } -static void CompleteOnHealthbarDone(void) -{ - s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); - - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - - if (hpValue != -1) - { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); - } - else - { - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - PlayerBufferExecCompleted(); - } -} - -static void CompleteOnInactiveTextPrinter(void) -{ - if (!IsTextPrinterActive(B_WIN_MSG)) - PlayerBufferExecCompleted(); -} - #define tExpTask_monId data[0] #define tExpTask_battler data[2] #define tExpTask_gainedExp_1 data[3] @@ -1373,6 +1398,7 @@ static s32 GetTaskExpValue(u8 taskId) static void Task_GiveExpToMon(u8 taskId) { + u32 savedActiveBattler; u32 monId = (u8)(gTasks[taskId].tExpTask_monId); u8 battlerId = gTasks[taskId].tExpTask_battler; s32 gainedExp = GetTaskExpValue(taskId); @@ -1387,8 +1413,6 @@ static void Task_GiveExpToMon(u8 taskId) if (currExp + gainedExp >= nextLvlExp) { - u8 savedActiveBattler; - SetMonData(mon, MON_DATA_EXP, &nextLvlExp); CalculateMonStats(mon); gainedExp -= nextLvlExp - currExp; @@ -1398,16 +1422,16 @@ static void Task_GiveExpToMon(u8 taskId) gActiveBattler = savedActiveBattler; if (IsDoubleBattle() == TRUE - && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)])) + && (monId == gBattlerPartyIndexes[battlerId] || monId == gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)])) gTasks[taskId].func = Task_LaunchLvlUpAnim; else - gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; + gTasks[taskId].func = Task_SetControllerToWaitForString; } else { currExp += gainedExp; SetMonData(mon, MON_DATA_EXP, &currExp); - gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; + gBattlerControllerFuncs[battlerId] = Controller_WaitForString; DestroyTask(taskId); } } @@ -1438,6 +1462,10 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) static void Task_GiveExpWithExpBar(u8 taskId) { + u8 level; + u16 species; + s32 currExp, expOnNextLvl, newExpPoints; + if (gTasks[taskId].tExpTask_frames < 13) { gTasks[taskId].tExpTask_frames++; @@ -1447,17 +1475,11 @@ static void Task_GiveExpWithExpBar(u8 taskId) u8 monId = gTasks[taskId].tExpTask_monId; s32 gainedExp = GetTaskExpValue(taskId); u8 battlerId = gTasks[taskId].tExpTask_battler; - s32 newExpPoints; newExpPoints = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0); SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]); if (newExpPoints == -1) // The bar has been filled with given exp points. { - u8 level; - s32 currExp; - u16 species; - s32 expOnNextLvl; - m4aSongNumStop(SE_EXP); level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); @@ -1481,7 +1503,7 @@ static void Task_GiveExpWithExpBar(u8 taskId) { currExp += gainedExp; SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp); - gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; + gBattlerControllerFuncs[battlerId] = Controller_WaitForString; DestroyTask(taskId); } } @@ -1508,75 +1530,37 @@ static void Task_UpdateLvlInHealthbox(u8 taskId) { u8 monIndex = gTasks[taskId].tExpTask_monId; - GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value. - if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]) UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(battlerId)], &gPlayerParty[monIndex], HEALTHBOX_ALL); else UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL); - gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; + gTasks[taskId].func = Task_SetControllerToWaitForString; } } -static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId) +static void Task_SetControllerToWaitForString(u8 taskId) { - u8 monIndex; - u8 battlerId; - - monIndex = gTasks[taskId].tExpTask_monId; - GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value. - battlerId = gTasks[taskId].tExpTask_battler; - gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; + u8 battlerId = gTasks[taskId].tExpTask_battler; + gBattlerControllerFuncs[battlerId] = Controller_WaitForString; DestroyTask(taskId); } -static void FreeMonSpriteAfterFaintAnim(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].y + gSprites[gBattlerSpriteIds[gActiveBattler]].y2 > DISPLAY_HEIGHT) - { - u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - BattleGfxSfxDummy2(species); - FreeOamMatrix(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.matrixNum); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - PlayerBufferExecCompleted(); - } -} - -static void FreeMonSpriteAfterSwitchOutAnim(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - PlayerBufferExecCompleted(); - } -} - -static void CompleteOnInactiveTextPrinter2(void) -{ - if (!IsTextPrinterActive(B_WIN_MSG)) - PlayerBufferExecCompleted(); -} - -static void OpenPartyMenuToChooseMon(void) +static void OpenPartyMenuToChooseMon(u32 battler) { if (!gPaletteFade.active) { u8 caseId; - gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection; - caseId = gTasks[gBattleControllerData[gActiveBattler]].data[0]; - DestroyTask(gBattleControllerData[gActiveBattler]); + gBattlerControllerFuncs[battler] = WaitForMonSelection; + caseId = gTasks[gBattleControllerData[battler]].data[0]; + DestroyTask(gBattleControllerData[battler]); FreeAllWindowBuffers(); OpenPartyMenuInBattle(caseId); } } -static void WaitForMonSelection(void) +static void WaitForMonSelection(u32 battler) { if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { @@ -1585,59 +1569,34 @@ static void WaitForMonSelection(void) else BtlController_EmitChosenMonReturnValue(BUFFER_B, PARTY_SIZE, NULL); - if ((gBattleResources->bufferA[gActiveBattler][1] & 0xF) == 1) + if ((gBattleResources->bufferA[battler][1] & 0xF) == 1) PrintLinkStandbyMsg(); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } } -static void OpenBagAndChooseItem(void) +static void OpenBagAndChooseItem(u32 battler) { if (!gPaletteFade.active) { - gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem; + gBattlerControllerFuncs[battler] = CompleteWhenChoseItem; ReshowBattleScreenDummy(); FreeAllWindowBuffers(); CB2_BagMenuFromBattle(); } } -static void CompleteWhenChoseItem(void) +static void CompleteWhenChoseItem(u32 battler) { if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { BtlController_EmitOneReturnValue(BUFFER_B, gSpecialVar_ItemId); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } } -static void CompleteOnSpecialAnimDone(void) -{ - if (!gDoingBattleAnim || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - PlayerBufferExecCompleted(); -} - -static void DoHitAnimBlinkSpriteEffect(void) -{ - u8 spriteId = gBattlerSpriteIds[gActiveBattler]; - - if (gSprites[spriteId].data[1] == 32) - { - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = FALSE; - PlayerBufferExecCompleted(); - } - else - { - if ((gSprites[spriteId].data[1] % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data[1]++; - } -} - -static void PlayerHandleYesNoInput(void) +static void PlayerHandleYesNoInput(u32 battler) { if (JOY_NEW(DPAD_UP) && gMultiUsePlayerCursor != 0) { @@ -1663,20 +1622,20 @@ static void PlayerHandleYesNoInput(void) else BtlController_EmitTwoReturnValues(BUFFER_B, 0xD, 0); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } if (JOY_NEW(B_BUTTON)) { HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); PlaySE(SE_SELECT); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } } -static void MoveSelectionDisplayMoveNames(void) +static void MoveSelectionDisplayMoveNames(u32 battler) { s32 i; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); gNumberOfMovesToChoose = 0; for (i = 0; i < MAX_MON_MOVES; i++) @@ -1690,40 +1649,40 @@ static void MoveSelectionDisplayMoveNames(void) } } -static void MoveSelectionDisplayPpString(void) +static void MoveSelectionDisplayPpString(u32 battler) { StringCopy(gDisplayedStringBattle, gText_MoveInterfacePP); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_PP); } -static void MoveSelectionDisplayPpNumber(void) +static void MoveSelectionDisplayPpNumber(u32 battler) { u8 *txtPtr; struct ChooseMoveStruct *moveInfo; - if (gBattleResources->bufferA[gActiveBattler][2] == TRUE) // check if we didn't want to display pp number + if (gBattleResources->bufferA[battler][2] == TRUE) // check if we didn't want to display pp number return; SetPpNumbersPaletteInMoveSelection(); - moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); - txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2); + moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); + txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, moveInfo->currentPp[gMoveSelectionCursor[battler]], STR_CONV_MODE_RIGHT_ALIGN, 2); *(txtPtr)++ = CHAR_SLASH; - ConvertIntToDecimalStringN(txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(txtPtr, moveInfo->maxPp[gMoveSelectionCursor[battler]], STR_CONV_MODE_RIGHT_ALIGN, 2); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_PP_REMAINING); } -static void MoveSelectionDisplayMoveType(void) +static void MoveSelectionDisplayMoveType(u32 battler) { u8 *txtPtr; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); *(txtPtr)++ = EXT_CTRL_CODE_BEGIN; *(txtPtr)++ = EXT_CTRL_CODE_FONT; *(txtPtr)++ = FONT_NORMAL; - StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]); + StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[battler]]].type]); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); } @@ -1777,18 +1736,6 @@ void CB2_SetUpReshowBattleScreenAfterMenu2(void) SetMainCallback2(ReshowBattleScreenAfterMenu); } -static void CompleteOnFinishedStatusAnimation(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) - PlayerBufferExecCompleted(); -} - -static void CompleteOnFinishedBattleAnimation(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive) - PlayerBufferExecCompleted(); -} - static void PrintLinkStandbyMsg(void) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -1799,724 +1746,62 @@ static void PrintLinkStandbyMsg(void) } } -static void PlayerHandleGetMonData(void) +static void PlayerHandleLoadMonSprite(u32 battler) { - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data - u32 size = 0; - u8 monToCheck; - s32 i; + BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; + gBattlerControllerFuncs[battler] = CompleteOnBattlerSpritePosX_0; +} - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - size += CopyPlayerMonData(gBattlerPartyIndexes[gActiveBattler], monData); - } +static void PlayerHandleSwitchInAnim(u32 battler) +{ + gActionSelectionCursor[battler] = 0; + gMoveSelectionCursor[battler] = 0; + BtlController_HandleSwitchInAnim(battler, TRUE, SwitchIn_TryShinyAnimShowHealthbox); +} + +u32 LinkPlayerGetTrainerPicId(u32 multiplayerId) +{ + u32 trainerPicId; + + u8 gender = gLinkPlayers[multiplayerId].gender; + u8 version = gLinkPlayers[multiplayerId].version & 0xFF; + + if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) + trainerPicId = gender + TRAINER_BACK_PIC_RED; + else if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) + trainerPicId = gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN; else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - size += CopyPlayerMonData(i, monData + size); - monToCheck >>= 1; - } - } - BtlController_EmitDataTransfer(BUFFER_B, size, monData); - PlayerBufferExecCompleted(); + trainerPicId = gender + TRAINER_BACK_PIC_BRENDAN; + + return trainerPicId; } -static u32 CopyPlayerMonData(u8 monId, u8 *dst) +static u32 PlayerGetTrainerBackPicId(void) { - struct BattlePokemon battleMon; - struct MovePpInfo moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; + u32 trainerPicId; - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); - for (size = 0; size < MAX_MON_MOVES; size++) - { - battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); - battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - } - battleMon.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - battleMon.friendship = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP); - battleMon.experience = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); - battleMon.hpIV = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - battleMon.attackIV = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - battleMon.defenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - battleMon.speedIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - battleMon.spAttackIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - battleMon.spDefenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - battleMon.personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - battleMon.status1 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS); - battleMon.level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - battleMon.hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP); - battleMon.maxHP = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP); - battleMon.attack = GetMonData(&gPlayerParty[monId], MON_DATA_ATK); - battleMon.defense = GetMonData(&gPlayerParty[monId], MON_DATA_DEF); - battleMon.speed = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED); - battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); - battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); - battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); - battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); - battleMon.metLevel = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); - GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy_Nickname(battleMon.nickname, nickname); - GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); - src = (u8 *)&battleMon; - for (size = 0; size < sizeof(battleMon); size++) - dst[size] = src[size]; - break; - case REQUEST_SPECIES_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_HELDITEM_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MOVES_PP_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - { - moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - src = (u8 *)(&moveData); - for (size = 0; size < sizeof(moveData); size++) - dst[size] = src[size]; - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_PP_DATA_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - size++; - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); - size = 1; - break; - case REQUEST_OTID_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_EXP_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_HP_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_EV); - size = 1; - break; - case REQUEST_ATK_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV); - size = 1; - break; - case REQUEST_DEF_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV); - size = 1; - break; - case REQUEST_SPEED_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV); - size = 1; - break; - case REQUEST_SPATK_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV); - size = 1; - break; - case REQUEST_SPDEF_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV); - size = 1; - break; - case REQUEST_FRIENDSHIP_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP); - size = 1; - break; - case REQUEST_POKERUS_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKERUS); - size = 1; - break; - case REQUEST_MET_LOCATION_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION); - size = 1; - break; - case REQUEST_MET_LEVEL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); - size = 1; - break; - case REQUEST_MET_GAME_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME); - size = 1; - break; - case REQUEST_POKEBALL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL); - size = 1; - break; - case REQUEST_ALL_IVS_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - dst[1] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - dst[2] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - dst[3] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - dst[4] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - dst[5] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - size = 6; - break; - case REQUEST_HP_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - size = 1; - break; - case REQUEST_ATK_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - size = 1; - break; - case REQUEST_DEF_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - size = 1; - break; - case REQUEST_SPEED_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - size = 1; - break; - case REQUEST_SPATK_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - size = 1; - break; - case REQUEST_SPDEF_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - size = 1; - break; - case REQUEST_PERSONALITY_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_CHECKSUM_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_STATUS_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_LEVEL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - size = 1; - break; - case REQUEST_HP_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MAX_HP_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_ATK_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_ATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_DEF_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_DEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPEED_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPATK_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPDEF_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_COOL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL); - size = 1; - break; - case REQUEST_BEAUTY_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY); - size = 1; - break; - case REQUEST_CUTE_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE); - size = 1; - break; - case REQUEST_SMART_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART); - size = 1; - break; - case REQUEST_TOUGH_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH); - size = 1; - break; - case REQUEST_SHEEN_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SHEEN); - size = 1; - break; - case REQUEST_COOL_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON); - size = 1; - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case REQUEST_CUTE_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case REQUEST_SMART_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON); - size = 1; - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - - return size; -} - -void PlayerHandleGetRawMonData(void) -{ - struct BattlePokemon battleMon; - u8 *src = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; - u8 *dst = (u8 *)&battleMon + gBattleResources->bufferA[gActiveBattler][1]; - u8 i; - - for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) - dst[i] = src[i]; - - BtlController_EmitDataTransfer(BUFFER_B, gBattleResources->bufferA[gActiveBattler][2], dst); - PlayerBufferExecCompleted(); -} - -static void PlayerHandleSetMonData(void) -{ - u8 monToCheck; - u8 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - SetPlayerMonData(gBattlerPartyIndexes[gActiveBattler]); - } + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + trainerPicId = LinkPlayerGetTrainerPicId(GetMultiplayerId()); else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - SetPlayerMonData(i); - monToCheck >>= 1; - } - } - PlayerBufferExecCompleted(); + trainerPicId = gSaveBlock2Ptr->playerGender + TRAINER_BACK_PIC_BRENDAN; + + return trainerPicId; } -static void SetPlayerMonData(u8 monId) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; - s32 i; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - { - u8 iv; - - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species); - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); - } - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &iv); - iv = battlePokemon->attackIV; - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &iv); - iv = battlePokemon->defenseIV; - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &iv); - iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &iv); - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality); - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &battlePokemon->status1); - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &battlePokemon->level); - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &battlePokemon->hp); - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &battlePokemon->attack); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &battlePokemon->defense); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &battlePokemon->speed); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense); - } - break; - case REQUEST_SPECIES_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HELDITEM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MOVES_PP_BATTLE: - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]); - } - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PP_DATA_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_OTID_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_EXP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKERUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_GAME_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKEBALL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); - break; - case REQUEST_HP_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_STATUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MAX_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SHEEN_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - } - - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); -} - -static void PlayerHandleSetRawMonData(void) -{ - u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; - u8 i; - - for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) - dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; - - PlayerBufferExecCompleted(); -} - -static void PlayerHandleLoadMonSprite(void) -{ - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpritePosX_0; -} - -static void PlayerHandleSwitchInAnim(void) -{ - ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); - gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - gActionSelectionCursor[gActiveBattler] = 0; - gMoveSelectionCursor[gActiveBattler] = 0; - StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnimShowHealthbox; -} - -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) -{ - u16 species; - - ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); - - gBattlerSpriteIds[battlerId] = CreateSprite( - &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSpriteSubpriority(battlerId)); - - gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; - gSprites[gBattleControllerData[battlerId]].data[2] = battlerId; - - gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; - gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; - gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - - StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); - - gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; - gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - - gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); -} - -static void PlayerHandleReturnMonToBall(void) -{ - if (!gBattleResources->bufferA[gActiveBattler][1]) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; - } - else - { - // Skip animation, just remove battler - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - PlayerBufferExecCompleted(); - } -} - -static void DoSwitchOutAnimation(void) -{ - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); - gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim; - } - break; - } -} - -#define sSpeedX data[0] - // In emerald it's possible to have a tag battle in the battle frontier facilities with AI // which use the front sprite for both the player and the partner as opposed to any other battles (including the one with Steven) // that use an animated back pic. -static void PlayerHandleDrawTrainerPic(void) +static void PlayerHandleDrawTrainerPic(u32 battler) { + bool32 isFrontPic; s16 xPos, yPos; - u32 trainerPicId; - - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_FIRE_RED - || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_LEAF_GREEN) - { - trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RED; - } - else if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY - || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE) - { - trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN; - } - else - { - trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_BRENDAN; - } - } - else - { - trainerPicId = gSaveBlock2Ptr->playerGender; - } + u32 trainerPicId, gender; + trainerPicId = PlayerGetTrainerBackPicId(); if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != B_FLANK_LEFT) // Second mon, on the right. + if ((GetBattlerPosition(battler) & BIT_FLANK) != B_FLANK_LEFT) // Second mon, on the right. xPos = 90; else // First mon, on the left. xPos = 32; @@ -2538,267 +1823,90 @@ static void PlayerHandleDrawTrainerPic(void) yPos = (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80; } - // Use front pic table for any tag battles unless your partner is Steven. + // Use front pic table for any tag battles unless your partner is Steven or a custom partner. if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER && gPartnerTrainerId < TRAINER_CUSTOM_PARTNER) { trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender); - DecompressTrainerFrontPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].y2 = 48; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = ST_OAM_AFFINE_OFF; - gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1; + isFrontPic = TRUE; } - // Use the back pic in any other scenario. - else + else // Use back pic in all the other usual circumstances. { - DecompressTrainerBackPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; + isFrontPic = FALSE; } - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; + BtlController_HandleDrawTrainerPic(battler, trainerPicId, isFrontPic, xPos, yPos, -1); } -static void PlayerHandleTrainerSlide(void) +static void PlayerHandleTrainerSlide(u32 battler) { - u32 trainerPicId; - - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_FIRE_RED - || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_LEAF_GREEN) - { - trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RED; - } - else if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY - || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE) - { - trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN; - } - else - { - trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_BRENDAN; - } - } - else - { - trainerPicId = gSaveBlock2Ptr->playerGender + TRAINER_BACK_PIC_BRENDAN; - } - - DecompressTrainerBackPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, 80, (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, 30); - - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -96; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy2; + u32 trainerPicId = PlayerGetTrainerBackPicId(); + BtlController_HandleTrainerSlide(battler, trainerPicId); } -#undef sSpeedX - -static void PlayerHandleTrainerSlideBack(void) +static void PlayerHandleTrainerSlideBack(u32 battler) { - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); - gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; + BtlController_HandleTrainerSlideBack(battler, 50, TRUE); } -#define sSpeedX data[1] -#define sSpeedY data[2] - -static void PlayerHandleFaintAnimation(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0) - { - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++; - } - else - { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 0; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedY = 5; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim; - gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim; - } - } -} - -#undef sSpeedX -#undef sSpeedY - -static void PlayerHandlePaletteFade(void) +static void PlayerHandlePaletteFade(u32 battler) { BeginNormalPaletteFade(PALETTES_ALL, 2, 0, 16, RGB_BLACK); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleSuccessBallThrowAnim(void) +static void PlayerHandleSuccessBallThrowAnim(u32 battler) { - gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS; - gDoingBattleAnim = TRUE; - if (IsCriticalCapture()) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_CRITICAL_CAPTURE_THROW); - else - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_BALL_THROW); - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone; + BtlController_HandleSuccessBallThrowAnim(battler, gBattlerTarget, B_ANIM_BALL_THROW, TRUE); } -static void PlayerHandleBallThrowAnim(void) +static void PlayerHandleBallThrowAnim(u32 battler) { - u8 ballThrowCaseId = gBattleResources->bufferA[gActiveBattler][1]; - - gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId; - gDoingBattleAnim = TRUE; - if (IsCriticalCapture()) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_CRITICAL_CAPTURE_THROW); - else - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_BALL_THROW); - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone; + BtlController_HandleBallThrowAnim(battler, gBattlerTarget, B_ANIM_BALL_THROW, TRUE); } -static void PlayerHandlePause(void) +static void PlayerHandlePause(u32 battler) { - u8 timer = gBattleResources->bufferA[gActiveBattler][1]; + u8 timer = gBattleResources->bufferA[battler][1]; while (timer != 0) timer--; - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleMoveAnimation(void) +static void PlayerHandleMoveAnimation(u32 battler) { - if (!IsBattleSEPlaying(gActiveBattler)) - { - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - - gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; - gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; - gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation; - BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); - } + BtlController_HandleMoveAnimation(battler, TRUE); } -static void PlayerDoMoveAnimation(void) +static void PlayerHandlePrintString(u32 battler) { - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; - - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute - && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8) - { - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF); - DoMoveAnim(move); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL); - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) - { - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 0; - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; - } - break; - case 3: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - PlayerBufferExecCompleted(); - } - break; - } + BtlController_HandlePrintString(battler, TRUE, TRUE); } -static void PlayerHandlePrintString(void) +static void PlayerHandlePrintSelectionString(u32 battler) { - u16 *stringId; - - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); - BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2; - BattleTv_SetDataBasedOnString(*stringId); - BattleArena_DeductSkillPoints(gActiveBattler, *stringId); -} - -static void PlayerHandlePrintSelectionString(void) -{ - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - PlayerHandlePrintString(); + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + PlayerHandlePrintString(battler); else - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } -static void HandleChooseActionAfterDma3(void) +static void HandleChooseActionAfterDma3(u32 battler) { if (!IsDma3ManagerBusyWithBgCopy()) { gBattle_BG0_X = 0; gBattle_BG0_Y = DISPLAY_HEIGHT; - gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseAction; + gBattlerControllerFuncs[battler] = HandleInputChooseAction; } } -static void PlayerHandleChooseAction(void) +static void PlayerHandleChooseAction(u32 battler) { s32 i; - gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3; + gBattlerControllerFuncs[battler] = HandleChooseActionAfterDma3; BattleTv_ClearExplosionFaintCause(); BattlePutTextOnWindow(gText_BattleMenu, B_WIN_ACTION_MENU); @@ -2806,180 +1914,160 @@ static void PlayerHandleChooseAction(void) ActionSelectionDestroyCursorAt(i); TryRestoreLastUsedBall(); - ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); } -static void PlayerHandleYesNoBox(void) +static void PlayerHandleYesNoBox(u32 battler) { - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + if (GetBattlerSide(battler) == B_SIDE_PLAYER) { HandleBattleWindow(YESNOBOX_X_Y, 0); BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); gMultiUsePlayerCursor = 1; BattleCreateYesNoCursorAt(1); - gBattlerControllerFuncs[gActiveBattler] = PlayerHandleYesNoInput; + gBattlerControllerFuncs[battler] = PlayerHandleYesNoInput; } else { - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } } -static void HandleChooseMoveAfterDma3(void) +static void HandleChooseMoveAfterDma3(u32 battler) { if (!IsDma3ManagerBusyWithBgCopy()) { gBattle_BG0_X = 0; gBattle_BG0_Y = DISPLAY_HEIGHT * 2; - gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; + gBattlerControllerFuncs[battler] = HandleInputChooseMove; } } // arenaMindPoints is used here as a placeholder for a timer. -static void PlayerChooseMoveInBattlePalace(void) +static void PlayerChooseMoveInBattlePalace(u32 battler) { - if (--*(gBattleStruct->arenaMindPoints + gActiveBattler) == 0) + if (--*(gBattleStruct->arenaMindPoints + battler) == 0) { gBattlePalaceMoveSelectionRngValue = gRngValue; BtlController_EmitTwoReturnValues(BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace()); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } } -static void PlayerHandleChooseMove(void) +static void PlayerHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - *(gBattleStruct->arenaMindPoints + gActiveBattler) = 8; - gBattlerControllerFuncs[gActiveBattler] = PlayerChooseMoveInBattlePalace; + *(gBattleStruct->arenaMindPoints + battler) = 8; + gBattlerControllerFuncs[battler] = PlayerChooseMoveInBattlePalace; } else { - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); - InitMoveSelectionsVarsAndStrings(); + InitMoveSelectionsVarsAndStrings(battler); gBattleStruct->mega.playerSelect = FALSE; + gBattleStruct->burst.playerSelect = FALSE; if (!IsMegaTriggerSpriteActive()) gBattleStruct->mega.triggerSpriteId = 0xFF; - if (CanMegaEvolve(gActiveBattler)) - CreateMegaTriggerSprite(gActiveBattler, 0); + if (CanMegaEvolve(battler)) + CreateMegaTriggerSprite(battler, 0); + if (!IsBurstTriggerSpriteActive()) + gBattleStruct->burst.triggerSpriteId = 0xFF; + if (CanUltraBurst(battler)) + CreateBurstTriggerSprite(battler, 0); if (!IsZMoveTriggerSpriteActive()) gBattleStruct->zmove.triggerSpriteId = 0xFF; - GetUsableZMoves(gActiveBattler, moveInfo->moves); - gBattleStruct->zmove.viable = IsZMoveUsable(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); - CreateZMoveTriggerSprite(gActiveBattler, gBattleStruct->zmove.viable); - gBattlerControllerFuncs[gActiveBattler] = HandleChooseMoveAfterDma3; + GetUsableZMoves(battler, moveInfo->moves); + gBattleStruct->zmove.viable = IsZMoveUsable(battler, gMoveSelectionCursor[battler]); + CreateZMoveTriggerSprite(battler, gBattleStruct->zmove.viable); + gBattlerControllerFuncs[battler] = HandleChooseMoveAfterDma3; } } -void InitMoveSelectionsVarsAndStrings(void) +void InitMoveSelectionsVarsAndStrings(u32 battler) { - MoveSelectionDisplayMoveNames(); + MoveSelectionDisplayMoveNames(battler); gMultiUsePlayerCursor = 0xFF; - MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); - MoveSelectionDisplayPpString(); - MoveSelectionDisplayPpNumber(); - MoveSelectionDisplayMoveType(); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + MoveSelectionDisplayPpString(battler); + MoveSelectionDisplayPpNumber(battler); + MoveSelectionDisplayMoveType(battler); } -static void PlayerHandleChooseItem(void) +static void PlayerHandleChooseItem(u32 battler) { s32 i; BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); - gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem; - gBattlerInMenuId = gActiveBattler; + gBattlerControllerFuncs[battler] = OpenBagAndChooseItem; + gBattlerInMenuId = battler; for (i = 0; i < ARRAY_COUNT(gBattlePartyCurrentOrder); i++) - gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[gActiveBattler][1 + i]; + gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[battler][1 + i]; } -static void PlayerHandleChoosePokemon(void) +static void PlayerHandleChoosePokemon(u32 battler) { s32 i; for (i = 0; i < ARRAY_COUNT(gBattlePartyCurrentOrder); i++) - gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[gActiveBattler][4 + i]; + gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[battler][4 + i]; - if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleResources->bufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH - && (gBattleResources->bufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CHOOSE_FAINTED_MON) + if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleResources->bufferA[battler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH + && (gBattleResources->bufferA[battler][1] & 0xF) != PARTY_ACTION_CHOOSE_FAINTED_MON) { - BtlController_EmitChosenMonReturnValue(BUFFER_B, gBattlerPartyIndexes[gActiveBattler] + 1, gBattlePartyCurrentOrder); - PlayerBufferExecCompleted(); + BtlController_EmitChosenMonReturnValue(BUFFER_B, gBattlerPartyIndexes[battler] + 1, gBattlePartyCurrentOrder); + PlayerBufferExecCompleted(battler); } else { - gBattleControllerData[gActiveBattler] = CreateTask(TaskDummy, 0xFF); - gTasks[gBattleControllerData[gActiveBattler]].data[0] = gBattleResources->bufferA[gActiveBattler][1] & 0xF; - *(&gBattleStruct->battlerPreventingSwitchout) = gBattleResources->bufferA[gActiveBattler][1] >> 4; - *(&gBattleStruct->prevSelectedPartySlot) = gBattleResources->bufferA[gActiveBattler][2]; - *(&gBattleStruct->abilityPreventingSwitchout) = (gBattleResources->bufferA[gActiveBattler][3] & 0xFF) | (gBattleResources->bufferA[gActiveBattler][7] << 8); + gBattleControllerData[battler] = CreateTask(TaskDummy, 0xFF); + gTasks[gBattleControllerData[battler]].data[0] = gBattleResources->bufferA[battler][1] & 0xF; + *(&gBattleStruct->battlerPreventingSwitchout) = gBattleResources->bufferA[battler][1] >> 4; + *(&gBattleStruct->prevSelectedPartySlot) = gBattleResources->bufferA[battler][2]; + *(&gBattleStruct->abilityPreventingSwitchout) = (gBattleResources->bufferA[battler][3] & 0xFF) | (gBattleResources->bufferA[battler][7] << 8); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); - gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon; - gBattlerInMenuId = gActiveBattler; + gBattlerControllerFuncs[battler] = OpenPartyMenuToChooseMon; + gBattlerInMenuId = battler; } } -static void PlayerHandleCmd23(void) +static void PlayerHandleCmd23(u32 battler) { BattleStopLowHpSound(); BeginNormalPaletteFade(PALETTES_ALL, 2, 0, 16, RGB_BLACK); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleHealthBarUpdate(void) +static void PlayerHandleHealthBarUpdate(u32 battler) { - s16 hpVal; - - LoadBattleBarGfx(0); - hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - // gPlayerPartyLostHP used by Battle Dome, but never read - if (hpVal > 0) - gPlayerPartyLostHP += hpVal; - - if (hpVal != INSTANT_HP_BAR_DROP) - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); - } - else - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, 0, maxHP); - } - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; + BtlController_HandleHealthBarUpdate(battler, TRUE); } -static void PlayerHandleExpUpdate(void) +void PlayerHandleExpUpdate(u32 battler) { - u8 monId = gBattleResources->bufferA[gActiveBattler][1]; + u8 monId = gBattleResources->bufferA[battler][1]; s32 taskId, expPointsToGive; if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_LEVEL) { - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } else { LoadBattleBarGfx(1); - GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // Unused return value. - expPointsToGive = T1_READ_32(&gBattleResources->bufferA[gActiveBattler][2]); + expPointsToGive = T1_READ_32(&gBattleResources->bufferA[battler][2]); taskId = CreateTask(Task_GiveExpToMon, 10); gTasks[taskId].tExpTask_monId = monId; gTasks[taskId].tExpTask_gainedExp_1 = expPointsToGive; gTasks[taskId].tExpTask_gainedExp_2 = expPointsToGive >> 16; - gTasks[taskId].tExpTask_battler = gActiveBattler; - gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy; + gTasks[taskId].tExpTask_battler = battler; + gBattlerControllerFuncs[battler] = BattleControllerDummy; } } @@ -2989,51 +2077,23 @@ static void PlayerHandleExpUpdate(void) #undef tExpTask_gainedExp_2 #undef tExpTask_frames -static void PlayerHandleStatusIconUpdate(void) +static void PlayerHandleStatusXor(u32 battler) { - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 battlerId; + u8 val = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_STATUS) ^ gBattleResources->bufferA[battler][1]; - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - battlerId = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } + SetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_STATUS, &val); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleStatusAnimation(void) +static void PlayerHandleDMA3Transfer(u32 battler) { - if (!IsBattleSEPlaying(gActiveBattler)) - { - InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], - gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } -} + u32 dstArg = gBattleResources->bufferA[battler][1] + | (gBattleResources->bufferA[battler][2] << 8) + | (gBattleResources->bufferA[battler][3] << 16) + | (gBattleResources->bufferA[battler][4] << 24); + u16 sizeArg = gBattleResources->bufferA[battler][5] | (gBattleResources->bufferA[battler][6] << 8); -static void PlayerHandleStatusXor(void) -{ - u8 val = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS) ^ gBattleResources->bufferA[gActiveBattler][1]; - - SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS, &val); - PlayerBufferExecCompleted(); -} - -static void PlayerHandleDataTransfer(void) -{ - PlayerBufferExecCompleted(); -} - -static void PlayerHandleDMA3Transfer(void) -{ - u32 dstArg = gBattleResources->bufferA[gActiveBattler][1] - | (gBattleResources->bufferA[gActiveBattler][2] << 8) - | (gBattleResources->bufferA[gActiveBattler][3] << 16) - | (gBattleResources->bufferA[gActiveBattler][4] << 24); - u16 sizeArg = gBattleResources->bufferA[gActiveBattler][5] | (gBattleResources->bufferA[gActiveBattler][6] << 8); - - const u8 *src = &gBattleResources->bufferA[gActiveBattler][7]; + const u8 *src = &gBattleResources->bufferA[battler][7]; u8 *dst = (u8 *)(dstArg); u32 size = sizeArg; @@ -3049,351 +2109,121 @@ static void PlayerHandleDMA3Transfer(void) dst += 0x1000; size -= 0x1000; } - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } -static void PlayerHandlePlayBGM(void) +static void PlayerHandlePlayBGM(u32 battler) { - PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - PlayerBufferExecCompleted(); + PlayBGM(gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8)); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleCmd32(void) -{ - PlayerBufferExecCompleted(); -} - -static void PlayerHandleTwoReturnValues(void) +static void PlayerHandleTwoReturnValues(u32 battler) { BtlController_EmitTwoReturnValues(BUFFER_B, 0, 0); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleChosenMonReturnValue(void) +static void PlayerHandleChosenMonReturnValue(u32 battler) { BtlController_EmitChosenMonReturnValue(BUFFER_B, 0, NULL); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleOneReturnValue(void) +static void PlayerHandleOneReturnValue(u32 battler) { BtlController_EmitOneReturnValue(BUFFER_B, 0); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleOneReturnValue_Duplicate(void) +static void PlayerHandleOneReturnValue_Duplicate(u32 battler) { BtlController_EmitOneReturnValue_Duplicate(BUFFER_B, 0); - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleClearUnkVar(void) +static void PlayerHandleIntroTrainerBallThrow(u32 battler) { - gUnusedControllerStruct.unk = 0; - PlayerBufferExecCompleted(); + const u32 *trainerPal = gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data; + BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F8, trainerPal, 31, Intro_TryShinyAnimShowHealthbox); } -static void PlayerHandleSetUnkVar(void) +static void PlayerHandleDrawPartyStatusSummary(u32 battler) { - gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; - PlayerBufferExecCompleted(); + BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_PLAYER, TRUE); } -static void PlayerHandleClearUnkFlag(void) +static void PlayerHandleEndBounceEffect(u32 battler) { - gUnusedControllerStruct.flag = 0; - PlayerBufferExecCompleted(); + EndBounceEffect(battler, BOUNCE_HEALTHBOX); + EndBounceEffect(battler, BOUNCE_MON); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleToggleUnkFlag(void) +static void PlayerHandleBattleAnimation(u32 battler) { - gUnusedControllerStruct.flag ^= 1; - PlayerBufferExecCompleted(); + BtlController_HandleBattleAnimation(battler, FALSE, TRUE); } -static void PlayerHandleHitAnimation(void) +static void PlayerHandleLinkStandbyMsg(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE) - { - PlayerBufferExecCompleted(); - } - else - { - gDoingBattleAnim = TRUE; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; - DoHitAnimHealthboxEffect(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect; - } -} - -static void PlayerHandleCantSwitch(void) -{ - PlayerBufferExecCompleted(); -} - -static void PlayerHandlePlaySE(void) -{ - s8 pan; - - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - pan = SOUND_PAN_ATTACKER; - else - pan = SOUND_PAN_TARGET; - - PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); - PlayerBufferExecCompleted(); -} - -static void PlayerHandlePlayFanfareOrBGM(void) -{ - if (gBattleResources->bufferA[gActiveBattler][3]) - { - BattleStopLowHpSound(); - PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - else - { - PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - - PlayerBufferExecCompleted(); -} - -static void PlayerHandleFaintingCry(void) -{ - u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - PlayCry_ByMode(species, -25, CRY_MODE_FAINT); - PlayerBufferExecCompleted(); -} - -static void PlayerHandleIntroSlide(void) -{ - HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); - gIntroSlideFlags |= 1; - PlayerBufferExecCompleted(); -} - -// Task data for Task_StartSendOutAnim -#define tBattlerId data[0] -#define tStartTimer data[1] - -#define sBattlerId data[5] - -static void PlayerHandleIntroTrainerBallThrow(void) -{ - u8 paletteNum; - u8 taskId; - - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - gSprites[gBattlerSpriteIds[gActiveBattler]].sBattlerId = gActiveBattler; - - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); - - paletteNum = AllocSpritePalette(0xD6F8); - LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; - - taskId = CreateTask(Task_StartSendOutAnim, 5); - gTasks[taskId].tBattlerId = gActiveBattler; - - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - - gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; - gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy; -} - -void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite) -{ - u8 battlerId = sprite->sBattlerId; - - // Free player trainer sprite - FreeSpriteOamMatrix(sprite); - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); - DestroySprite(sprite); - - // Load mon sprite - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); -} - -#undef sBattlerId - -// Send out at start of battle -static void Task_StartSendOutAnim(u8 taskId) -{ - if (gTasks[taskId].tStartTimer < 31) - { - gTasks[taskId].tStartTimer++; - } - else - { - u8 savedActiveBattler = gActiveBattler; - - gActiveBattler = gTasks[taskId].tBattlerId; - if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - } - else - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - } - gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; - gActiveBattler = savedActiveBattler; - DestroyTask(taskId); - } -} - -#undef tBattlerId -#undef tStartTimer - -static void PlayerHandleDrawPartyStatusSummary(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - PlayerBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - - // If intro, skip the delay after drawing - if (gBattleResources->bufferA[gActiveBattler][2] != 0) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; - - gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; - } -} - -static void EndDrawPartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 92) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - PlayerBufferExecCompleted(); - } -} - -static void PlayerHandleHidePartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - PlayerBufferExecCompleted(); -} - -static void PlayerHandleEndBounceEffect(void) -{ - EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX); - EndBounceEffect(gActiveBattler, BOUNCE_MON); - PlayerBufferExecCompleted(); -} - -static void PlayerHandleSpriteInvisibility(void) -{ - if (IsBattlerSpritePresent(gActiveBattler)) - { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; - CopyBattleSpriteInvisibility(gActiveBattler); - } - PlayerBufferExecCompleted(); -} - -static void PlayerHandleBattleAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; - u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) - PlayerBufferExecCompleted(); - else - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation; - - BattleTv_SetDataBasedOnAnimation(animationId); - } -} - -static void PlayerHandleLinkStandbyMsg(void) -{ - RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][2]); - switch (gBattleResources->bufferA[gActiveBattler][1]) + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[battler][2]); + switch (gBattleResources->bufferA[battler][1]) { case LINK_STANDBY_MSG_STOP_BOUNCE: PrintLinkStandbyMsg(); // fall through case LINK_STANDBY_STOP_BOUNCE_ONLY: - EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX); - EndBounceEffect(gActiveBattler, BOUNCE_MON); + EndBounceEffect(battler, BOUNCE_HEALTHBOX); + EndBounceEffect(battler, BOUNCE_MON); break; case LINK_STANDBY_MSG_ONLY: PrintLinkStandbyMsg(); break; } - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleResetActionMoveSelection(void) +static void PlayerHandleResetActionMoveSelection(u32 battler) { - switch (gBattleResources->bufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[battler][1]) { case RESET_ACTION_MOVE_SELECTION: - gActionSelectionCursor[gActiveBattler] = 0; - gMoveSelectionCursor[gActiveBattler] = 0; + gActionSelectionCursor[battler] = 0; + gMoveSelectionCursor[battler] = 0; break; case RESET_ACTION_SELECTION: - gActionSelectionCursor[gActiveBattler] = 0; + gActionSelectionCursor[battler] = 0; break; case RESET_MOVE_SELECTION: - gMoveSelectionCursor[gActiveBattler] = 0; + gMoveSelectionCursor[battler] = 0; break; } - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } -static void PlayerHandleEndLinkBattle(void) +static void PlayerHandleEndLinkBattle(u32 battler) { - RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][4]); - gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; - gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[gActiveBattler][2]; + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[battler][4]); + gBattleOutcome = gBattleResources->bufferA[battler][1]; + gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[battler][2]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - PlayerBufferExecCompleted(); - gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; + PlayerBufferExecCompleted(battler); + gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } -static void WaitForDebug(void) +static void Controller_WaitForDebug(u32 battler) { if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(battler); } } -static void PlayerHandleBattleDebug(void) +static void PlayerHandleBattleDebug(u32 battler) { BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); SetMainCallback2(CB2_BattleDebugMenu); - gBattlerControllerFuncs[gActiveBattler] = WaitForDebug; -} - -static void PlayerCmdEnd(void) -{ + gBattlerControllerFuncs[battler] = Controller_WaitForDebug; } diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 67e475e51..5a00d8cbd 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -31,211 +31,126 @@ #include "constants/party_menu.h" #include "constants/trainers.h" -static void PlayerPartnerHandleGetMonData(void); -static void PlayerPartnerHandleGetRawMonData(void); -static void PlayerPartnerHandleSetMonData(void); -static void PlayerPartnerHandleSetRawMonData(void); -static void PlayerPartnerHandleLoadMonSprite(void); -static void PlayerPartnerHandleSwitchInAnim(void); -static void PlayerPartnerHandleReturnMonToBall(void); -static void PlayerPartnerHandleDrawTrainerPic(void); -static void PlayerPartnerHandleTrainerSlide(void); -static void PlayerPartnerHandleTrainerSlideBack(void); -static void PlayerPartnerHandleFaintAnimation(void); -static void PlayerPartnerHandlePaletteFade(void); -static void PlayerPartnerHandleSuccessBallThrowAnim(void); -static void PlayerPartnerHandleBallThrowAnim(void); -static void PlayerPartnerHandlePause(void); -static void PlayerPartnerHandleMoveAnimation(void); -static void PlayerPartnerHandlePrintString(void); -static void PlayerPartnerHandlePrintSelectionString(void); -static void PlayerPartnerHandleChooseAction(void); -static void PlayerPartnerHandleYesNoBox(void); -static void PlayerPartnerHandleChooseMove(void); -static void PlayerPartnerHandleChooseItem(void); -static void PlayerPartnerHandleChoosePokemon(void); -static void PlayerPartnerHandleCmd23(void); -static void PlayerPartnerHandleHealthBarUpdate(void); -static void PlayerPartnerHandleExpUpdate(void); -static void PlayerPartnerHandleStatusIconUpdate(void); -static void PlayerPartnerHandleStatusAnimation(void); -static void PlayerPartnerHandleStatusXor(void); -static void PlayerPartnerHandleDataTransfer(void); -static void PlayerPartnerHandleDMA3Transfer(void); -static void PlayerPartnerHandlePlayBGM(void); -static void PlayerPartnerHandleCmd32(void); -static void PlayerPartnerHandleTwoReturnValues(void); -static void PlayerPartnerHandleChosenMonReturnValue(void); -static void PlayerPartnerHandleOneReturnValue(void); -static void PlayerPartnerHandleOneReturnValue_Duplicate(void); -static void PlayerPartnerHandleClearUnkVar(void); -static void PlayerPartnerHandleSetUnkVar(void); -static void PlayerPartnerHandleClearUnkFlag(void); -static void PlayerPartnerHandleToggleUnkFlag(void); -static void PlayerPartnerHandleHitAnimation(void); -static void PlayerPartnerHandleCantSwitch(void); -static void PlayerPartnerHandlePlaySE(void); -static void PlayerPartnerHandlePlayFanfareOrBGM(void); -static void PlayerPartnerHandleFaintingCry(void); -static void PlayerPartnerHandleIntroSlide(void); -static void PlayerPartnerHandleIntroTrainerBallThrow(void); -static void PlayerPartnerHandleDrawPartyStatusSummary(void); -static void PlayerPartnerHandleHidePartyStatusSummary(void); -static void PlayerPartnerHandleEndBounceEffect(void); -static void PlayerPartnerHandleSpriteInvisibility(void); -static void PlayerPartnerHandleBattleAnimation(void); -static void PlayerPartnerHandleLinkStandbyMsg(void); -static void PlayerPartnerHandleResetActionMoveSelection(void); -static void PlayerPartnerHandleEndLinkBattle(void); -static void PlayerPartnerHandleBattleDebug(void); -static void PlayerPartnerCmdEnd(void); +static void PlayerPartnerHandleLoadMonSprite(u32 battler); +static void PlayerPartnerHandleSwitchInAnim(u32 battler); +static void PlayerPartnerHandleDrawTrainerPic(u32 battler); +static void PlayerPartnerHandleTrainerSlideBack(u32 battler); +static void PlayerPartnerHandleMoveAnimation(u32 battler); +static void PlayerPartnerHandlePrintString(u32 battler); +static void PlayerPartnerHandleChooseAction(u32 battler); +static void PlayerPartnerHandleChooseMove(u32 battler); +static void PlayerPartnerHandleChoosePokemon(u32 battler); +static void PlayerPartnerHandleHealthBarUpdate(u32 battler); +static void PlayerPartnerHandleIntroTrainerBallThrow(u32 battler); +static void PlayerPartnerHandleDrawPartyStatusSummary(u32 battler); +static void PlayerPartnerHandleBattleAnimation(u32 battler); +static void PlayerPartnerHandleEndLinkBattle(u32 battler); -static void PlayerPartnerBufferRunCommand(void); -static void PlayerPartnerBufferExecCompleted(void); -static void Task_LaunchLvlUpAnim(u8 taskId); -static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId); -static void Task_PrepareToGiveExpWithExpBar(u8 taskId); -static void Task_GiveExpWithExpBar(u8 taskId); -static void Task_UpdateLvlInHealthbox(u8 taskId); -static void SwitchIn_WaitAndEnd(void); -static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst); -static void SetPlayerPartnerMonData(u8 monId); -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); -static void DoSwitchOutAnimation(void); -static void PlayerPartnerDoMoveAnimation(void); -static void Task_StartSendOutAnim(u8 taskId); -static void EndDrawPartyStatusSummary(void); +static void PlayerPartnerBufferRunCommand(u32 battler); +static void PlayerPartnerBufferExecCompleted(u32 battler); +static void SwitchIn_WaitAndEnd(u32 battler); -static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = +static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { - [CONTROLLER_GETMONDATA] = PlayerPartnerHandleGetMonData, - [CONTROLLER_GETRAWMONDATA] = PlayerPartnerHandleGetRawMonData, - [CONTROLLER_SETMONDATA] = PlayerPartnerHandleSetMonData, - [CONTROLLER_SETRAWMONDATA] = PlayerPartnerHandleSetRawMonData, + [CONTROLLER_GETMONDATA] = BtlController_HandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, + [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, [CONTROLLER_LOADMONSPRITE] = PlayerPartnerHandleLoadMonSprite, [CONTROLLER_SWITCHINANIM] = PlayerPartnerHandleSwitchInAnim, - [CONTROLLER_RETURNMONTOBALL] = PlayerPartnerHandleReturnMonToBall, + [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = PlayerPartnerHandleDrawTrainerPic, - [CONTROLLER_TRAINERSLIDE] = PlayerPartnerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDE] = BtlController_Empty, [CONTROLLER_TRAINERSLIDEBACK] = PlayerPartnerHandleTrainerSlideBack, - [CONTROLLER_FAINTANIMATION] = PlayerPartnerHandleFaintAnimation, - [CONTROLLER_PALETTEFADE] = PlayerPartnerHandlePaletteFade, - [CONTROLLER_SUCCESSBALLTHROWANIM] = PlayerPartnerHandleSuccessBallThrowAnim, - [CONTROLLER_BALLTHROWANIM] = PlayerPartnerHandleBallThrowAnim, - [CONTROLLER_PAUSE] = PlayerPartnerHandlePause, + [CONTROLLER_FAINTANIMATION] = BtlController_HandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = BtlController_Empty, + [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_PAUSE] = BtlController_Empty, [CONTROLLER_MOVEANIMATION] = PlayerPartnerHandleMoveAnimation, [CONTROLLER_PRINTSTRING] = PlayerPartnerHandlePrintString, - [CONTROLLER_PRINTSTRINGPLAYERONLY] = PlayerPartnerHandlePrintSelectionString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, [CONTROLLER_CHOOSEACTION] = PlayerPartnerHandleChooseAction, - [CONTROLLER_YESNOBOX] = PlayerPartnerHandleYesNoBox, + [CONTROLLER_YESNOBOX] = BtlController_Empty, [CONTROLLER_CHOOSEMOVE] = PlayerPartnerHandleChooseMove, - [CONTROLLER_OPENBAG] = PlayerPartnerHandleChooseItem, + [CONTROLLER_OPENBAG] = BtlController_Empty, [CONTROLLER_CHOOSEPOKEMON] = PlayerPartnerHandleChoosePokemon, - [CONTROLLER_23] = PlayerPartnerHandleCmd23, + [CONTROLLER_23] = BtlController_Empty, [CONTROLLER_HEALTHBARUPDATE] = PlayerPartnerHandleHealthBarUpdate, - [CONTROLLER_EXPUPDATE] = PlayerPartnerHandleExpUpdate, - [CONTROLLER_STATUSICONUPDATE] = PlayerPartnerHandleStatusIconUpdate, - [CONTROLLER_STATUSANIMATION] = PlayerPartnerHandleStatusAnimation, - [CONTROLLER_STATUSXOR] = PlayerPartnerHandleStatusXor, - [CONTROLLER_DATATRANSFER] = PlayerPartnerHandleDataTransfer, - [CONTROLLER_DMA3TRANSFER] = PlayerPartnerHandleDMA3Transfer, - [CONTROLLER_PLAYBGM] = PlayerPartnerHandlePlayBGM, - [CONTROLLER_32] = PlayerPartnerHandleCmd32, - [CONTROLLER_TWORETURNVALUES] = PlayerPartnerHandleTwoReturnValues, - [CONTROLLER_CHOSENMONRETURNVALUE] = PlayerPartnerHandleChosenMonReturnValue, - [CONTROLLER_ONERETURNVALUE] = PlayerPartnerHandleOneReturnValue, - [CONTROLLER_ONERETURNVALUE_DUPLICATE] = PlayerPartnerHandleOneReturnValue_Duplicate, - [CONTROLLER_CLEARUNKVAR] = PlayerPartnerHandleClearUnkVar, - [CONTROLLER_SETUNKVAR] = PlayerPartnerHandleSetUnkVar, - [CONTROLLER_CLEARUNKFLAG] = PlayerPartnerHandleClearUnkFlag, - [CONTROLLER_TOGGLEUNKFLAG] = PlayerPartnerHandleToggleUnkFlag, - [CONTROLLER_HITANIMATION] = PlayerPartnerHandleHitAnimation, - [CONTROLLER_CANTSWITCH] = PlayerPartnerHandleCantSwitch, - [CONTROLLER_PLAYSE] = PlayerPartnerHandlePlaySE, - [CONTROLLER_PLAYFANFAREORBGM] = PlayerPartnerHandlePlayFanfareOrBGM, - [CONTROLLER_FAINTINGCRY] = PlayerPartnerHandleFaintingCry, - [CONTROLLER_INTROSLIDE] = PlayerPartnerHandleIntroSlide, + [CONTROLLER_EXPUPDATE] = PlayerHandleExpUpdate, // Partner's player gets experience the same way as the player. + [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, + [CONTROLLER_STATUSXOR] = BtlController_Empty, + [CONTROLLER_DATATRANSFER] = BtlController_Empty, + [CONTROLLER_DMA3TRANSFER] = BtlController_Empty, + [CONTROLLER_PLAYBGM] = BtlController_Empty, + [CONTROLLER_32] = BtlController_Empty, + [CONTROLLER_TWORETURNVALUES] = BtlController_Empty, + [CONTROLLER_CHOSENMONRETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, + [CONTROLLER_CLEARUNKVAR] = BtlController_HandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = BtlController_HandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = BtlController_HandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = BtlController_HandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, + [CONTROLLER_CANTSWITCH] = BtlController_Empty, + [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = BtlController_HandleFaintingCry, + [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, [CONTROLLER_INTROTRAINERBALLTHROW] = PlayerPartnerHandleIntroTrainerBallThrow, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = PlayerPartnerHandleDrawPartyStatusSummary, - [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = PlayerPartnerHandleHidePartyStatusSummary, - [CONTROLLER_ENDBOUNCE] = PlayerPartnerHandleEndBounceEffect, - [CONTROLLER_SPRITEINVISIBILITY] = PlayerPartnerHandleSpriteInvisibility, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = BtlController_Empty, + [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, [CONTROLLER_BATTLEANIMATION] = PlayerPartnerHandleBattleAnimation, - [CONTROLLER_LINKSTANDBYMSG] = PlayerPartnerHandleLinkStandbyMsg, - [CONTROLLER_RESETACTIONMOVESELECTION] = PlayerPartnerHandleResetActionMoveSelection, + [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, + [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = PlayerPartnerHandleEndLinkBattle, - [CONTROLLER_DEBUGMENU] = PlayerPartnerHandleBattleDebug, - [CONTROLLER_TERMINATOR_NOP] = PlayerPartnerCmdEnd + [CONTROLLER_DEBUGMENU] = BtlController_Empty, + [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; -// unknown unused data -static const u8 sUnused[] = -{ - 0x83, 0x4d, 0xf3, 0x5f, 0x6f, 0x4f, 0xeb, 0x3e, - 0x67, 0x2e, 0x10, 0x46, 0x8c, 0x3d, 0x28, 0x35, - 0xc5, 0x2c, 0x15, 0x7f, 0xb5, 0x56, 0x9d, 0x53, - 0x3b, 0x43, 0xda, 0x36, 0x79, 0x2a, 0x0e, 0x53, -}; - -static void PlayerPartnerDummy(void) +void SetControllerToPlayerPartner(u32 battler) { + gBattlerControllerEndFuncs[battler] = PlayerPartnerBufferExecCompleted; + gBattlerControllerFuncs[battler] = PlayerPartnerBufferRunCommand; } -void SetControllerToPlayerPartner(void) +static void PlayerPartnerBufferRunCommand(u32 battler) { - gBattlerControllerFuncs[gActiveBattler] = PlayerPartnerBufferRunCommand; -} - -static void PlayerPartnerBufferRunCommand(void) -{ - if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) + if (gBattleControllerExecFlags & gBitTable[battler]) { - if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sPlayerPartnerBufferCommands)) - sPlayerPartnerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sPlayerPartnerBufferCommands)) + sPlayerPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - PlayerPartnerBufferExecCompleted(); + PlayerPartnerBufferExecCompleted(battler); } } -static void CompleteOnBattlerSpriteCallbackDummy(void) +static void Intro_DelayAndEnd(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - PlayerPartnerBufferExecCompleted(); -} - -static void FreeTrainerSpriteAfterSlide(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) { - BattleGfxSfxDummy3(MALE); - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - PlayerPartnerBufferExecCompleted(); + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; + BattleControllerComplete(battler); } } -static void Intro_DelayAndEnd(void) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; - PlayerPartnerBufferExecCompleted(); - } -} - -static void Intro_WaitForHealthbox(void) +static void Intro_WaitForHealthbox(u32 battler) { bool32 finished = FALSE; if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) finished = TRUE; } else { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) { finished = TRUE; } @@ -246,1061 +161,137 @@ static void Intro_WaitForHealthbox(void) if (finished) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; - gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; + gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; } } -static void Intro_ShowHealthbox(void) +// Also used by the link partner. +void Controller_PlayerPartnerShowIntroHealthbox(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive - && gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay != 1) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive + && gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && ++gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay != 1) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(gActiveBattler)]]); - UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)], &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], HEALTHBOX_ALL); - StartHealthboxSlideIn(BATTLE_PARTNER(gActiveBattler)); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]); + DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(battler)], &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], HEALTHBOX_ALL); + StartHealthboxSlideIn(BATTLE_PARTNER(battler)); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(battler)]); } - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + DestroySprite(&gSprites[gBattleControllerData[battler]]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; - gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForHealthbox; + gBattlerControllerFuncs[battler] = Intro_WaitForHealthbox; } } -static void WaitForMonAnimAfterLoad(void) +static void WaitForMonAnimAfterLoad(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded && gSprites[gBattlerSpriteIds[gActiveBattler]].x2 == 0) - PlayerPartnerBufferExecCompleted(); + if (gSprites[gBattlerSpriteIds[battler]].animEnded && gSprites[gBattlerSpriteIds[battler]].x2 == 0) + PlayerPartnerBufferExecCompleted(battler); } -static void CompleteOnHealthbarDone(void) +static void SwitchIn_ShowSubstitute(u32 battler) { - s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); - - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - - if (hpValue != -1) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); - } - else - { - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - PlayerPartnerBufferExecCompleted(); + CopyBattleSpriteInvisibility(battler); + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); + + gBattlerControllerFuncs[battler] = SwitchIn_WaitAndEnd; } } -static void CompleteOnInactiveTextPrinter(void) +static void SwitchIn_WaitAndEnd(u32 battler) { - if (!IsTextPrinterActive(B_WIN_MSG)) - PlayerPartnerBufferExecCompleted(); -} - -// the whole exp task is copied&pasted from player controller -#define tExpTask_monId data[0] -#define tExpTask_gainedExp data[1] -#define tExpTask_bank data[2] -#define tExpTask_frames data[10] - -static void Task_GiveExpToMon(u8 taskId) -{ - u32 monId = (u8)(gTasks[taskId].tExpTask_monId); - u8 battlerId = gTasks[taskId].tExpTask_bank; - s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; - - if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // give exp without the expbar + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { - struct Pokemon *mon = &gPlayerParty[monId]; - u16 species = GetMonData(mon, MON_DATA_SPECIES); - u8 level = GetMonData(mon, MON_DATA_LEVEL); - u32 currExp = GetMonData(mon, MON_DATA_EXP); - u32 nextLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; - - if (currExp + gainedExp >= nextLvlExp) - { - u8 savedActiveBank; - - SetMonData(mon, MON_DATA_EXP, &nextLvlExp); - CalculateMonStats(mon); - gainedExp -= nextLvlExp - currExp; - savedActiveBank = gActiveBattler; - gActiveBattler = battlerId; - BtlController_EmitTwoReturnValues(BUFFER_B, RET_VALUE_LEVELED_UP, gainedExp); - gActiveBattler = savedActiveBank; - - if (IsDoubleBattle() == TRUE - && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)])) - gTasks[taskId].func = Task_LaunchLvlUpAnim; - else - gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; - } - else - { - currExp += gainedExp; - SetMonData(mon, MON_DATA_EXP, &currExp); - gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; - DestroyTask(taskId); - } - } - else - { - gTasks[taskId].func = Task_PrepareToGiveExpWithExpBar; + PlayerPartnerBufferExecCompleted(battler); } } -static void Task_PrepareToGiveExpWithExpBar(u8 taskId) +static void SwitchIn_ShowHealthbox(u32 battler) { - u8 monIndex = gTasks[taskId].tExpTask_monId; - s32 gainedExp = gTasks[taskId].tExpTask_gainedExp; - u8 battlerId = gTasks[taskId].tExpTask_bank; - struct Pokemon *mon = &gPlayerParty[monIndex]; - u8 level = GetMonData(mon, MON_DATA_LEVEL); - u16 species = GetMonData(mon, MON_DATA_SPECIES); - u32 exp = GetMonData(mon, MON_DATA_EXP); - u32 currLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level]; - u32 expToNextLvl; - - exp -= currLvlExp; - expToNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLvlExp; - SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); - PlaySE(SE_EXP); - gTasks[taskId].func = Task_GiveExpWithExpBar; -} - -static void Task_GiveExpWithExpBar(u8 taskId) -{ - if (gTasks[taskId].tExpTask_frames < 13) + if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) { - gTasks[taskId].tExpTask_frames++; - } - else - { - u8 monId = gTasks[taskId].tExpTask_monId; - s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; - u8 battlerId = gTasks[taskId].tExpTask_bank; - s16 r4; - - r4 = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]); - if (r4 == -1) - { - u8 level; - s32 currExp; - u16 species; - s32 expOnNextLvl; - - m4aSongNumStop(SE_EXP); - level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); - species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - expOnNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; - - if (currExp + gainedExp >= expOnNextLvl) - { - u8 savedActiveBank; - - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl); - CalculateMonStats(&gPlayerParty[monId]); - gainedExp -= expOnNextLvl - currExp; - savedActiveBank = gActiveBattler; - gActiveBattler = battlerId; - BtlController_EmitTwoReturnValues(BUFFER_B, RET_VALUE_LEVELED_UP, gainedExp); - gActiveBattler = savedActiveBank; - gTasks[taskId].func = Task_LaunchLvlUpAnim; - } - else - { - currExp += gainedExp; - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp); - gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; - DestroyTask(taskId); - } - } - } -} - -static void Task_LaunchLvlUpAnim(u8 taskId) -{ - u8 battlerId = gTasks[taskId].tExpTask_bank; - u8 monIndex = gTasks[taskId].tExpTask_monId; - - if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]) - battlerId ^= BIT_FLANK; - - InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP); - gTasks[taskId].func = Task_UpdateLvlInHealthbox; -} - -static void Task_UpdateLvlInHealthbox(u8 taskId) -{ - u8 battlerId = gTasks[taskId].tExpTask_bank; - - if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive) - { - u8 monIndex = gTasks[taskId].tExpTask_monId; - - GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value - - if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]) - UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(battlerId)], &gPlayerParty[monIndex], HEALTHBOX_ALL); - else - UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL); - - gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; - } -} - -static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId) -{ - u8 monIndex; - u8 battlerId; - - monIndex = gTasks[taskId].tExpTask_monId; - GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value - battlerId = gTasks[taskId].tExpTask_bank; - gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; - DestroyTask(taskId); -} - -static void FreeMonSpriteAfterFaintAnim(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].y + gSprites[gBattlerSpriteIds[gActiveBattler]].y2 > DISPLAY_HEIGHT) - { - u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - BattleGfxSfxDummy2(species); - FreeOamMatrix(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.matrixNum); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - PlayerPartnerBufferExecCompleted(); - } -} - -static void FreeMonSpriteAfterSwitchOutAnim(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - PlayerPartnerBufferExecCompleted(); - } -} - -static void CompleteOnInactiveTextPrinter2(void) -{ - if (!IsTextPrinterActive(B_WIN_MSG)) - PlayerPartnerBufferExecCompleted(); -} - -static void DoHitAnimBlinkSpriteEffect(void) -{ - u8 spriteId = gBattlerSpriteIds[gActiveBattler]; - - if (gSprites[spriteId].data[1] == 32) - { - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = FALSE; - PlayerPartnerBufferExecCompleted(); - } - else - { - if ((gSprites[spriteId].data[1] % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data[1]++; - } -} - -static void SwitchIn_ShowSubstitute(void) -{ - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - { - CopyBattleSpriteInvisibility(gActiveBattler); - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_WaitAndEnd; - } -} - -static void SwitchIn_WaitAndEnd(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - { - PlayerPartnerBufferExecCompleted(); - } -} - -static void SwitchIn_ShowHealthbox(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowSubstitute; + gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; } } -static void SwitchIn_TryShinyAnim(void) +static void SwitchIn_TryShinyAnim(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) { - TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + TryShinyAnimation(battler, &gPlayerParty[gBattlerPartyIndexes[battler]]); } - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) { - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowHealthbox; + DestroySprite(&gSprites[gBattleControllerData[battler]]); + gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; } } -static void PlayerPartnerBufferExecCompleted(void) +static void PlayerPartnerBufferExecCompleted(u32 battler) { - gBattlerControllerFuncs[gActiveBattler] = PlayerPartnerBufferRunCommand; + gBattlerControllerFuncs[battler] = PlayerPartnerBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP; } else { - gBattleControllerExecFlags &= ~gBitTable[gActiveBattler]; + gBattleControllerExecFlags &= ~gBitTable[battler]; } } -static void CompleteOnFinishedStatusAnimation(void) +static void PlayerPartnerHandleLoadMonSprite(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) - PlayerPartnerBufferExecCompleted(); + BtlController_HandleLoadMonSprite(battler, WaitForMonAnimAfterLoad); } -static void CompleteOnFinishedBattleAnimation(void) +static void PlayerPartnerHandleSwitchInAnim(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive) - PlayerPartnerBufferExecCompleted(); + BtlController_HandleSwitchInAnim(battler, TRUE, SwitchIn_TryShinyAnim); } -static void PlayerPartnerHandleGetMonData(void) -{ - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data - u32 size = 0; - u8 monToCheck; - s32 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - size += CopyPlayerPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - size += CopyPlayerPartnerMonData(i, monData + size); - monToCheck >>= 1; - } - } - BtlController_EmitDataTransfer(BUFFER_B, size, monData); - PlayerPartnerBufferExecCompleted(); -} - -static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst) -{ - struct BattlePokemon battleMon; - struct MovePpInfo moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); - for (size = 0; size < MAX_MON_MOVES; size++) - { - battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); - battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - } - battleMon.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - battleMon.friendship = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP); - battleMon.experience = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); - battleMon.hpIV = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - battleMon.attackIV = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - battleMon.defenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - battleMon.speedIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - battleMon.spAttackIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - battleMon.spDefenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - battleMon.personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - battleMon.status1 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS); - battleMon.level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - battleMon.hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP); - battleMon.maxHP = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP); - battleMon.attack = GetMonData(&gPlayerParty[monId], MON_DATA_ATK); - battleMon.defense = GetMonData(&gPlayerParty[monId], MON_DATA_DEF); - battleMon.speed = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED); - battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); - battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); - battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); - battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); - battleMon.metLevel = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); - GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy_Nickname(battleMon.nickname, nickname); - GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); - src = (u8 *)&battleMon; - for (size = 0; size < sizeof(battleMon); size++) - dst[size] = src[size]; - break; - case REQUEST_SPECIES_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_HELDITEM_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MOVES_PP_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - { - moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - src = (u8 *)(&moveData); - for (size = 0; size < sizeof(moveData); size++) - dst[size] = src[size]; - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_PP_DATA_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - size++; - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); - size = 1; - break; - case REQUEST_OTID_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_EXP_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_HP_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_EV); - size = 1; - break; - case REQUEST_ATK_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV); - size = 1; - break; - case REQUEST_DEF_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV); - size = 1; - break; - case REQUEST_SPEED_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV); - size = 1; - break; - case REQUEST_SPATK_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV); - size = 1; - break; - case REQUEST_SPDEF_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV); - size = 1; - break; - case REQUEST_FRIENDSHIP_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP); - size = 1; - break; - case REQUEST_POKERUS_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKERUS); - size = 1; - break; - case REQUEST_MET_LOCATION_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION); - size = 1; - break; - case REQUEST_MET_LEVEL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); - size = 1; - break; - case REQUEST_MET_GAME_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME); - size = 1; - break; - case REQUEST_POKEBALL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL); - size = 1; - break; - case REQUEST_ALL_IVS_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - dst[1] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - dst[2] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - dst[3] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - dst[4] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - dst[5] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - size = 6; - break; - case REQUEST_HP_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - size = 1; - break; - case REQUEST_ATK_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - size = 1; - break; - case REQUEST_DEF_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - size = 1; - break; - case REQUEST_SPEED_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - size = 1; - break; - case REQUEST_SPATK_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - size = 1; - break; - case REQUEST_SPDEF_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - size = 1; - break; - case REQUEST_PERSONALITY_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_CHECKSUM_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_STATUS_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_LEVEL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - size = 1; - break; - case REQUEST_HP_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MAX_HP_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_ATK_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_ATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_DEF_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_DEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPEED_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPATK_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPDEF_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_COOL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL); - size = 1; - break; - case REQUEST_BEAUTY_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY); - size = 1; - break; - case REQUEST_CUTE_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE); - size = 1; - break; - case REQUEST_SMART_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART); - size = 1; - break; - case REQUEST_TOUGH_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH); - size = 1; - break; - case REQUEST_SHEEN_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SHEEN); - size = 1; - break; - case REQUEST_COOL_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON); - size = 1; - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case REQUEST_CUTE_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case REQUEST_SMART_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON); - size = 1; - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - - return size; -} - -static void PlayerPartnerHandleGetRawMonData(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleSetMonData(void) -{ - u8 monToCheck; - u8 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - SetPlayerPartnerMonData(gBattlerPartyIndexes[gActiveBattler]); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - SetPlayerPartnerMonData(i); - monToCheck >>= 1; - } - } - PlayerPartnerBufferExecCompleted(); -} - -static void SetPlayerPartnerMonData(u8 monId) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; - s32 i; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - { - u8 iv; - - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species); - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); - } - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &iv); - iv = battlePokemon->attackIV; - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &iv); - iv = battlePokemon->defenseIV; - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &iv); - iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &iv); - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality); - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &battlePokemon->status1); - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &battlePokemon->level); - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &battlePokemon->hp); - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &battlePokemon->attack); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &battlePokemon->defense); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &battlePokemon->speed); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense); - } - break; - case REQUEST_SPECIES_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HELDITEM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MOVES_PP_BATTLE: - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]); - } - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PP_DATA_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_OTID_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_EXP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKERUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_GAME_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKEBALL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); - break; - case REQUEST_HP_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_STATUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MAX_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SHEEN_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - } - - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); -} - -static void PlayerPartnerHandleSetRawMonData(void) -{ - u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; - u8 i; - - for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) - dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; - - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleLoadMonSprite(void) -{ - u16 species; - - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); - - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSpriteSubpriority(gActiveBattler)); - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); - gBattlerControllerFuncs[gActiveBattler] = WaitForMonAnimAfterLoad; -} - -static void PlayerPartnerHandleSwitchInAnim(void) -{ - ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); - gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; -} - -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) -{ - u16 species; - - ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); - - gBattlerSpriteIds[battlerId] = CreateSprite( - &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSpriteSubpriority(battlerId)); - - gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; - gSprites[gBattleControllerData[battlerId]].data[2] = battlerId; - - gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; - gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; - gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - - StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); - - gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; - gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - - gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); -} - -static void PlayerPartnerHandleReturnMonToBall(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] == 0) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; - } - else - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - PlayerPartnerBufferExecCompleted(); - } -} - -static void DoSwitchOutAnimation(void) -{ - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); - gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim; - } - break; - } -} - -#define sSpeedX data[0] - // some explanation here // in emerald it's possible to have a tag battle in the battle frontier facilities with AI // which use the front sprite for both the player and the partner as opposed to any other battles (including the one with Steven) that use the back pic as well as animate it -static void PlayerPartnerHandleDrawTrainerPic(void) +static void PlayerPartnerHandleDrawTrainerPic(u32 battler) { + bool32 isFrontPic; s16 xPos, yPos; u32 trainerPicId; @@ -1329,243 +320,84 @@ static void PlayerPartnerHandleDrawTrainerPic(void) yPos = (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 80; } - // Use back pic only if the partner is Steven + // Use back pic only if the partner is Steven or a custom partner. if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER || gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER) - { - DecompressTrainerBackPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - } - else // otherwise use front sprite - { - DecompressTrainerFrontPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].y2 = 48; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = ST_OAM_AFFINE_OFF; - gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1; - } - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; -} - -#undef sSpeedX - -static void PlayerPartnerHandleTrainerSlide(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleTrainerSlideBack(void) -{ - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy); - gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; -} - -#define sSpeedX data[1] -#define sSpeedY data[2] - -static void PlayerPartnerHandleFaintAnimation(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0) - { - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++; - } + isFrontPic = FALSE; else - { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 0; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedY = 5; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim; - gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim; - } - } + isFrontPic = TRUE; + + BtlController_HandleDrawTrainerPic(battler, trainerPicId, isFrontPic, xPos, yPos, -1); } -#undef sSpeedX -#undef sSpeedY - -static void PlayerPartnerHandlePaletteFade(void) +static void PlayerPartnerHandleTrainerSlideBack(u32 battler) { - PlayerPartnerBufferExecCompleted(); + BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void PlayerPartnerHandleSuccessBallThrowAnim(void) +static void PlayerPartnerHandleMoveAnimation(u32 battler) { - PlayerPartnerBufferExecCompleted(); + BtlController_HandleMoveAnimation(battler, FALSE); } -static void PlayerPartnerHandleBallThrowAnim(void) +static void PlayerPartnerHandlePrintString(u32 battler) { - PlayerPartnerBufferExecCompleted(); + BtlController_HandlePrintString(battler, FALSE, FALSE); } -static void PlayerPartnerHandlePause(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleMoveAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - - gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; - gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; - gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = PlayerPartnerDoMoveAnimation; - } -} - -static void PlayerPartnerDoMoveAnimation(void) -{ - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; - - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute - && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8) - { - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF); - DoMoveAnim(move); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL); - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) - { - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 0; - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; - } - break; - case 3: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - PlayerPartnerBufferExecCompleted(); - } - break; - } -} - -static void PlayerPartnerHandlePrintString(void) -{ - u16 *stringId; - - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); - BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2; -} - -static void PlayerPartnerHandlePrintSelectionString(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleChooseAction(void) +static void PlayerPartnerHandleChooseAction(u32 battler) { AI_TrySwitchOrUseItem(); - PlayerPartnerBufferExecCompleted(); + PlayerPartnerBufferExecCompleted(battler); } -static void PlayerPartnerHandleYesNoBox(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleChooseMove(void) +static void PlayerPartnerHandleChooseMove(u32 battler) { u8 chosenMoveId; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); - chosenMoveId = gBattleStruct->aiMoveOrAction[gActiveBattler]; - gBattlerTarget = gBattleStruct->aiChosenTarget[gActiveBattler]; + chosenMoveId = gBattleStruct->aiMoveOrAction[battler]; + gBattlerTarget = gBattleStruct->aiChosenTarget[battler]; - if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) - gBattlerTarget = gActiveBattler; - if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH) + if (chosenMoveId == AI_CHOICE_SWITCH) { - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, 0xFFFF); + } + else + { + if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) + gBattlerTarget = battler; + if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH) + { + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + } + + if (ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveId])) + QueueZMove(battler, moveInfo->moves[chosenMoveId]); + + // If partner can mega evolve, do it. + if (CanMegaEvolve(battler)) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8)); + else if (CanUltraBurst(battler)) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (RET_ULTRA_BURST) | (gBattlerTarget << 8)); + else + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); } - if (ShouldUseZMove(gActiveBattler, gBattlerTarget, moveInfo->moves[chosenMoveId])) - QueueZMove(gActiveBattler, moveInfo->moves[chosenMoveId]); - - // If partner can mega evolve, do it. - if (CanMegaEvolve(gActiveBattler)) - BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8)); - else - BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); - - PlayerPartnerBufferExecCompleted(); + PlayerPartnerBufferExecCompleted(battler); } -static void PlayerPartnerHandleChooseItem(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleChoosePokemon(void) +static void PlayerPartnerHandleChoosePokemon(u32 battler) { s32 chosenMonId; // Choosing Revival Blessing target - if ((gBattleResources->bufferA[gActiveBattler][1] & 0xF) == PARTY_ACTION_CHOOSE_FAINTED_MON) + if ((gBattleResources->bufferA[battler][1] & 0xF) == PARTY_ACTION_CHOOSE_FAINTED_MON) { - chosenMonId = gSelectedMonPartyId = GetFirstFaintedPartyIndex(gActiveBattler); + chosenMonId = gSelectedMonPartyId = GetFirstFaintedPartyIndex(battler); } // Switching out - else + else if (gBattleStruct->monToSwitchIntoId[battler] == PARTY_SIZE) { chosenMonId = GetMostSuitableMonToSwitchInto(); if (chosenMonId == PARTY_SIZE) // just switch to the next mon @@ -1583,396 +415,54 @@ static void PlayerPartnerHandleChoosePokemon(void) } } } - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; + *(gBattleStruct->monToSwitchIntoId + battler) = chosenMonId; + } + else // Mon to switch out has been already chosen. + { + chosenMonId = gBattleStruct->monToSwitchIntoId[battler]; + *(gBattleStruct->AI_monToSwitchIntoId + battler) = PARTY_SIZE; + *(gBattleStruct->monToSwitchIntoId + battler) = chosenMonId; } BtlController_EmitChosenMonReturnValue(BUFFER_B, chosenMonId, NULL); - PlayerPartnerBufferExecCompleted(); + PlayerPartnerBufferExecCompleted(battler); } -static void PlayerPartnerHandleCmd23(void) +static void PlayerPartnerHandleHealthBarUpdate(u32 battler) { - PlayerPartnerBufferExecCompleted(); + BtlController_HandleHealthBarUpdate(battler, FALSE); } -static void PlayerPartnerHandleHealthBarUpdate(void) +static void PlayerPartnerHandleIntroTrainerBallThrow(u32 battler) { - s16 hpVal; + const u32 *trainerPal; - LoadBattleBarGfx(0); - hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (hpVal != INSTANT_HP_BAR_DROP) - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); - } - else - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); - } - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; -} - -static void PlayerPartnerHandleExpUpdate(void) -{ - u8 monId = gBattleResources->bufferA[gActiveBattler][1]; - - if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_LEVEL) - { - PlayerPartnerBufferExecCompleted(); - } - else - { - s16 expPointsToGive; - u8 taskId; - - LoadBattleBarGfx(1); - GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // unused return value - expPointsToGive = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - taskId = CreateTask(Task_GiveExpToMon, 10); - gTasks[taskId].tExpTask_monId = monId; - gTasks[taskId].tExpTask_gainedExp = expPointsToGive; - gTasks[taskId].tExpTask_bank = gActiveBattler; - gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy; - } -} - -#undef tExpTask_monId -#undef tExpTask_gainedExp -#undef tExpTask_bank -#undef tExpTask_frames - -static void PlayerPartnerHandleStatusIconUpdate(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 battlerId; - - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - battlerId = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } -} - -static void PlayerPartnerHandleStatusAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], - gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } -} - -static void PlayerPartnerHandleStatusXor(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleDataTransfer(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleDMA3Transfer(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandlePlayBGM(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleCmd32(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleTwoReturnValues(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleChosenMonReturnValue(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleOneReturnValue(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleOneReturnValue_Duplicate(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleClearUnkVar(void) -{ - gUnusedControllerStruct.unk = 0; - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleSetUnkVar(void) -{ - gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleClearUnkFlag(void) -{ - gUnusedControllerStruct.flag = 0; - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleToggleUnkFlag(void) -{ - gUnusedControllerStruct.flag ^= 1; - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleHitAnimation(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE) - { - PlayerPartnerBufferExecCompleted(); - } - else - { - gDoingBattleAnim = TRUE; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; - DoHitAnimHealthboxEffect(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect; - } -} - -static void PlayerPartnerHandleCantSwitch(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandlePlaySE(void) -{ - s8 pan; - - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - pan = SOUND_PAN_ATTACKER; - else - pan = SOUND_PAN_TARGET; - - PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandlePlayFanfareOrBGM(void) -{ - if (gBattleResources->bufferA[gActiveBattler][3]) - { - BattleStopLowHpSound(); - PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - else - { - PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleFaintingCry(void) -{ - u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - PlayCry_ByMode(species, -25, CRY_MODE_FAINT); - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleIntroSlide(void) -{ - HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); - gIntroSlideFlags |= 1; - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleIntroTrainerBallThrow(void) -{ - u8 paletteNum; - u8 taskId; - - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; - - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); - - paletteNum = AllocSpritePalette(0xD6F9); if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER) - { - u8 spriteId = TRAINER_BACK_PIC_STEVEN; - LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); - } - else if (gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER) - { - u8 spriteId = gPartnerSpriteId; - LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32); - } + trainerPal = gTrainerBackPicPaletteTable[TRAINER_STEVEN_PARTNER].data; + else if (gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER) // Custom multi battle. + trainerPal = gTrainerBackPicPaletteTable[gPartnerSpriteId].data; else if (IsAiVsAiBattle()) - { - u8 spriteId = gTrainers[gPartnerTrainerId].trainerPic; - LoadCompressedPalette(gTrainerFrontPicPaletteTable[spriteId].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); - } + trainerPal = gTrainerFrontPicPaletteTable[gTrainers[gPartnerTrainerId].trainerPic].data; else - { - u8 spriteId = GetFrontierTrainerFrontSpriteId(gPartnerTrainerId); - LoadCompressedPalette(gTrainerFrontPicPaletteTable[spriteId].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); - } + trainerPal = gTrainerFrontPicPaletteTable[GetFrontierTrainerFrontSpriteId(gPartnerTrainerId)].data; // 2 vs 2 multi battle in Battle Frontier, load front sprite and pal. - - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; - - taskId = CreateTask(Task_StartSendOutAnim, 5); - gTasks[taskId].data[0] = gActiveBattler; - - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - - gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; - gBattlerControllerFuncs[gActiveBattler] = PlayerPartnerDummy; + BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F9, trainerPal, 24, Controller_PlayerPartnerShowIntroHealthbox); } -static void Task_StartSendOutAnim(u8 taskId) +static void PlayerPartnerHandleDrawPartyStatusSummary(u32 battler) { - if (gTasks[taskId].data[1] < 24) - { - gTasks[taskId].data[1]++; - } - else - { - u8 savedActiveBank = gActiveBattler; - - gActiveBattler = gTasks[taskId].data[0]; - if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - } - else - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - } - gBattlerControllerFuncs[gActiveBattler] = Intro_ShowHealthbox; - gActiveBattler = savedActiveBank; - DestroyTask(taskId); - } + BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_PLAYER, TRUE); } -static void PlayerPartnerHandleDrawPartyStatusSummary(void) +static void PlayerPartnerHandleBattleAnimation(u32 battler) { - if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - PlayerPartnerBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - - if (gBattleResources->bufferA[gActiveBattler][2] != 0) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; - - gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; - } + BtlController_HandleBattleAnimation(battler, FALSE, FALSE); } -static void EndDrawPartyStatusSummary(void) +static void PlayerPartnerHandleEndLinkBattle(u32 battler) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 92) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - PlayerPartnerBufferExecCompleted(); - } -} - -static void PlayerPartnerHandleHidePartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleEndBounceEffect(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleSpriteInvisibility(void) -{ - if (IsBattlerSpritePresent(gActiveBattler)) - { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; - CopyBattleSpriteInvisibility(gActiveBattler); - } - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleBattleAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; - u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) - PlayerPartnerBufferExecCompleted(); - else - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation; - } -} - -static void PlayerPartnerHandleLinkStandbyMsg(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleResetActionMoveSelection(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerHandleEndLinkBattle(void) -{ - gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; + gBattleOutcome = gBattleResources->bufferA[battler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - PlayerPartnerBufferExecCompleted(); - gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; -} - -static void PlayerPartnerHandleBattleDebug(void) -{ - PlayerPartnerBufferExecCompleted(); -} - -static void PlayerPartnerCmdEnd(void) -{ + PlayerPartnerBufferExecCompleted(battler); + gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 283388fcf..478970888 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -32,273 +32,214 @@ #include "constants/songs.h" #include "constants/trainers.h" -static void RecordedOpponentHandleGetMonData(void); -static void RecordedOpponentHandleGetRawMonData(void); -static void RecordedOpponentHandleSetMonData(void); -static void RecordedOpponentHandleSetRawMonData(void); -static void RecordedOpponentHandleLoadMonSprite(void); -static void RecordedOpponentHandleSwitchInAnim(void); -static void RecordedOpponentHandleReturnMonToBall(void); -static void RecordedOpponentHandleDrawTrainerPic(void); -static void RecordedOpponentHandleTrainerSlide(void); -static void RecordedOpponentHandleTrainerSlideBack(void); -static void RecordedOpponentHandleFaintAnimation(void); -static void RecordedOpponentHandlePaletteFade(void); -static void RecordedOpponentHandleSuccessBallThrowAnim(void); -static void RecordedOpponentHandleBallThrowAnim(void); -static void RecordedOpponentHandlePause(void); -static void RecordedOpponentHandleMoveAnimation(void); -static void RecordedOpponentHandlePrintString(void); -static void RecordedOpponentHandlePrintSelectionString(void); -static void RecordedOpponentHandleChooseAction(void); -static void RecordedOpponentHandleYesNoBox(void); -static void RecordedOpponentHandleChooseMove(void); -static void RecordedOpponentHandleChooseItem(void); -static void RecordedOpponentHandleChoosePokemon(void); -static void RecordedOpponentHandleCmd23(void); -static void RecordedOpponentHandleHealthBarUpdate(void); -static void RecordedOpponentHandleExpUpdate(void); -static void RecordedOpponentHandleStatusIconUpdate(void); -static void RecordedOpponentHandleStatusAnimation(void); -static void RecordedOpponentHandleStatusXor(void); -static void RecordedOpponentHandleDataTransfer(void); -static void RecordedOpponentHandleDMA3Transfer(void); -static void RecordedOpponentHandlePlayBGM(void); -static void RecordedOpponentHandleCmd32(void); -static void RecordedOpponentHandleTwoReturnValues(void); -static void RecordedOpponentHandleChosenMonReturnValue(void); -static void RecordedOpponentHandleOneReturnValue(void); -static void RecordedOpponentHandleOneReturnValue_Duplicate(void); -static void RecordedOpponentHandleClearUnkVar(void); -static void RecordedOpponentHandleSetUnkVar(void); -static void RecordedOpponentHandleClearUnkFlag(void); -static void RecordedOpponentHandleToggleUnkFlag(void); -static void RecordedOpponentHandleHitAnimation(void); -static void RecordedOpponentHandleCantSwitch(void); -static void RecordedOpponentHandlePlaySE(void); -static void RecordedOpponentHandlePlayFanfareOrBGM(void); -static void RecordedOpponentHandleFaintingCry(void); -static void RecordedOpponentHandleIntroSlide(void); -static void RecordedOpponentHandleIntroTrainerBallThrow(void); -static void RecordedOpponentHandleDrawPartyStatusSummary(void); -static void RecordedOpponentHandleHidePartyStatusSummary(void); -static void RecordedOpponentHandleEndBounceEffect(void); -static void RecordedOpponentHandleSpriteInvisibility(void); -static void RecordedOpponentHandleBattleAnimation(void); -static void RecordedOpponentHandleLinkStandbyMsg(void); -static void RecordedOpponentHandleResetActionMoveSelection(void); -static void RecordedOpponentHandleEndLinkBattle(void); -static void RecordedOpponentHandleBattleDebug(void); -static void RecordedOpponentCmdEnd(void); +static void RecordedOpponentHandleLoadMonSprite(u32 battler); +static void RecordedOpponentHandleSwitchInAnim(u32 battler); +static void RecordedOpponentHandleDrawTrainerPic(u32 battler); +static void RecordedOpponentHandleTrainerSlideBack(u32 battler); +static void RecordedOpponentHandleMoveAnimation(u32 battler); +static void RecordedOpponentHandlePrintString(u32 battler); +static void RecordedOpponentHandleChooseAction(u32 battler); +static void RecordedOpponentHandleChooseMove(u32 battler); +static void RecordedOpponentHandleChooseItem(u32 battler); +static void RecordedOpponentHandleChoosePokemon(u32 battler); +static void RecordedOpponentHandleHealthBarUpdate(u32 battler); +static void RecordedOpponentHandleStatusIconUpdate(u32 battler); +static void RecordedOpponentHandleStatusAnimation(u32 battler); +static void RecordedOpponentHandleIntroTrainerBallThrow(u32 battler); +static void RecordedOpponentHandleDrawPartyStatusSummary(u32 battler); +static void RecordedOpponentHandleBattleAnimation(u32 battler); +static void RecordedOpponentHandleEndLinkBattle(u32 battler); -static void RecordedOpponentBufferRunCommand(void); -static void RecordedOpponentBufferExecCompleted(void); -static void SwitchIn_HandleSoundAndEnd(void); -static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst); -static void SetRecordedOpponentMonData(u8 monId); -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); -static void DoSwitchOutAnimation(void); -static void RecordedOpponentDoMoveAnimation(void); -static void Task_StartSendOutAnim(u8 taskId); -static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite); -static void EndDrawPartyStatusSummary(void); +static void RecordedOpponentBufferRunCommand(u32 battler); +static void RecordedOpponentBufferExecCompleted(u32 battler); +static void SwitchIn_HandleSoundAndEnd(u32 battler); -static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = +static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { - [CONTROLLER_GETMONDATA] = RecordedOpponentHandleGetMonData, - [CONTROLLER_GETRAWMONDATA] = RecordedOpponentHandleGetRawMonData, - [CONTROLLER_SETMONDATA] = RecordedOpponentHandleSetMonData, - [CONTROLLER_SETRAWMONDATA] = RecordedOpponentHandleSetRawMonData, + [CONTROLLER_GETMONDATA] = BtlController_HandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, + [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, [CONTROLLER_LOADMONSPRITE] = RecordedOpponentHandleLoadMonSprite, [CONTROLLER_SWITCHINANIM] = RecordedOpponentHandleSwitchInAnim, - [CONTROLLER_RETURNMONTOBALL] = RecordedOpponentHandleReturnMonToBall, + [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = RecordedOpponentHandleDrawTrainerPic, - [CONTROLLER_TRAINERSLIDE] = RecordedOpponentHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDE] = BtlController_Empty, [CONTROLLER_TRAINERSLIDEBACK] = RecordedOpponentHandleTrainerSlideBack, - [CONTROLLER_FAINTANIMATION] = RecordedOpponentHandleFaintAnimation, - [CONTROLLER_PALETTEFADE] = RecordedOpponentHandlePaletteFade, - [CONTROLLER_SUCCESSBALLTHROWANIM] = RecordedOpponentHandleSuccessBallThrowAnim, - [CONTROLLER_BALLTHROWANIM] = RecordedOpponentHandleBallThrowAnim, - [CONTROLLER_PAUSE] = RecordedOpponentHandlePause, + [CONTROLLER_FAINTANIMATION] = BtlController_HandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = BtlController_Empty, + [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_PAUSE] = BtlController_Empty, [CONTROLLER_MOVEANIMATION] = RecordedOpponentHandleMoveAnimation, [CONTROLLER_PRINTSTRING] = RecordedOpponentHandlePrintString, - [CONTROLLER_PRINTSTRINGPLAYERONLY] = RecordedOpponentHandlePrintSelectionString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, [CONTROLLER_CHOOSEACTION] = RecordedOpponentHandleChooseAction, - [CONTROLLER_YESNOBOX] = RecordedOpponentHandleYesNoBox, + [CONTROLLER_YESNOBOX] = BtlController_Empty, [CONTROLLER_CHOOSEMOVE] = RecordedOpponentHandleChooseMove, [CONTROLLER_OPENBAG] = RecordedOpponentHandleChooseItem, [CONTROLLER_CHOOSEPOKEMON] = RecordedOpponentHandleChoosePokemon, - [CONTROLLER_23] = RecordedOpponentHandleCmd23, + [CONTROLLER_23] = BtlController_Empty, [CONTROLLER_HEALTHBARUPDATE] = RecordedOpponentHandleHealthBarUpdate, - [CONTROLLER_EXPUPDATE] = RecordedOpponentHandleExpUpdate, + [CONTROLLER_EXPUPDATE] = BtlController_Empty, [CONTROLLER_STATUSICONUPDATE] = RecordedOpponentHandleStatusIconUpdate, [CONTROLLER_STATUSANIMATION] = RecordedOpponentHandleStatusAnimation, - [CONTROLLER_STATUSXOR] = RecordedOpponentHandleStatusXor, - [CONTROLLER_DATATRANSFER] = RecordedOpponentHandleDataTransfer, - [CONTROLLER_DMA3TRANSFER] = RecordedOpponentHandleDMA3Transfer, - [CONTROLLER_PLAYBGM] = RecordedOpponentHandlePlayBGM, - [CONTROLLER_32] = RecordedOpponentHandleCmd32, - [CONTROLLER_TWORETURNVALUES] = RecordedOpponentHandleTwoReturnValues, - [CONTROLLER_CHOSENMONRETURNVALUE] = RecordedOpponentHandleChosenMonReturnValue, - [CONTROLLER_ONERETURNVALUE] = RecordedOpponentHandleOneReturnValue, - [CONTROLLER_ONERETURNVALUE_DUPLICATE] = RecordedOpponentHandleOneReturnValue_Duplicate, - [CONTROLLER_CLEARUNKVAR] = RecordedOpponentHandleClearUnkVar, - [CONTROLLER_SETUNKVAR] = RecordedOpponentHandleSetUnkVar, - [CONTROLLER_CLEARUNKFLAG] = RecordedOpponentHandleClearUnkFlag, - [CONTROLLER_TOGGLEUNKFLAG] = RecordedOpponentHandleToggleUnkFlag, - [CONTROLLER_HITANIMATION] = RecordedOpponentHandleHitAnimation, - [CONTROLLER_CANTSWITCH] = RecordedOpponentHandleCantSwitch, - [CONTROLLER_PLAYSE] = RecordedOpponentHandlePlaySE, - [CONTROLLER_PLAYFANFAREORBGM] = RecordedOpponentHandlePlayFanfareOrBGM, - [CONTROLLER_FAINTINGCRY] = RecordedOpponentHandleFaintingCry, - [CONTROLLER_INTROSLIDE] = RecordedOpponentHandleIntroSlide, + [CONTROLLER_STATUSXOR] = BtlController_Empty, + [CONTROLLER_DATATRANSFER] = BtlController_Empty, + [CONTROLLER_DMA3TRANSFER] = BtlController_Empty, + [CONTROLLER_PLAYBGM] = BtlController_Empty, + [CONTROLLER_32] = BtlController_Empty, + [CONTROLLER_TWORETURNVALUES] = BtlController_Empty, + [CONTROLLER_CHOSENMONRETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, + [CONTROLLER_CLEARUNKVAR] = BtlController_HandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = BtlController_HandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = BtlController_HandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = BtlController_HandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, + [CONTROLLER_CANTSWITCH] = BtlController_Empty, + [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = BtlController_HandleFaintingCry, + [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, [CONTROLLER_INTROTRAINERBALLTHROW] = RecordedOpponentHandleIntroTrainerBallThrow, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = RecordedOpponentHandleDrawPartyStatusSummary, - [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = RecordedOpponentHandleHidePartyStatusSummary, - [CONTROLLER_ENDBOUNCE] = RecordedOpponentHandleEndBounceEffect, - [CONTROLLER_SPRITEINVISIBILITY] = RecordedOpponentHandleSpriteInvisibility, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = BtlController_Empty, + [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, [CONTROLLER_BATTLEANIMATION] = RecordedOpponentHandleBattleAnimation, - [CONTROLLER_LINKSTANDBYMSG] = RecordedOpponentHandleLinkStandbyMsg, - [CONTROLLER_RESETACTIONMOVESELECTION] = RecordedOpponentHandleResetActionMoveSelection, + [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, + [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = RecordedOpponentHandleEndLinkBattle, - [CONTROLLER_DEBUGMENU] = RecordedOpponentHandleBattleDebug, - [CONTROLLER_TERMINATOR_NOP] = RecordedOpponentCmdEnd + [CONTROLLER_DEBUGMENU] = BtlController_Empty, + [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; -static void RecordedOpponentDummy(void) +void SetControllerToRecordedOpponent(u32 battler) { + gBattlerControllerEndFuncs[battler] = RecordedOpponentBufferExecCompleted; + gBattlerControllerFuncs[battler] = RecordedOpponentBufferRunCommand; } -void SetControllerToRecordedOpponent(void) +static void RecordedOpponentBufferRunCommand(u32 battler) { - gBattlerControllerFuncs[gActiveBattler] = RecordedOpponentBufferRunCommand; -} - -static void RecordedOpponentBufferRunCommand(void) -{ - if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) + if (gBattleControllerExecFlags & gBitTable[battler]) { - if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sRecordedOpponentBufferCommands)) - sRecordedOpponentBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sRecordedOpponentBufferCommands)) + sRecordedOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - RecordedOpponentBufferExecCompleted(); + RecordedOpponentBufferExecCompleted(battler); } } -static void CompleteOnBattlerSpriteCallbackDummy(void) +static void RecordedOpponentBufferExecCompleted(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - RecordedOpponentBufferExecCompleted(); -} - -static void CompleteOnBankSpriteCallbackDummy2(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - RecordedOpponentBufferExecCompleted(); -} - -static void FreeTrainerSpriteAfterSlide(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + gBattlerControllerFuncs[battler] = RecordedOpponentBufferRunCommand; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - FreeTrainerFrontPicPalette(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam); - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - RecordedOpponentBufferExecCompleted(); - } -} + u8 playerId = GetMultiplayerId(); -static void Intro_DelayAndEnd(void) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1) + PrepareBufferDataTransferLink(2, 4, &playerId); + gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP; + } + else { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; - RecordedOpponentBufferExecCompleted(); + gBattleControllerExecFlags &= ~gBitTable[battler]; } } -static void Intro_WaitForShinyAnimAndHealthbox(void) +static void Intro_DelayAndEnd(u32 battler) +{ + if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) + { + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; + RecordedOpponentBufferExecCompleted(battler); + } +} + +static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) { bool8 healthboxAnimDone = FALSE; if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].animEnded) healthboxAnimDone = TRUE; } else { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded - && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gActiveBattler)]].animEnded) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].animEnded + && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].animEnded) healthboxAnimDone = TRUE; } if (healthboxAnimDone) { - if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT) + if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_LEFT) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) return; - if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim) + if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim) return; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; - gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; + gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; } } -static void Intro_TryShinyAnimShowHealthbox(void) +static void Intro_TryShinyAnimShowHealthbox(u32 battler) { bool32 bgmRestored = FALSE; bool32 battlerAnimsDone = FALSE; - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) + TryShinyAnimation(battler, &gEnemyParty[gBattlerPartyIndexes[battler]]); - if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive) - TryShinyAnimation(BATTLE_PARTNER(gActiveBattler), &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]]); + if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive) + TryShinyAnimation(BATTLE_PARTNER(battler), &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]]); - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted) { if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)], &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], HEALTHBOX_ALL); - StartHealthboxSlideIn(BATTLE_PARTNER(gActiveBattler)); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(battler)], &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], HEALTHBOX_ALL); + StartHealthboxSlideIn(BATTLE_PARTNER(battler)); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(battler)]); } - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gEnemyParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted = TRUE; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = TRUE; } - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].waitForCry - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].waitForCry + if (!gBattleSpritesDataPtr->healthBoxesData[battler].waitForCry + && gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].waitForCry && !IsCryPlayingOrClearCrySongs()) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) { - if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT) + if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_LEFT) m4aMPlayContinue(&gMPlayInfo_BGM); } else @@ -306,24 +247,24 @@ static void Intro_TryShinyAnimShowHealthbox(void) m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = TRUE; + gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = TRUE; bgmRestored = TRUE; } if (!IsDoubleBattle()) { - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { battlerAnimsDone = TRUE; } } else { - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattleControllerData[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) { battlerAnimsDone = TRUE; } @@ -333,891 +274,130 @@ static void Intro_TryShinyAnimShowHealthbox(void) { if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(gActiveBattler)]]); - SetBattlerShadowSpriteCallback(BATTLE_PARTNER(gActiveBattler), GetMonData(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], MON_DATA_SPECIES)); + DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); + SetBattlerShadowSpriteCallback(BATTLE_PARTNER(battler), GetMonData(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], MON_DATA_SPECIES)); } - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); + DestroySprite(&gSprites[gBattleControllerData[battler]]); + SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = FALSE; - gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; + gBattlerControllerFuncs[battler] = Intro_WaitForShinyAnimAndHealthbox; } } -static void TryShinyAnimAfterMonAnim(void) +static void TryShinyAnimAfterMonAnim(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].x2 == 0) + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].x2 == 0) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim) { - TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + TryShinyAnimation(battler, &gEnemyParty[gBattlerPartyIndexes[battler]]); } else { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) + if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); - RecordedOpponentBufferExecCompleted(); + RecordedOpponentBufferExecCompleted(battler); } } } } -static void CompleteOnHealthbarDone(void) +static void SwitchIn_ShowSubstitute(u32 battler) { - s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); - - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - - if (hpValue != -1) - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); - else - RecordedOpponentBufferExecCompleted(); -} - -static void HideHealthboxAfterMonFaint(void) -{ - if (!gSprites[gBattlerSpriteIds[gActiveBattler]].inUse) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) { - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - RecordedOpponentBufferExecCompleted(); + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); + + gBattlerControllerFuncs[battler] = SwitchIn_HandleSoundAndEnd; } } -static void FreeMonSpriteAfterSwitchOutAnim(void) +static void SwitchIn_HandleSoundAndEnd(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - HideBattlerShadowSprite(gActiveBattler); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - RecordedOpponentBufferExecCompleted(); - } -} - -static void CompleteOnInactiveTextPrinter(void) -{ - if (!IsTextPrinterActive(B_WIN_MSG)) - RecordedOpponentBufferExecCompleted(); -} - -static void DoHitAnimBlinkSpriteEffect(void) -{ - u8 spriteId = gBattlerSpriteIds[gActiveBattler]; - - if (gSprites[spriteId].data[1] == 32) - { - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = FALSE; - RecordedOpponentBufferExecCompleted(); - } - else - { - if ((gSprites[spriteId].data[1] % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data[1]++; - } -} - -static void SwitchIn_ShowSubstitute(void) -{ - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - { - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_HandleSoundAndEnd; - } -} - -static void SwitchIn_HandleSoundAndEnd(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - || gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy_2) + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + || gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy_2) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); - RecordedOpponentBufferExecCompleted(); + RecordedOpponentBufferExecCompleted(battler); } } } -static void SwitchIn_ShowHealthbox(void) +static void SwitchIn_ShowHealthbox(u32 battler) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0); - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - CopyBattleSpriteInvisibility(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowSubstitute; + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gEnemyParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); + CopyBattleSpriteInvisibility(battler); + gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; } } -static void SwitchIn_TryShinyAnim(void) +static void SwitchIn_TryShinyAnim(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim) - TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive + && !gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim) + TryShinyAnimation(battler, &gEnemyParty[gBattlerPartyIndexes[battler]]); - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) { - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowHealthbox; + DestroySprite(&gSprites[gBattleControllerData[battler]]); + SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); + gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; } } -static void CompleteOnFinishedStatusAnimation(void) +static void RecordedOpponentHandleLoadMonSprite(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) - RecordedOpponentBufferExecCompleted(); + BtlController_HandleLoadMonSprite(battler, TryShinyAnimAfterMonAnim); } -static void CompleteOnFinishedBattleAnimation(void) +static void RecordedOpponentHandleSwitchInAnim(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive) - RecordedOpponentBufferExecCompleted(); + BtlController_HandleSwitchInAnim(battler, FALSE, SwitchIn_TryShinyAnim); } -static void RecordedOpponentBufferExecCompleted(void) -{ - gBattlerControllerFuncs[gActiveBattler] = RecordedOpponentBufferRunCommand; - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - u8 playerId = GetMultiplayerId(); - - PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; - } - else - { - gBattleControllerExecFlags &= ~gBitTable[gActiveBattler]; - } -} - -static void RecordedOpponentHandleGetMonData(void) -{ - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data - u32 size = 0; - u8 monToCheck; - s32 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - size += CopyRecordedOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - size += CopyRecordedOpponentMonData(i, monData + size); - monToCheck >>= 1; - } - } - BtlController_EmitDataTransfer(BUFFER_B, size, monData); - RecordedOpponentBufferExecCompleted(); -} - -static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst) -{ - struct BattlePokemon battleMon; - struct MovePpInfo moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES); - battleMon.item = GetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM); - for (size = 0; size < MAX_MON_MOVES; size++) - { - battleMon.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size); - battleMon.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); - } - battleMon.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - battleMon.friendship = GetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP); - battleMon.experience = GetMonData(&gEnemyParty[monId], MON_DATA_EXP); - battleMon.hpIV = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV); - battleMon.attackIV = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV); - battleMon.defenseIV = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV); - battleMon.speedIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV); - battleMon.spAttackIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV); - battleMon.spDefenseIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV); - battleMon.personality = GetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY); - battleMon.status1 = GetMonData(&gEnemyParty[monId], MON_DATA_STATUS); - battleMon.level = GetMonData(&gEnemyParty[monId], MON_DATA_LEVEL); - battleMon.hp = GetMonData(&gEnemyParty[monId], MON_DATA_HP); - battleMon.maxHP = GetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP); - battleMon.attack = GetMonData(&gEnemyParty[monId], MON_DATA_ATK); - battleMon.defense = GetMonData(&gEnemyParty[monId], MON_DATA_DEF); - battleMon.speed = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED); - battleMon.spAttack = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK); - battleMon.spDefense = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); - battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); - battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); - battleMon.metLevel = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL); - GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy_Nickname(battleMon.nickname, nickname); - GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName); - src = (u8 *)&battleMon; - for (size = 0; size < sizeof(battleMon); size++) - dst[size] = src[size]; - break; - case REQUEST_SPECIES_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_HELDITEM_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MOVES_PP_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - { - moveData.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - src = (u8 *)(&moveData); - for (size = 0; size < sizeof(moveData); size++) - dst[size] = src[size]; - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_PP_DATA_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); - dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - size++; - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); - size = 1; - break; - case REQUEST_OTID_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_EXP_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_EXP); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_HP_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_HP_EV); - size = 1; - break; - case REQUEST_ATK_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV); - size = 1; - break; - case REQUEST_DEF_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV); - size = 1; - break; - case REQUEST_SPEED_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV); - size = 1; - break; - case REQUEST_SPATK_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV); - size = 1; - break; - case REQUEST_SPDEF_EV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV); - size = 1; - break; - case REQUEST_FRIENDSHIP_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP); - size = 1; - break; - case REQUEST_POKERUS_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_POKERUS); - size = 1; - break; - case REQUEST_MET_LOCATION_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION); - size = 1; - break; - case REQUEST_MET_LEVEL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL); - size = 1; - break; - case REQUEST_MET_GAME_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME); - size = 1; - break; - case REQUEST_POKEBALL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL); - size = 1; - break; - case REQUEST_ALL_IVS_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV); - dst[1] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV); - dst[2] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV); - dst[3] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV); - dst[4] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV); - dst[5] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV); - size = 6; - break; - case REQUEST_HP_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV); - size = 1; - break; - case REQUEST_ATK_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV); - size = 1; - break; - case REQUEST_DEF_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV); - size = 1; - break; - case REQUEST_SPEED_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV); - size = 1; - break; - case REQUEST_SPATK_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV); - size = 1; - break; - case REQUEST_SPDEF_IV_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV); - size = 1; - break; - case REQUEST_PERSONALITY_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_CHECKSUM_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_STATUS_BATTLE: - data32 = GetMonData(&gEnemyParty[monId], MON_DATA_STATUS); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_LEVEL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_LEVEL); - size = 1; - break; - case REQUEST_HP_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MAX_HP_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_ATK_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_ATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_DEF_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_DEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPEED_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPATK_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPDEF_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_COOL_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_COOL); - size = 1; - break; - case REQUEST_BEAUTY_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY); - size = 1; - break; - case REQUEST_CUTE_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_CUTE); - size = 1; - break; - case REQUEST_SMART_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SMART); - size = 1; - break; - case REQUEST_TOUGH_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_TOUGH); - size = 1; - break; - case REQUEST_SHEEN_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SHEEN); - size = 1; - break; - case REQUEST_COOL_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON); - size = 1; - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case REQUEST_CUTE_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case REQUEST_SMART_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON); - size = 1; - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - - return size; -} - -static void RecordedOpponentHandleGetRawMonData(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleSetMonData(void) -{ - u8 monToCheck; - u8 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - SetRecordedOpponentMonData(gBattlerPartyIndexes[gActiveBattler]); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - SetRecordedOpponentMonData(i); - monToCheck >>= 1; - } - } - RecordedOpponentBufferExecCompleted(); -} - -static void SetRecordedOpponentMonData(u8 monId) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; - s32 i; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - { - u8 iv; - - SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &battlePokemon->species); - SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); - } - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); - SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); - SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &iv); - iv = battlePokemon->attackIV; - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &iv); - iv = battlePokemon->defenseIV; - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &iv); - iv = battlePokemon->speedIV; - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &iv); - SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality); - SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &battlePokemon->status1); - SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &battlePokemon->level); - SetMonData(&gEnemyParty[monId], MON_DATA_HP, &battlePokemon->hp); - SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP); - SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &battlePokemon->attack); - SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &battlePokemon->defense); - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &battlePokemon->speed); - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack); - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense); - } - break; - case REQUEST_SPECIES_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HELDITEM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MOVES_PP_BATTLE: - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]); - } - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PP_DATA_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_OTID_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_EXP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKERUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_GAME_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKEBALL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); - break; - case REQUEST_HP_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_STATUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MAX_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SHEEN_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - } -} - -static void RecordedOpponentHandleSetRawMonData(void) -{ - u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; - u8 i; - - for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) - dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; - - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleLoadMonSprite(void) -{ - u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); - - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); - - SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - - gBattlerControllerFuncs[gActiveBattler] = TryShinyAnimAfterMonAnim; -} - -static void RecordedOpponentHandleSwitchInAnim(void) -{ - gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; - StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; -} - -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) -{ - u16 species; - - ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); - - gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSpriteSubpriority(battlerId)); - - gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; - gSprites[gBattleControllerData[battlerId]].data[2] = battlerId; - - gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; - gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; - gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - - StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); - - gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; - gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - - gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); -} - -static void RecordedOpponentHandleReturnMonToBall(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] == 0) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; - } - else - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - HideBattlerShadowSprite(gActiveBattler); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - RecordedOpponentBufferExecCompleted(); - } -} - -static void DoSwitchOutAnimation(void) -{ - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_OPPONENT_MON); - gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim; - } - break; - } -} - -#define sSpeedX data[0] - -static void RecordedOpponentHandleDrawTrainerPic(void) +static void RecordedOpponentHandleDrawTrainerPic(u32 battler) { s16 xPos; u32 trainerPicId; if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != 0) // second mon + if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon xPos = 152; else // first mon xPos = 200; if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) { - if (gActiveBattler == 1) + if (battler == B_POSITION_OPPONENT_LEFT) trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A); else trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B); @@ -1240,155 +420,28 @@ static void RecordedOpponentHandleDrawTrainerPic(void) } } - DecompressTrainerFrontPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - xPos, - (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40, - GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 2; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; + BtlController_HandleDrawTrainerPic(battler, trainerPicId, TRUE, + xPos, 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicId].size), + -1); } -#undef sSpeedX - -static void RecordedOpponentHandleTrainerSlide(void) +static void RecordedOpponentHandleTrainerSlideBack(u32 battler) { - RecordedOpponentBufferExecCompleted(); + BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void RecordedOpponentHandleTrainerSlideBack(void) +static void RecordedOpponentHandleMoveAnimation(u32 battler) { - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy); - gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; + BtlController_HandleMoveAnimation(battler, FALSE); } -static void RecordedOpponentHandleFaintAnimation(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0) - { - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++; - } - else - { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - PlaySE12WithPanning(SE_FAINT, SOUND_PAN_TARGET); - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon; - gBattlerControllerFuncs[gActiveBattler] = HideHealthboxAfterMonFaint; - } - } -} - -static void RecordedOpponentHandlePaletteFade(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleSuccessBallThrowAnim(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleBallThrowAnim(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandlePause(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleMoveAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - - gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; - gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; - gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = RecordedOpponentDoMoveAnimation; - } -} - -static void RecordedOpponentDoMoveAnimation(void) -{ - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; - - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute - && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8) - { - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF); - DoMoveAnim(move); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL); - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) - { - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 0; - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; - } - break; - case 3: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - RecordedOpponentBufferExecCompleted(); - } - break; - } -} - -static void RecordedOpponentHandlePrintString(void) +static void RecordedOpponentHandlePrintString(u32 battler) { u16 *stringId; gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); + stringId = (u16 *)(&gBattleResources->bufferA[battler][2]); BufferStringBattle(*stringId); if (gTestRunnerEnabled) @@ -1396,32 +449,22 @@ static void RecordedOpponentHandlePrintString(void) TestRunner_Battle_RecordMessage(gDisplayedStringBattle); if (gTestRunnerHeadless) { - RecordedOpponentBufferExecCompleted(); + RecordedOpponentBufferExecCompleted(battler); return; } } BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; + gBattlerControllerFuncs[battler] = Controller_WaitForString; } -static void RecordedOpponentHandlePrintSelectionString(void) +static void RecordedOpponentHandleChooseAction(u32 battler) { - RecordedOpponentBufferExecCompleted(); + BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, battler), 0); + RecordedOpponentBufferExecCompleted(battler); } -static void RecordedOpponentHandleChooseAction(void) -{ - BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, gActiveBattler), 0); - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleYesNoBox(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleChooseMove(void) +static void RecordedOpponentHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { @@ -1429,386 +472,97 @@ static void RecordedOpponentHandleChooseMove(void) } else { - u8 moveId = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, gActiveBattler); - u8 target = RecordedBattle_GetBattlerAction(RECORDED_MOVE_TARGET, gActiveBattler); + u8 moveId = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, battler); + u8 target = RecordedBattle_GetBattlerAction(RECORDED_MOVE_TARGET, battler); BtlController_EmitTwoReturnValues(BUFFER_B, 10, moveId | (target << 8)); } - RecordedOpponentBufferExecCompleted(); + RecordedOpponentBufferExecCompleted(battler); } -static void RecordedOpponentHandleChooseItem(void) +static void RecordedOpponentHandleChooseItem(u32 battler) { - u8 byte1 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); - u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); - gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; - gBattleStruct->itemPartyIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, gActiveBattler); - gBattleStruct->itemMoveIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, gActiveBattler); - BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); - RecordedOpponentBufferExecCompleted(); + u8 byte1 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, battler); + u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, battler); + gBattleStruct->chosenItem[battler] = (byte1 << 8) | byte2; + gBattleStruct->itemPartyIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, battler); + gBattleStruct->itemMoveIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, battler); + BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[battler]); + RecordedOpponentBufferExecCompleted(battler); } -static void RecordedOpponentHandleChoosePokemon(void) +static void RecordedOpponentHandleChoosePokemon(u32 battler) { - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, gActiveBattler); - gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[gActiveBattler]; // Revival Blessing - BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); - RecordedOpponentBufferExecCompleted(); + *(gBattleStruct->monToSwitchIntoId + battler) = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, battler); + gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[battler]; // Revival Blessing + BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + battler), NULL); + RecordedOpponentBufferExecCompleted(battler); } -static void RecordedOpponentHandleCmd23(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleHealthBarUpdate(void) +static void RecordedOpponentHandleHealthBarUpdate(u32 battler) { s16 hpVal; s32 maxHP, curHP; LoadBattleBarGfx(0); - hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); + hpVal = gBattleResources->bufferA[battler][2] | (gBattleResources->bufferA[battler][3] << 8); - maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - curHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); + maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_MAX_HP); + curHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP); if (hpVal != INSTANT_HP_BAR_DROP) { - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); - TestRunner_Battle_RecordHP(gActiveBattler, curHP, min(maxHP, max(0, curHP - hpVal))); + SetBattleBarStruct(battler, gHealthboxSpriteIds[battler], maxHP, curHP, hpVal); + TestRunner_Battle_RecordHP(battler, curHP, min(maxHP, max(0, curHP - hpVal))); } else { - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); - TestRunner_Battle_RecordHP(gActiveBattler, curHP, 0); + SetBattleBarStruct(battler, gHealthboxSpriteIds[battler], maxHP, 0, hpVal); + TestRunner_Battle_RecordHP(battler, curHP, 0); } - gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; + gBattlerControllerFuncs[battler] = Controller_WaitForHealthBar; } -static void RecordedOpponentHandleExpUpdate(void) +static void RecordedOpponentHandleStatusIconUpdate(u32 battler) { - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleStatusIconUpdate(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) + if (!IsBattleSEPlaying(battler)) { - u8 battlerId; - - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - battlerId = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - + DoStatusIconUpdate(battler); if (gTestRunnerEnabled) - TestRunner_Battle_RecordStatus1(battlerId, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS)); + TestRunner_Battle_RecordStatus1(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_STATUS)); } } -static void RecordedOpponentHandleStatusAnimation(void) +static void RecordedOpponentHandleStatusAnimation(u32 battler) { - if (!IsBattleSEPlaying(gActiveBattler)) - { - InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], - gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } + BtlController_HandleStatusAnimation(battler); } -static void RecordedOpponentHandleStatusXor(void) +static void RecordedOpponentHandleIntroTrainerBallThrow(u32 battler) { - RecordedOpponentBufferExecCompleted(); + BtlController_HandleIntroTrainerBallThrow(battler, 0, NULL, 0, Intro_TryShinyAnimShowHealthbox); } -static void RecordedOpponentHandleDataTransfer(void) +static void RecordedOpponentHandleDrawPartyStatusSummary(u32 battler) { - RecordedOpponentBufferExecCompleted(); + BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_OPPONENT, TRUE); } -static void RecordedOpponentHandleDMA3Transfer(void) +static void RecordedOpponentHandleBattleAnimation(u32 battler) { - RecordedOpponentBufferExecCompleted(); + BtlController_HandleBattleAnimation(battler, FALSE, FALSE); } -static void RecordedOpponentHandlePlayBGM(void) +static void RecordedOpponentHandleEndLinkBattle(u32 battler) { - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleCmd32(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleTwoReturnValues(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleChosenMonReturnValue(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleOneReturnValue(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleOneReturnValue_Duplicate(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleClearUnkVar(void) -{ - gUnusedControllerStruct.unk = 0; - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleSetUnkVar(void) -{ - gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleClearUnkFlag(void) -{ - gUnusedControllerStruct.flag = 0; - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleToggleUnkFlag(void) -{ - gUnusedControllerStruct.flag ^= 1; - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleHitAnimation(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE) - { - RecordedOpponentBufferExecCompleted(); - } + if (gBattleResources->bufferA[battler][1] == B_OUTCOME_DREW) + gBattleOutcome = gBattleResources->bufferA[battler][1]; else - { - gDoingBattleAnim = TRUE; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; - DoHitAnimHealthboxEffect(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect; - } -} - -static void RecordedOpponentHandleCantSwitch(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandlePlaySE(void) -{ - s8 pan; - - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - pan = SOUND_PAN_ATTACKER; - else - pan = SOUND_PAN_TARGET; - - PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandlePlayFanfareOrBGM(void) -{ - if (gBattleResources->bufferA[gActiveBattler][3]) - { - BattleStopLowHpSound(); - PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - else - { - PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleFaintingCry(void) -{ - u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - PlayCry_ByMode(species, 25, CRY_MODE_FAINT); - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleIntroSlide(void) -{ - HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); - gIntroSlideFlags |= 1; - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleIntroTrainerBallThrow(void) -{ - u8 taskId; - - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreeOpponentSprite); - - taskId = CreateTask(Task_StartSendOutAnim, 5); - gTasks[taskId].data[0] = gActiveBattler; - - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - - gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; - gBattlerControllerFuncs[gActiveBattler] = RecordedOpponentDummy; -} - -static void Task_StartSendOutAnim(u8 taskId) -{ - u8 savedActiveBank = gActiveBattler; - - gActiveBattler = gTasks[taskId].data[0]; - if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - } - else - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - } - gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; - gActiveBattler = savedActiveBank; - DestroyTask(taskId); -} - -static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite) -{ - FreeTrainerFrontPicPalette(sprite->oam.affineParam); - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); -} - -static void RecordedOpponentHandleDrawPartyStatusSummary(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - RecordedOpponentBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - - if (gBattleResources->bufferA[gActiveBattler][2] != 0) - { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay++; - return; - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay = 0; - } - } - - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - - if (gBattleResources->bufferA[gActiveBattler][2] != 0) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; - - gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; - } -} - -static void EndDrawPartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 92) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - RecordedOpponentBufferExecCompleted(); - } -} - -static void RecordedOpponentHandleHidePartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleEndBounceEffect(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleSpriteInvisibility(void) -{ - if (IsBattlerSpritePresent(gActiveBattler)) - { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; - CopyBattleSpriteInvisibility(gActiveBattler); - } - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleBattleAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; - u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) - RecordedOpponentBufferExecCompleted(); - else - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation; - } -} - -static void RecordedOpponentHandleLinkStandbyMsg(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleResetActionMoveSelection(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentHandleEndLinkBattle(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] == B_OUTCOME_DREW) - gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; - else - gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1] ^ B_OUTCOME_DREW; + gBattleOutcome = gBattleResources->bufferA[battler][1] ^ B_OUTCOME_DREW; FadeOutMapMusic(5); BeginFastPaletteFade(3); - RecordedOpponentBufferExecCompleted(); - gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; -} - -static void RecordedOpponentHandleBattleDebug(void) -{ - RecordedOpponentBufferExecCompleted(); -} - -static void RecordedOpponentCmdEnd(void) -{ + RecordedOpponentBufferExecCompleted(battler); + gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 86cb49198..aac42824c 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -27,234 +27,169 @@ #include "window.h" #include "constants/battle_anim.h" #include "constants/songs.h" +#include "constants/trainers.h" -static void RecordedPlayerHandleGetMonData(void); -static void RecordedPlayerHandleGetRawMonData(void); -static void RecordedPlayerHandleSetMonData(void); -static void RecordedPlayerHandleSetRawMonData(void); -static void RecordedPlayerHandleLoadMonSprite(void); -static void RecordedPlayerHandleSwitchInAnim(void); -static void RecordedPlayerHandleReturnMonToBall(void); -static void RecordedPlayerHandleDrawTrainerPic(void); -static void RecordedPlayerHandleTrainerSlide(void); -static void RecordedPlayerHandleTrainerSlideBack(void); -static void RecordedPlayerHandleFaintAnimation(void); -static void RecordedPlayerHandlePaletteFade(void); -static void RecordedPlayerHandleSuccessBallThrowAnim(void); -static void RecordedPlayerHandleBallThrowAnim(void); -static void RecordedPlayerHandlePause(void); -static void RecordedPlayerHandleMoveAnimation(void); -static void RecordedPlayerHandlePrintString(void); -static void RecordedPlayerHandlePrintSelectionString(void); -static void RecordedPlayerHandleChooseAction(void); -static void RecordedPlayerHandleYesNoBox(void); -static void RecordedPlayerHandleChooseMove(void); -static void RecordedPlayerHandleChooseItem(void); -static void RecordedPlayerHandleChoosePokemon(void); -static void RecordedPlayerHandleCmd23(void); -static void RecordedPlayerHandleHealthBarUpdate(void); -static void RecordedPlayerHandleExpUpdate(void); -static void RecordedPlayerHandleStatusIconUpdate(void); -static void RecordedPlayerHandleStatusAnimation(void); -static void RecordedPlayerHandleStatusXor(void); -static void RecordedPlayerHandleDataTransfer(void); -static void RecordedPlayerHandleDMA3Transfer(void); -static void RecordedPlayerHandlePlayBGM(void); -static void RecordedPlayerHandleCmd32(void); -static void RecordedPlayerHandleTwoReturnValues(void); -static void RecordedPlayerHandleChosenMonReturnValue(void); -static void RecordedPlayerHandleOneReturnValue(void); -static void RecordedPlayerHandleOneReturnValue_Duplicate(void); -static void RecordedPlayerHandleClearUnkVar(void); -static void RecordedPlayerHandleSetUnkVar(void); -static void RecordedPlayerHandleClearUnkFlag(void); -static void RecordedPlayerHandleToggleUnkFlag(void); -static void RecordedPlayerHandleHitAnimation(void); -static void RecordedPlayerHandleCantSwitch(void); -static void RecordedPlayerHandlePlaySE(void); -static void RecordedPlayerHandlePlayFanfareOrBGM(void); -static void RecordedPlayerHandleFaintingCry(void); -static void RecordedPlayerHandleIntroSlide(void); -static void RecordedPlayerHandleIntroTrainerBallThrow(void); -static void RecordedPlayerHandleDrawPartyStatusSummary(void); -static void RecordedPlayerHandleHidePartyStatusSummary(void); -static void RecordedPlayerHandleEndBounceEffect(void); -static void RecordedPlayerHandleSpriteInvisibility(void); -static void RecordedPlayerHandleBattleAnimation(void); -static void RecordedPlayerHandleLinkStandbyMsg(void); -static void RecordedPlayerHandleResetActionMoveSelection(void); -static void RecordedPlayerHandleEndLinkBattle(void); -static void RecordedPlayerCmdEnd(void); +static void RecordedPlayerHandleLoadMonSprite(u32 battler); +static void RecordedPlayerHandleSwitchInAnim(u32 battler); +static void RecordedPlayerHandleDrawTrainerPic(u32 battler); +static void RecordedPlayerHandleTrainerSlideBack(u32 battler); +static void RecordedPlayerHandleMoveAnimation(u32 battler); +static void RecordedPlayerHandlePrintString(u32 battler); +static void RecordedPlayerHandleChooseAction(u32 battler); +static void RecordedPlayerHandleChooseMove(u32 battler); +static void RecordedPlayerHandleChooseItem(u32 battler); +static void RecordedPlayerHandleChoosePokemon(u32 battler); +static void RecordedPlayerHandleHealthBarUpdate(u32 battler); +static void RecordedPlayerHandleStatusIconUpdate(u32 battler); +static void RecordedPlayerHandleStatusAnimation(u32 battler); +static void RecordedPlayerHandleIntroTrainerBallThrow(u32 battler); +static void RecordedPlayerHandleDrawPartyStatusSummary(u32 battler); +static void RecordedPlayerHandleBattleAnimation(u32 battler); +static void RecordedPlayerHandleEndLinkBattle(u32 battler); -static void RecordedPlayerBufferRunCommand(void); -static void RecordedPlayerBufferExecCompleted(void); -static void SwitchIn_WaitAndEnd(void); -static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst); -static void SetRecordedPlayerMonData(u8 monId); -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); -static void DoSwitchOutAnimation(void); -static void RecordedPlayerDoMoveAnimation(void); -static void Task_StartSendOutAnim(u8 taskId); -static void EndDrawPartyStatusSummary(void); +static void RecordedPlayerBufferRunCommand(u32 battler); +static void RecordedPlayerBufferExecCompleted(u32 battler); +static void SwitchIn_WaitAndEnd(u32 battler); -static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = +static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { - [CONTROLLER_GETMONDATA] = RecordedPlayerHandleGetMonData, - [CONTROLLER_GETRAWMONDATA] = RecordedPlayerHandleGetRawMonData, - [CONTROLLER_SETMONDATA] = RecordedPlayerHandleSetMonData, - [CONTROLLER_SETRAWMONDATA] = RecordedPlayerHandleSetRawMonData, + [CONTROLLER_GETMONDATA] = BtlController_HandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, + [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, [CONTROLLER_LOADMONSPRITE] = RecordedPlayerHandleLoadMonSprite, [CONTROLLER_SWITCHINANIM] = RecordedPlayerHandleSwitchInAnim, - [CONTROLLER_RETURNMONTOBALL] = RecordedPlayerHandleReturnMonToBall, + [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = RecordedPlayerHandleDrawTrainerPic, - [CONTROLLER_TRAINERSLIDE] = RecordedPlayerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDE] = BtlController_Empty, [CONTROLLER_TRAINERSLIDEBACK] = RecordedPlayerHandleTrainerSlideBack, - [CONTROLLER_FAINTANIMATION] = RecordedPlayerHandleFaintAnimation, - [CONTROLLER_PALETTEFADE] = RecordedPlayerHandlePaletteFade, - [CONTROLLER_SUCCESSBALLTHROWANIM] = RecordedPlayerHandleSuccessBallThrowAnim, - [CONTROLLER_BALLTHROWANIM] = RecordedPlayerHandleBallThrowAnim, - [CONTROLLER_PAUSE] = RecordedPlayerHandlePause, + [CONTROLLER_FAINTANIMATION] = BtlController_HandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = BtlController_Empty, + [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_PAUSE] = BtlController_Empty, [CONTROLLER_MOVEANIMATION] = RecordedPlayerHandleMoveAnimation, [CONTROLLER_PRINTSTRING] = RecordedPlayerHandlePrintString, - [CONTROLLER_PRINTSTRINGPLAYERONLY] = RecordedPlayerHandlePrintSelectionString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, [CONTROLLER_CHOOSEACTION] = RecordedPlayerHandleChooseAction, - [CONTROLLER_YESNOBOX] = RecordedPlayerHandleYesNoBox, + [CONTROLLER_YESNOBOX] = BtlController_Empty, [CONTROLLER_CHOOSEMOVE] = RecordedPlayerHandleChooseMove, [CONTROLLER_OPENBAG] = RecordedPlayerHandleChooseItem, [CONTROLLER_CHOOSEPOKEMON] = RecordedPlayerHandleChoosePokemon, - [CONTROLLER_23] = RecordedPlayerHandleCmd23, + [CONTROLLER_23] = BtlController_Empty, [CONTROLLER_HEALTHBARUPDATE] = RecordedPlayerHandleHealthBarUpdate, - [CONTROLLER_EXPUPDATE] = RecordedPlayerHandleExpUpdate, + [CONTROLLER_EXPUPDATE] = BtlController_Empty, [CONTROLLER_STATUSICONUPDATE] = RecordedPlayerHandleStatusIconUpdate, [CONTROLLER_STATUSANIMATION] = RecordedPlayerHandleStatusAnimation, - [CONTROLLER_STATUSXOR] = RecordedPlayerHandleStatusXor, - [CONTROLLER_DATATRANSFER] = RecordedPlayerHandleDataTransfer, - [CONTROLLER_DMA3TRANSFER] = RecordedPlayerHandleDMA3Transfer, - [CONTROLLER_PLAYBGM] = RecordedPlayerHandlePlayBGM, - [CONTROLLER_32] = RecordedPlayerHandleCmd32, - [CONTROLLER_TWORETURNVALUES] = RecordedPlayerHandleTwoReturnValues, - [CONTROLLER_CHOSENMONRETURNVALUE] = RecordedPlayerHandleChosenMonReturnValue, - [CONTROLLER_ONERETURNVALUE] = RecordedPlayerHandleOneReturnValue, - [CONTROLLER_ONERETURNVALUE_DUPLICATE] = RecordedPlayerHandleOneReturnValue_Duplicate, - [CONTROLLER_CLEARUNKVAR] = RecordedPlayerHandleClearUnkVar, - [CONTROLLER_SETUNKVAR] = RecordedPlayerHandleSetUnkVar, - [CONTROLLER_CLEARUNKFLAG] = RecordedPlayerHandleClearUnkFlag, - [CONTROLLER_TOGGLEUNKFLAG] = RecordedPlayerHandleToggleUnkFlag, - [CONTROLLER_HITANIMATION] = RecordedPlayerHandleHitAnimation, - [CONTROLLER_CANTSWITCH] = RecordedPlayerHandleCantSwitch, - [CONTROLLER_PLAYSE] = RecordedPlayerHandlePlaySE, - [CONTROLLER_PLAYFANFAREORBGM] = RecordedPlayerHandlePlayFanfareOrBGM, - [CONTROLLER_FAINTINGCRY] = RecordedPlayerHandleFaintingCry, - [CONTROLLER_INTROSLIDE] = RecordedPlayerHandleIntroSlide, + [CONTROLLER_STATUSXOR] = BtlController_Empty, + [CONTROLLER_DATATRANSFER] = BtlController_Empty, + [CONTROLLER_DMA3TRANSFER] = BtlController_Empty, + [CONTROLLER_PLAYBGM] = BtlController_Empty, + [CONTROLLER_32] = BtlController_Empty, + [CONTROLLER_TWORETURNVALUES] = BtlController_Empty, + [CONTROLLER_CHOSENMONRETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, + [CONTROLLER_CLEARUNKVAR] = BtlController_HandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = BtlController_HandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = BtlController_HandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = BtlController_HandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, + [CONTROLLER_CANTSWITCH] = BtlController_Empty, + [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = BtlController_HandleFaintingCry, + [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, [CONTROLLER_INTROTRAINERBALLTHROW] = RecordedPlayerHandleIntroTrainerBallThrow, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = RecordedPlayerHandleDrawPartyStatusSummary, - [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = RecordedPlayerHandleHidePartyStatusSummary, - [CONTROLLER_ENDBOUNCE] = RecordedPlayerHandleEndBounceEffect, - [CONTROLLER_SPRITEINVISIBILITY] = RecordedPlayerHandleSpriteInvisibility, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = BtlController_Empty, + [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, [CONTROLLER_BATTLEANIMATION] = RecordedPlayerHandleBattleAnimation, - [CONTROLLER_LINKSTANDBYMSG] = RecordedPlayerHandleLinkStandbyMsg, - [CONTROLLER_RESETACTIONMOVESELECTION] = RecordedPlayerHandleResetActionMoveSelection, + [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, + [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = RecordedPlayerHandleEndLinkBattle, - [CONTROLLER_TERMINATOR_NOP] = RecordedPlayerCmdEnd + [CONTROLLER_DEBUGMENU] = BtlController_Empty, + [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; -static void RecordedPlayerDummy(void) +void SetControllerToRecordedPlayer(u32 battler) { + gBattlerControllerEndFuncs[battler] = RecordedPlayerBufferExecCompleted; + gBattlerControllerFuncs[battler] = RecordedPlayerBufferRunCommand; } -void SetControllerToRecordedPlayer(void) +static void RecordedPlayerBufferRunCommand(u32 battler) { - gBattlerControllerFuncs[gActiveBattler] = RecordedPlayerBufferRunCommand; -} - -static void RecordedPlayerBufferRunCommand(void) -{ - if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) + if (gBattleControllerExecFlags & gBitTable[battler]) { - if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sRecordedPlayerBufferCommands)) - sRecordedPlayerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sRecordedPlayerBufferCommands)) + sRecordedPlayerBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - RecordedPlayerBufferExecCompleted(); + RecordedPlayerBufferExecCompleted(battler); } } -static void CompleteOnBattlerSpriteCallbackDummy(void) +static void Intro_DelayAndEnd(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - RecordedPlayerBufferExecCompleted(); -} - -static void FreeTrainerSpriteAfterSlide(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) { - BattleGfxSfxDummy3(MALE); - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - RecordedPlayerBufferExecCompleted(); + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; + RecordedPlayerBufferExecCompleted(battler); } } -static void Intro_DelayAndEnd(void) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; - RecordedPlayerBufferExecCompleted(); - } -} - -static void Intro_WaitForShinyAnimAndHealthbox(void) +static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) { bool32 healthboxAnimDone = FALSE; - if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT) + if (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT) { if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) healthboxAnimDone = TRUE; } else { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) { healthboxAnimDone = TRUE; } } - if (healthboxAnimDone && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim - && gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim) + if (healthboxAnimDone && gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim + && gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); if (IsDoubleBattle()) - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], BATTLE_PARTNER(gActiveBattler)); + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], BATTLE_PARTNER(battler)); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; - gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; + gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; } } else { if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) healthboxAnimDone = TRUE; } else { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) { healthboxAnimDone = TRUE; } @@ -265,55 +200,55 @@ static void Intro_WaitForShinyAnimAndHealthbox(void) if (healthboxAnimDone) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; - gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; + gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; } } } -static void Intro_TryShinyAnimShowHealthbox(void) +static void Intro_TryShinyAnimShowHealthbox(u32 battler) { bool32 bgmRestored = FALSE; - if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT) + if (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) + TryShinyAnimation(battler, &gPlayerParty[gBattlerPartyIndexes[battler]]); - if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive) - TryShinyAnimation(BATTLE_PARTNER(gActiveBattler), &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]]); + if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive) + TryShinyAnimation(BATTLE_PARTNER(battler), &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]]); } - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted) { if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)], &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], HEALTHBOX_ALL); - StartHealthboxSlideIn(BATTLE_PARTNER(gActiveBattler)); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(battler)], &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], HEALTHBOX_ALL); + StartHealthboxSlideIn(BATTLE_PARTNER(battler)); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(battler)]); } - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted = TRUE; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = TRUE; } - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].waitForCry - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].waitForCry + if (gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted + && !gBattleSpritesDataPtr->healthBoxesData[battler].waitForCry + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].waitForCry && !IsCryPlayingOrClearCrySongs()) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored) { if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && (gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT) + if (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT) m4aMPlayContinue(&gMPlayInfo_BGM); } else @@ -322,870 +257,117 @@ static void Intro_TryShinyAnimShowHealthbox(void) } } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = TRUE; + gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = TRUE; bgmRestored = TRUE; } - if (bgmRestored && gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (bgmRestored && gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(gActiveBattler)]]); + DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); + DestroySprite(&gSprites[gBattleControllerData[battler]]); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted = FALSE; - gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; + gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = FALSE; + gBattlerControllerFuncs[battler] = Intro_WaitForShinyAnimAndHealthbox; } } -static void WaitForMonAnimAfterLoad(void) +static void WaitForMonAnimAfterLoad(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded && gSprites[gBattlerSpriteIds[gActiveBattler]].x2 == 0) - RecordedPlayerBufferExecCompleted(); + if (gSprites[gBattlerSpriteIds[battler]].animEnded && gSprites[gBattlerSpriteIds[battler]].x2 == 0) + RecordedPlayerBufferExecCompleted(battler); } -static void CompleteOnHealthbarDone(void) +static void SwitchIn_ShowSubstitute(u32 battler) { - s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); - - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - - if (hpValue != -1) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); - } - else - { - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - RecordedPlayerBufferExecCompleted(); + CopyBattleSpriteInvisibility(battler); + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); + + gBattlerControllerFuncs[battler] = SwitchIn_WaitAndEnd; } } -static void FreeMonSpriteAfterFaintAnim(void) +static void SwitchIn_WaitAndEnd(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].y + gSprites[gBattlerSpriteIds[gActiveBattler]].y2 > DISPLAY_HEIGHT) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { - u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - BattleGfxSfxDummy2(species); - FreeOamMatrix(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.matrixNum); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - RecordedPlayerBufferExecCompleted(); + RecordedPlayerBufferExecCompleted(battler); } } -static void FreeMonSpriteAfterSwitchOutAnim(void) +static void SwitchIn_ShowHealthbox(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) + if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - RecordedPlayerBufferExecCompleted(); - } -} - -static void CompleteOnInactiveTextPrinter(void) -{ - if (!IsTextPrinterActive(B_WIN_MSG)) - RecordedPlayerBufferExecCompleted(); -} - -static void DoHitAnimBlinkSpriteEffect(void) -{ - u8 spriteId = gBattlerSpriteIds[gActiveBattler]; - - if (gSprites[spriteId].data[1] == 32) - { - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = FALSE; - RecordedPlayerBufferExecCompleted(); - } - else - { - if ((gSprites[spriteId].data[1] % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data[1]++; - } -} - -static void SwitchIn_ShowSubstitute(void) -{ - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - { - CopyBattleSpriteInvisibility(gActiveBattler); - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_WaitAndEnd; - } -} - -static void SwitchIn_WaitAndEnd(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - { - RecordedPlayerBufferExecCompleted(); - } -} - -static void SwitchIn_ShowHealthbox(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowSubstitute; + gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; } } -static void SwitchIn_TryShinyAnim(void) +static void SwitchIn_TryShinyAnim(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) { - TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + TryShinyAnimation(battler, &gPlayerParty[gBattlerPartyIndexes[battler]]); } - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) { - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowHealthbox; + DestroySprite(&gSprites[gBattleControllerData[battler]]); + gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; } } -static void RecordedPlayerBufferExecCompleted(void) +static void RecordedPlayerBufferExecCompleted(u32 battler) { - gBattlerControllerFuncs[gActiveBattler] = RecordedPlayerBufferRunCommand; + gBattlerControllerFuncs[battler] = RecordedPlayerBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP; } else { - gBattleControllerExecFlags &= ~gBitTable[gActiveBattler]; + gBattleControllerExecFlags &= ~gBitTable[battler]; } } -static void CompleteOnFinishedStatusAnimation(void) +static void RecordedPlayerHandleLoadMonSprite(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) - RecordedPlayerBufferExecCompleted(); + BtlController_HandleLoadMonSprite(battler, WaitForMonAnimAfterLoad); } -static void CompleteOnFinishedBattleAnimation(void) +static void RecordedPlayerHandleSwitchInAnim(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive) - RecordedPlayerBufferExecCompleted(); + BtlController_HandleSwitchInAnim(battler, TRUE, SwitchIn_TryShinyAnim); } -static void RecordedPlayerHandleGetMonData(void) -{ - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data - u32 size = 0; - u8 monToCheck; - s32 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - size += CopyRecordedPlayerMonData(gBattlerPartyIndexes[gActiveBattler], monData); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - size += CopyRecordedPlayerMonData(i, monData + size); - monToCheck >>= 1; - } - } - BtlController_EmitDataTransfer(BUFFER_B, size, monData); - RecordedPlayerBufferExecCompleted(); -} - -static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst) -{ - struct BattlePokemon battleMon; - struct MovePpInfo moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); - for (size = 0; size < MAX_MON_MOVES; size++) - { - battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); - battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - } - battleMon.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - battleMon.friendship = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP); - battleMon.experience = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); - battleMon.hpIV = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - battleMon.attackIV = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - battleMon.defenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - battleMon.speedIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - battleMon.spAttackIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - battleMon.spDefenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - battleMon.personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - battleMon.status1 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS); - battleMon.level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - battleMon.hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP); - battleMon.maxHP = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP); - battleMon.attack = GetMonData(&gPlayerParty[monId], MON_DATA_ATK); - battleMon.defense = GetMonData(&gPlayerParty[monId], MON_DATA_DEF); - battleMon.speed = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED); - battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); - battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); - battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); - battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); - battleMon.metLevel = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); - GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy_Nickname(battleMon.nickname, nickname); - GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); - src = (u8 *)&battleMon; - for (size = 0; size < sizeof(battleMon); size++) - dst[size] = src[size]; - break; - case REQUEST_SPECIES_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_HELDITEM_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MOVES_PP_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - { - moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - src = (u8 *)(&moveData); - for (size = 0; size < sizeof(moveData); size++) - dst[size] = src[size]; - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_PP_DATA_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - size++; - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); - size = 1; - break; - case REQUEST_OTID_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_EXP_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_HP_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_EV); - size = 1; - break; - case REQUEST_ATK_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV); - size = 1; - break; - case REQUEST_DEF_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV); - size = 1; - break; - case REQUEST_SPEED_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV); - size = 1; - break; - case REQUEST_SPATK_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV); - size = 1; - break; - case REQUEST_SPDEF_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV); - size = 1; - break; - case REQUEST_FRIENDSHIP_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP); - size = 1; - break; - case REQUEST_POKERUS_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKERUS); - size = 1; - break; - case REQUEST_MET_LOCATION_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION); - size = 1; - break; - case REQUEST_MET_LEVEL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); - size = 1; - break; - case REQUEST_MET_GAME_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME); - size = 1; - break; - case REQUEST_POKEBALL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL); - size = 1; - break; - case REQUEST_ALL_IVS_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - dst[1] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - dst[2] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - dst[3] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - dst[4] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - dst[5] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - size = 6; - break; - case REQUEST_HP_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - size = 1; - break; - case REQUEST_ATK_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - size = 1; - break; - case REQUEST_DEF_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - size = 1; - break; - case REQUEST_SPEED_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - size = 1; - break; - case REQUEST_SPATK_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - size = 1; - break; - case REQUEST_SPDEF_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - size = 1; - break; - case REQUEST_PERSONALITY_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_CHECKSUM_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_STATUS_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_LEVEL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - size = 1; - break; - case REQUEST_HP_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MAX_HP_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_ATK_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_ATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_DEF_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_DEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPEED_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPATK_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPDEF_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_COOL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL); - size = 1; - break; - case REQUEST_BEAUTY_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY); - size = 1; - break; - case REQUEST_CUTE_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE); - size = 1; - break; - case REQUEST_SMART_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART); - size = 1; - break; - case REQUEST_TOUGH_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH); - size = 1; - break; - case REQUEST_SHEEN_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SHEEN); - size = 1; - break; - case REQUEST_COOL_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON); - size = 1; - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case REQUEST_CUTE_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case REQUEST_SMART_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON); - size = 1; - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - - return size; -} - -static void RecordedPlayerHandleGetRawMonData(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleSetMonData(void) -{ - u8 monToCheck; - u8 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - SetRecordedPlayerMonData(gBattlerPartyIndexes[gActiveBattler]); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - SetRecordedPlayerMonData(i); - monToCheck >>= 1; - } - } - RecordedPlayerBufferExecCompleted(); -} - -static void SetRecordedPlayerMonData(u8 monId) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; - s32 i; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - { - u8 iv; - - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species); - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); - } - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &iv); - iv = battlePokemon->attackIV; - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &iv); - iv = battlePokemon->defenseIV; - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &iv); - iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &iv); - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality); - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &battlePokemon->status1); - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &battlePokemon->level); - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &battlePokemon->hp); - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &battlePokemon->attack); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &battlePokemon->defense); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &battlePokemon->speed); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense); - } - break; - case REQUEST_SPECIES_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HELDITEM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MOVES_PP_BATTLE: - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]); - } - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PP_DATA_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_OTID_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_EXP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKERUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_GAME_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKEBALL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); - break; - case REQUEST_HP_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_STATUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MAX_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SHEEN_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - } - - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); -} - -static void RecordedPlayerHandleSetRawMonData(void) -{ - u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; - u8 i; - - for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) - dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; - - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleLoadMonSprite(void) -{ - u16 species; - - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); - - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSpriteSubpriority(gActiveBattler)); - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); - gBattlerControllerFuncs[gActiveBattler] = WaitForMonAnimAfterLoad; -} - -static void RecordedPlayerHandleSwitchInAnim(void) -{ - ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); - gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); - gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; -} - -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) -{ - u16 species; - - ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); - - gBattlerSpriteIds[battlerId] = CreateSprite( - &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSpriteSubpriority(battlerId)); - - gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; - gSprites[gBattleControllerData[battlerId]].data[2] = battlerId; - - gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; - gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; - gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - - StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); - - gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; - gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - - gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); -} - -static void RecordedPlayerHandleReturnMonToBall(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] == 0) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; - } - else - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - RecordedPlayerBufferExecCompleted(); - } -} - -static void DoSwitchOutAnimation(void) -{ - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); - gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim; - } - break; - } -} - -#define sSpeedX data[0] - -static void RecordedPlayerHandleDrawTrainerPic(void) +static void RecordedPlayerHandleDrawTrainerPic(u32 battler) { + bool32 isFrontPic; s16 xPos, yPos; u32 trainerPicId; @@ -1203,7 +385,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void) if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != 0) // second mon + if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon xPos = 90; else // first mon xPos = 32; @@ -1226,177 +408,30 @@ static void RecordedPlayerHandleDrawTrainerPic(void) } if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - { - trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender); - DecompressTrainerFrontPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); - - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].y2 = 48; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = ST_OAM_AFFINE_OFF; - gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1; - } + isFrontPic = TRUE; else - { - DecompressTrainerBackPic(trainerPicId, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); + isFrontPic = FALSE; - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - } - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; + BtlController_HandleDrawTrainerPic(battler, trainerPicId, isFrontPic, xPos, yPos, -1); } -#undef sSpeedX - -static void RecordedPlayerHandleTrainerSlide(void) +static void RecordedPlayerHandleTrainerSlideBack(u32 battler) { - RecordedPlayerBufferExecCompleted(); + BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void RecordedPlayerHandleTrainerSlideBack(void) +static void RecordedPlayerHandleMoveAnimation(u32 battler) { - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy); - gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; + BtlController_HandleMoveAnimation(battler, FALSE); } -#define sSpeedX data[1] -#define sSpeedY data[2] - -static void RecordedPlayerHandleFaintAnimation(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0) - { - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++; - } - else - { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - PlaySE12WithPanning(SE_FAINT, -64); - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 0; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedY = 5; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim; - gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim; - } - } -} - -#undef sSpeedX -#undef sSpeedY - -static void RecordedPlayerHandlePaletteFade(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleSuccessBallThrowAnim(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleBallThrowAnim(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandlePause(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleMoveAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - - gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; - gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; - gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = RecordedPlayerDoMoveAnimation; - } -} - -static void RecordedPlayerDoMoveAnimation(void) -{ - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; - - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute - && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8) - { - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF); - DoMoveAnim(move); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL); - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) - { - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 0; - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; - } - break; - case 3: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - RecordedPlayerBufferExecCompleted(); - } - break; - } -} - -static void RecordedPlayerHandlePrintString(void) +static void RecordedPlayerHandlePrintString(u32 battler) { u16 *stringId; gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); + stringId = (u16 *)(&gBattleResources->bufferA[battler][2]); BufferStringBattle(*stringId); if (gTestRunnerEnabled) @@ -1404,48 +439,38 @@ static void RecordedPlayerHandlePrintString(void) TestRunner_Battle_RecordMessage(gDisplayedStringBattle); if (gTestRunnerHeadless) { - RecordedPlayerBufferExecCompleted(); + RecordedPlayerBufferExecCompleted(battler); return; } } BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; + gBattlerControllerFuncs[battler] = Controller_WaitForString; } -static void RecordedPlayerHandlePrintSelectionString(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void ChooseActionInBattlePalace(void) +static void ChooseActionInBattlePalace(u32 battler) { if (gBattleCommunication[4] >= gBattlersCount / 2) { - BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_BATTLE_PALACE_ACTION, gActiveBattler), 0); - RecordedPlayerBufferExecCompleted(); + BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_BATTLE_PALACE_ACTION, battler), 0); + RecordedPlayerBufferExecCompleted(battler); } } -static void RecordedPlayerHandleChooseAction(void) +static void RecordedPlayerHandleChooseAction(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - gBattlerControllerFuncs[gActiveBattler] = ChooseActionInBattlePalace; + gBattlerControllerFuncs[battler] = ChooseActionInBattlePalace; } else { - BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, gActiveBattler), 0); - RecordedPlayerBufferExecCompleted(); + BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, battler), 0); + RecordedPlayerBufferExecCompleted(battler); } } -static void RecordedPlayerHandleYesNoBox(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleChooseMove(void) +static void RecordedPlayerHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { @@ -1453,379 +478,103 @@ static void RecordedPlayerHandleChooseMove(void) } else { - u8 moveId = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, gActiveBattler); - u8 target = RecordedBattle_GetBattlerAction(RECORDED_MOVE_TARGET, gActiveBattler); + u8 moveId = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, battler); + u8 target = RecordedBattle_GetBattlerAction(RECORDED_MOVE_TARGET, battler); BtlController_EmitTwoReturnValues(BUFFER_B, 10, moveId | (target << 8)); } - RecordedPlayerBufferExecCompleted(); + RecordedPlayerBufferExecCompleted(battler); } -static void RecordedPlayerHandleChooseItem(void) +static void RecordedPlayerHandleChooseItem(u32 battler) { - u8 byte1 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); - u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); - gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; - gBattleStruct->itemPartyIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, gActiveBattler); - gBattleStruct->itemMoveIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, gActiveBattler); - BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); - RecordedPlayerBufferExecCompleted(); + u8 byte1 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, battler); + u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, battler); + gBattleStruct->chosenItem[battler] = (byte1 << 8) | byte2; + gBattleStruct->itemPartyIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, battler); + gBattleStruct->itemMoveIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, battler); + BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[battler]); + RecordedPlayerBufferExecCompleted(battler); } -static void RecordedPlayerHandleChoosePokemon(void) +static void RecordedPlayerHandleChoosePokemon(u32 battler) { - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, gActiveBattler); - gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[gActiveBattler]; // Revival Blessing - BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); - RecordedPlayerBufferExecCompleted(); + *(gBattleStruct->monToSwitchIntoId + battler) = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, battler); + gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[battler]; // Revival Blessing + BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + battler), NULL); + RecordedPlayerBufferExecCompleted(battler); } -static void RecordedPlayerHandleCmd23(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleHealthBarUpdate(void) +static void RecordedPlayerHandleHealthBarUpdate(u32 battler) { s16 hpVal; s32 maxHP, curHP; LoadBattleBarGfx(0); - hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); + hpVal = gBattleResources->bufferA[battler][2] | (gBattleResources->bufferA[battler][3] << 8); - maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); + maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_MAX_HP); + curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP); if (hpVal != INSTANT_HP_BAR_DROP) { - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); - TestRunner_Battle_RecordHP(gActiveBattler, curHP, min(maxHP, max(0, curHP - hpVal))); + SetBattleBarStruct(battler, gHealthboxSpriteIds[battler], maxHP, curHP, hpVal); + TestRunner_Battle_RecordHP(battler, curHP, min(maxHP, max(0, curHP - hpVal))); } else { - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, 0, maxHP); - TestRunner_Battle_RecordHP(gActiveBattler, curHP, 0); + SetBattleBarStruct(battler, gHealthboxSpriteIds[battler], maxHP, 0, hpVal); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[battler], HP_CURRENT, 0, maxHP); + TestRunner_Battle_RecordHP(battler, curHP, 0); } - gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; + gBattlerControllerFuncs[battler] = Controller_WaitForHealthBar; } -static void RecordedPlayerHandleExpUpdate(void) +static void RecordedPlayerHandleStatusIconUpdate(u32 battler) { - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleStatusIconUpdate(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) + if (!IsBattleSEPlaying(battler)) { - u8 battlerId; - - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - battlerId = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - + DoStatusIconUpdate(battler); if (gTestRunnerEnabled) - TestRunner_Battle_RecordStatus1(battlerId, GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS)); + TestRunner_Battle_RecordStatus1(battler, GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_STATUS)); } } -static void RecordedPlayerHandleStatusAnimation(void) +static void RecordedPlayerHandleStatusAnimation(u32 battler) { - if (!IsBattleSEPlaying(gActiveBattler)) - { - InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], - gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; - } + BtlController_HandleStatusAnimation(battler); } -static void RecordedPlayerHandleStatusXor(void) +static void RecordedPlayerHandleIntroTrainerBallThrow(u32 battler) { - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleDataTransfer(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleDMA3Transfer(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandlePlayBGM(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleCmd32(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleTwoReturnValues(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleChosenMonReturnValue(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleOneReturnValue(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleOneReturnValue_Duplicate(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleClearUnkVar(void) -{ - gUnusedControllerStruct.unk = 0; - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleSetUnkVar(void) -{ - gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleClearUnkFlag(void) -{ - gUnusedControllerStruct.flag = 0; - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleToggleUnkFlag(void) -{ - gUnusedControllerStruct.flag ^= 1; - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleHitAnimation(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE) - { - RecordedPlayerBufferExecCompleted(); - } - else - { - gDoingBattleAnim = TRUE; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; - DoHitAnimHealthboxEffect(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect; - } -} - -static void RecordedPlayerHandleCantSwitch(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandlePlaySE(void) -{ - s8 pan; - - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - pan = SOUND_PAN_ATTACKER; - else - pan = SOUND_PAN_TARGET; - - PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandlePlayFanfareOrBGM(void) -{ - if (gBattleResources->bufferA[gActiveBattler][3]) - { - BattleStopLowHpSound(); - PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - else - { - PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleFaintingCry(void) -{ - u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - PlayCry_ByMode(species, -25, CRY_MODE_FAINT); - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleIntroSlide(void) -{ - HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); - gIntroSlideFlags |= 1; - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleIntroTrainerBallThrow(void) -{ - u8 paletteNum; - u8 taskId; u32 trainerPicId; + const u32 *trainerPal; - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; - - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); - - paletteNum = AllocSpritePalette(0xD6F9); if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender; + trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(battler)].gender + TRAINER_BACK_PIC_BRENDAN; else - trainerPicId = gSaveBlock2Ptr->playerGender; + trainerPicId = gSaveBlock2Ptr->playerGender + TRAINER_BACK_PIC_BRENDAN; - LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); - - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; - - taskId = CreateTask(Task_StartSendOutAnim, 5); - gTasks[taskId].data[0] = gActiveBattler; - - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - - gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; - gBattlerControllerFuncs[gActiveBattler] = RecordedPlayerDummy; + trainerPal = gTrainerFrontPicPaletteTable[trainerPicId].data; + BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F9, trainerPal, 24, Intro_TryShinyAnimShowHealthbox); } -static void Task_StartSendOutAnim(u8 taskId) +static void RecordedPlayerHandleDrawPartyStatusSummary(u32 battler) { - if (gTasks[taskId].data[1] < 24) - { - gTasks[taskId].data[1]++; - } - else - { - u8 savedActiveBank = gActiveBattler; - - gActiveBattler = gTasks[taskId].data[0]; - if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - } - else - { - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, FALSE); - gActiveBattler ^= BIT_FLANK; - } - gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; - gActiveBattler = savedActiveBank; - DestroyTask(taskId); - } + BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_PLAYER, TRUE); } -static void RecordedPlayerHandleDrawPartyStatusSummary(void) +static void RecordedPlayerHandleBattleAnimation(u32 battler) { - if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - RecordedPlayerBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - - if (gBattleResources->bufferA[gActiveBattler][2] != 0) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; - - gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; - } + BtlController_HandleBattleAnimation(battler, FALSE, FALSE); } -static void EndDrawPartyStatusSummary(void) +static void RecordedPlayerHandleEndLinkBattle(u32 battler) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 92) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - RecordedPlayerBufferExecCompleted(); - } -} - -static void RecordedPlayerHandleHidePartyStatusSummary(void) -{ - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleEndBounceEffect(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleSpriteInvisibility(void) -{ - if (IsBattlerSpritePresent(gActiveBattler)) - { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; - CopyBattleSpriteInvisibility(gActiveBattler); - } - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleBattleAnimation(void) -{ - if (!IsBattleSEPlaying(gActiveBattler)) - { - u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; - u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) - RecordedPlayerBufferExecCompleted(); - else - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation; - } -} - -static void RecordedPlayerHandleLinkStandbyMsg(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleResetActionMoveSelection(void) -{ - RecordedPlayerBufferExecCompleted(); -} - -static void RecordedPlayerHandleEndLinkBattle(void) -{ - gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; + gBattleOutcome = gBattleResources->bufferA[battler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - RecordedPlayerBufferExecCompleted(); - gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; -} - -static void RecordedPlayerCmdEnd(void) -{ + RecordedPlayerBufferExecCompleted(battler); + gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 1542838db..5f9183f1b 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -22,160 +22,112 @@ #include "window.h" #include "constants/battle_anim.h" #include "constants/songs.h" +#include "constants/trainers.h" #include "constants/rgb.h" -static void SafariHandleGetMonData(void); -static void SafariHandleGetRawMonData(void); -static void SafariHandleSetMonData(void); -static void SafariHandleSetRawMonData(void); -static void SafariHandleLoadMonSprite(void); -static void SafariHandleSwitchInAnim(void); -static void SafariHandleReturnMonToBall(void); -static void SafariHandleDrawTrainerPic(void); -static void SafariHandleTrainerSlide(void); -static void SafariHandleTrainerSlideBack(void); -static void SafariHandleFaintAnimation(void); -static void SafariHandlePaletteFade(void); -static void SafariHandleSuccessBallThrowAnim(void); -static void SafariHandleBallThrowAnim(void); -static void SafariHandlePause(void); -static void SafariHandleMoveAnimation(void); -static void SafariHandlePrintString(void); -static void SafariHandlePrintSelectionString(void); -static void SafariHandleChooseAction(void); -static void SafariHandleYesNoBox(void); -static void SafariHandleChooseMove(void); -static void SafariHandleChooseItem(void); -static void SafariHandleChoosePokemon(void); -static void SafariHandleCmd23(void); -static void SafariHandleHealthBarUpdate(void); -static void SafariHandleExpUpdate(void); -static void SafariHandleStatusIconUpdate(void); -static void SafariHandleStatusAnimation(void); -static void SafariHandleStatusXor(void); -static void SafariHandleDataTransfer(void); -static void SafariHandleDMA3Transfer(void); -static void SafariHandlePlayBGM(void); -static void SafariHandleCmd32(void); -static void SafariHandleTwoReturnValues(void); -static void SafariHandleChosenMonReturnValue(void); -static void SafariHandleOneReturnValue(void); -static void SafariHandleOneReturnValue_Duplicate(void); -static void SafariHandleClearUnkVar(void); -static void SafariHandleSetUnkVar(void); -static void SafariHandleClearUnkFlag(void); -static void SafariHandleToggleUnkFlag(void); -static void SafariHandleHitAnimation(void); -static void SafariHandleCantSwitch(void); -static void SafariHandlePlaySE(void); -static void SafariHandlePlayFanfareOrBGM(void); -static void SafariHandleFaintingCry(void); -static void SafariHandleIntroSlide(void); -static void SafariHandleIntroTrainerBallThrow(void); -static void SafariHandleDrawPartyStatusSummary(void); -static void SafariHandleHidePartyStatusSummary(void); -static void SafariHandleEndBounceEffect(void); -static void SafariHandleSpriteInvisibility(void); -static void SafariHandleBattleAnimation(void); -static void SafariHandleLinkStandbyMsg(void); -static void SafariHandleResetActionMoveSelection(void); -static void SafariHandleEndLinkBattle(void); -static void SafariHandleBattleDebug(void); -static void SafariCmdEnd(void); +static void SafariHandleDrawTrainerPic(u32 battler); +static void SafariHandleSuccessBallThrowAnim(u32 battler); +static void SafariHandleBallThrowAnim(u32 battler); +static void SafariHandlePrintString(u32 battler); +static void SafariHandlePrintSelectionString(u32 battler); +static void SafariHandleChooseAction(u32 battler); +static void SafariHandleChooseItem(u32 battler); +static void SafariHandleStatusIconUpdate(u32 battler); +static void SafariHandleFaintingCry(u32 battler); +static void SafariHandleIntroTrainerBallThrow(u32 battler); +static void SafariHandleBattleAnimation(u32 battler); +static void SafariHandleEndLinkBattle(u32 battler); -static void SafariBufferRunCommand(void); -static void SafariBufferExecCompleted(void); -static void CompleteWhenChosePokeblock(void); +static void SafariBufferRunCommand(u32 battler); +static void SafariBufferExecCompleted(u32 battler); +static void CompleteWhenChosePokeblock(u32 battler); -static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) = +static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { - [CONTROLLER_GETMONDATA] = SafariHandleGetMonData, - [CONTROLLER_GETRAWMONDATA] = SafariHandleGetRawMonData, - [CONTROLLER_SETMONDATA] = SafariHandleSetMonData, - [CONTROLLER_SETRAWMONDATA] = SafariHandleSetRawMonData, - [CONTROLLER_LOADMONSPRITE] = SafariHandleLoadMonSprite, - [CONTROLLER_SWITCHINANIM] = SafariHandleSwitchInAnim, - [CONTROLLER_RETURNMONTOBALL] = SafariHandleReturnMonToBall, + [CONTROLLER_GETMONDATA] = BtlController_Empty, + [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, + [CONTROLLER_SETMONDATA] = BtlController_Empty, + [CONTROLLER_SETRAWMONDATA] = BtlController_Empty, + [CONTROLLER_LOADMONSPRITE] = BtlController_Empty, + [CONTROLLER_SWITCHINANIM] = BtlController_Empty, + [CONTROLLER_RETURNMONTOBALL] = BtlController_Empty, [CONTROLLER_DRAWTRAINERPIC] = SafariHandleDrawTrainerPic, - [CONTROLLER_TRAINERSLIDE] = SafariHandleTrainerSlide, - [CONTROLLER_TRAINERSLIDEBACK] = SafariHandleTrainerSlideBack, - [CONTROLLER_FAINTANIMATION] = SafariHandleFaintAnimation, - [CONTROLLER_PALETTEFADE] = SafariHandlePaletteFade, + [CONTROLLER_TRAINERSLIDE] = BtlController_Empty, + [CONTROLLER_TRAINERSLIDEBACK] = BtlController_Empty, + [CONTROLLER_FAINTANIMATION] = BtlController_Empty, + [CONTROLLER_PALETTEFADE] = BtlController_Empty, [CONTROLLER_SUCCESSBALLTHROWANIM] = SafariHandleSuccessBallThrowAnim, [CONTROLLER_BALLTHROWANIM] = SafariHandleBallThrowAnim, - [CONTROLLER_PAUSE] = SafariHandlePause, - [CONTROLLER_MOVEANIMATION] = SafariHandleMoveAnimation, + [CONTROLLER_PAUSE] = BtlController_Empty, + [CONTROLLER_MOVEANIMATION] = BtlController_Empty, [CONTROLLER_PRINTSTRING] = SafariHandlePrintString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = SafariHandlePrintSelectionString, [CONTROLLER_CHOOSEACTION] = SafariHandleChooseAction, - [CONTROLLER_YESNOBOX] = SafariHandleYesNoBox, - [CONTROLLER_CHOOSEMOVE] = SafariHandleChooseMove, + [CONTROLLER_YESNOBOX] = BtlController_Empty, + [CONTROLLER_CHOOSEMOVE] = BtlController_Empty, [CONTROLLER_OPENBAG] = SafariHandleChooseItem, - [CONTROLLER_CHOOSEPOKEMON] = SafariHandleChoosePokemon, - [CONTROLLER_23] = SafariHandleCmd23, - [CONTROLLER_HEALTHBARUPDATE] = SafariHandleHealthBarUpdate, - [CONTROLLER_EXPUPDATE] = SafariHandleExpUpdate, + [CONTROLLER_CHOOSEPOKEMON] = BtlController_Empty, + [CONTROLLER_23] = BtlController_Empty, + [CONTROLLER_HEALTHBARUPDATE] = BtlController_Empty, + [CONTROLLER_EXPUPDATE] = BtlController_Empty, [CONTROLLER_STATUSICONUPDATE] = SafariHandleStatusIconUpdate, - [CONTROLLER_STATUSANIMATION] = SafariHandleStatusAnimation, - [CONTROLLER_STATUSXOR] = SafariHandleStatusXor, - [CONTROLLER_DATATRANSFER] = SafariHandleDataTransfer, - [CONTROLLER_DMA3TRANSFER] = SafariHandleDMA3Transfer, - [CONTROLLER_PLAYBGM] = SafariHandlePlayBGM, - [CONTROLLER_32] = SafariHandleCmd32, - [CONTROLLER_TWORETURNVALUES] = SafariHandleTwoReturnValues, - [CONTROLLER_CHOSENMONRETURNVALUE] = SafariHandleChosenMonReturnValue, - [CONTROLLER_ONERETURNVALUE] = SafariHandleOneReturnValue, - [CONTROLLER_ONERETURNVALUE_DUPLICATE] = SafariHandleOneReturnValue_Duplicate, - [CONTROLLER_CLEARUNKVAR] = SafariHandleClearUnkVar, - [CONTROLLER_SETUNKVAR] = SafariHandleSetUnkVar, - [CONTROLLER_CLEARUNKFLAG] = SafariHandleClearUnkFlag, - [CONTROLLER_TOGGLEUNKFLAG] = SafariHandleToggleUnkFlag, - [CONTROLLER_HITANIMATION] = SafariHandleHitAnimation, - [CONTROLLER_CANTSWITCH] = SafariHandleCantSwitch, - [CONTROLLER_PLAYSE] = SafariHandlePlaySE, - [CONTROLLER_PLAYFANFAREORBGM] = SafariHandlePlayFanfareOrBGM, + [CONTROLLER_STATUSANIMATION] = BtlController_Empty, + [CONTROLLER_STATUSXOR] = BtlController_Empty, + [CONTROLLER_DATATRANSFER] = BtlController_Empty, + [CONTROLLER_DMA3TRANSFER] = BtlController_Empty, + [CONTROLLER_PLAYBGM] = BtlController_Empty, + [CONTROLLER_32] = BtlController_Empty, + [CONTROLLER_TWORETURNVALUES] = BtlController_Empty, + [CONTROLLER_CHOSENMONRETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, + [CONTROLLER_CLEARUNKVAR] = BtlController_Empty, + [CONTROLLER_SETUNKVAR] = BtlController_Empty, + [CONTROLLER_CLEARUNKFLAG] = BtlController_Empty, + [CONTROLLER_TOGGLEUNKFLAG] = BtlController_Empty, + [CONTROLLER_HITANIMATION] = BtlController_Empty, + [CONTROLLER_CANTSWITCH] = BtlController_Empty, + [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, [CONTROLLER_FAINTINGCRY] = SafariHandleFaintingCry, - [CONTROLLER_INTROSLIDE] = SafariHandleIntroSlide, + [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, [CONTROLLER_INTROTRAINERBALLTHROW] = SafariHandleIntroTrainerBallThrow, - [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = SafariHandleDrawPartyStatusSummary, - [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = SafariHandleHidePartyStatusSummary, - [CONTROLLER_ENDBOUNCE] = SafariHandleEndBounceEffect, - [CONTROLLER_SPRITEINVISIBILITY] = SafariHandleSpriteInvisibility, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = BtlController_Empty, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_Empty, + [CONTROLLER_ENDBOUNCE] = BtlController_Empty, + [CONTROLLER_SPRITEINVISIBILITY] = BtlController_Empty, [CONTROLLER_BATTLEANIMATION] = SafariHandleBattleAnimation, - [CONTROLLER_LINKSTANDBYMSG] = SafariHandleLinkStandbyMsg, - [CONTROLLER_RESETACTIONMOVESELECTION] = SafariHandleResetActionMoveSelection, + [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, + [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = SafariHandleEndLinkBattle, - [CONTROLLER_DEBUGMENU] = SafariHandleBattleDebug, - [CONTROLLER_TERMINATOR_NOP] = SafariCmdEnd + [CONTROLLER_DEBUGMENU] = BtlController_Empty, + [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; -static void SpriteCB_Null4(void) +void SetControllerToSafari(u32 battler) { + gBattlerControllerEndFuncs[battler] = SafariBufferExecCompleted; + gBattlerControllerFuncs[battler] = SafariBufferRunCommand; } -void SetControllerToSafari(void) +static void SafariBufferRunCommand(u32 battler) { - gBattlerControllerFuncs[gActiveBattler] = SafariBufferRunCommand; -} - -static void SafariBufferRunCommand(void) -{ - if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) + if (gBattleControllerExecFlags & gBitTable[battler]) { - if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sSafariBufferCommands)) - sSafariBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sSafariBufferCommands)) + sSafariBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - SafariBufferExecCompleted(); + SafariBufferExecCompleted(battler); } } -static void HandleInputChooseAction(void) +static void HandleInputChooseAction(u32 battler) { if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - switch (gActionSelectionCursor[gActiveBattler]) + switch (gActionSelectionCursor[battler]) { case 0: BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SAFARI_BALL, 0); @@ -190,69 +142,57 @@ static void HandleInputChooseAction(void) BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SAFARI_RUN, 0); break; } - SafariBufferExecCompleted(); + SafariBufferExecCompleted(battler); } else if (JOY_NEW(DPAD_LEFT)) { - if (gActionSelectionCursor[gActiveBattler] & 1) + if (gActionSelectionCursor[battler] & 1) { PlaySE(SE_SELECT); - ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]); - gActionSelectionCursor[gActiveBattler] ^= 1; - ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + ActionSelectionDestroyCursorAt(gActionSelectionCursor[battler]); + gActionSelectionCursor[battler] ^= 1; + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); } } else if (JOY_NEW(DPAD_RIGHT)) { - if (!(gActionSelectionCursor[gActiveBattler] & 1)) + if (!(gActionSelectionCursor[battler] & 1)) { PlaySE(SE_SELECT); - ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]); - gActionSelectionCursor[gActiveBattler] ^= 1; - ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + ActionSelectionDestroyCursorAt(gActionSelectionCursor[battler]); + gActionSelectionCursor[battler] ^= 1; + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); } } else if (JOY_NEW(DPAD_UP)) { - if (gActionSelectionCursor[gActiveBattler] & 2) + if (gActionSelectionCursor[battler] & 2) { PlaySE(SE_SELECT); - ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]); - gActionSelectionCursor[gActiveBattler] ^= 2; - ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + ActionSelectionDestroyCursorAt(gActionSelectionCursor[battler]); + gActionSelectionCursor[battler] ^= 2; + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); } } else if (JOY_NEW(DPAD_DOWN)) { - if (!(gActionSelectionCursor[gActiveBattler] & 2)) + if (!(gActionSelectionCursor[battler] & 2)) { PlaySE(SE_SELECT); - ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]); - gActionSelectionCursor[gActiveBattler] ^= 2; - ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + ActionSelectionDestroyCursorAt(gActionSelectionCursor[battler]); + gActionSelectionCursor[battler] ^= 2; + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); } } } -static void CompleteOnBattlerSpriteCallbackDummy(void) +static void Controller_WaitForHealthbox(u32 battler) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - SafariBufferExecCompleted(); + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) + SafariBufferExecCompleted(battler); } -static void CompleteOnInactiveTextPrinter(void) -{ - if (!IsTextPrinterActive(B_WIN_MSG)) - SafariBufferExecCompleted(); -} - -static void CompleteOnHealthboxSpriteCallbackDummy(void) -{ - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - SafariBufferExecCompleted(); -} - -static void SafariSetBattleEndCallbacks(void) +static void SafariSetBattleEndCallbacks(u32 battler) { if (!gPaletteFade.active) { @@ -262,437 +202,141 @@ static void SafariSetBattleEndCallbacks(void) } } -static void CompleteOnSpecialAnimDone(void) -{ - if (!gDoingBattleAnim || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - SafariBufferExecCompleted(); -} - -static void SafariOpenPokeblockCase(void) +static void SafariOpenPokeblockCase(u32 battler) { if (!gPaletteFade.active) { - gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChosePokeblock; + gBattlerControllerFuncs[battler] = CompleteWhenChosePokeblock; FreeAllWindowBuffers(); OpenPokeblockCaseInBattle(); } } -static void CompleteWhenChosePokeblock(void) +static void CompleteWhenChosePokeblock(u32 battler) { if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { BtlController_EmitOneReturnValue(BUFFER_B, gSpecialVar_ItemId); - SafariBufferExecCompleted(); + SafariBufferExecCompleted(battler); } } -static void CompleteOnFinishedBattleAnimation(void) +static void SafariBufferExecCompleted(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive) - SafariBufferExecCompleted(); -} - -static void SafariBufferExecCompleted(void) -{ - gBattlerControllerFuncs[gActiveBattler] = SafariBufferRunCommand; + gBattlerControllerFuncs[battler] = SafariBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP; } else { - gBattleControllerExecFlags &= ~gBitTable[gActiveBattler]; + gBattleControllerExecFlags &= ~gBitTable[battler]; } } -static void CompleteOnFinishedStatusAnimation(void) +static void SafariHandleDrawTrainerPic(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) - SafariBufferExecCompleted(); + u32 trainerPicId = gSaveBlock2Ptr->playerGender + TRAINER_BACK_PIC_BRENDAN; + + BtlController_HandleDrawTrainerPic(battler, trainerPicId, FALSE, + 80, 80 + 4 * (8 - gTrainerBackPicCoords[trainerPicId].size), + 30); } -static void SafariHandleGetMonData(void) +static void SafariHandleSuccessBallThrowAnim(u32 battler) { - SafariBufferExecCompleted(); + BtlController_HandleSuccessBallThrowAnim(battler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER, FALSE); } -static void SafariHandleGetRawMonData(void) +static void SafariHandleBallThrowAnim(u32 battler) { - SafariBufferExecCompleted(); + BtlController_HandleBallThrowAnim(battler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER, FALSE); } -static void SafariHandleSetMonData(void) +static void SafariHandlePrintString(u32 battler) { - SafariBufferExecCompleted(); + BtlController_HandlePrintString(battler, FALSE, FALSE); } -static void SafariHandleSetRawMonData(void) +static void SafariHandlePrintSelectionString(u32 battler) { - SafariBufferExecCompleted(); -} - -static void SafariHandleLoadMonSprite(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleSwitchInAnim(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleReturnMonToBall(void) -{ - SafariBufferExecCompleted(); -} - -#define sSpeedX data[0] - -static void SafariHandleDrawTrainerPic(void) -{ - DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gMultiuseSpriteTemplate, - 80, - (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80, - 30); - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; -} - -#undef sSpeedX - -static void SafariHandleTrainerSlide(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleTrainerSlideBack(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleFaintAnimation(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandlePaletteFade(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleSuccessBallThrowAnim(void) -{ - gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS; - gDoingBattleAnim = TRUE; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone; -} - -static void SafariHandleBallThrowAnim(void) -{ - u8 ballThrowCaseId = gBattleResources->bufferA[gActiveBattler][1]; - - gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId; - gDoingBattleAnim = TRUE; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone; -} - -static void SafariHandlePause(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleMoveAnimation(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandlePrintString(void) -{ - u16 *stringId; - - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); - BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; -} - -static void SafariHandlePrintSelectionString(void) -{ - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - SafariHandlePrintString(); + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + SafariHandlePrintString(battler); else - SafariBufferExecCompleted(); + SafariBufferExecCompleted(battler); } -static void HandleChooseActionAfterDma3(void) +static void HandleChooseActionAfterDma3(u32 battler) { if (!IsDma3ManagerBusyWithBgCopy()) { gBattle_BG0_X = 0; gBattle_BG0_Y = DISPLAY_HEIGHT; - gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseAction; + gBattlerControllerFuncs[battler] = HandleInputChooseAction; } } -static void SafariHandleChooseAction(void) +static void SafariHandleChooseAction(u32 battler) { s32 i; - gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3; + gBattlerControllerFuncs[battler] = HandleChooseActionAfterDma3; BattlePutTextOnWindow(gText_SafariZoneMenu, B_WIN_ACTION_MENU); for (i = 0; i < 4; i++) ActionSelectionDestroyCursorAt(i); - ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo2); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); } -static void SafariHandleYesNoBox(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleChooseMove(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleChooseItem(void) +static void SafariHandleChooseItem(u32 battler) { BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); - gBattlerControllerFuncs[gActiveBattler] = SafariOpenPokeblockCase; - gBattlerInMenuId = gActiveBattler; + gBattlerControllerFuncs[battler] = SafariOpenPokeblockCase; + gBattlerInMenuId = battler; } -static void SafariHandleChoosePokemon(void) +static void SafariHandleStatusIconUpdate(u32 battler) { - SafariBufferExecCompleted(); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_SAFARI_BALLS_TEXT); + SafariBufferExecCompleted(battler); } -static void SafariHandleCmd23(void) +// All of the other controllers(except Wally's) use CRY_MODE_FAINT. +// Player is not a pokemon, so it can't really faint in the Safari anyway. +static void SafariHandleFaintingCry(u32 battler) { - SafariBufferExecCompleted(); -} - -static void SafariHandleHealthBarUpdate(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleExpUpdate(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleStatusIconUpdate(void) -{ - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_SAFARI_BALLS_TEXT); - SafariBufferExecCompleted(); -} - -static void SafariHandleStatusAnimation(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleStatusXor(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleDataTransfer(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleDMA3Transfer(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandlePlayBGM(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleCmd32(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleTwoReturnValues(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleChosenMonReturnValue(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleOneReturnValue(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleOneReturnValue_Duplicate(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleClearUnkVar(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleSetUnkVar(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleClearUnkFlag(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleToggleUnkFlag(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleHitAnimation(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleCantSwitch(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandlePlaySE(void) -{ - s8 pan; - - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - pan = SOUND_PAN_ATTACKER; - else - pan = SOUND_PAN_TARGET; - - PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); - SafariBufferExecCompleted(); -} - -static void SafariHandlePlayFanfareOrBGM(void) -{ - if (gBattleResources->bufferA[gActiveBattler][3]) - { - BattleStopLowHpSound(); - PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - else - { - PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - - SafariBufferExecCompleted(); -} - -static void SafariHandleFaintingCry(void) -{ - u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); + u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES); PlayCry_Normal(species, 25); - SafariBufferExecCompleted(); + SafariBufferExecCompleted(battler); + SafariBufferExecCompleted(battler); } -static void SafariHandleIntroSlide(void) +static void SafariHandleIntroTrainerBallThrow(u32 battler) { - HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); - gIntroSlideFlags |= 1; - SafariBufferExecCompleted(); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_SAFARI_ALL_TEXT); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); + gBattlerControllerFuncs[battler] = Controller_WaitForHealthbox; } -static void SafariHandleIntroTrainerBallThrow(void) +static void SafariHandleBattleAnimation(u32 battler) { - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_SAFARI_ALL_TEXT); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthboxSpriteCallbackDummy; + BtlController_HandleBattleAnimation(battler, TRUE, FALSE); } -static void SafariHandleDrawPartyStatusSummary(void) +static void SafariHandleEndLinkBattle(u32 battler) { - SafariBufferExecCompleted(); -} - -static void SafariHandleHidePartyStatusSummary(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleEndBounceEffect(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleSpriteInvisibility(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleBattleAnimation(void) -{ - u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; - u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) - SafariBufferExecCompleted(); - else - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation; -} - -static void SafariHandleLinkStandbyMsg(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleResetActionMoveSelection(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariHandleEndLinkBattle(void) -{ - gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; + gBattleOutcome = gBattleResources->bufferA[battler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - SafariBufferExecCompleted(); + SafariBufferExecCompleted(battler); if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)) - gBattlerControllerFuncs[gActiveBattler] = SafariSetBattleEndCallbacks; -} - -static void SafariHandleBattleDebug(void) -{ - SafariBufferExecCompleted(); -} - -static void SafariCmdEnd(void) -{ + gBattlerControllerFuncs[battler] = SafariSetBattleEndCallbacks; } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 00a825dba..cff966567 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -32,162 +32,113 @@ #include "constants/trainers.h" #include "constants/rgb.h" -// this file's functions -static void WallyHandleGetMonData(void); -static void WallyHandleGetRawMonData(void); -static void WallyHandleSetMonData(void); -static void WallyHandleSetRawMonData(void); -static void WallyHandleLoadMonSprite(void); -static void WallyHandleSwitchInAnim(void); -static void WallyHandleReturnMonToBall(void); -static void WallyHandleDrawTrainerPic(void); -static void WallyHandleTrainerSlide(void); -static void WallyHandleTrainerSlideBack(void); -static void WallyHandleFaintAnimation(void); -static void WallyHandlePaletteFade(void); -static void WallyHandleSuccessBallThrowAnim(void); -static void WallyHandleBallThrowAnim(void); -static void WallyHandlePause(void); -static void WallyHandleMoveAnimation(void); -static void WallyHandlePrintString(void); -static void WallyHandlePrintSelectionString(void); -static void WallyHandleChooseAction(void); -static void WallyHandleYesNoBox(void); -static void WallyHandleChooseMove(void); -static void WallyHandleChooseItem(void); -static void WallyHandleChoosePokemon(void); -static void WallyHandleCmd23(void); -static void WallyHandleHealthBarUpdate(void); -static void WallyHandleExpUpdate(void); -static void WallyHandleStatusIconUpdate(void); -static void WallyHandleStatusAnimation(void); -static void WallyHandleStatusXor(void); -static void WallyHandleDataTransfer(void); -static void WallyHandleDMA3Transfer(void); -static void WallyHandlePlayBGM(void); -static void WallyHandleCmd32(void); -static void WallyHandleTwoReturnValues(void); -static void WallyHandleChosenMonReturnValue(void); -static void WallyHandleOneReturnValue(void); -static void WallyHandleOneReturnValue_Duplicate(void); -static void WallyHandleClearUnkVar(void); -static void WallyHandleSetUnkVar(void); -static void WallyHandleClearUnkFlag(void); -static void WallyHandleToggleUnkFlag(void); -static void WallyHandleHitAnimation(void); -static void WallyHandleCantSwitch(void); -static void WallyHandlePlaySE(void); -static void WallyHandlePlayFanfareOrBGM(void); -static void WallyHandleFaintingCry(void); -static void WallyHandleIntroSlide(void); -static void WallyHandleIntroTrainerBallThrow(void); -static void WallyHandleDrawPartyStatusSummary(void); -static void WallyHandleHidePartyStatusSummary(void); -static void WallyHandleEndBounceEffect(void); -static void WallyHandleSpriteInvisibility(void); -static void WallyHandleBattleAnimation(void); -static void WallyHandleLinkStandbyMsg(void); -static void WallyHandleResetActionMoveSelection(void); -static void WallyHandleEndLinkBattle(void); -static void WallyHandleBattleDebug(void); -static void WallyCmdEnd(void); +static void WallyHandleDrawTrainerPic(u32 battler); +static void WallyHandleTrainerSlide(u32 battler); +static void WallyHandleSuccessBallThrowAnim(u32 battler); +static void WallyHandleBallThrowAnim(u32 battler); +static void WallyHandleMoveAnimation(u32 battler); +static void WallyHandlePrintString(u32 battler); +static void WallyHandlePrintSelectionString(u32 battler); +static void WallyHandleChooseAction(u32 battler); +static void WallyHandleChooseMove(u32 battler); +static void WallyHandleChooseItem(u32 battler); +static void WallyHandleHealthBarUpdate(u32 battler); +static void WallyHandlePlaySE(u32 battler); +static void WallyHandleFaintingCry(u32 battler); +static void WallyHandleIntroTrainerBallThrow(u32 battler); +static void WallyHandleDrawPartyStatusSummary(u32 battler); +static void WallyHandleBattleAnimation(u32 battler); +static void WallyHandleEndLinkBattle(u32 battler); -static void WallyBufferRunCommand(void); -static void WallyBufferExecCompleted(void); -static void CompleteOnChosenItem(void); -static void Intro_WaitForShinyAnimAndHealthbox(void); -static u32 CopyWallyMonData(u8 monId, u8 *dst); -static void SetWallyMonData(u8 monId); -static void WallyDoMoveAnimation(void); -static void Task_StartSendOutAnim(u8 taskId); +static void WallyBufferRunCommand(u32 battler); +static void WallyBufferExecCompleted(u32 battler); +static void CompleteOnChosenItem(u32 battler); +static void Intro_WaitForShinyAnimAndHealthbox(u32 battler); -static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(void) = +static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { - [CONTROLLER_GETMONDATA] = WallyHandleGetMonData, - [CONTROLLER_GETRAWMONDATA] = WallyHandleGetRawMonData, - [CONTROLLER_SETMONDATA] = WallyHandleSetMonData, - [CONTROLLER_SETRAWMONDATA] = WallyHandleSetRawMonData, - [CONTROLLER_LOADMONSPRITE] = WallyHandleLoadMonSprite, - [CONTROLLER_SWITCHINANIM] = WallyHandleSwitchInAnim, - [CONTROLLER_RETURNMONTOBALL] = WallyHandleReturnMonToBall, + [CONTROLLER_GETMONDATA] = BtlController_HandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = BtlController_HandleGetRawMonData, + [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = BtlController_Empty, + [CONTROLLER_LOADMONSPRITE] = BtlController_Empty, + [CONTROLLER_SWITCHINANIM] = BtlController_Empty, + [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = WallyHandleDrawTrainerPic, [CONTROLLER_TRAINERSLIDE] = WallyHandleTrainerSlide, - [CONTROLLER_TRAINERSLIDEBACK] = WallyHandleTrainerSlideBack, - [CONTROLLER_FAINTANIMATION] = WallyHandleFaintAnimation, - [CONTROLLER_PALETTEFADE] = WallyHandlePaletteFade, + [CONTROLLER_TRAINERSLIDEBACK] = BtlController_Empty, + [CONTROLLER_FAINTANIMATION] = BtlController_Empty, + [CONTROLLER_PALETTEFADE] = BtlController_Empty, [CONTROLLER_SUCCESSBALLTHROWANIM] = WallyHandleSuccessBallThrowAnim, [CONTROLLER_BALLTHROWANIM] = WallyHandleBallThrowAnim, - [CONTROLLER_PAUSE] = WallyHandlePause, + [CONTROLLER_PAUSE] = BtlController_Empty, [CONTROLLER_MOVEANIMATION] = WallyHandleMoveAnimation, [CONTROLLER_PRINTSTRING] = WallyHandlePrintString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = WallyHandlePrintSelectionString, [CONTROLLER_CHOOSEACTION] = WallyHandleChooseAction, - [CONTROLLER_YESNOBOX] = WallyHandleYesNoBox, + [CONTROLLER_YESNOBOX] = BtlController_Empty, [CONTROLLER_CHOOSEMOVE] = WallyHandleChooseMove, [CONTROLLER_OPENBAG] = WallyHandleChooseItem, - [CONTROLLER_CHOOSEPOKEMON] = WallyHandleChoosePokemon, - [CONTROLLER_23] = WallyHandleCmd23, + [CONTROLLER_CHOOSEPOKEMON] = BtlController_Empty, + [CONTROLLER_23] = BtlController_Empty, [CONTROLLER_HEALTHBARUPDATE] = WallyHandleHealthBarUpdate, - [CONTROLLER_EXPUPDATE] = WallyHandleExpUpdate, - [CONTROLLER_STATUSICONUPDATE] = WallyHandleStatusIconUpdate, - [CONTROLLER_STATUSANIMATION] = WallyHandleStatusAnimation, - [CONTROLLER_STATUSXOR] = WallyHandleStatusXor, - [CONTROLLER_DATATRANSFER] = WallyHandleDataTransfer, - [CONTROLLER_DMA3TRANSFER] = WallyHandleDMA3Transfer, - [CONTROLLER_PLAYBGM] = WallyHandlePlayBGM, - [CONTROLLER_32] = WallyHandleCmd32, - [CONTROLLER_TWORETURNVALUES] = WallyHandleTwoReturnValues, - [CONTROLLER_CHOSENMONRETURNVALUE] = WallyHandleChosenMonReturnValue, - [CONTROLLER_ONERETURNVALUE] = WallyHandleOneReturnValue, - [CONTROLLER_ONERETURNVALUE_DUPLICATE] = WallyHandleOneReturnValue_Duplicate, - [CONTROLLER_CLEARUNKVAR] = WallyHandleClearUnkVar, - [CONTROLLER_SETUNKVAR] = WallyHandleSetUnkVar, - [CONTROLLER_CLEARUNKFLAG] = WallyHandleClearUnkFlag, - [CONTROLLER_TOGGLEUNKFLAG] = WallyHandleToggleUnkFlag, - [CONTROLLER_HITANIMATION] = WallyHandleHitAnimation, - [CONTROLLER_CANTSWITCH] = WallyHandleCantSwitch, + [CONTROLLER_EXPUPDATE] = BtlController_Empty, + [CONTROLLER_STATUSICONUPDATE] = BtlController_Empty, + [CONTROLLER_STATUSANIMATION] = BtlController_Empty, + [CONTROLLER_STATUSXOR] = BtlController_Empty, + [CONTROLLER_DATATRANSFER] = BtlController_Empty, + [CONTROLLER_DMA3TRANSFER] = BtlController_Empty, + [CONTROLLER_PLAYBGM] = BtlController_Empty, + [CONTROLLER_32] = BtlController_Empty, + [CONTROLLER_TWORETURNVALUES] = BtlController_Empty, + [CONTROLLER_CHOSENMONRETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, + [CONTROLLER_CLEARUNKVAR] = BtlController_Empty, + [CONTROLLER_SETUNKVAR] = BtlController_Empty, + [CONTROLLER_CLEARUNKFLAG] = BtlController_Empty, + [CONTROLLER_TOGGLEUNKFLAG] = BtlController_Empty, + [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, + [CONTROLLER_CANTSWITCH] = BtlController_Empty, [CONTROLLER_PLAYSE] = WallyHandlePlaySE, - [CONTROLLER_PLAYFANFAREORBGM] = WallyHandlePlayFanfareOrBGM, + [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, [CONTROLLER_FAINTINGCRY] = WallyHandleFaintingCry, - [CONTROLLER_INTROSLIDE] = WallyHandleIntroSlide, + [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, [CONTROLLER_INTROTRAINERBALLTHROW] = WallyHandleIntroTrainerBallThrow, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = WallyHandleDrawPartyStatusSummary, - [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = WallyHandleHidePartyStatusSummary, - [CONTROLLER_ENDBOUNCE] = WallyHandleEndBounceEffect, - [CONTROLLER_SPRITEINVISIBILITY] = WallyHandleSpriteInvisibility, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_Empty, + [CONTROLLER_ENDBOUNCE] = BtlController_Empty, + [CONTROLLER_SPRITEINVISIBILITY] = BtlController_Empty, [CONTROLLER_BATTLEANIMATION] = WallyHandleBattleAnimation, - [CONTROLLER_LINKSTANDBYMSG] = WallyHandleLinkStandbyMsg, - [CONTROLLER_RESETACTIONMOVESELECTION] = WallyHandleResetActionMoveSelection, + [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, + [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = WallyHandleEndLinkBattle, - [CONTROLLER_DEBUGMENU] = WallyHandleBattleDebug, - [CONTROLLER_TERMINATOR_NOP] = WallyCmdEnd + [CONTROLLER_DEBUGMENU] = BtlController_Empty, + [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; -static void SpriteCB_Null7(void) +void SetControllerToWally(u32 battler) { -} - -void SetControllerToWally(void) -{ - gBattlerControllerFuncs[gActiveBattler] = WallyBufferRunCommand; + gBattlerControllerEndFuncs[battler] = WallyBufferExecCompleted; + gBattlerControllerFuncs[battler] = WallyBufferRunCommand; gBattleStruct->wallyBattleState = 0; gBattleStruct->wallyMovesState = 0; gBattleStruct->wallyWaitFrames = 0; gBattleStruct->wallyMoveFrames = 0; } -static void WallyBufferRunCommand(void) +static void WallyBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) + if (gBattleControllerExecFlags & gBitTable[battler]) { - if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sWallyBufferCommands)) - sWallyBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sWallyBufferCommands)) + sWallyBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - WallyBufferExecCompleted(); + WallyBufferExecCompleted(battler); } } -static void WallyHandleActions(void) +static void WallyHandleActions(u32 battler) { switch (gBattleStruct->wallyBattleState) { @@ -199,7 +150,7 @@ static void WallyHandleActions(void) { PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_MOVE, 0); - WallyBufferExecCompleted(); + WallyBufferExecCompleted(battler); gBattleStruct->wallyBattleState++; gBattleStruct->wallyMovesState = 0; gBattleStruct->wallyWaitFrames = B_WAIT_TIME_LONG; @@ -210,7 +161,7 @@ static void WallyHandleActions(void) { PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_MOVE, 0); - WallyBufferExecCompleted(); + WallyBufferExecCompleted(battler); gBattleStruct->wallyBattleState++; gBattleStruct->wallyMovesState = 0; gBattleStruct->wallyWaitFrames = B_WAIT_TIME_LONG; @@ -220,7 +171,7 @@ static void WallyHandleActions(void) if (--gBattleStruct->wallyWaitFrames == 0) { BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_WALLY_THROW, 0); - WallyBufferExecCompleted(); + WallyBufferExecCompleted(battler); gBattleStruct->wallyBattleState++; gBattleStruct->wallyMovesState = 0; gBattleStruct->wallyWaitFrames = B_WAIT_TIME_LONG; @@ -241,986 +192,181 @@ static void WallyHandleActions(void) { PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_ITEM, 0); - WallyBufferExecCompleted(); + WallyBufferExecCompleted(battler); } break; } } -static void CompleteOnBattlerSpriteCallbackDummy(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - WallyBufferExecCompleted(); -} - -static void CompleteOnInactiveTextPrinter(void) -{ - if (!IsTextPrinterActive(B_WIN_MSG)) - WallyBufferExecCompleted(); -} - -static void CompleteOnFinishedAnimation(void) -{ - if (!gDoingBattleAnim) - WallyBufferExecCompleted(); -} - -static void OpenBagAfterPaletteFade(void) +static void OpenBagAfterPaletteFade(u32 battler) { if (!gPaletteFade.active) { - gBattlerControllerFuncs[gActiveBattler] = CompleteOnChosenItem; + gBattlerControllerFuncs[battler] = CompleteOnChosenItem; ReshowBattleScreenDummy(); FreeAllWindowBuffers(); DoWallyTutorialBagMenu(); } } -static void CompleteOnChosenItem(void) +static void CompleteOnChosenItem(u32 battler) { if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { BtlController_EmitOneReturnValue(BUFFER_B, gSpecialVar_ItemId); - WallyBufferExecCompleted(); + WallyBufferExecCompleted(battler); } } -static void Intro_TryShinyAnimShowHealthbox(void) +static void Intro_TryShinyAnimShowHealthbox(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) + TryShinyAnimation(battler, &gPlayerParty[gBattlerPartyIndexes[battler]]); - if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive) - TryShinyAnimation(BATTLE_PARTNER(gActiveBattler), &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]]); + if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive) + TryShinyAnimation(BATTLE_PARTNER(battler), &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]]); - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive - && gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive + && gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(gActiveBattler)]]); - UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)], &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]], HEALTHBOX_ALL); - StartHealthboxSlideIn(BATTLE_PARTNER(gActiveBattler)); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(gActiveBattler)]); + DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(battler)], &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], HEALTHBOX_ALL); + StartHealthboxSlideIn(BATTLE_PARTNER(battler)); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(battler)]); } - DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - StartHealthboxSlideIn(gActiveBattler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + DestroySprite(&gSprites[gBattleControllerData[battler]]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; - gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; + gBattlerControllerFuncs[battler] = Intro_WaitForShinyAnimAndHealthbox; } - } -static void Intro_WaitForShinyAnimAndHealthbox(void) +static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) { bool32 healthboxAnimDone = FALSE; - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) healthboxAnimDone = TRUE; - if (healthboxAnimDone && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim - && gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim) + if (healthboxAnimDone && gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim + && gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); - WallyBufferExecCompleted(); + WallyBufferExecCompleted(battler); } } -static void CompleteOnHealthbarDone(void) +static void WallyBufferExecCompleted(u32 battler) { - s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); - - SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - - if (hpValue != -1) - { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); - } - else - { - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - WallyBufferExecCompleted(); - } -} - -static void DoHitAnimBlinkSpriteEffect(void) -{ - u8 spriteId = gBattlerSpriteIds[gActiveBattler]; - - if (gSprites[spriteId].data[1] == 32) - { - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = FALSE; - WallyBufferExecCompleted(); - } - else - { - if ((gSprites[spriteId].data[1] % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data[1]++; - } -} - -static void DoSwitchOutAnimation(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - WallyBufferExecCompleted(); - } -} - -static void CompleteOnBankSpriteCallbackDummy2(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - WallyBufferExecCompleted(); -} - -static void CompleteOnFinishedBattleAnimation(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive) - WallyBufferExecCompleted(); -} - -static void WallyBufferExecCompleted(void) -{ - gBattlerControllerFuncs[gActiveBattler] = WallyBufferRunCommand; + gBattlerControllerFuncs[battler] = WallyBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP; } else { - gBattleControllerExecFlags &= ~gBitTable[gActiveBattler]; - } -} - -static void CompleteOnFinishedStatusAnimation(void) -{ - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) - WallyBufferExecCompleted(); -} - -static void WallyHandleGetMonData(void) -{ - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data - u32 size = 0; - u8 monToCheck; - s32 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - size += CopyWallyMonData(gBattlerPartyIndexes[gActiveBattler], monData); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - size += CopyWallyMonData(i, monData + size); - monToCheck >>= 1; - } - } - BtlController_EmitDataTransfer(BUFFER_B, size, monData); - WallyBufferExecCompleted(); -} - -static u32 CopyWallyMonData(u8 monId, u8 *dst) -{ - struct BattlePokemon battleMon; - struct MovePpInfo moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); - for (size = 0; size < MAX_MON_MOVES; size++) - { - battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); - battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - } - battleMon.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - battleMon.friendship = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP); - battleMon.experience = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); - battleMon.hpIV = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - battleMon.attackIV = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - battleMon.defenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - battleMon.speedIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - battleMon.spAttackIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - battleMon.spDefenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - battleMon.personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - battleMon.status1 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS); - battleMon.level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - battleMon.hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP); - battleMon.maxHP = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP); - battleMon.attack = GetMonData(&gPlayerParty[monId], MON_DATA_ATK); - battleMon.defense = GetMonData(&gPlayerParty[monId], MON_DATA_DEF); - battleMon.speed = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED); - battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); - battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); - battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); - battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); - battleMon.metLevel = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); - GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy_Nickname(battleMon.nickname, nickname); - GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); - src = (u8 *)&battleMon; - for (size = 0; size < sizeof(battleMon); size++) - dst[size] = src[size]; - break; - case REQUEST_SPECIES_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_HELDITEM_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MOVES_PP_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - { - moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - src = (u8 *)(&moveData); - for (size = 0; size < sizeof(moveData); size++) - dst[size] = src[size]; - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_PP_DATA_BATTLE: - for (size = 0; size < MAX_MON_MOVES; size++) - dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); - dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - size++; - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); - size = 1; - break; - case REQUEST_OTID_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_EXP_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case REQUEST_HP_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_EV); - size = 1; - break; - case REQUEST_ATK_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV); - size = 1; - break; - case REQUEST_DEF_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV); - size = 1; - break; - case REQUEST_SPEED_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV); - size = 1; - break; - case REQUEST_SPATK_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV); - size = 1; - break; - case REQUEST_SPDEF_EV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV); - size = 1; - break; - case REQUEST_FRIENDSHIP_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP); - size = 1; - break; - case REQUEST_POKERUS_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKERUS); - size = 1; - break; - case REQUEST_MET_LOCATION_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION); - size = 1; - break; - case REQUEST_MET_LEVEL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); - size = 1; - break; - case REQUEST_MET_GAME_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME); - size = 1; - break; - case REQUEST_POKEBALL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL); - size = 1; - break; - case REQUEST_ALL_IVS_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - dst[1] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - dst[2] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - dst[3] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - dst[4] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - dst[5] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - size = 6; - break; - case REQUEST_HP_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV); - size = 1; - break; - case REQUEST_ATK_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV); - size = 1; - break; - case REQUEST_DEF_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV); - size = 1; - break; - case REQUEST_SPEED_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV); - size = 1; - break; - case REQUEST_SPATK_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV); - size = 1; - break; - case REQUEST_SPDEF_IV_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV); - size = 1; - break; - case REQUEST_PERSONALITY_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_CHECKSUM_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_STATUS_BATTLE: - data32 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS); - dst[0] = (data32 & 0x000000FF); - dst[1] = (data32 & 0x0000FF00) >> 8; - dst[2] = (data32 & 0x00FF0000) >> 16; - dst[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case REQUEST_LEVEL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - size = 1; - break; - case REQUEST_HP_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_MAX_HP_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_ATK_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_ATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_DEF_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_DEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPEED_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPATK_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_SPDEF_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); - dst[0] = data16; - dst[1] = data16 >> 8; - size = 2; - break; - case REQUEST_COOL_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL); - size = 1; - break; - case REQUEST_BEAUTY_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY); - size = 1; - break; - case REQUEST_CUTE_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE); - size = 1; - break; - case REQUEST_SMART_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART); - size = 1; - break; - case REQUEST_TOUGH_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH); - size = 1; - break; - case REQUEST_SHEEN_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SHEEN); - size = 1; - break; - case REQUEST_COOL_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON); - size = 1; - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case REQUEST_CUTE_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case REQUEST_SMART_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON); - size = 1; - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - - return size; -} - -static void WallyHandleGetRawMonData(void) -{ - PlayerHandleGetRawMonData(); -} - -static void WallyHandleSetMonData(void) -{ - u8 monToCheck; - u8 i; - - if (gBattleResources->bufferA[gActiveBattler][2] == 0) - { - SetWallyMonData(gBattlerPartyIndexes[gActiveBattler]); - } - else - { - monToCheck = gBattleResources->bufferA[gActiveBattler][2]; - for (i = 0; i < PARTY_SIZE; i++) - { - if (monToCheck & 1) - SetWallyMonData(i); - monToCheck >>= 1; - } - } - WallyBufferExecCompleted(); -} - -static void SetWallyMonData(u8 monId) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; - s32 i; - - switch (gBattleResources->bufferA[gActiveBattler][1]) - { - case REQUEST_ALL_BATTLE: - { - u8 iv; - - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species); - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); - } - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &iv); - iv = battlePokemon->attackIV; - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &iv); - iv = battlePokemon->defenseIV; - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &iv); - iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &iv); - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality); - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &battlePokemon->status1); - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &battlePokemon->level); - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &battlePokemon->hp); - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &battlePokemon->attack); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &battlePokemon->defense); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &battlePokemon->speed); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense); - } - break; - case REQUEST_SPECIES_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HELDITEM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MOVES_PP_BATTLE: - for (i = 0; i < MAX_MON_MOVES; i++) - { - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]); - } - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case REQUEST_MOVE1_BATTLE: - case REQUEST_MOVE2_BATTLE: - case REQUEST_MOVE3_BATTLE: - case REQUEST_MOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PP_DATA_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); - break; - case REQUEST_PPMOVE1_BATTLE: - case REQUEST_PPMOVE2_BATTLE: - case REQUEST_PPMOVE3_BATTLE: - case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_OTID_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_EXP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKERUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MET_GAME_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_POKEBALL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); - break; - case REQUEST_HP_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_STATUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_MAX_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_ATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_DEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPEED_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SPDEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SHEEN_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); - break; - } - - HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); -} - -static void WallyHandleSetRawMonData(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleLoadMonSprite(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleSwitchInAnim(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleReturnMonToBall(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] == 0) - { - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); - gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; - } - else - { - FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); - WallyBufferExecCompleted(); + gBattleControllerExecFlags &= ~gBitTable[battler]; } } #define sSpeedX data[0] -static void WallyHandleDrawTrainerPic(void) +static void WallyHandleDrawTrainerPic(u32 battler) { - DecompressTrainerBackPic(TRAINER_BACK_PIC_WALLY, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_WALLY, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - 80, - 80 + 4 * (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].size), - 30); - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; + BtlController_HandleDrawTrainerPic(battler, TRAINER_BACK_PIC_WALLY, FALSE, + 80, 80 + 4 * (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].size), + 30); } -static void WallyHandleTrainerSlide(void) +static void WallyHandleTrainerSlide(u32 battler) { - DecompressTrainerBackPic(TRAINER_BACK_PIC_WALLY, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_WALLY, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - 80, - 80 + 4 * (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].size), - 30); - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -96; - gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy2; + BtlController_HandleTrainerSlide(battler, TRAINER_BACK_PIC_WALLY); } #undef sSpeedX -static void WallyHandleTrainerSlideBack(void) +static void WallyHandleSuccessBallThrowAnim(u32 battler) { - WallyBufferExecCompleted(); + BtlController_HandleSuccessBallThrowAnim(battler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER, FALSE); } -static void WallyHandleFaintAnimation(void) +static void WallyHandleBallThrowAnim(u32 battler) { - WallyBufferExecCompleted(); + BtlController_HandleBallThrowAnim(battler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER, FALSE); } -static void WallyHandlePaletteFade(void) +static void WallyHandleMoveAnimation(u32 battler) { - WallyBufferExecCompleted(); + BtlController_HandleMoveAnimation(battler, FALSE); } -static void WallyHandleSuccessBallThrowAnim(void) +static void WallyHandlePrintString(u32 battler) { - gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS; - gDoingBattleAnim = TRUE; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedAnimation; + BtlController_HandlePrintString(battler, FALSE, FALSE); } -static void WallyHandleBallThrowAnim(void) +static void WallyHandlePrintSelectionString(u32 battler) { - u8 ballThrowCaseId = gBattleResources->bufferA[gActiveBattler][1]; - - gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId; - gDoingBattleAnim = TRUE; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedAnimation; -} - -static void WallyHandlePause(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleMoveAnimation(void) -{ - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - - gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; - gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; - gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = WallyDoMoveAnimation; -} - -static void WallyDoMoveAnimation(void) -{ - u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - - switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) - { - case 0: - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - { - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; - break; - case 1: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF); - DoMoveAnim(move); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL); - if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) - { - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; - } - break; - case 3: - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) - { - CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - WallyBufferExecCompleted(); - } - break; - } -} - -static void WallyHandlePrintString(void) -{ - u16 *stringId; - - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); - BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); - gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; -} - -static void WallyHandlePrintSelectionString(void) -{ - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - WallyHandlePrintString(); + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + WallyHandlePrintString(battler); else - WallyBufferExecCompleted(); + WallyBufferExecCompleted(battler); } -static void HandleChooseActionAfterDma3(void) +static void HandleChooseActionAfterDma3(u32 battler) { if (!IsDma3ManagerBusyWithBgCopy()) { gBattle_BG0_X = 0; gBattle_BG0_Y = DISPLAY_HEIGHT; - gBattlerControllerFuncs[gActiveBattler] = WallyHandleActions; + gBattlerControllerFuncs[battler] = WallyHandleActions; } } -static void WallyHandleChooseAction(void) +static void WallyHandleChooseAction(u32 battler) { s32 i; - gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3; + gBattlerControllerFuncs[battler] = HandleChooseActionAfterDma3; BattlePutTextOnWindow(gText_BattleMenu, B_WIN_ACTION_MENU); for (i = 0; i < 4; i++) ActionSelectionDestroyCursorAt(i); - ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillWallyDo); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); } -static void WallyHandleYesNoBox(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleChooseMove(void) +static void WallyHandleChooseMove(u32 battler) { switch (gBattleStruct->wallyMovesState) { case 0: - InitMoveSelectionsVarsAndStrings(); + InitMoveSelectionsVarsAndStrings(battler); gBattleStruct->wallyMovesState++; gBattleStruct->wallyMoveFrames = 80; break; @@ -1237,334 +383,64 @@ static void WallyHandleChooseMove(void) { PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(BUFFER_B, 10, 0x100); - WallyBufferExecCompleted(); + WallyBufferExecCompleted(battler); } break; } } -static void WallyHandleChooseItem(void) +static void WallyHandleChooseItem(u32 battler) { BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); - gBattlerControllerFuncs[gActiveBattler] = OpenBagAfterPaletteFade; - gBattlerInMenuId = gActiveBattler; + gBattlerControllerFuncs[battler] = OpenBagAfterPaletteFade; + gBattlerInMenuId = battler; } -static void WallyHandleChoosePokemon(void) +static void WallyHandleHealthBarUpdate(u32 battler) { - WallyBufferExecCompleted(); + BtlController_HandleHealthBarUpdate(battler, TRUE); } -static void WallyHandleCmd23(void) +// For some reason Wally's SE don't take side into account and pan is always the same. Possibly a bug +static void WallyHandlePlaySE(u32 battler) { - WallyBufferExecCompleted(); + PlaySE(gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8)); + WallyBufferExecCompleted(battler); } -static void WallyHandleHealthBarUpdate(void) +// All of the other controllers use CRY_MODE_FAINT. +// Wally's Pokémon during the tutorial is never intended to faint, so that's probably why it's different here. +static void WallyHandleFaintingCry(u32 battler) { - s16 hpVal; + u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES); - LoadBattleBarGfx(0); - hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (hpVal != INSTANT_HP_BAR_DROP) - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); - } - else - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, 0, maxHP); - } - - gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; -} - -static void WallyHandleExpUpdate(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleStatusIconUpdate(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleStatusAnimation(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleStatusXor(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleDataTransfer(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleDMA3Transfer(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandlePlayBGM(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleCmd32(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleTwoReturnValues(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleChosenMonReturnValue(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleOneReturnValue(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleOneReturnValue_Duplicate(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleClearUnkVar(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleSetUnkVar(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleClearUnkFlag(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleToggleUnkFlag(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleHitAnimation(void) -{ - if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE) - { - WallyBufferExecCompleted(); - } - else - { - gDoingBattleAnim = TRUE; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; - DoHitAnimHealthboxEffect(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect; - } -} - -static void WallyHandleCantSwitch(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandlePlaySE(void) -{ - PlaySE(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - WallyBufferExecCompleted(); -} - -static void WallyHandlePlayFanfareOrBGM(void) -{ - if (gBattleResources->bufferA[gActiveBattler][3]) - { - BattleStopLowHpSound(); - PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - else - { - PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); - } - - WallyBufferExecCompleted(); -} - -static void WallyHandleFaintingCry(void) -{ - u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - - // Seems that it doesn't bother using CRY_MODE_FAINT because - // Wally's Pokémon during the tutorial is never intended to faint. PlayCry_Normal(species, 25); - WallyBufferExecCompleted(); + WallyBufferExecCompleted(battler); } -static void WallyHandleIntroSlide(void) +static void WallyHandleIntroTrainerBallThrow(u32 battler) { - HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); - gIntroSlideFlags |= 1; - WallyBufferExecCompleted(); + const u32 *trainerPal = gTrainerBackPicPaletteTable[TRAINER_BACK_PIC_WALLY].data; + BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F8, trainerPal, 31, Intro_TryShinyAnimShowHealthbox); } -static void WallyHandleIntroTrainerBallThrow(void) +static void WallyHandleDrawPartyStatusSummary(u32 battler) { - u8 paletteNum; - u8 taskId; - - SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); - - gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; - - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); - - paletteNum = AllocSpritePalette(0xD6F8); - LoadCompressedPalette(gTrainerBackPicPaletteTable[TRAINER_BACK_PIC_WALLY].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); - gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; - - taskId = CreateTask(Task_StartSendOutAnim, 5); - gTasks[taskId].data[0] = gActiveBattler; - - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) - gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - - gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; - gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy; + BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_PLAYER, FALSE); } -static void StartSendOutAnim(u8 battlerId) +static void WallyHandleBattleAnimation(u32 battler) { - u16 species; - - gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = 0; - gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); - SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); - gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), - GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSpriteSubpriority(battlerId)); - - gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; - gSprites[gBattleControllerData[battlerId]].data[2] = battlerId; - - gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; - gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; - gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - - StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); - gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; - gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + BtlController_HandleBattleAnimation(battler, TRUE, FALSE); } -static void Task_StartSendOutAnim(u8 taskId) +static void WallyHandleEndLinkBattle(u32 battler) { - if (gTasks[taskId].data[1] < 31) - { - gTasks[taskId].data[1]++; - } - else - { - u8 savedActiveBank = gActiveBattler; - - gActiveBattler = gTasks[taskId].data[0]; - gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; - gActiveBattler = savedActiveBank; - DestroyTask(taskId); - } -} - -static void WallyHandleDrawPartyStatusSummary(void) -{ - if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - WallyBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); - WallyBufferExecCompleted(); - } -} - -static void WallyHandleHidePartyStatusSummary(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleEndBounceEffect(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleSpriteInvisibility(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleBattleAnimation(void) -{ - u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; - u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); - - if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) - WallyBufferExecCompleted(); - else - gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation; -} - -static void WallyHandleLinkStandbyMsg(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleResetActionMoveSelection(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyHandleEndLinkBattle(void) -{ - gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; + gBattleOutcome = gBattleResources->bufferA[battler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - WallyBufferExecCompleted(); + WallyBufferExecCompleted(battler); if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) && gBattleTypeFlags & BATTLE_TYPE_LINK) - gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; -} - -static void WallyHandleBattleDebug(void) -{ - WallyBufferExecCompleted(); -} - -static void WallyCmdEnd(void) -{ + gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 397dda6d8..bb2fc2905 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -3,30 +3,45 @@ #include "battle_ai_main.h" #include "battle_ai_util.h" #include "battle_anim.h" +#include "battle_arena.h" #include "battle_controllers.h" +#include "battle_gfx_sfx_util.h" +#include "battle_interface.h" #include "battle_message.h" #include "battle_setup.h" +#include "battle_tv.h" #include "cable_club.h" #include "link.h" #include "link_rfu.h" +#include "palette.h" #include "party_menu.h" #include "recorded_battle.h" +#include "string_util.h" +#include "sound.h" #include "task.h" #include "util.h" +#include "text.h" #include "constants/abilities.h" +#include "constants/songs.h" static EWRAM_DATA u8 sLinkSendTaskId = 0; static EWRAM_DATA u8 sLinkReceiveTaskId = 0; -static EWRAM_DATA u8 sUnused = 0; // Debug? Never read EWRAM_DATA struct UnusedControllerStruct gUnusedControllerStruct = {}; // Debug? Unused code that writes to it, never read static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {}; +void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(u32 battler); +u8 gBattleControllerData[MAX_BATTLERS_COUNT]; // Used by the battle controllers to store misc sprite/task IDs for each battler +void (*gBattlerControllerEndFuncs[MAX_BATTLERS_COUNT])(u32 battler); // Controller's buffer complete function for each battler + static void CreateTasksForSendRecvLinkBuffers(void); static void InitLinkBtlControllers(void); static void InitSinglePlayerBtlControllers(void); static void SetBattlePartyIds(void); static void Task_HandleSendLinkBuffersData(u8 taskId); static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId); +static void Task_StartSendOutAnim(u8 taskId); +static void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite); +static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite); void HandleLinkBattleSetup(void) { @@ -152,7 +167,7 @@ static void InitSinglePlayerBtlControllers(void) gBattlerPartyIndexes[0] = 0; gBattlerPartyIndexes[1] = 0; - if (BATTLE_TWO_VS_ONE_OPPONENT) + if (BATTLE_TWO_VS_ONE_OPPONENT || WILD_DOUBLE_BATTLE) { gBattlerPartyIndexes[2] = 3; gBattlerPartyIndexes[3] = 1; @@ -703,8 +718,6 @@ static void CreateTasksForSendRecvLinkBuffers(void) gTasks[sLinkReceiveTaskId].data[13] = 0; gTasks[sLinkReceiveTaskId].data[14] = 0; gTasks[sLinkReceiveTaskId].data[15] = 0; - - sUnused = 0; } enum @@ -870,7 +883,7 @@ void TryReceiveLinkBattleData(void) static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) { u16 blockSize; - u8 battlerId; + u8 battler; u8 var; if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) @@ -881,17 +894,17 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) gTasks[taskId].data[12] = 0; gTasks[taskId].data[15] = 0; } - battlerId = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BATTLER]; + battler = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BATTLER]; blockSize = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8); switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0]) { case 0: - if (gBattleControllerExecFlags & gBitTable[battlerId]) + if (gBattleControllerExecFlags & gBitTable[battler]) return; - memcpy(gBattleResources->bufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); - MarkBattlerReceivedLinkData(battlerId); + memcpy(gBattleResources->bufferA[battler], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); + MarkBattlerReceivedLinkData(battler); if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)) { @@ -902,11 +915,11 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) } break; case 1: - memcpy(gBattleResources->bufferB[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); + memcpy(gBattleResources->bufferB[battler], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); break; case 2: var = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA]; - gBattleControllerExecFlags &= ~(gBitTable[battlerId] << (var * 4)); + gBattleControllerExecFlags &= ~(gBitTable[battler] << (var * 4)); break; } @@ -1555,3 +1568,1484 @@ void BtlController_EmitDebugMenu(u8 bufferId) sBattleBuffersTransferData[0] = CONTROLLER_DEBUGMENU; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 1); } + +// Standardized Controller functions + +// Can be used for all the controllers. +void BattleControllerComplete(u32 battler) +{ + gBattlerControllerEndFuncs[battler](battler); +} + +static u32 GetBattlerMonData(u32 battler, struct Pokemon *party, u32 monId, u8 *dst) +{ + struct BattlePokemon battleMon; + struct MovePpInfo moveData; + u8 nickname[POKEMON_NAME_LENGTH * 2]; + u8 *src; + s16 data16; + u32 data32; + s32 size = 0; + + switch (gBattleResources->bufferA[battler][1]) + { + case REQUEST_ALL_BATTLE: + battleMon.species = GetMonData(&party[monId], MON_DATA_SPECIES); + battleMon.item = GetMonData(&party[monId], MON_DATA_HELD_ITEM); + for (size = 0; size < MAX_MON_MOVES; size++) + { + battleMon.moves[size] = GetMonData(&party[monId], MON_DATA_MOVE1 + size); + battleMon.pp[size] = GetMonData(&party[monId], MON_DATA_PP1 + size); + } + battleMon.ppBonuses = GetMonData(&party[monId], MON_DATA_PP_BONUSES); + battleMon.friendship = GetMonData(&party[monId], MON_DATA_FRIENDSHIP); + battleMon.experience = GetMonData(&party[monId], MON_DATA_EXP); + battleMon.hpIV = GetMonData(&party[monId], MON_DATA_HP_IV); + battleMon.attackIV = GetMonData(&party[monId], MON_DATA_ATK_IV); + battleMon.defenseIV = GetMonData(&party[monId], MON_DATA_DEF_IV); + battleMon.speedIV = GetMonData(&party[monId], MON_DATA_SPEED_IV); + battleMon.spAttackIV = GetMonData(&party[monId], MON_DATA_SPATK_IV); + battleMon.spDefenseIV = GetMonData(&party[monId], MON_DATA_SPDEF_IV); + battleMon.personality = GetMonData(&party[monId], MON_DATA_PERSONALITY); + battleMon.status1 = GetMonData(&party[monId], MON_DATA_STATUS); + battleMon.level = GetMonData(&party[monId], MON_DATA_LEVEL); + battleMon.hp = GetMonData(&party[monId], MON_DATA_HP); + battleMon.maxHP = GetMonData(&party[monId], MON_DATA_MAX_HP); + battleMon.attack = GetMonData(&party[monId], MON_DATA_ATK); + battleMon.defense = GetMonData(&party[monId], MON_DATA_DEF); + battleMon.speed = GetMonData(&party[monId], MON_DATA_SPEED); + battleMon.spAttack = GetMonData(&party[monId], MON_DATA_SPATK); + battleMon.spDefense = GetMonData(&party[monId], MON_DATA_SPDEF); + battleMon.abilityNum = GetMonData(&party[monId], MON_DATA_ABILITY_NUM); + battleMon.otId = GetMonData(&party[monId], MON_DATA_OT_ID); + battleMon.metLevel = GetMonData(&party[monId], MON_DATA_MET_LEVEL); + GetMonData(&party[monId], MON_DATA_NICKNAME, nickname); + StringCopy_Nickname(battleMon.nickname, nickname); + GetMonData(&party[monId], MON_DATA_OT_NAME, battleMon.otName); + src = (u8 *)&battleMon; + for (size = 0; size < sizeof(battleMon); size++) + dst[size] = src[size]; + break; + case REQUEST_SPECIES_BATTLE: + data16 = GetMonData(&party[monId], MON_DATA_SPECIES); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_HELDITEM_BATTLE: + data16 = GetMonData(&party[monId], MON_DATA_HELD_ITEM); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_MOVES_PP_BATTLE: + for (size = 0; size < MAX_MON_MOVES; size++) + { + moveData.moves[size] = GetMonData(&party[monId], MON_DATA_MOVE1 + size); + moveData.pp[size] = GetMonData(&party[monId], MON_DATA_PP1 + size); + } + moveData.ppBonuses = GetMonData(&party[monId], MON_DATA_PP_BONUSES); + src = (u8 *)(&moveData); + for (size = 0; size < sizeof(moveData); size++) + dst[size] = src[size]; + break; + case REQUEST_MOVE1_BATTLE: + case REQUEST_MOVE2_BATTLE: + case REQUEST_MOVE3_BATTLE: + case REQUEST_MOVE4_BATTLE: + data16 = GetMonData(&party[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[battler][1] - REQUEST_MOVE1_BATTLE); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_PP_DATA_BATTLE: + for (size = 0; size < MAX_MON_MOVES; size++) + dst[size] = GetMonData(&party[monId], MON_DATA_PP1 + size); + dst[size] = GetMonData(&party[monId], MON_DATA_PP_BONUSES); + size++; + break; + case REQUEST_PPMOVE1_BATTLE: + case REQUEST_PPMOVE2_BATTLE: + case REQUEST_PPMOVE3_BATTLE: + case REQUEST_PPMOVE4_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_PP1 + gBattleResources->bufferA[battler][1] - REQUEST_PPMOVE1_BATTLE); + size = 1; + break; + case REQUEST_OTID_BATTLE: + data32 = GetMonData(&party[monId], MON_DATA_OT_ID); + dst[0] = (data32 & 0x000000FF); + dst[1] = (data32 & 0x0000FF00) >> 8; + dst[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case REQUEST_EXP_BATTLE: + data32 = GetMonData(&party[monId], MON_DATA_EXP); + dst[0] = (data32 & 0x000000FF); + dst[1] = (data32 & 0x0000FF00) >> 8; + dst[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case REQUEST_HP_EV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_HP_EV); + size = 1; + break; + case REQUEST_ATK_EV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_ATK_EV); + size = 1; + break; + case REQUEST_DEF_EV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_DEF_EV); + size = 1; + break; + case REQUEST_SPEED_EV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_SPEED_EV); + size = 1; + break; + case REQUEST_SPATK_EV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_SPATK_EV); + size = 1; + break; + case REQUEST_SPDEF_EV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_SPDEF_EV); + size = 1; + break; + case REQUEST_FRIENDSHIP_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_FRIENDSHIP); + size = 1; + break; + case REQUEST_POKERUS_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_POKERUS); + size = 1; + break; + case REQUEST_MET_LOCATION_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_MET_LOCATION); + size = 1; + break; + case REQUEST_MET_LEVEL_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_MET_LEVEL); + size = 1; + break; + case REQUEST_MET_GAME_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_MET_GAME); + size = 1; + break; + case REQUEST_POKEBALL_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_POKEBALL); + size = 1; + break; + case REQUEST_ALL_IVS_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_HP_IV); + dst[1] = GetMonData(&party[monId], MON_DATA_ATK_IV); + dst[2] = GetMonData(&party[monId], MON_DATA_DEF_IV); + dst[3] = GetMonData(&party[monId], MON_DATA_SPEED_IV); + dst[4] = GetMonData(&party[monId], MON_DATA_SPATK_IV); + dst[5] = GetMonData(&party[monId], MON_DATA_SPDEF_IV); + size = 6; + break; + case REQUEST_HP_IV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_HP_IV); + size = 1; + break; + case REQUEST_ATK_IV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_ATK_IV); + size = 1; + break; + case REQUEST_DEF_IV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_DEF_IV); + size = 1; + break; + case REQUEST_SPEED_IV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_SPEED_IV); + size = 1; + break; + case REQUEST_SPATK_IV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_SPATK_IV); + size = 1; + break; + case REQUEST_SPDEF_IV_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_SPDEF_IV); + size = 1; + break; + case REQUEST_PERSONALITY_BATTLE: + data32 = GetMonData(&party[monId], MON_DATA_PERSONALITY); + dst[0] = (data32 & 0x000000FF); + dst[1] = (data32 & 0x0000FF00) >> 8; + dst[2] = (data32 & 0x00FF0000) >> 16; + dst[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case REQUEST_CHECKSUM_BATTLE: + data16 = GetMonData(&party[monId], MON_DATA_CHECKSUM); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_STATUS_BATTLE: + data32 = GetMonData(&party[monId], MON_DATA_STATUS); + dst[0] = (data32 & 0x000000FF); + dst[1] = (data32 & 0x0000FF00) >> 8; + dst[2] = (data32 & 0x00FF0000) >> 16; + dst[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case REQUEST_LEVEL_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_LEVEL); + size = 1; + break; + case REQUEST_HP_BATTLE: + data16 = GetMonData(&party[monId], MON_DATA_HP); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_MAX_HP_BATTLE: + data16 = GetMonData(&party[monId], MON_DATA_MAX_HP); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_ATK_BATTLE: + data16 = GetMonData(&party[monId], MON_DATA_ATK); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_DEF_BATTLE: + data16 = GetMonData(&party[monId], MON_DATA_DEF); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_SPEED_BATTLE: + data16 = GetMonData(&party[monId], MON_DATA_SPEED); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_SPATK_BATTLE: + data16 = GetMonData(&party[monId], MON_DATA_SPATK); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_SPDEF_BATTLE: + data16 = GetMonData(&party[monId], MON_DATA_SPDEF); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_COOL_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_COOL); + size = 1; + break; + case REQUEST_BEAUTY_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_BEAUTY); + size = 1; + break; + case REQUEST_CUTE_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_CUTE); + size = 1; + break; + case REQUEST_SMART_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_SMART); + size = 1; + break; + case REQUEST_TOUGH_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_TOUGH); + size = 1; + break; + case REQUEST_SHEEN_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_SHEEN); + size = 1; + break; + case REQUEST_COOL_RIBBON_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_COOL_RIBBON); + size = 1; + break; + case REQUEST_BEAUTY_RIBBON_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_BEAUTY_RIBBON); + size = 1; + break; + case REQUEST_CUTE_RIBBON_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_CUTE_RIBBON); + size = 1; + break; + case REQUEST_SMART_RIBBON_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_SMART_RIBBON); + size = 1; + break; + case REQUEST_TOUGH_RIBBON_BATTLE: + dst[0] = GetMonData(&party[monId], MON_DATA_TOUGH_RIBBON); + size = 1; + break; + } + + return size; +} + +static void SetBattlerMonData(u32 battler, struct Pokemon *party, u32 monId) +{ + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[battler][3]; + struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[battler][3]; + s32 i; + + switch (gBattleResources->bufferA[battler][1]) + { + case REQUEST_ALL_BATTLE: + { + u8 iv; + + SetMonData(&party[monId], MON_DATA_SPECIES, &battlePokemon->species); + SetMonData(&party[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); + for (i = 0; i < MAX_MON_MOVES; i++) + { + SetMonData(&party[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); + SetMonData(&party[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); + } + SetMonData(&party[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); + SetMonData(&party[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); + SetMonData(&party[monId], MON_DATA_EXP, &battlePokemon->experience); + iv = battlePokemon->hpIV; + SetMonData(&party[monId], MON_DATA_HP_IV, &iv); + iv = battlePokemon->attackIV; + SetMonData(&party[monId], MON_DATA_ATK_IV, &iv); + iv = battlePokemon->defenseIV; + SetMonData(&party[monId], MON_DATA_DEF_IV, &iv); + iv = battlePokemon->speedIV; + SetMonData(&party[monId], MON_DATA_SPEED_IV, &iv); + iv = battlePokemon->spAttackIV; + SetMonData(&party[monId], MON_DATA_SPATK_IV, &iv); + iv = battlePokemon->spDefenseIV; + SetMonData(&party[monId], MON_DATA_SPDEF_IV, &iv); + SetMonData(&party[monId], MON_DATA_PERSONALITY, &battlePokemon->personality); + SetMonData(&party[monId], MON_DATA_STATUS, &battlePokemon->status1); + SetMonData(&party[monId], MON_DATA_LEVEL, &battlePokemon->level); + SetMonData(&party[monId], MON_DATA_HP, &battlePokemon->hp); + SetMonData(&party[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP); + SetMonData(&party[monId], MON_DATA_ATK, &battlePokemon->attack); + SetMonData(&party[monId], MON_DATA_DEF, &battlePokemon->defense); + SetMonData(&party[monId], MON_DATA_SPEED, &battlePokemon->speed); + SetMonData(&party[monId], MON_DATA_SPATK, &battlePokemon->spAttack); + SetMonData(&party[monId], MON_DATA_SPDEF, &battlePokemon->spDefense); + } + break; + case REQUEST_SPECIES_BATTLE: + SetMonData(&party[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_HELDITEM_BATTLE: + SetMonData(&party[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_MOVES_PP_BATTLE: + for (i = 0; i < MAX_MON_MOVES; i++) + { + SetMonData(&party[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); + SetMonData(&party[monId], MON_DATA_PP1 + i, &moveData->pp[i]); + } + SetMonData(&party[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses); + break; + case REQUEST_MOVE1_BATTLE: + case REQUEST_MOVE2_BATTLE: + case REQUEST_MOVE3_BATTLE: + case REQUEST_MOVE4_BATTLE: + SetMonData(&party[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[battler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_PP_DATA_BATTLE: + SetMonData(&party[monId], MON_DATA_PP1, &gBattleResources->bufferA[battler][3]); + SetMonData(&party[monId], MON_DATA_PP2, &gBattleResources->bufferA[battler][4]); + SetMonData(&party[monId], MON_DATA_PP3, &gBattleResources->bufferA[battler][5]); + SetMonData(&party[monId], MON_DATA_PP4, &gBattleResources->bufferA[battler][6]); + SetMonData(&party[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[battler][7]); + break; + case REQUEST_PPMOVE1_BATTLE: + case REQUEST_PPMOVE2_BATTLE: + case REQUEST_PPMOVE3_BATTLE: + case REQUEST_PPMOVE4_BATTLE: + SetMonData(&party[monId], MON_DATA_PP1 + gBattleResources->bufferA[battler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_OTID_BATTLE: + SetMonData(&party[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_EXP_BATTLE: + SetMonData(&party[monId], MON_DATA_EXP, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_HP_EV_BATTLE: + SetMonData(&party[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_ATK_EV_BATTLE: + SetMonData(&party[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_DEF_EV_BATTLE: + SetMonData(&party[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SPEED_EV_BATTLE: + SetMonData(&party[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SPATK_EV_BATTLE: + SetMonData(&party[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SPDEF_EV_BATTLE: + SetMonData(&party[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_FRIENDSHIP_BATTLE: + SetMonData(&party[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_POKERUS_BATTLE: + SetMonData(&party[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_MET_LOCATION_BATTLE: + SetMonData(&party[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_MET_LEVEL_BATTLE: + SetMonData(&party[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_MET_GAME_BATTLE: + SetMonData(&party[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_POKEBALL_BATTLE: + SetMonData(&party[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_ALL_IVS_BATTLE: + SetMonData(&party[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[battler][3]); + SetMonData(&party[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[battler][4]); + SetMonData(&party[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[battler][5]); + SetMonData(&party[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[battler][6]); + SetMonData(&party[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[battler][7]); + SetMonData(&party[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[battler][8]); + break; + case REQUEST_HP_IV_BATTLE: + SetMonData(&party[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_ATK_IV_BATTLE: + SetMonData(&party[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_DEF_IV_BATTLE: + SetMonData(&party[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SPEED_IV_BATTLE: + SetMonData(&party[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SPATK_IV_BATTLE: + SetMonData(&party[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SPDEF_IV_BATTLE: + SetMonData(&party[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_PERSONALITY_BATTLE: + SetMonData(&party[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_CHECKSUM_BATTLE: + SetMonData(&party[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_STATUS_BATTLE: + SetMonData(&party[monId], MON_DATA_STATUS, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_LEVEL_BATTLE: + SetMonData(&party[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_HP_BATTLE: + SetMonData(&party[monId], MON_DATA_HP, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_MAX_HP_BATTLE: + SetMonData(&party[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_ATK_BATTLE: + SetMonData(&party[monId], MON_DATA_ATK, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_DEF_BATTLE: + SetMonData(&party[monId], MON_DATA_DEF, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SPEED_BATTLE: + SetMonData(&party[monId], MON_DATA_SPEED, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SPATK_BATTLE: + SetMonData(&party[monId], MON_DATA_SPATK, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SPDEF_BATTLE: + SetMonData(&party[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_COOL_BATTLE: + SetMonData(&party[monId], MON_DATA_COOL, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_BEAUTY_BATTLE: + SetMonData(&party[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_CUTE_BATTLE: + SetMonData(&party[monId], MON_DATA_CUTE, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SMART_BATTLE: + SetMonData(&party[monId], MON_DATA_SMART, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_TOUGH_BATTLE: + SetMonData(&party[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SHEEN_BATTLE: + SetMonData(&party[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_COOL_RIBBON_BATTLE: + SetMonData(&party[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_BEAUTY_RIBBON_BATTLE: + SetMonData(&party[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_CUTE_RIBBON_BATTLE: + SetMonData(&party[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_SMART_RIBBON_BATTLE: + SetMonData(&party[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[battler][3]); + break; + case REQUEST_TOUGH_RIBBON_BATTLE: + SetMonData(&party[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[battler][3]); + break; + } + + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + HandleLowHpMusicChange(&party[gBattlerPartyIndexes[battler]], battler); +} + +void StartSendOutAnim(u32 battler, bool32 dontClearSubstituteBit) +{ + u16 species; + u32 side = GetBattlerSide(battler); + struct Pokemon *party = GetBattlerParty(battler); + + ClearTemporarySpeciesSpriteData(battler, dontClearSubstituteBit); + gBattlerPartyIndexes[battler] = gBattleResources->bufferA[battler][1]; + species = GetIllusionMonSpecies(battler); + if (species == SPECIES_NONE) + species = GetMonData(&party[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES); + gBattleControllerData[battler] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); + // Load sprite for opponent only, player sprite is expected to be already loaded. + if (side == B_SIDE_OPPONENT) + BattleLoadMonSpriteGfx(&party[gBattlerPartyIndexes[battler]], battler); + SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battler)); + + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, + GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), + GetBattlerSpriteDefault_Y(battler), + GetBattlerSpriteSubpriority(battler)); + + gSprites[gBattlerSpriteIds[battler]].data[0] = battler; + gSprites[gBattlerSpriteIds[battler]].data[2] = species; + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0); + gSprites[gBattlerSpriteIds[battler]].invisible = TRUE; + gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; + + gSprites[gBattleControllerData[battler]].data[1] = gBattlerSpriteIds[battler]; + gSprites[gBattleControllerData[battler]].data[2] = battler; + gSprites[gBattleControllerData[battler]].data[0] = DoPokeballSendOutAnimation(0, (side == B_SIDE_OPPONENT) ? POKEBALL_OPPONENT_SENDOUT : POKEBALL_PLAYER_SENDOUT); +} + +static void FreeMonSprite(u32 battler) +{ + FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[battler]]); + DestroySprite(&gSprites[gBattlerSpriteIds[battler]]); + if (GetBattlerSide(battler) == B_SIDE_OPPONENT) + HideBattlerShadowSprite(battler); + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[battler]); +} + +static void Controller_ReturnMonToBall2(u32 battler) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive) + { + FreeMonSprite(battler); + BattleControllerComplete(battler); + } +} + +static void Controller_ReturnMonToBall(u32 battler) +{ + switch (gBattleSpritesDataPtr->healthBoxesData[battler].animationState) + { + case 0: + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_SUBSTITUTE_TO_MON); + + gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 1; + break; + case 1: + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive) + { + gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 0; + InitAndLaunchSpecialAnimation(battler, battler, battler, (GetBattlerSide(battler) == B_SIDE_OPPONENT) ? B_ANIM_SWITCH_OUT_OPPONENT_MON : B_ANIM_SWITCH_OUT_PLAYER_MON); + gBattlerControllerFuncs[battler] = Controller_ReturnMonToBall2; + } + break; + } +} + +static void Controller_FaintPlayerMon(u32 battler) +{ + u32 spriteId = gBattlerSpriteIds[battler]; + if (gSprites[spriteId].y + gSprites[spriteId].y2 > DISPLAY_HEIGHT) + { + BattleGfxSfxDummy2(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); + FreeOamMatrix(gSprites[spriteId].oam.matrixNum); + DestroySprite(&gSprites[spriteId]); + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[battler]); + BattleControllerComplete(battler); + } +} + +static void Controller_FaintOpponentMon(u32 battler) +{ + if (!gSprites[gBattlerSpriteIds[battler]].inUse) + { + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[battler]); + BattleControllerComplete(battler); + } +} + +static void Controller_DoMoveAnimation(u32 battler) +{ + u16 move = gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8); + + switch (gBattleSpritesDataPtr->healthBoxesData[battler].animationState) + { + case 0: + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute + && !gBattleSpritesDataPtr->battlerData[battler].flag_x8) + { + gBattleSpritesDataPtr->battlerData[battler].flag_x8 = 1; + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_SUBSTITUTE_TO_MON); + } + gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 1; + break; + case 1: + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive) + { + SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF); + DoMoveAnim(move); + gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 2; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + u8 multihit = gBattleResources->bufferA[battler][11]; + + SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL); + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute && multihit < 2) + { + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); + gBattleSpritesDataPtr->battlerData[battler].flag_x8 = 0; + } + gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 3; + } + break; + case 3: + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive) + { + CopyAllBattleSpritesInvisibilities(); + TrySetBehindSubstituteSpriteBit(battler, gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8)); + gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 0; + BattleControllerComplete(battler); + } + break; + } +} + +static void Controller_HandleTrainerSlideBack(u32 battler) +{ + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + { + if (GetBattlerSide(battler) == B_SIDE_OPPONENT) + FreeTrainerFrontPicPalette(gSprites[gBattlerSpriteIds[battler]].oam.affineParam); + FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[battler]]); + DestroySprite(&gSprites[gBattlerSpriteIds[battler]]); + BattleControllerComplete(battler); + } +} + +void Controller_WaitForHealthBar(u32 battler) +{ + s16 hpValue = MoveBattleBar(battler, gHealthboxSpriteIds[battler], HEALTH_BAR, 0); + + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); + if (hpValue != -1) + { + UpdateHpTextInHealthbox(gHealthboxSpriteIds[battler], HP_CURRENT, hpValue, gBattleMons[battler].maxHP); + } + else + { + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); + BattleControllerComplete(battler); + } +} + +static void Controller_WaitForBallThrow(u32 battler) +{ + if (!gDoingBattleAnim || !gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive) + BattleControllerComplete(battler); +} + +static void Controller_WaitForBattleAnimation(u32 battler) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[battler].animFromTableActive) + BattleControllerComplete(battler); +} + +static void Controller_WaitForStatusAnimation(u32 battler) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[battler].statusAnimActive) + BattleControllerComplete(battler); +} + +static void Controller_WaitForTrainerPic(u32 battler) +{ + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + BattleControllerComplete(battler); +} + +void Controller_WaitForString(u32 battler) +{ + if (!IsTextPrinterActive(B_WIN_MSG)) + BattleControllerComplete(battler); +} + +static void Controller_WaitForPartyStatusSummary(u32 battler) +{ + if (gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusDelayTimer++ > 92) + { + gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusDelayTimer = 0; + BattleControllerComplete(battler); + } +} + +static void Controller_HitAnimation(u32 battler) +{ + u32 spriteId = gBattlerSpriteIds[battler]; + + if (gSprites[spriteId].data[1] == 32) + { + gSprites[spriteId].data[1] = 0; + gSprites[spriteId].invisible = FALSE; + gDoingBattleAnim = FALSE; + BattleControllerComplete(battler); + } + else + { + if ((gSprites[spriteId].data[1] % 4) == 0) + gSprites[spriteId].invisible ^= 1; + gSprites[spriteId].data[1]++; + } +} + +// Used for all the commands which do nothing. +void BtlController_Empty(u32 battler) +{ + BattleControllerComplete(battler); +} + +// Dummy function at the end of the table. +void BtlController_TerminatorNop(u32 battler) +{ +} + +void BattleControllerDummy(u32 battler) +{ +} + +// Handlers of the controller commands +void BtlController_HandleGetMonData(u32 battler) +{ + u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data + struct Pokemon *party = GetBattlerParty(battler); + u32 size = 0; + u8 monToCheck; + s32 i; + + if (gBattleResources->bufferA[battler][2] == 0) + { + size += GetBattlerMonData(battler, party, gBattlerPartyIndexes[battler], monData); + } + else + { + monToCheck = gBattleResources->bufferA[battler][2]; + for (i = 0; i < PARTY_SIZE; i++) + { + if (monToCheck & 1) + size += GetBattlerMonData(battler, party, i, monData + size); + monToCheck >>= 1; + } + } + BtlController_EmitDataTransfer(BUFFER_B, size, monData); + BattleControllerComplete(battler); +} + +void BtlController_HandleGetRawMonData(u32 battler) +{ + struct BattlePokemon battleMon; + struct Pokemon *party = GetBattlerParty(battler); + + u8 *src = (u8 *)&party[gBattlerPartyIndexes[battler]] + gBattleResources->bufferA[battler][1]; + u8 *dst = (u8 *)&battleMon + gBattleResources->bufferA[battler][1]; + u8 i; + + for (i = 0; i < gBattleResources->bufferA[battler][2]; i++) + dst[i] = src[i]; + + BtlController_EmitDataTransfer(BUFFER_B, gBattleResources->bufferA[battler][2], dst); + BattleControllerComplete(battler); +} + +void BtlController_HandleSetMonData(u32 battler) +{ + struct Pokemon *party = GetBattlerParty(battler); + u32 i, monToCheck; + + if (gBattleResources->bufferA[battler][2] == 0) + { + SetBattlerMonData(battler, party, gBattlerPartyIndexes[battler]); + } + else + { + monToCheck = gBattleResources->bufferA[battler][2]; + for (i = 0; i < PARTY_SIZE; i++) + { + if (monToCheck & 1) + SetBattlerMonData(battler, party, i); + monToCheck >>= 1; + } + } + BattleControllerComplete(battler); +} + +void BtlController_HandleSetRawMonData(u32 battler) +{ + u32 i; + struct Pokemon *party = GetBattlerParty(battler); + u8 *dst = (u8 *)&party[gBattlerPartyIndexes[battler]] + gBattleResources->bufferA[battler][1]; + + for (i = 0; i < gBattleResources->bufferA[battler][2]; i++) + dst[i] = gBattleResources->bufferA[battler][3 + i]; + + BattleControllerComplete(battler); +} + +void BtlController_HandleLoadMonSprite(u32 battler, void (*controllerCallback)(u32 battler)) +{ + struct Pokemon *party = GetBattlerParty(battler); + u16 species = GetMonData(&party[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES); + + BattleLoadMonSpriteGfx(&party[gBattlerPartyIndexes[battler]], battler); + SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battler)); + + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, + GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), + GetBattlerSpriteDefault_Y(battler), + GetBattlerSpriteSubpriority(battler)); + + gSprites[gBattlerSpriteIds[battler]].x2 = -DISPLAY_WIDTH; + gSprites[gBattlerSpriteIds[battler]].data[0] = battler; + gSprites[gBattlerSpriteIds[battler]].data[2] = species; + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0); + + SetBattlerShadowSpriteCallback(battler, species); + + gBattlerControllerFuncs[battler] = controllerCallback; +} + +void BtlController_HandleSwitchInAnim(u32 battler, bool32 isPlayerSide, void (*controllerCallback)(u32 battler)) +{ + if (isPlayerSide) + ClearTemporarySpeciesSpriteData(battler, gBattleResources->bufferA[battler][2]); + gBattlerPartyIndexes[battler] = gBattleResources->bufferA[battler][1]; + if (isPlayerSide) + BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); + StartSendOutAnim(battler, gBattleResources->bufferA[battler][2]); + gBattlerControllerFuncs[battler] = controllerCallback; +} + +void BtlController_HandleReturnMonToBall(u32 battler) +{ + if (gBattleResources->bufferA[battler][1] == 0) + { + gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 0; + gBattlerControllerFuncs[battler] = Controller_ReturnMonToBall; + } + else + { + FreeMonSprite(battler); + BattleControllerComplete(battler); + } +} + +// In emerald it's possible to have a tag battle in the battle frontier facilities with AI +// which use the front sprite for both the player and the partner as opposed to any other battles (including the one with Steven) +// that use an animated back pic. + +#define sSpeedX data[0] + +void BtlController_HandleDrawTrainerPic(u32 battler, u32 trainerPicId, bool32 isFrontPic, s16 xPos, s16 yPos, s32 subpriority) +{ + if (GetBattlerSide(battler) == B_SIDE_OPPONENT) // Always the front sprite for the opponent. + { + DecompressTrainerFrontPic(trainerPicId, battler); + SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(battler)); + if (subpriority == -1) + subpriority = GetBattlerSpriteSubpriority(battler); + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, + xPos, + yPos, + subpriority); + + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); + gSprites[gBattlerSpriteIds[battler]].x2 = -DISPLAY_WIDTH; + gSprites[gBattlerSpriteIds[battler]].sSpeedX = 2; + gSprites[gBattlerSpriteIds[battler]].oam.affineParam = trainerPicId; + } + else // Player's side + { + if (isFrontPic) + { + DecompressTrainerFrontPic(trainerPicId, battler); + SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(battler)); + if (subpriority == -1) + subpriority = GetBattlerSpriteSubpriority(battler); + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, + xPos, + yPos, + subpriority); + + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); + gSprites[gBattlerSpriteIds[battler]].oam.affineMode = ST_OAM_AFFINE_OFF; + gSprites[gBattlerSpriteIds[battler]].hFlip = 1; + gSprites[gBattlerSpriteIds[battler]].y2 = 48; + } + else + { + DecompressTrainerBackPic(trainerPicId, battler); + SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(battler)); + if (subpriority == -1) + subpriority = GetBattlerSpriteSubpriority(battler); + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, + xPos, + yPos, + subpriority); + + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; + } + gSprites[gBattlerSpriteIds[battler]].x2 = DISPLAY_WIDTH; + gSprites[gBattlerSpriteIds[battler]].sSpeedX = -2; + } + gSprites[gBattlerSpriteIds[battler]].callback = SpriteCB_TrainerSlideIn; + + gBattlerControllerFuncs[battler] = Controller_WaitForTrainerPic; +} + +void BtlController_HandleTrainerSlide(u32 battler, u32 trainerPicId) +{ + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + { + DecompressTrainerBackPic(trainerPicId, battler); + SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(battler)); + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, + 80, + (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, + 30); + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; + gSprites[gBattlerSpriteIds[battler]].x2 = -96; + gSprites[gBattlerSpriteIds[battler]].sSpeedX = 2; + } + else + { + DecompressTrainerFrontPic(trainerPicId, battler); + SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(battler)); + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, + 176, + (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40, + 30); + gSprites[gBattlerSpriteIds[battler]].oam.affineParam = trainerPicId; + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); + gSprites[gBattlerSpriteIds[battler]].x2 = 96; + gSprites[gBattlerSpriteIds[battler]].x += 32; + gSprites[gBattlerSpriteIds[battler]].sSpeedX = -2; + } + gSprites[gBattlerSpriteIds[battler]].callback = SpriteCB_TrainerSlideIn; + + gBattlerControllerFuncs[battler] = Controller_WaitForTrainerPic; +} + +#undef sSpeedX + +void BtlController_HandleTrainerSlideBack(u32 battlerId, s16 data0, bool32 startAnim) +{ + u32 side = GetBattlerSide(battlerId); + + SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[battlerId]]); + gSprites[gBattlerSpriteIds[battlerId]].data[0] = data0; + gSprites[gBattlerSpriteIds[battlerId]].data[2] = (side == B_SIDE_PLAYER) ? -40 : 280; + gSprites[gBattlerSpriteIds[battlerId]].data[4] = gSprites[gBattlerSpriteIds[battlerId]].y; + gSprites[gBattlerSpriteIds[battlerId]].callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[battlerId]], SpriteCallbackDummy); + if (startAnim) + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 1); + gBattlerControllerFuncs[battlerId] = Controller_HandleTrainerSlideBack; +} + +#define sSpeedX data[1] +#define sSpeedY data[2] + +void BtlController_HandleFaintAnimation(u32 battler) +{ + if (gBattleSpritesDataPtr->healthBoxesData[battler].animationState == 0) + { + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_SUBSTITUTE_TO_MON); + gBattleSpritesDataPtr->healthBoxesData[battler].animationState++; + } + else + { + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive) + { + gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 0; + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + { + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); + gSprites[gBattlerSpriteIds[battler]].sSpeedX = 0; + gSprites[gBattlerSpriteIds[battler]].sSpeedY = 5; + PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); + gSprites[gBattlerSpriteIds[battler]].callback = SpriteCB_FaintSlideAnim; + gBattlerControllerFuncs[battler] = Controller_FaintPlayerMon; + } + else + { + PlaySE12WithPanning(SE_FAINT, SOUND_PAN_TARGET); + gSprites[gBattlerSpriteIds[battler]].callback = SpriteCB_FaintOpponentMon; + gBattlerControllerFuncs[battler] = Controller_FaintOpponentMon; + } + // The player's sprite callback just slides the mon, the opponent's removes the sprite. + // The player's sprite is removed in Controller_FaintPlayerMon. Controller_FaintOpponentMon only removes the healthbox once the sprite is removed by SpriteCB_FaintOpponentMon. + } + } +} + +#undef sSpeedX +#undef sSpeedY + +static void HandleBallThrow(u32 battler, u32 target, u32 animId, bool32 allowCriticalCapture) +{ + gDoingBattleAnim = TRUE; + if (allowCriticalCapture && IsCriticalCapture()) + animId = B_ANIM_CRITICAL_CAPTURE_THROW; + InitAndLaunchSpecialAnimation(battler, battler, target, animId); + + gBattlerControllerFuncs[battler] = Controller_WaitForBallThrow; +} + +void BtlController_HandleSuccessBallThrowAnim(u32 battler, u32 target, u32 animId, bool32 allowCriticalCapture) +{ + gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS; + HandleBallThrow(battler, target, animId, allowCriticalCapture); +} + +void BtlController_HandleBallThrowAnim(u32 battler, u32 target, u32 animId, bool32 allowCriticalCapture) +{ + gBattleSpritesDataPtr->animationData->ballThrowCaseId = gBattleResources->bufferA[battler][1]; + HandleBallThrow(battler, target, animId, allowCriticalCapture); +} + +void BtlController_HandleMoveAnimation(u32 battler, bool32 updateTvData) +{ + if (!IsBattleSEPlaying(battler)) + { + u16 move = gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8); + + gAnimMoveTurn = gBattleResources->bufferA[battler][3]; + gAnimMovePower = gBattleResources->bufferA[battler][4] | (gBattleResources->bufferA[battler][5] << 8); + gAnimMoveDmg = gBattleResources->bufferA[battler][6] | (gBattleResources->bufferA[battler][7] << 8) | (gBattleResources->bufferA[battler][8] << 16) | (gBattleResources->bufferA[battler][9] << 24); + gAnimFriendship = gBattleResources->bufferA[battler][10]; + gWeatherMoveAnim = gBattleResources->bufferA[battler][12] | (gBattleResources->bufferA[battler][13] << 8); + gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[battler][16]; + gTransformedPersonalities[battler] = gAnimDisableStructPtr->transformedMonPersonality; + gTransformedOtIds[battler] = gAnimDisableStructPtr->transformedMonOtId; + gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 0; + gBattlerControllerFuncs[battler] = Controller_DoMoveAnimation; + if (updateTvData) + BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); + } +} + +void BtlController_HandlePrintString(u32 battler, bool32 updateTvData, bool32 arenaPtsDeduct) +{ + u16 *stringId; + + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + stringId = (u16 *)(&gBattleResources->bufferA[battler][2]); + BufferStringBattle(*stringId); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); + gBattlerControllerFuncs[battler] = Controller_WaitForString; + if (updateTvData) + BattleTv_SetDataBasedOnString(*stringId); + if (arenaPtsDeduct) + BattleArena_DeductSkillPoints(battler, *stringId); +} + +void BtlController_HandleHealthBarUpdate(u32 battler, bool32 updateHpText) +{ + s16 hpVal; + struct Pokemon *party = GetBattlerParty(battler); + + LoadBattleBarGfx(0); + hpVal = gBattleResources->bufferA[battler][2] | (gBattleResources->bufferA[battler][3] << 8); + + if (hpVal != INSTANT_HP_BAR_DROP) + { + u32 maxHP = GetMonData(&party[gBattlerPartyIndexes[battler]], MON_DATA_MAX_HP); + u32 curHP = GetMonData(&party[gBattlerPartyIndexes[battler]], MON_DATA_HP); + + SetBattleBarStruct(battler, gHealthboxSpriteIds[battler], maxHP, curHP, hpVal); + } + else + { + u32 maxHP = GetMonData(&party[gBattlerPartyIndexes[battler]], MON_DATA_MAX_HP); + + SetBattleBarStruct(battler, gHealthboxSpriteIds[battler], maxHP, 0, hpVal); + if (updateHpText) + UpdateHpTextInHealthbox(gHealthboxSpriteIds[battler], HP_CURRENT, 0, maxHP); + } + + gBattlerControllerFuncs[battler] = Controller_WaitForHealthBar; +} + +void DoStatusIconUpdate(u32 battler) +{ + struct Pokemon *party = GetBattlerParty(battler); + + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &party[gBattlerPartyIndexes[battler]], HEALTHBOX_STATUS_ICON); + gBattleSpritesDataPtr->healthBoxesData[battler].statusAnimActive = 0; + gBattlerControllerFuncs[battler] = Controller_WaitForStatusAnimation; +} + +void BtlController_HandleStatusIconUpdate(u32 battler) +{ + if (!IsBattleSEPlaying(battler)) + { + DoStatusIconUpdate(battler); + } +} + +void BtlController_HandleStatusAnimation(u32 battler) +{ + if (!IsBattleSEPlaying(battler)) + { + InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[battler][1], + gBattleResources->bufferA[battler][2] | (gBattleResources->bufferA[battler][3] << 8) | (gBattleResources->bufferA[battler][4] << 16) | (gBattleResources->bufferA[battler][5] << 24)); + gBattlerControllerFuncs[battler] = Controller_WaitForStatusAnimation; + } +} + +void BtlController_HandleClearUnkVar(u32 battler) +{ + gUnusedControllerStruct.unk = 0; + BattleControllerComplete(battler); +} + +void BtlController_HandleSetUnkVar(u32 battler) +{ + gUnusedControllerStruct.unk = gBattleResources->bufferA[battler][1]; + BattleControllerComplete(battler); +} + +void BtlController_HandleClearUnkFlag(u32 battler) +{ + gUnusedControllerStruct.flag = 0; + BattleControllerComplete(battler); +} + +void BtlController_HandleToggleUnkFlag(u32 battler) +{ + gUnusedControllerStruct.flag ^= 1; + BattleControllerComplete(battler); +} + +void BtlController_HandleHitAnimation(u32 battler) +{ + if (gSprites[gBattlerSpriteIds[battler]].invisible == TRUE) + { + BattleControllerComplete(battler); + } + else + { + gDoingBattleAnim = TRUE; + gSprites[gBattlerSpriteIds[battler]].data[1] = 0; + DoHitAnimHealthboxEffect(battler); + gBattlerControllerFuncs[battler] = Controller_HitAnimation; + } +} + +void BtlController_HandlePlaySE(u32 battler) +{ + s8 pan = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? SOUND_PAN_ATTACKER : SOUND_PAN_TARGET; + + PlaySE12WithPanning(gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8), pan); + BattleControllerComplete(battler); +} + +void BtlController_HandlePlayFanfareOrBGM(u32 battler) +{ + if (gBattleResources->bufferA[battler][3]) + { + BattleStopLowHpSound(); + PlayBGM(gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8)); + } + else + { + PlayFanfare(gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8)); + } + + BattleControllerComplete(battler); +} + +void BtlController_HandleFaintingCry(u32 battler) +{ + struct Pokemon *party; + s8 pan; + + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + { + party = gPlayerParty; + pan = -25; + } + else + { + party = gEnemyParty; + pan = 25; + } + + PlayCry_ByMode(GetMonData(&party[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), pan, CRY_MODE_FAINT); + BattleControllerComplete(battler); +} + +void BtlController_HandleIntroSlide(u32 battler) +{ + HandleIntroSlide(gBattleResources->bufferA[battler][1]); + gIntroSlideFlags |= 1; + BattleControllerComplete(battler); +} + +void BtlController_HandleSpriteInvisibility(u32 battler) +{ + if (IsBattlerSpritePresent(battler)) + { + gSprites[gBattlerSpriteIds[battler]].invisible = gBattleResources->bufferA[battler][1]; + CopyBattleSpriteInvisibility(battler); + } + BattleControllerComplete(battler); +} + +bool32 TwoPlayerIntroMons(u32 battler) // Double battle with both player pokemon active. +{ + return (IsDoubleBattle() && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[battler ^ BIT_FLANK]])); +} + +bool32 TwoOpponentIntroMons(u32 battler) // Double battle with both opponent pokemon active. +{ + return (IsDoubleBattle() + && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[battler]]) + && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])); +} + +// Task data for Task_StartSendOutAnim +#define tBattlerId data[0] +#define tStartTimer data[1] +#define tFramesToWait data[2] +#define tControllerFunc_1 3 // Stored as two halfwords +#define tControllerFunc_2 4 + +// Sprite data for SpriteCB_FreePlayerSpriteLoadMonSprite +#define sBattlerId data[5] + +void BtlController_HandleIntroTrainerBallThrow(u32 battler, u16 tagTrainerPal, const u32 *trainerPal, s16 framesToWait, void (*controllerCallback)(u32 battler)) +{ + u8 paletteNum, taskId; + u32 side = GetBattlerSide(battler); + + SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[battler]]); + if (side == B_SIDE_PLAYER) + { + gSprites[gBattlerSpriteIds[battler]].data[0] = 50; + gSprites[gBattlerSpriteIds[battler]].data[2] = -40; + } + else + { + gSprites[gBattlerSpriteIds[battler]].data[0] = 35; + gSprites[gBattlerSpriteIds[battler]].data[2] = 280; + } + + gSprites[gBattlerSpriteIds[battler]].data[4] = gSprites[gBattlerSpriteIds[battler]].y; + gSprites[gBattlerSpriteIds[battler]].callback = StartAnimLinearTranslation; + gSprites[gBattlerSpriteIds[battler]].sBattlerId = battler; + + if (side == B_SIDE_PLAYER) + { + StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[battler]], SpriteCB_FreePlayerSpriteLoadMonSprite); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 1); + + paletteNum = AllocSpritePalette(tagTrainerPal); + LoadCompressedPalette(trainerPal, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = paletteNum; + } + else + { + StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[battler]], SpriteCB_FreeOpponentSprite); + } + + taskId = CreateTask(Task_StartSendOutAnim, 5); + gTasks[taskId].tBattlerId = battler; + gTasks[taskId].tFramesToWait = framesToWait; + SetWordTaskArg(taskId, tControllerFunc_1, (uint32_t)(controllerCallback)); + + if (gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusSummaryShown) + gTasks[gBattlerStatusSummaryTaskId[battler]].func = Task_HidePartyStatusSummary; + + gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; + gBattlerControllerFuncs[battler] = BattleControllerDummy; +} + +static bool32 TwoMonsAtSendOut(u32 battler) +{ + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + { + if (TwoPlayerIntroMons(battler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + return TRUE; + else + return FALSE; + } + else + { + if ((!TwoOpponentIntroMons(battler) || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) && !BATTLE_TWO_VS_ONE_OPPONENT) + return FALSE; + else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) || (BATTLE_TWO_VS_ONE_OPPONENT && !TwoOpponentIntroMons(battler))) + return FALSE; + else + return TRUE; + } + return FALSE; +} + +// Send out at start of battle +static void Task_StartSendOutAnim(u8 taskId) +{ + if (gTasks[taskId].tFramesToWait != 0 && gTasks[taskId].tStartTimer < gTasks[taskId].tFramesToWait) + { + gTasks[taskId].tStartTimer++; + } + else + { + u8 savedActiveBattler = gActiveBattler; + + gActiveBattler = gTasks[taskId].tBattlerId; + if (TwoMonsAtSendOut(gActiveBattler)) + { + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + StartSendOutAnim(gActiveBattler, FALSE); + gActiveBattler ^= BIT_FLANK; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + StartSendOutAnim(gActiveBattler, FALSE); + gActiveBattler ^= BIT_FLANK; + } + else + { + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + StartSendOutAnim(gActiveBattler, FALSE); + } + gBattlerControllerFuncs[gActiveBattler] = (void*)(GetWordTaskArg(taskId, tControllerFunc_1)); + gActiveBattler = savedActiveBattler; + DestroyTask(taskId); + } +} + +#undef tBattlerId +#undef tStartTimer +#undef tFramesToWait +#undef tControllerFunc_1 +#undef tControllerFunc_2 + +static void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite) +{ + u8 battler = sprite->sBattlerId; + + // Free player trainer sprite + FreeSpriteOamMatrix(sprite); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); + DestroySprite(sprite); + + // Load mon sprite + BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0); +} + +static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite) +{ + FreeTrainerFrontPicPalette(sprite->oam.affineParam); + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); +} + +#undef sBattlerId + +void BtlController_HandleDrawPartyStatusSummary(u32 battler, u32 side, bool32 considerDelay) +{ + if (gBattleResources->bufferA[battler][1] != 0 && GetBattlerSide(battler) == B_SIDE_PLAYER) + { + BattleControllerComplete(battler); + } + else + { + gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusSummaryShown = 1; + + if (side == B_SIDE_OPPONENT && gBattleResources->bufferA[battler][2] != 0) + { + if (gBattleSpritesDataPtr->healthBoxesData[battler].opponentDrawPartyStatusSummaryDelay < 2) + { + gBattleSpritesDataPtr->healthBoxesData[battler].opponentDrawPartyStatusSummaryDelay++; + return; + } + else + { + gBattleSpritesDataPtr->healthBoxesData[battler].opponentDrawPartyStatusSummaryDelay = 0; + } + } + + gBattlerStatusSummaryTaskId[battler] = CreatePartyStatusSummarySprites(battler, (struct HpAndStatus *)&gBattleResources->bufferA[battler][4], gBattleResources->bufferA[battler][1], gBattleResources->bufferA[battler][2]); + gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusDelayTimer = 0; + + // If intro, skip the delay after drawing + if (considerDelay && gBattleResources->bufferA[battler][2] != 0) + gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusDelayTimer = 93; + + gBattlerControllerFuncs[battler] = Controller_WaitForPartyStatusSummary; + } +} + +void BtlController_HandleHidePartyStatusSummary(u32 battler) +{ + if (gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusSummaryShown) + gTasks[gBattlerStatusSummaryTaskId[battler]].func = Task_HidePartyStatusSummary; + BattleControllerComplete(battler); +} + +void BtlController_HandleBattleAnimation(u32 battler, bool32 ignoreSE, bool32 updateTvData) +{ + if (ignoreSE || !IsBattleSEPlaying(battler)) + { + u8 animationId = gBattleResources->bufferA[battler][1]; + u16 argument = gBattleResources->bufferA[battler][2] | (gBattleResources->bufferA[battler][3] << 8); + + if (TryHandleLaunchBattleTableAnimation(battler, battler, battler, animationId, argument)) + BattleControllerComplete(battler); + else + gBattlerControllerFuncs[battler] = Controller_WaitForBattleAnimation; + + if (updateTvData) + BattleTv_SetDataBasedOnAnimation(animationId); + } +} diff --git a/src/battle_dome.c b/src/battle_dome.c index e94261f72..7f5b7abec 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -157,8 +157,6 @@ static void BufferLastDomeWinnerName(void); static void InitRandomTourneyTreeResults(void); static void InitDomeTrainers(void); -EWRAM_DATA u32 gPlayerPartyLostHP = 0; // never read -static EWRAM_DATA u32 sPlayerPartyMaxHP = 0; // never read static EWRAM_DATA struct TourneyTreeInfoCard *sInfoCard = {0}; static EWRAM_DATA u8 *sTilemapBuffer = NULL; @@ -2544,9 +2542,6 @@ static void BufferDomeOpponentName(void) static void InitDomeOpponentParty(void) { - gPlayerPartyLostHP = 0; - sPlayerPartyMaxHP = GetMonData(&gPlayerParty[0], MON_DATA_MAX_HP, NULL); - sPlayerPartyMaxHP += GetMonData(&gPlayerParty[1], MON_DATA_MAX_HP, NULL); CalculatePlayerPartyCount(); CreateDomeOpponentMons(TrainerIdToTournamentId(gTrainerBattleOpponent_A)); } diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index b7cf2c238..e39ea54a3 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -528,7 +528,7 @@ bool8 IsBattleSEPlaying(u8 battlerId) if (IsSEPlaying()) { gBattleSpritesDataPtr->healthBoxesData[battlerId].soundTimer++; - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].soundTimer < 30) + if (gBattleSpritesDataPtr->healthBoxesData[battlerId].soundTimer < 30) return TRUE; m4aMPlayStop(&gMPlayInfo_SE1); @@ -544,7 +544,7 @@ bool8 IsBattleSEPlaying(u8 battlerId) return TRUE; } -static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 opponent) +void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId) { u32 monsPersonality, currentPersonality, otId, currentOtId, species, paletteOffset, position; const void *lzPaletteData; @@ -577,7 +577,7 @@ static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 op } position = GetBattlerPosition(battlerId); - if (opponent) + if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) { HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites.ptr[position], @@ -609,16 +609,6 @@ static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 op } } -void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) -{ - BattleLoadMonSpriteGfx(mon, battlerId, TRUE); -} - -void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) -{ - BattleLoadMonSpriteGfx(mon, battlerId, FALSE); -} - void BattleGfxSfxDummy2(u16 species) { } @@ -642,10 +632,6 @@ void DecompressTrainerBackPic(u16 backPicId, u8 battlerId) OBJ_PLTT_ID(battlerId), PLTT_SIZE_4BPP); } -void BattleGfxSfxDummy3(u8 gender) -{ -} - void FreeTrainerFrontPicPalette(u16 frontPicId) { FreeSpritePaletteByTag(gTrainerFrontPicPaletteTable[frontPicId].tag); @@ -968,12 +954,7 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite) else { if (!IsContest()) - { - if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); - else - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId); - } + BattleLoadMonSpriteGfx(&GetBattlerParty(battlerId)[gBattlerPartyIndexes[battlerId]], battlerId); } } diff --git a/src/battle_interface.c b/src/battle_interface.c index 7ac936b2f..d1e5757fb 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -194,6 +194,7 @@ static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *); static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *); static void SpriteCb_MegaTrigger(struct Sprite *); +static void SpriteCb_BurstTrigger(struct Sprite *); static void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible); static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level); static void MegaIndicator_CreateSprite(u32 battlerId, u32 healthboxSpriteId); @@ -676,6 +677,64 @@ static const struct SpriteTemplate sSpriteTemplate_MegaTrigger = .callback = SpriteCb_MegaTrigger }; +static const u8 ALIGNED(4) sBurstTriggerGfx[] = INCBIN_U8("graphics/battle_interface/burst_trigger.4bpp"); +static const u16 sBurstTriggerPal[] = INCBIN_U16("graphics/battle_interface/burst_trigger.gbapal"); + +static const struct SpriteSheet sSpriteSheet_BurstTrigger = +{ + sBurstTriggerGfx, sizeof(sBurstTriggerGfx), TAG_BURST_TRIGGER_TILE +}; +static const struct SpritePalette sSpritePalette_BurstTrigger = +{ + sBurstTriggerPal, TAG_BURST_TRIGGER_PAL +}; + +static const struct OamData sOamData_BurstTrigger = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = ST_OAM_SQUARE, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_BurstTriggerOff[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_BurstTriggerOn[] = +{ + ANIMCMD_FRAME(16, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_BurstTrigger[] = +{ + sSpriteAnim_BurstTriggerOff, + sSpriteAnim_BurstTriggerOn, +}; + +static const struct SpriteTemplate sSpriteTemplate_BurstTrigger = +{ + .tileTag = TAG_BURST_TRIGGER_TILE, + .paletteTag = TAG_BURST_TRIGGER_PAL, + .oam = &sOamData_BurstTrigger, + .anims = sSpriteAnimTable_BurstTrigger, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_BurstTrigger +}; + // Because the healthbox is too large to fit into one sprite, it is divided into two sprites. // healthboxLeft or healthboxMain is the left part that is used as the 'main' sprite. // healthboxRight or healthboxOther is the right part of the healthbox. @@ -1409,16 +1468,16 @@ bool32 IsMegaTriggerSpriteActive(void) void HideMegaTriggerSprite(void) { - if (gBattleStruct->mega.triggerSpriteId != 0xFF) - { - ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, 0); - gSprites[gBattleStruct->mega.triggerSpriteId].tHide = TRUE; - } + if (gBattleStruct->mega.triggerSpriteId >= MAX_SPRITES) + return; + ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, 0); + gSprites[gBattleStruct->mega.triggerSpriteId].tHide = TRUE; } void HideTriggerSprites(void) { HideMegaTriggerSprite(); + HideBurstTriggerSprite(); HideZMoveTriggerSprite(); } @@ -1434,6 +1493,128 @@ void DestroyMegaTriggerSprite(void) #undef tBattler #undef tHide +// Ultra Burst Trigger icon functions. +void ChangeBurstTriggerSprite(u8 spriteId, u8 animId) +{ + StartSpriteAnim(&gSprites[spriteId], animId); +} + +#define SINGLES_BURST_TRIGGER_POS_X_OPTIMAL (30) +#define SINGLES_BURST_TRIGGER_POS_X_PRIORITY (31) +#define SINGLES_BURST_TRIGGER_POS_X_SLIDE (15) +#define SINGLES_BURST_TRIGGER_POS_Y_DIFF (-11) + +#define DOUBLES_BURST_TRIGGER_POS_X_OPTIMAL (30) +#define DOUBLES_BURST_TRIGGER_POS_X_PRIORITY (31) +#define DOUBLES_BURST_TRIGGER_POS_X_SLIDE (15) +#define DOUBLES_BURST_TRIGGER_POS_Y_DIFF (-4) + +#define tBattler data[0] +#define tHide data[1] + +void CreateBurstTriggerSprite(u8 battlerId, u8 palId) +{ + LoadSpritePalette(&sSpritePalette_BurstTrigger); + if (GetSpriteTileStartByTag(TAG_BURST_TRIGGER_TILE) == 0xFFFF) + LoadSpriteSheet(&sSpriteSheet_BurstTrigger); + if (gBattleStruct->burst.triggerSpriteId == 0xFF) + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + gBattleStruct->burst.triggerSpriteId = CreateSprite(&sSpriteTemplate_BurstTrigger, + gSprites[gHealthboxSpriteIds[battlerId]].x - DOUBLES_BURST_TRIGGER_POS_X_SLIDE, + gSprites[gHealthboxSpriteIds[battlerId]].y - DOUBLES_BURST_TRIGGER_POS_Y_DIFF, 0); + else + gBattleStruct->burst.triggerSpriteId = CreateSprite(&sSpriteTemplate_BurstTrigger, + gSprites[gHealthboxSpriteIds[battlerId]].x - SINGLES_BURST_TRIGGER_POS_X_SLIDE, + gSprites[gHealthboxSpriteIds[battlerId]].y - SINGLES_BURST_TRIGGER_POS_Y_DIFF, 0); + } + gSprites[gBattleStruct->burst.triggerSpriteId].tBattler = battlerId; + gSprites[gBattleStruct->burst.triggerSpriteId].tHide = FALSE; + + ChangeBurstTriggerSprite(gBattleStruct->burst.triggerSpriteId, palId); +} + +static void SpriteCb_BurstTrigger(struct Sprite *sprite) +{ + s32 xSlide, xPriority, xOptimal; + s32 yDiff; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + xSlide = DOUBLES_BURST_TRIGGER_POS_X_SLIDE; + xPriority = DOUBLES_BURST_TRIGGER_POS_X_PRIORITY; + xOptimal = DOUBLES_BURST_TRIGGER_POS_X_OPTIMAL; + yDiff = DOUBLES_BURST_TRIGGER_POS_Y_DIFF; + } + else + { + xSlide = SINGLES_BURST_TRIGGER_POS_X_SLIDE; + xPriority = SINGLES_BURST_TRIGGER_POS_X_PRIORITY; + xOptimal = SINGLES_BURST_TRIGGER_POS_X_OPTIMAL; + yDiff = SINGLES_BURST_TRIGGER_POS_Y_DIFF; + } + + if (sprite->tHide) + { + if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) + sprite->x++; + + if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) + sprite->oam.priority = 2; + else + sprite->oam.priority = 1; + + sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; + sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; + if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) + DestroyBurstTriggerSprite(); + } + else + { + if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal) + sprite->x--; + + if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) + sprite->oam.priority = 2; + else + sprite->oam.priority = 1; + + sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; + sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; + } +} + +bool32 IsBurstTriggerSpriteActive(void) +{ + if (GetSpriteTileStartByTag(TAG_BURST_TRIGGER_TILE) == 0xFFFF) + return FALSE; + else if (IndexOfSpritePaletteTag(TAG_BURST_TRIGGER_PAL) != 0xFF) + return TRUE; + else + return FALSE; +} + +void HideBurstTriggerSprite(void) +{ + if (gBattleStruct->burst.triggerSpriteId >= MAX_SPRITES) + return; + ChangeBurstTriggerSprite(gBattleStruct->burst.triggerSpriteId, 0); + gSprites[gBattleStruct->burst.triggerSpriteId].tHide = TRUE; +} + +void DestroyBurstTriggerSprite(void) +{ + FreeSpritePaletteByTag(TAG_BURST_TRIGGER_PAL); + FreeSpriteTilesByTag(TAG_BURST_TRIGGER_TILE); + if (gBattleStruct->burst.triggerSpriteId != 0xFF) + DestroySprite(&gSprites[gBattleStruct->burst.triggerSpriteId]); + gBattleStruct->burst.triggerSpriteId = 0xFF; +} + +#undef tBattler +#undef tHide + + // Code for Mega Evolution (And Alpha/Omega) Trigger icon visible on the battler's healthbox. enum { @@ -3214,10 +3395,18 @@ static const struct OamData sOamData_LastUsedBall = .objMode = 0, .mosaic = 0, .bpp = 0, +#if B_LAST_USED_BALL_CYCLE == TRUE + .shape = SPRITE_SHAPE(32x64), +#else .shape = SPRITE_SHAPE(32x32), +#endif .x = 0, .matrixNum = 0, +#if B_LAST_USED_BALL_CYCLE == TRUE + .size = SPRITE_SIZE(32x64), +#else .size = SPRITE_SIZE(32x32), +#endif .tileNum = 0, .priority = 1, .paletteNum = 0, @@ -3235,7 +3424,11 @@ static const struct SpriteTemplate sSpriteTemplate_LastUsedBallWindow = .callback = SpriteCB_LastUsedBallWin }; -#if B_LAST_USED_BALL_BUTTON == R_BUTTON +#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 + static const u8 ALIGNED(4) sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_l_cycle.4bpp"); +#elif B_LAST_USED_BALL_BUTTON == R_BUTTON static const u8 ALIGNED(4) sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_r.4bpp"); #else static const u8 ALIGNED(4) sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_l.4bpp"); @@ -3245,15 +3438,22 @@ static const struct SpriteSheet sSpriteSheet_LastUsedBallWindow = sLastUsedBallWindowGfx, sizeof(sLastUsedBallWindowGfx), LAST_BALL_WINDOW_TAG }; -#define LAST_USED_BALL_X_F 15 -#define LAST_USED_BALL_X_0 -15 +#define LAST_USED_BALL_X_F 14 +#define LAST_USED_BALL_X_0 -14 #define LAST_USED_BALL_Y ((IsDoubleBattle()) ? 78 : 68) +#define LAST_USED_BALL_Y_BNC ((IsDoubleBattle()) ? 76 : 66) -#define LAST_BALL_WIN_X_F (LAST_USED_BALL_X_F - 1) -#define LAST_BALL_WIN_X_0 (LAST_USED_BALL_X_0 - 1) +#define LAST_BALL_WIN_X_F (LAST_USED_BALL_X_F - 0) +#define LAST_BALL_WIN_X_0 (LAST_USED_BALL_X_0 - 0) #define LAST_USED_WIN_Y (LAST_USED_BALL_Y - 8) #define sHide data[0] +#define sTimer data[1] +#define sMoving data[2] +#define sBounce data[3] // 0 = Bounce down; 1 = Bounce up + +#define sState data[0] +#define sSameBall data[1] bool32 CanThrowLastUsedBall(void) { @@ -3264,7 +3464,7 @@ bool32 CanThrowLastUsedBall(void) return FALSE; if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FRONTIER)) return FALSE; - if (!CheckBagHasItem(gLastThrownBall, 1)) + if (!CheckBagHasItem(gBallToDisplay, 1)) return FALSE; return TRUE; @@ -3280,7 +3480,7 @@ void TryAddLastUsedBallItemSprites(void) // we're out of the last used ball, so just set it to the first ball in the bag // we have to compact the bag first bc it is typically only compacted when you open it CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]); - gLastThrownBall = gBagPockets[BALLS_POCKET].itemSlots[0].itemId; + gBallToDisplay = gBagPockets[BALLS_POCKET].itemSlots[0].itemId; } if (!CanThrowLastUsedBall()) @@ -3289,10 +3489,11 @@ void TryAddLastUsedBallItemSprites(void) // ball if (gBattleStruct->ballSpriteIds[0] == MAX_SPRITES) { - gBattleStruct->ballSpriteIds[0] = AddItemIconSprite(102, 102, gLastThrownBall); + 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 + gLastUsedBallMenuPresent = TRUE; gSprites[gBattleStruct->ballSpriteIds[0]].callback = SpriteCB_LastUsedBall; } @@ -3307,7 +3508,11 @@ void TryAddLastUsedBallItemSprites(void) LAST_BALL_WIN_X_0, LAST_USED_WIN_Y, 5); gSprites[gBattleStruct->ballSpriteIds[1]].sHide = FALSE; // restore + gLastUsedBallMenuPresent = TRUE; } +#if B_LAST_USED_BALL_CYCLE == TRUE + ArrowsChangeColorLastBallCycle(0); //Default the arrows to be invisible +#endif #endif } @@ -3348,6 +3553,9 @@ static void SpriteCB_LastUsedBall(struct Sprite *sprite) { if (sprite->sHide) { + if (sprite->y < LAST_USED_BALL_Y) // Used to recover from an incomplete bounce before hiding the window + sprite->y++; + if (sprite->x != LAST_USED_BALL_X_0) sprite->x--; @@ -3374,14 +3582,19 @@ static void TryHideOrRestoreLastUsedBall(u8 caseId) gSprites[gBattleStruct->ballSpriteIds[0]].sHide = TRUE; // hide if (gBattleStruct->ballSpriteIds[1] != MAX_SPRITES) gSprites[gBattleStruct->ballSpriteIds[1]].sHide = TRUE; // hide + gLastUsedBallMenuPresent = FALSE; break; case 1: // restore if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES) gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore if (gBattleStruct->ballSpriteIds[1] != MAX_SPRITES) gSprites[gBattleStruct->ballSpriteIds[1]].sHide = FALSE; // restore + gLastUsedBallMenuPresent = TRUE; break; } +#if B_LAST_USED_BALL_CYCLE == TRUE + ArrowsChangeColorLastBallCycle(0); //Default the arrows to be invisible +#endif #endif } @@ -3401,3 +3614,120 @@ void TryRestoreLastUsedBall(void) TryAddLastUsedBallItemSprites(); #endif } + +static void SpriteCB_LastUsedBallBounce(struct Sprite *sprite) +{ + if ((sprite->sTimer++ % 4) != 0) // Change the image every 4 frame + return; + if (sprite->sBounce) + { + if (sprite->y > LAST_USED_BALL_Y_BNC) + sprite->y--; + else + sprite->sMoving = FALSE; + } + else + { + if (sprite->y < LAST_USED_BALL_Y) + sprite->y++; + else + sprite->sMoving = FALSE; + } +} + +static void Task_BounceBall(u8 taskId) +{ + struct Sprite *sprite = &gSprites[gBattleStruct->ballSpriteIds[0]]; + struct Task *task = &gTasks[taskId]; + switch(task->sState) + { + case 0: // Bounce up + sprite->sBounce = TRUE; + sprite->sMoving = TRUE; + sprite->callback = SpriteCB_LastUsedBallBounce; + if (task->sSameBall) + task->sState = 3; + else + task->sState = 1; + break; + case 1: // Destroy Icon + if (!sprite->sMoving) + { + DestroyLastUsedBallGfx(sprite); + task->sState++; + } // Passthrough + case 2: //Create New Icon + if (!sprite->inUse) + { + gBattleStruct->ballSpriteIds[0] = AddItemIconSprite(102, 102, gBallToDisplay); + gSprites[gBattleStruct->ballSpriteIds[0]].x = LAST_USED_BALL_X_F; + gSprites[gBattleStruct->ballSpriteIds[0]].y = LAST_USED_BALL_Y_BNC; + task->sState++; + } // Fallthrough + case 3: // Bounce Down + if (!sprite->sMoving) + { + sprite->sBounce = FALSE; + sprite->sMoving = TRUE; + sprite->callback = SpriteCB_LastUsedBallBounce; //Show and bounce down + task->sState++; + } + break; + case 4: // Destroy Task + if(!sprite->sMoving) + { + sprite->callback = SpriteCB_LastUsedBall; + DestroyTask(taskId); + } + } + if (!gLastUsedBallMenuPresent) + { + // Used to check if the R button was released before the animation was complete + sprite->callback = SpriteCB_LastUsedBall; + DestroyTask(taskId); + } +} + +void SwapBallToDisplay(bool32 sameBall) +{ + u8 taskId; + taskId = CreateTask(Task_BounceBall, 10); + gTasks[taskId].sSameBall = sameBall; +} + +void ArrowsChangeColorLastBallCycle(bool32 showArrows) +{ +#if B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == TRUE + u16 paletteNum = 16 + gSprites[gBattleStruct->ballSpriteIds[1]].oam.paletteNum; + struct PlttData *defaultPlttArrow; + struct PlttData *defaultPlttOutline; + struct PlttData *pltArrow; + struct PlttData *pltOutline; + if (gBattleStruct->ballSpriteIds[1] == MAX_SPRITES) + return; + paletteNum *= 16; + pltArrow = (struct PlttData *)&gPlttBufferFaded[paletteNum + 9]; // Arrow color is in idx 9 + pltOutline = (struct PlttData *)&gPlttBufferFaded[paletteNum + 8]; // Arrow outline is in idx 8 + if (!showArrows) //Make invisible + { + defaultPlttArrow = (struct PlttData *)&gPlttBufferFaded[paletteNum + 13]; // Background color is idx 13 + pltArrow->r = defaultPlttArrow->r; + pltArrow->g = defaultPlttArrow->g; + pltArrow->b = defaultPlttArrow->b; + pltOutline->r = defaultPlttArrow->r; + pltOutline->g = defaultPlttArrow->g; + pltOutline->b = defaultPlttArrow->b; + } + else // Make gray + { + defaultPlttArrow = (struct PlttData *)&gPlttBufferFaded[paletteNum + 11]; // Grey color is idx 11 + defaultPlttOutline = (struct PlttData *)&gPlttBufferFaded[paletteNum + 10]; //Light grey color for outline is idx 10 + pltArrow->r = defaultPlttArrow->r; + pltArrow->g = defaultPlttArrow->g; + pltArrow->b = defaultPlttArrow->b; + pltOutline->r = defaultPlttOutline->r; + pltOutline->g = defaultPlttOutline->g; + pltOutline->b = defaultPlttOutline->b; + } +#endif +} diff --git a/src/battle_main.c b/src/battle_main.c index 452277bc0..d26fc325f 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -242,6 +242,8 @@ EWRAM_DATA struct TotemBoost gTotemBoosts[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA bool8 gHasFetchedBall = FALSE; EWRAM_DATA u8 gLastUsedBall = 0; EWRAM_DATA u16 gLastThrownBall = 0; +EWRAM_DATA u16 gBallToDisplay = 0; +EWRAM_DATA bool8 gLastUsedBallMenuPresent = FALSE; EWRAM_DATA u8 gPartyCriticalHits[PARTY_SIZE] = {0}; EWRAM_DATA static u8 sTriedEvolving = 0; @@ -249,11 +251,9 @@ void (*gPreBattleCallback1)(void); void (*gBattleMainFunc)(void); struct BattleResults gBattleResults; u8 gLeveledUpInBattle; -void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void); u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT]; u8 gMultiUsePlayerCursor; u8 gNumberOfMovesToChoose; -u8 gBattleControllerData[MAX_BATTLERS_COUNT]; // Used by the battle controllers to store misc sprite/task IDs for each battler static const struct ScanlineEffectParams sIntroScanlineParams16Bit = { @@ -1902,33 +1902,8 @@ static u32 Crc32B (const u8 *data, u32 size) static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i) { - const u8 *buffer; - u32 n; - if (trainer->partyFlags == 0) - { - buffer = (const u8 *) &trainer->party.NoItemDefaultMoves[i]; - n = sizeof(*trainer->party.NoItemDefaultMoves); - } - else if (trainer->partyFlags == F_TRAINER_PARTY_CUSTOM_MOVESET) - { - buffer = (const u8 *) &trainer->party.NoItemCustomMoves[i]; - n = sizeof(*trainer->party.NoItemCustomMoves); - } - else if (trainer->partyFlags == F_TRAINER_PARTY_HELD_ITEM) - { - buffer = (const u8 *) &trainer->party.ItemDefaultMoves[i]; - n = sizeof(*trainer->party.ItemDefaultMoves); - } - else if (trainer->partyFlags == (F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET)) - { - buffer = (const u8 *) &trainer->party.ItemCustomMoves[i]; - n = sizeof(*trainer->party.ItemCustomMoves); - } - else if (trainer->partyFlags == F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED) - { - buffer = (const u8 *) &trainer->party.EverythingCustomized[i]; - n = sizeof(*trainer->party.EverythingCustomized); - } + const u8 *buffer = (const u8 *) &trainer->party[i]; + u32 n = sizeof(*trainer->party); return Crc32B(buffer, n); } @@ -1954,7 +1929,7 @@ u32 GeneratePersonalityForGender(u32 gender, u32 species) return speciesInfo->genderRatio / 2; } -void CustomTrainerPartyAssignMoves(struct Pokemon *mon, const struct TrainerMonCustomized *partyEntry) +void CustomTrainerPartyAssignMoves(struct Pokemon *mon, const struct TrainerMon *partyEntry) { bool32 noMoveSet = TRUE; u32 j; @@ -2006,6 +1981,10 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer { s32 ball = -1; u32 personalityHash = GeneratePartyHash(trainer, i); + const struct TrainerMon *partyData = trainer->party; + u32 otIdType = OT_ID_RANDOM_NO_SHINY; + u32 fixedOtId = 0; + if (trainer->doubleBattle == TRUE) personalityValue = 0x80; else if (trainer->encounterMusic_gender & F_TRAINER_FEMALE) @@ -2014,107 +1993,54 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer personalityValue = 0x88; // Use personality more likely to result in a male Pokémon personalityValue += personalityHash << 8; - switch (trainer->partyFlags) + 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); + if (partyData[i].nature != 0) + ModifyPersonalityForNature(&personalityValue, partyData[i].nature - 1); + if (partyData[i].isShiny) { - case 0: - { - const struct TrainerMonNoItemDefaultMoves *partyData = trainer->party.NoItemDefaultMoves; - fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); - break; + otIdType = OT_ID_PRESET; + fixedOtId = HIHALF(personalityValue) ^ LOHALF(personalityValue); } - case F_TRAINER_PARTY_CUSTOM_MOVESET: - { - const struct TrainerMonNoItemCustomMoves *partyData = trainer->party.NoItemCustomMoves; - fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, 0, TRUE, personalityValue, otIdType, fixedOtId); + SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); - for (j = 0; j < MAX_MON_MOVES; j++) - { - SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); - SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); - } - break; - } - case F_TRAINER_PARTY_HELD_ITEM: + CustomTrainerPartyAssignMoves(&party[i], &partyData[i]); + SetMonData(&party[i], MON_DATA_IVS, &(partyData[i].iv)); + if (partyData[i].ev != NULL) { - const struct TrainerMonItemDefaultMoves *partyData = trainer->party.ItemDefaultMoves; - fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); - - SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); - break; + 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])); } - case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: + if (partyData[i].ability != ABILITY_NONE) { - const struct TrainerMonItemCustomMoves *partyData = trainer->party.ItemCustomMoves; - fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); - - SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); - - for (j = 0; j < MAX_MON_MOVES; j++) + const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[i].species]; + u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities); + for (j = 0; j < maxAbilities; ++j) { - SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); - SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + if (speciesInfo->abilities[j] == partyData[i].ability) + break; } - break; + if (j < maxAbilities) + SetMonData(&party[i], MON_DATA_ABILITY_NUM, &j); } - case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + SetMonData(&party[i], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); + if (partyData[i].ball != ITEM_NONE) { - const struct TrainerMonCustomized *partyData = trainer->party.EverythingCustomized; - u32 otIdType = OT_ID_RANDOM_NO_SHINY; - u32 fixedOtId = 0; - 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); - if (partyData[i].nature != 0) - ModifyPersonalityForNature(&personalityValue, partyData[i].nature - 1); - if (partyData[i].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); - - CustomTrainerPartyAssignMoves(&party[i], &partyData[i]); - SetMonData(&party[i], MON_DATA_IVS, &(partyData[i].iv)); - if (partyData[i].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])); - } - if (partyData[i].ability != ABILITY_NONE) - { - const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[i].species]; - u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities); - for (j = 0; j < maxAbilities; ++j) - { - if (speciesInfo->abilities[j] == partyData[i].ability) - break; - } - if (j < maxAbilities) - SetMonData(&party[i], MON_DATA_ABILITY_NUM, &j); - } - SetMonData(&party[i], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); - if (partyData[i].ball != ITEM_NONE) - { - ball = partyData[i].ball; - SetMonData(&party[i], MON_DATA_POKEBALL, &ball); - } - if (partyData[i].nickname != NULL) - { - SetMonData(&party[i], MON_DATA_NICKNAME, partyData[i].nickname); - } - CalculateMonStats(&party[i]); + ball = partyData[i].ball; + SetMonData(&party[i], MON_DATA_POKEBALL, &ball); } + if (partyData[i].nickname != NULL) + { + SetMonData(&party[i], MON_DATA_NICKNAME, partyData[i].nickname); } + CalculateMonStats(&party[i]); #if B_TRAINER_CLASS_POKE_BALLS >= GEN_7 if (ball == -1) @@ -2822,8 +2748,6 @@ void SpriteCB_FaintOpponentMon(struct Sprite *sprite) else species = sprite->sSpeciesId; - GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_PERSONALITY); // Unused return value. - if (species == SPECIES_UNOWN) { species = GetUnownSpeciesId(personality); @@ -3085,7 +3009,7 @@ static void BattleMainCB1(void) gBattleMainFunc(); for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - gBattlerControllerFuncs[gActiveBattler](); + gBattlerControllerFuncs[gActiveBattler](gActiveBattler); } static void BattleStartClearSetData(void) @@ -3193,8 +3117,12 @@ static void BattleStartClearSetData(void) gBattleStruct->arenaLostOpponentMons = 0; gBattleStruct->mega.triggerSpriteId = 0xFF; + gBattleStruct->burst.triggerSpriteId = 0xFF; - gBattleStruct->stickyWebUser = 0xFF; + for (i = 0; i < ARRAY_COUNT(gSideTimers); i++) + { + gSideTimers[i].stickyWebBattlerId = 0xFF; + } gBattleStruct->appearedInBattle = 0; gBattleStruct->beatUpSlot = 0; @@ -3300,8 +3228,12 @@ void SwitchInClearSetData(void) gBattleStruct->lastMoveFailed &= ~(gBitTable[gActiveBattler]); gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]); - if (gActiveBattler == gBattleStruct->stickyWebUser) - gBattleStruct->stickyWebUser = 0xFF; // Switched into sticky web user slot so reset it + for (i = 0; i < ARRAY_COUNT(gSideTimers); i++) + { + // Switched into sticky web user slot, so reset stored battler ID + if (gSideTimers[i].stickyWebBattlerId == gActiveBattler) + gSideTimers[i].stickyWebBattlerId = 0xFF; + } for (i = 0; i < gBattlersCount; i++) { @@ -3414,8 +3346,12 @@ void FaintClearSetData(void) gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]); - if (gActiveBattler == gBattleStruct->stickyWebUser) - gBattleStruct->stickyWebUser = 0xFF; // User of sticky web fainted, so reset the stored battler ID + for (i = 0; i < ARRAY_COUNT(gSideTimers); i++) + { + // User of sticky web fainted, so reset the stored battler ID + if (gSideTimers[i].stickyWebBattlerId == gActiveBattler) + gSideTimers[i].stickyWebBattlerId = 0xFF; + } for (i = 0; i < gBattlersCount; i++) { @@ -4357,6 +4293,7 @@ static void HandleTurnActionSelectionState(void) } gBattleStruct->mega.toEvolve &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))]); + gBattleStruct->burst.toBurst &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))]); gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))] = MOVE_NONE; BtlController_EmitEndBounceEffect(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); @@ -4443,11 +4380,13 @@ static void HandleTurnActionSelectionState(void) RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][2]); RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][3]); } - *(gBattleStruct->chosenMovePositions + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][2] & ~RET_MEGA_EVOLUTION; + *(gBattleStruct->chosenMovePositions + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][2] & ~(RET_MEGA_EVOLUTION | RET_ULTRA_BURST); gChosenMoveByBattler[gActiveBattler] = gBattleMons[gActiveBattler].moves[*(gBattleStruct->chosenMovePositions + gActiveBattler)]; *(gBattleStruct->moveTarget + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][3]; if (gBattleResources->bufferB[gActiveBattler][2] & RET_MEGA_EVOLUTION) gBattleStruct->mega.toEvolve |= gBitTable[gActiveBattler]; + else if (gBattleResources->bufferB[gActiveBattler][2] & RET_ULTRA_BURST) + gBattleStruct->burst.toBurst |= gBitTable[gActiveBattler]; gBattleCommunication[gActiveBattler]++; } break; @@ -4608,7 +4547,11 @@ static void HandleTurnActionSelectionState(void) { // if we choose to throw a ball with our second mon, skip the action of the first // (if we have chosen throw ball with first, second's is already skipped) - gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)] = B_ACTION_NOTHING_FAINTED; + // if throwing a ball in a wild battle with an in-game partner, skip partner's turn when throwing a ball + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)] = B_ACTION_NOTHING_FAINTED; + else + gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)] = B_ACTION_NOTHING_FAINTED; } gBattleMainFunc = SetActionsAndBattlersTurnOrder; @@ -5061,7 +5004,7 @@ static void PopulateArrayWithBattlers(u8 *battlers) static bool32 TryDoMegaEvosBeforeMoves(void) { - if (!(gHitMarker & HITMARKER_RUN) && gBattleStruct->mega.toEvolve) + if (!(gHitMarker & HITMARKER_RUN) && (gBattleStruct->mega.toEvolve || gBattleStruct->burst.toBurst)) { u32 i; struct Pokemon *party; @@ -5086,6 +5029,18 @@ static bool32 TryDoMegaEvosBeforeMoves(void) BattleScriptExecute(BattleScript_MegaEvolution); return TRUE; } + + if (gBattleStruct->burst.toBurst & gBitTable[megaOrder[i]] + && !(gProtectStructs[megaOrder[i]].noValidMoves)) + { + gActiveBattler = gBattlerAttacker = megaOrder[i]; + gBattleStruct->burst.toBurst &= ~(gBitTable[gActiveBattler]); + gLastUsedItem = gBattleMons[gActiveBattler].item; + party = GetBattlerParty(gActiveBattler); + mon = &party[gBattlerPartyIndexes[gActiveBattler]]; + BattleScriptExecute(BattleScript_UltraBurst); + return TRUE; + } } } diff --git a/src/battle_message.c b/src/battle_message.c index 172f5a11f..c410c8d4b 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -142,8 +142,8 @@ static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX2}'s {B_CURRENT static const u8 sText_PkmnRaisedDef[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised DEFENSE!"); static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX2}'s party is covered\nby a veil!"); -static const u8 sText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX}'s party is protected\nby SAFEGUARD!"); -static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX3}'s party is no longer\nprotected by SAFEGUARD!"); +static const u8 sText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX}'s party is protected\nby Safeguard!"); +static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX3}'s party is no longer\nprotected by Safeguard!"); static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!"); static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!"); @@ -800,6 +800,9 @@ static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_BUFF1} had its\nPP restore static const u8 sText_AtkTrappedDef[] = _("{B_ATK_NAME_WITH_PREFIX} trapped\nthe {B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_MirrorHerbCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its {B_LAST_ITEM}\nto mirror its opponent's stat changes!"); static const u8 sText_PkmnItemMelted[] = _("{B_ATK_NAME_WITH_PREFIX} corroded\n{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); +static const u8 sText_UltraBurstReacting[] = _("Bright light is about to\nburst out of {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_UltraBurstCompleted[] = _("{B_ATK_NAME_WITH_PREFIX} regained its\ntrue power through Ultra Burst!"); + const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { @@ -1456,6 +1459,8 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNFROSTBITEHEALED - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealed, [STRINGID_PKMNFROSTBITEHEALED2 - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealed2, [STRINGID_PKMNFROSTBITEHEALEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealedBy, + [STRINGID_ULTRABURSTREACTING - BATTLESTRINGS_TABLE_START] = sText_UltraBurstReacting, + [STRINGID_ULTRABURSTCOMPLETED - BATTLESTRINGS_TABLE_START] = sText_UltraBurstCompleted, }; const u16 gTrainerUsedItemStringIds[] = @@ -2700,7 +2705,7 @@ void BufferStringBattle(u16 stringID) { if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) stringPtr = sText_LegendaryPkmnAppeared; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]])) // interesting, looks like they had something planned for wild double battles + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]])) stringPtr = sText_TwoWildPkmnAppeared; else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) stringPtr = sText_WildPkmnAppearedPause; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bf37aad90..50c64d520 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1414,7 +1414,7 @@ static void Cmd_attackcanceler(void) return; } - // Z-moves and Max Moves bypass protection, but deal reduced damage (factored in CalcFinalDmg) + // Z-moves and Max Moves bypass protection, but deal reduced damage (factored in AccumulateOtherModifiers) if (gBattleStruct->zmove.active && IS_BATTLER_PROTECTED(gBattlerTarget)) { BattleScriptPush(cmd->nextInstr); @@ -5000,7 +5000,8 @@ static void Cmd_playanimation(void) || animId == B_ANIM_ILLUSION_OFF || animId == B_ANIM_FORM_CHANGE || animId == B_ANIM_SUBSTITUTE_FADE - || animId == B_ANIM_PRIMAL_REVERSION) + || animId == B_ANIM_PRIMAL_REVERSION + || animId == B_ANIM_ULTRA_BURST) { BtlController_EmitBattleAnimation(BUFFER_A, animId, *argPtr); MarkBattlerForControllerExec(gActiveBattler); @@ -5051,7 +5052,8 @@ static void Cmd_playanimation_var(void) || *animIdPtr == B_ANIM_ILLUSION_OFF || *animIdPtr == B_ANIM_FORM_CHANGE || *animIdPtr == B_ANIM_SUBSTITUTE_FADE - || *animIdPtr == B_ANIM_PRIMAL_REVERSION) + || *animIdPtr == B_ANIM_PRIMAL_REVERSION + || *animIdPtr == B_ANIM_ULTRA_BURST) { BtlController_EmitBattleAnimation(BUFFER_A, *animIdPtr, *argPtr); MarkBattlerForControllerExec(gActiveBattler); @@ -7252,7 +7254,7 @@ static void Cmd_yesnoboxlearnmove(void) else { u16 moveId = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MOVE1 + movePosition); - if (IsHMMove2(moveId)) + if (IsMoveHM(moveId)) { PrepareStringBattle(STRINGID_HMMOVESCANTBEFORGOTTEN, gActiveBattler); gBattleScripting.learnMoveState = 6; @@ -7378,39 +7380,8 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) } else { - switch (gTrainers[trainerId].partyFlags) - { - case 0: - { - const struct TrainerMonNoItemDefaultMoves *party = gTrainers[trainerId].party.NoItemDefaultMoves; - lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; - } - break; - case F_TRAINER_PARTY_CUSTOM_MOVESET: - { - const struct TrainerMonNoItemCustomMoves *party = gTrainers[trainerId].party.NoItemCustomMoves; - lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; - } - break; - case F_TRAINER_PARTY_HELD_ITEM: - { - const struct TrainerMonItemDefaultMoves *party = gTrainers[trainerId].party.ItemDefaultMoves; - lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; - } - break; - case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: - { - const struct TrainerMonItemCustomMoves *party = gTrainers[trainerId].party.ItemCustomMoves; - lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; - } - break; - case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: - { - const struct TrainerMonCustomized *party = gTrainers[trainerId].party.EverythingCustomized; - lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; - } - break; - } + const struct TrainerMon *party = gTrainers[trainerId].party; + lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; for (; gTrainerMoneyTable[i].classId != 0xFF; i++) { @@ -8551,8 +8522,9 @@ static bool32 IsTeatimeAffected(u32 battlerId) #define UPDATE_COURTCHANGED_BATTLER(structField)\ { \ - sideTimerPlayer->structField ^= BIT_SIDE; \ - sideTimerOpp->structField ^= BIT_SIDE; \ + temp = sideTimerPlayer->structField; \ + sideTimerPlayer->structField = BATTLE_OPPOSITE(sideTimerOpp->structField); \ + sideTimerOpp->structField = BATTLE_OPPOSITE(temp); \ } \ static bool32 CourtChangeSwapSideStatuses(void) @@ -8587,15 +8559,13 @@ static bool32 CourtChangeSwapSideStatuses(void) UPDATE_COURTCHANGED_BATTLER(auroraVeilBattlerId); UPDATE_COURTCHANGED_BATTLER(tailwindBattlerId); UPDATE_COURTCHANGED_BATTLER(luckyChantBattlerId); - - // For Mirror Armor only - gBattleStruct->stickyWebUser = gBattlerAttacker; + UPDATE_COURTCHANGED_BATTLER(stickyWebBattlerId); // Track which side originally set the Sticky Web SWAP(sideTimerPlayer->stickyWebBattlerSide, sideTimerOpp->stickyWebBattlerSide, temp); } -static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega) +static void HandleScriptMegaPrimalBurst(u32 caseId, u32 battlerId, u32 type) { struct Pokemon *party = GetBattlerParty(battlerId); struct Pokemon *mon = &party[gBattlerPartyIndexes[battlerId]]; @@ -8605,13 +8575,15 @@ static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega) // Change species. if (caseId == 0) { - if (isMega) + if (type == HANDLE_TYPE_MEGA_EVOLUTION) { if (!TryBattleFormChange(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM)) TryBattleFormChange(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE); } - else + else if (type == HANDLE_TYPE_PRIMAL_REVERSION) TryBattleFormChange(battlerId, FORM_CHANGE_BATTLE_PRIMAL_REVERSION); + else + TryBattleFormChange(battlerId, FORM_CHANGE_BATTLE_ULTRA_BURST); PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battlerId].species); @@ -8624,38 +8596,13 @@ static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega) UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], mon, HEALTHBOX_ALL); if (side == B_SIDE_OPPONENT) SetBattlerShadowSpriteCallback(battlerId, gBattleMons[battlerId].species); - if (isMega) + if (type == HANDLE_TYPE_MEGA_EVOLUTION) gBattleStruct->mega.alreadyEvolved[position] = TRUE; + if (type == HANDLE_TYPE_ULTRA_BURST) + gBattleStruct->burst.alreadyBursted[position] = TRUE; } } -static bool32 CanTeleport(u8 battlerId) -{ - struct Pokemon *party = GetBattlerParty(battlerId); - u32 species, count, i; - - for (i = 0; i < PARTY_SIZE; i++) - { - species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); - if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&party[i], MON_DATA_HP) != 0) - count++; - } - - switch (GetBattlerSide(battlerId)) - { - case B_SIDE_OPPONENT: - if (count == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - return FALSE; - break; - case B_SIDE_PLAYER: - if (count == 1 || (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && count <= 2)) - return FALSE; - break; - } - - return TRUE; -} - // Return True if the order was changed, and false if the order was not changed(for example because the target would move after the attacker anyway). static bool32 ChangeOrderTargetAfterAttacker(void) { @@ -9682,14 +9629,21 @@ static void Cmd_various(void) case VARIOUS_HANDLE_MEGA_EVO: { VARIOUS_ARGS(u8 case_); - HandleScriptMegaPrimal(cmd->case_, gActiveBattler, TRUE); + HandleScriptMegaPrimalBurst(cmd->case_, gActiveBattler, HANDLE_TYPE_MEGA_EVOLUTION); gBattlescriptCurrInstr = cmd->nextInstr; return; } case VARIOUS_HANDLE_PRIMAL_REVERSION: { VARIOUS_ARGS(u8 case_); - HandleScriptMegaPrimal(cmd->case_, gActiveBattler, FALSE); + HandleScriptMegaPrimalBurst(cmd->case_, gActiveBattler, HANDLE_TYPE_PRIMAL_REVERSION); + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + case VARIOUS_HANDLE_ULTRA_BURST: + { + VARIOUS_ARGS(u8 case_); + HandleScriptMegaPrimalBurst(cmd->case_, gActiveBattler, HANDLE_TYPE_ULTRA_BURST); gBattlescriptCurrInstr = cmd->nextInstr; return; } @@ -10022,13 +9976,13 @@ static void Cmd_various(void) if (IsBattlerAlive(gActiveBattler)) { SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + BattleLoadMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); } i = BATTLE_PARTNER(gActiveBattler); if (IsBattlerAlive(i)) { SetBattlerShadowSpriteCallback(i, gBattleMons[i].species); - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[i]], i); + BattleLoadMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[i]], i); } } gBattlescriptCurrInstr = cmd->nextInstr; @@ -10604,8 +10558,8 @@ static void Cmd_various(void) // If Pokémon which set up Sticky Web is not on the field, no Pokémon have their Speed lowered." gBattlerAttacker = gBattlerTarget; // Initialize 'fail' condition SET_STATCHANGER(STAT_SPEED, 1, TRUE); - if (gBattleStruct->stickyWebUser != 0xFF) - gBattlerAttacker = gBattleStruct->stickyWebUser; + if (gSideTimers[GetBattlerSide(gActiveBattler)].stickyWebBattlerId != 0xFF) + gBattlerAttacker = gSideTimers[GetBattlerSide(gActiveBattler)].stickyWebBattlerId; break; } case VARIOUS_CUT_1_3_HP_RAISE_STATS: @@ -13673,7 +13627,7 @@ static void Cmd_jumpifnopursuitswitchdmg(void) && !(gBattleMons[gBattlerTarget].status1 & (STATUS1_SLEEP | STATUS1_FREEZE)) && gBattleMons[gBattlerAttacker].hp && !gDisableStructs[gBattlerTarget].truantCounter - && gChosenMoveByBattler[gBattlerTarget] == MOVE_PURSUIT) + && gBattleMoves[gChosenMoveByBattler[gBattlerTarget]].effect == EFFECT_PURSUIT) { s32 i; @@ -13683,7 +13637,7 @@ static void Cmd_jumpifnopursuitswitchdmg(void) gActionsByTurnOrder[i] = B_ACTION_TRY_FINISH; } - gCurrentMove = MOVE_PURSUIT; + gCurrentMove = gChosenMoveByBattler[gBattlerTarget]; gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerTarget); gBattlescriptCurrInstr = cmd->nextInstr; gBattleScripting.animTurn = 1; @@ -13867,9 +13821,9 @@ static void Cmd_setstickyweb(void) else { gSideStatuses[targetSide] |= SIDE_STATUS_STICKY_WEB; + gSideTimers[targetSide].stickyWebBattlerId = gBattlerAttacker; // For Mirror Armor gSideTimers[targetSide].stickyWebBattlerSide = GetBattlerSide(gBattlerAttacker); // For Court Change/Defiant - set this to the user's side gSideTimers[targetSide].stickyWebAmount = 1; - gBattleStruct->stickyWebUser = gBattlerAttacker; // For Mirror Armor gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -15103,10 +15057,10 @@ static void Cmd_pursuitdoubles(void) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBattlerFlags & gBitTable[gActiveBattler]) && gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_MOVE - && gChosenMoveByBattler[gActiveBattler] == MOVE_PURSUIT) + && gBattleMoves[gChosenMoveByBattler[gActiveBattler]].effect == EFFECT_PURSUIT) { gActionsByTurnOrder[gActiveBattler] = B_ACTION_TRY_FINISH; - gCurrentMove = MOVE_PURSUIT; + gCurrentMove = gChosenMoveByBattler[gActiveBattler]; gBattlescriptCurrInstr = cmd->nextInstr; gBattleScripting.animTurn = 1; gBattleScripting.savedBattler = gBattlerAttacker; @@ -15216,6 +15170,7 @@ static void Cmd_handleballthrow(void) u8 catchRate; gLastThrownBall = gLastUsedItem; + gBallToDisplay = gLastThrownBall; if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) catchRate = gBattleStruct->safariCatchFactor * 1275 / 100; else @@ -16134,13 +16089,6 @@ void BS_GetBattlerSide(void) gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_CanTeleport(void) -{ - NATIVE_ARGS(u8 battler); - gBattleCommunication[0] = CanTeleport(cmd->battler); - gBattlescriptCurrInstr = cmd->nextInstr; -} - void BS_TrySymbiosis(void) { NATIVE_ARGS(); diff --git a/src/battle_setup.c b/src/battle_setup.c index f26c69081..630aee14f 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -812,55 +812,16 @@ static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons) u8 i; u8 sum; u32 count = numMons; + const struct TrainerMon *party; if (gTrainers[opponentId].partySize < count) count = gTrainers[opponentId].partySize; sum = 0; - switch (gTrainers[opponentId].partyFlags) - { - case 0: - { - const struct TrainerMonNoItemDefaultMoves *party; - party = gTrainers[opponentId].party.NoItemDefaultMoves; - for (i = 0; i < count; i++) - sum += party[i].lvl; - } - break; - case F_TRAINER_PARTY_CUSTOM_MOVESET: - { - const struct TrainerMonNoItemCustomMoves *party; - party = gTrainers[opponentId].party.NoItemCustomMoves; - for (i = 0; i < count; i++) - sum += party[i].lvl; - } - break; - case F_TRAINER_PARTY_HELD_ITEM: - { - const struct TrainerMonItemDefaultMoves *party; - party = gTrainers[opponentId].party.ItemDefaultMoves; - for (i = 0; i < count; i++) - sum += party[i].lvl; - } - break; - case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: - { - const struct TrainerMonItemCustomMoves *party; - party = gTrainers[opponentId].party.ItemCustomMoves; - for (i = 0; i < count; i++) - sum += party[i].lvl; - } - break; - case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: - { - const struct TrainerMonCustomized *party; - party = gTrainers[opponentId].party.EverythingCustomized; - for (i = 0; i < count; i++) - sum += party[i].lvl; - } - break; - } + party = gTrainers[opponentId].party; + for (i = 0; i < count; i++) + sum += party[i].lvl; return sum; } diff --git a/src/battle_tower.c b/src/battle_tower.c index a8794358a..8ad26dfda 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3049,113 +3049,62 @@ static void FillPartnerParty(u16 trainerId) for (i = 0; i < 3 && i < gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].partySize; i++) { + const struct TrainerMon *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party; + u32 otIdType = OT_ID_RANDOM_NO_SHINY; do { j = Random32(); } while (IsShinyOtIdPersonality(otID, j)); - switch (gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].partyFlags) + if (partyData[i].gender == TRAINER_MON_MALE) + j = (j & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[i].species); + else if (partyData[i].gender == TRAINER_MON_FEMALE) + j = (j & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[i].species); + if (partyData[i].nature != 0) + ModifyPersonalityForNature(&j, partyData[i].nature - 1); + if (partyData[i].isShiny) { - case 0: + otIdType = OT_ID_PRESET; + otID = HIHALF(j) ^ LOHALF(j); + } + + CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, 0, TRUE, j, otIdType, otID); + SetMonData(&gPlayerParty[i + 3], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + CustomTrainerPartyAssignMoves(&gPlayerParty[i+3], &partyData[i]); + + SetMonData(&gPlayerParty[i+3], MON_DATA_IVS, &(partyData[i].iv)); + if (partyData[i].ev != NULL) { - const struct TrainerMonNoItemDefaultMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.NoItemDefaultMoves; - - CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID); - break; + SetMonData(&gPlayerParty[i+3], MON_DATA_HP_EV, &(partyData[i].ev[0])); + SetMonData(&gPlayerParty[i+3], MON_DATA_ATK_EV, &(partyData[i].ev[1])); + SetMonData(&gPlayerParty[i+3], MON_DATA_DEF_EV, &(partyData[i].ev[2])); + SetMonData(&gPlayerParty[i+3], MON_DATA_SPATK_EV, &(partyData[i].ev[3])); + SetMonData(&gPlayerParty[i+3], MON_DATA_SPDEF_EV, &(partyData[i].ev[4])); + SetMonData(&gPlayerParty[i+3], MON_DATA_SPEED_EV, &(partyData[i].ev[5])); } - case F_TRAINER_PARTY_CUSTOM_MOVESET: + if (partyData[i].ability != ABILITY_NONE) { - const struct TrainerMonNoItemCustomMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.NoItemCustomMoves; - - CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID); - - for (j = 0; j < 4; j++) + const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[i].species]; + u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities); + for (j = 0; j < maxAbilities; ++j) { - SetMonData(&gPlayerParty[i + 3], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); - SetMonData(&gPlayerParty[i + 3], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + if (speciesInfo->abilities[j] == partyData[i].ability) + break; } - break; + if (j < maxAbilities) + SetMonData(&gPlayerParty[i+3], MON_DATA_ABILITY_NUM, &j); } - case F_TRAINER_PARTY_HELD_ITEM: + SetMonData(&gPlayerParty[i+3], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); + if (partyData[i].ball != ITEM_NONE) { - const struct TrainerMonItemDefaultMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.ItemDefaultMoves; - - CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID); - - SetMonData(&gPlayerParty[i + 3], MON_DATA_HELD_ITEM, &partyData[i].heldItem); - break; + ball = partyData[i].ball; + SetMonData(&gPlayerParty[i+3], MON_DATA_POKEBALL, &ball); } - case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: + if (partyData[i].nickname != NULL) { - const struct TrainerMonItemCustomMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.ItemCustomMoves; - - CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID); - - SetMonData(&gPlayerParty[i + 3], MON_DATA_HELD_ITEM, &partyData[i].heldItem); - - for (j = 0; j < 4; j++) - { - SetMonData(&gPlayerParty[i + 3], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); - SetMonData(&gPlayerParty[i + 3], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); - } - break; - } - case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: - { - const struct TrainerMonCustomized *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.EverythingCustomized; - u32 otIdType = OT_ID_RANDOM_NO_SHINY; - - if (partyData[i].gender == TRAINER_MON_MALE) - j = (j & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[i].species); - else if (partyData[i].gender == TRAINER_MON_FEMALE) - j = (j & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[i].species); - if (partyData[i].nature != 0) - ModifyPersonalityForNature(&j, partyData[i].nature - 1); - if (partyData[i].isShiny) - { - otIdType = OT_ID_PRESET; - otID = HIHALF(j) ^ LOHALF(j); - } - - CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, 0, TRUE, j, otIdType, otID); - SetMonData(&gPlayerParty[i + 3], MON_DATA_HELD_ITEM, &partyData[i].heldItem); - CustomTrainerPartyAssignMoves(&gPlayerParty[i+3], &partyData[i]); - - SetMonData(&gPlayerParty[i+3], MON_DATA_IVS, &(partyData[i].iv)); - if (partyData[i].ev != NULL) - { - SetMonData(&gPlayerParty[i+3], MON_DATA_HP_EV, &(partyData[i].ev[0])); - SetMonData(&gPlayerParty[i+3], MON_DATA_ATK_EV, &(partyData[i].ev[1])); - SetMonData(&gPlayerParty[i+3], MON_DATA_DEF_EV, &(partyData[i].ev[2])); - SetMonData(&gPlayerParty[i+3], MON_DATA_SPATK_EV, &(partyData[i].ev[3])); - SetMonData(&gPlayerParty[i+3], MON_DATA_SPDEF_EV, &(partyData[i].ev[4])); - SetMonData(&gPlayerParty[i+3], MON_DATA_SPEED_EV, &(partyData[i].ev[5])); - } - if (partyData[i].ability != ABILITY_NONE) - { - const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[i].species]; - u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities); - for (j = 0; j < maxAbilities; ++j) - { - if (speciesInfo->abilities[j] == partyData[i].ability) - break; - } - if (j < maxAbilities) - SetMonData(&gPlayerParty[i+3], MON_DATA_ABILITY_NUM, &j); - } - SetMonData(&gPlayerParty[i+3], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); - if (partyData[i].ball != ITEM_NONE) - { - ball = partyData[i].ball; - SetMonData(&gPlayerParty[i+3], MON_DATA_POKEBALL, &ball); - } - if (partyData[i].nickname != NULL) - { - SetMonData(&gPlayerParty[i+3], MON_DATA_NICKNAME, partyData[i].nickname); - } - CalculateMonStats(&gPlayerParty[i+3]); - } + SetMonData(&gPlayerParty[i+3], MON_DATA_NICKNAME, partyData[i].nickname); } + CalculateMonStats(&gPlayerParty[i+3]); StringCopy(trainerName, gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerName); SetMonData(&gPlayerParty[i + 3], MON_DATA_OT_NAME, trainerName); diff --git a/src/battle_util.c b/src/battle_util.c index b8e9697e2..8eae10cb1 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -723,7 +723,7 @@ void HandleAction_ThrowBall(void) gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - gLastUsedItem = gLastThrownBall; + gLastUsedItem = gBallToDisplay; RemoveBagItem(gLastUsedItem, 1); gBattlescriptCurrInstr = BattleScript_BallThrow; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; @@ -1612,7 +1612,7 @@ static bool32 IsBelchPreventingMove(u32 battler, u32 move) u8 TrySetCantSelectMoveBattleScript(void) { u32 limitations = 0; - u8 moveId = gBattleResources->bufferB[gActiveBattler][2] & ~RET_MEGA_EVOLUTION; + u8 moveId = gBattleResources->bufferB[gActiveBattler][2] & ~(RET_MEGA_EVOLUTION | RET_ULTRA_BURST); u32 move = gBattleMons[gActiveBattler].moves[moveId]; u32 holdEffect = GetBattlerHoldEffect(gActiveBattler, TRUE); u16 *choicedMove = &gBattleStruct->choicedMove[gActiveBattler]; @@ -1884,7 +1884,7 @@ u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u16 check) else if (check & MOVE_LIMITATION_THROAT_CHOP && gDisableStructs[battlerId].throatChopTimer && gBattleMoves[gBattleMons[battlerId].moves[i]].soundMove) unusableMoves |= gBitTable[i]; // Stuff Cheeks - else if (check & MOVE_LIMITATION_STUFF_CHEEKS && gBattleMons[battlerId].moves[i] == MOVE_STUFF_CHEEKS && ItemId_GetPocket(gBattleMons[gActiveBattler].item) != POCKET_BERRIES) + else if (check & MOVE_LIMITATION_STUFF_CHEEKS && gBattleMons[battlerId].moves[i] == MOVE_STUFF_CHEEKS && ItemId_GetPocket(gBattleMons[battlerId].item) != POCKET_BERRIES) unusableMoves |= gBitTable[i]; // Gorilla Tactics else if (check & MOVE_LIMITATION_CHOICE_ITEM && GetBattlerAbility(battlerId) == ABILITY_GORILLA_TACTICS && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != gBattleMons[battlerId].moves[i]) @@ -3823,14 +3823,15 @@ u8 AtkCanceller_UnableToUseMove2(void) bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) { - u8 playerId, flankId; + u32 i, side, playerId, flankId; struct Pokemon *party; - s32 i; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) return FALSE; - if (BATTLE_TWO_VS_ONE_OPPONENT && GetBattlerSide(battler) == B_SIDE_OPPONENT) + side = GetBattlerSide(battler); + + if (BATTLE_TWO_VS_ONE_OPPONENT && side == B_SIDE_OPPONENT) { flankId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); playerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); @@ -3843,9 +3844,7 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG + if (IsValidForBattle(&party[i]) && i != partyIdBattlerOn1 && i != partyIdBattlerOn2 && i != *(gBattleStruct->monToSwitchIntoId + flankId) && i != playerId[gBattleStruct->monToSwitchIntoId]) break; @@ -3855,22 +3854,41 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { party = GetBattlerParty(battler); - - playerId = ((battler & BIT_FLANK) / 2); - for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) + if (side == B_SIDE_OPPONENT && WILD_DOUBLE_BATTLE) { - if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) - break; + flankId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + playerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + + if (partyIdBattlerOn1 == PARTY_SIZE) + partyIdBattlerOn1 = gBattlerPartyIndexes[flankId]; + if (partyIdBattlerOn2 == PARTY_SIZE) + partyIdBattlerOn2 = gBattlerPartyIndexes[playerId]; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (IsValidForBattle(&party[i]) + && i != partyIdBattlerOn1 && i != partyIdBattlerOn2 + && i != *(gBattleStruct->monToSwitchIntoId + flankId) && i != playerId[gBattleStruct->monToSwitchIntoId]) + break; + } + return (i == PARTY_SIZE); + } + else + { + playerId = ((battler & BIT_FLANK) / 2); + for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) + { + if (IsValidForBattle(&party[i])) + break; + } + return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE); } - return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE); } else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (gBattleTypeFlags & BATTLE_TYPE_TOWER_LINK_MULTI) { - if (GetBattlerSide(battler) == B_SIDE_PLAYER) + if (side == B_SIDE_PLAYER) { party = gPlayerParty; flankId = GetBattlerMultiplayerId(battler); @@ -3894,14 +3912,12 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) { - if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) + if (IsValidForBattle(&party[i])) break; } return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE); } - else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && GetBattlerSide(battler) == B_SIDE_OPPONENT) + else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && side == B_SIDE_OPPONENT) { party = gEnemyParty; @@ -3912,16 +3928,14 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = playerId; i < playerId + MULTI_PARTY_SIZE; i++) { - if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) + if (IsValidForBattle(&party[i])) break; } return (i == playerId + 3); } else { - if (GetBattlerSide(battler) == B_SIDE_OPPONENT) + if (side == B_SIDE_OPPONENT) { flankId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); playerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); @@ -3941,9 +3955,7 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG + if (IsValidForBattle(&party[i]) && i != partyIdBattlerOn1 && i != partyIdBattlerOn2 && i != *(gBattleStruct->monToSwitchIntoId + flankId) && i != playerId[gBattleStruct->monToSwitchIntoId]) break; @@ -4867,7 +4879,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && gBattleResults.catchAttempts[gLastUsedBall - ITEM_ULTRA_BALL] >= 1 && !gHasFetchedBall) { - gBattleScripting.battler = battler; + gBattleScripting.battler = gActiveBattler = battler; BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedBall); MarkBattlerForControllerExec(battler); gHasFetchedBall = TRUE; @@ -7954,7 +7966,7 @@ u8 IsMonDisobedient(void) if (IsBattlerModernFatefulEncounter(gBattlerAttacker)) // only false if illegal Mew or Deoxys { - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gBattlerAttacker) == 2) + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gBattlerAttacker) == B_POSITION_PLAYER_RIGHT) return 0; if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) return 0; @@ -8694,6 +8706,85 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe u16 atkAbility = GetBattlerAbility(battlerAtk); u16 defAbility = GetBattlerAbility(battlerDef); + // move effect + switch (gBattleMoves[move].effect) + { + case EFFECT_FACADE: + if (gBattleMons[battlerAtk].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_PARALYSIS | STATUS1_FROSTBITE)) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + break; + case EFFECT_BRINE: + if (gBattleMons[battlerDef].hp <= (gBattleMons[battlerDef].maxHP / 2)) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + break; + case EFFECT_BARB_BARRAGE: + case EFFECT_VENOSHOCK: + if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + break; + case EFFECT_RETALIATE: + if (gSideTimers[atkSide].retaliateTimer == 1) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + break; + case EFFECT_SOLAR_BEAM: + if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN | B_WEATHER_SNOW))) + modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + break; + case EFFECT_STOMPING_TANTRUM: + if (gBattleStruct->lastMoveFailed & gBitTable[battlerAtk]) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + break; + case EFFECT_BULLDOZE: + case EFFECT_MAGNITUDE: + case EFFECT_EARTHQUAKE: + if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) + modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + break; + case EFFECT_KNOCK_OFF: + #if B_KNOCK_OFF_DMG >= GEN_6 + if (gBattleMons[battlerDef].item != ITEM_NONE + && CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerDef].item)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + #endif + break; + } + +#if B_TERRAIN_TYPE_BOOST >= GEN_8 + #define TERRAIN_TYPE_BOOST UQ_4_12(1.3) +#else + #define TERRAIN_TYPE_BOOST UQ_4_12(1.5) +#endif + + // various effects + if (gProtectStructs[battlerAtk].helpingHand) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + if (gSpecialStatuses[battlerAtk].gemBoost) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.0) + sPercentToModifier[gSpecialStatuses[battlerAtk].gemParam]); + if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP && moveType == TYPE_ELECTRIC) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + if (gStatuses3[battlerAtk] & STATUS3_ME_FIRST) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_GRASSY_TERRAIN) && moveType == TYPE_GRASS) + modifier = uq4_12_multiply(modifier, TERRAIN_TYPE_BOOST); + if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN) && moveType == TYPE_DRAGON) + modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN) && moveType == TYPE_ELECTRIC) + modifier = uq4_12_multiply(modifier, TERRAIN_TYPE_BOOST); + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN) && moveType == TYPE_PSYCHIC) + modifier = uq4_12_multiply(modifier, TERRAIN_TYPE_BOOST); + #if B_SPORT_TURNS >= GEN_6 + if ((moveType == TYPE_ELECTRIC && gFieldStatuses & STATUS_FIELD_MUDSPORT) + || (moveType == TYPE_FIRE && gFieldStatuses & STATUS_FIELD_WATERSPORT)) + #else + if ((moveType == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_MUD_SPORT, 0)) + || (moveType == TYPE_FIRE && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_WATER_SPORT, 0))) + #endif + #if B_SPORT_DMG_REDUCTION >= GEN_5 + modifier = uq4_12_multiply(modifier, UQ_4_12(0.23)); + #else + modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + #endif + // attacker's abilities switch (atkAbility) { @@ -8890,16 +8981,6 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe if (moveType == TYPE_FIRE) modifier = uq4_12_multiply(modifier, UQ_4_12(1.25)); break; - case ABILITY_FLUFFY: - if (IsMoveMakingContact(move, battlerAtk)) - { - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); - if (updateFlags) - RecordAbilityBattle(battlerDef, defAbility); - } - if (moveType == TYPE_FIRE) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); - break; case ABILITY_PROTOSYNTHESIS: { u8 defHighestStat = GetHighestStatId(battlerDef); @@ -8993,86 +9074,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe modifier = uq4_12_multiply(modifier, UQ_4_12(1.1)); break; } - - // move effect - switch (gBattleMoves[move].effect) - { - case EFFECT_FACADE: - if (gBattleMons[battlerAtk].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_PARALYSIS | STATUS1_FROSTBITE)) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); - break; - case EFFECT_BRINE: - if (gBattleMons[battlerDef].hp <= (gBattleMons[battlerDef].maxHP / 2)) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); - break; - case EFFECT_BARB_BARRAGE: - case EFFECT_VENOSHOCK: - if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); - break; - case EFFECT_RETALIATE: - if (gSideTimers[atkSide].retaliateTimer == 1) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); - break; - case EFFECT_SOLAR_BEAM: - if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN | B_WEATHER_SNOW))) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); - break; - case EFFECT_STOMPING_TANTRUM: - if (gBattleStruct->lastMoveFailed & gBitTable[battlerAtk]) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); - break; - case EFFECT_BULLDOZE: - case EFFECT_MAGNITUDE: - case EFFECT_EARTHQUAKE: - if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); - break; - case EFFECT_KNOCK_OFF: - #if B_KNOCK_OFF_DMG >= GEN_6 - if (gBattleMons[battlerDef].item != ITEM_NONE - && CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerDef].item)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - #endif - break; - } - -#if B_TERRAIN_TYPE_BOOST >= GEN_8 - #define TERRAIN_TYPE_BOOST UQ_4_12(1.3) -#else - #define TERRAIN_TYPE_BOOST UQ_4_12(1.5) -#endif - - // various effects - if (gProtectStructs[battlerAtk].helpingHand) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - if (gSpecialStatuses[battlerAtk].gemBoost) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.0) + sPercentToModifier[gSpecialStatuses[battlerAtk].gemParam]); - if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP && moveType == TYPE_ELECTRIC) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); - if (gStatuses3[battlerAtk] & STATUS3_ME_FIRST) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && moveType == TYPE_GRASS && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE)) - modifier = uq4_12_multiply(modifier, TERRAIN_TYPE_BOOST); - if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN && moveType == TYPE_DRAGON && IsBattlerGrounded(battlerDef) && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && moveType == TYPE_ELECTRIC && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE)) - modifier = uq4_12_multiply(modifier, TERRAIN_TYPE_BOOST); - if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN && moveType == TYPE_PSYCHIC && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE)) - modifier = uq4_12_multiply(modifier, TERRAIN_TYPE_BOOST); - #if B_SPORT_TURNS >= GEN_6 - if ((moveType == TYPE_ELECTRIC && gFieldStatuses & STATUS_FIELD_MUDSPORT) - || (moveType == TYPE_FIRE && gFieldStatuses & STATUS_FIELD_WATERSPORT)) - #else - if ((moveType == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_MUD_SPORT, 0)) - || (moveType == TYPE_FIRE && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_WATER_SPORT, 0))) - #endif - #if B_SPORT_DMG_REDUCTION >= GEN_5 - modifier = uq4_12_multiply(modifier, UQ_4_12(0.23)); - #else - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); - #endif - return ApplyModifier(modifier, basePower); + return uq4_12_multiply_by_int_half_down(modifier, basePower); } #undef TERRAIN_TYPE_BOOST @@ -9136,39 +9138,39 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b case ABILITY_HUGE_POWER: case ABILITY_PURE_POWER: if (IS_MOVE_PHYSICAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; case ABILITY_SLOW_START: if (gDisableStructs[battlerAtk].slowStartTimer != 0) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); break; case ABILITY_SOLAR_POWER: if (IS_MOVE_SPECIAL(move) && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case ABILITY_DEFEATIST: if (gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 2)) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); break; case ABILITY_FLASH_FIRE: if (moveType == TYPE_FIRE && gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_FLASH_FIRE) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case ABILITY_SWARM: if (moveType == TYPE_BUG && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case ABILITY_TORRENT: if (moveType == TYPE_WATER && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case ABILITY_BLAZE: if (moveType == TYPE_FIRE && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case ABILITY_OVERGROW: if (moveType == TYPE_GRASS && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; #if B_PLUS_MINUS_INTERACTION >= GEN_5 case ABILITY_PLUS: @@ -9177,34 +9179,34 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b { u32 partnerAbility = GetBattlerAbility(BATTLE_PARTNER(battlerAtk)); if (partnerAbility == ABILITY_PLUS || partnerAbility == ABILITY_MINUS) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); } break; #else case ABILITY_PLUS: if (IS_MOVE_SPECIAL(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_MINUS) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case ABILITY_MINUS: if (IS_MOVE_SPECIAL(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_PLUS) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; #endif case ABILITY_FLOWER_GIFT: if (gBattleMons[battlerAtk].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN) && IS_MOVE_PHYSICAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case ABILITY_HUSTLE: if (IS_MOVE_PHYSICAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case ABILITY_STAKEOUT: if (gDisableStructs[battlerDef].isFirstTurn == 2) // just switched in - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; case ABILITY_GUTS: if (gBattleMons[battlerAtk].status1 & STATUS1_ANY && IS_MOVE_PHYSICAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; } @@ -9214,15 +9216,11 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b case ABILITY_THICK_FAT: if (moveType == TYPE_FIRE || moveType == TYPE_ICE) { - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); if (updateFlags) RecordAbilityBattle(battlerDef, ABILITY_THICK_FAT); } break; - case ABILITY_ICE_SCALES: - if (IS_MOVE_SPECIAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); - break; } // ally's abilities @@ -9232,7 +9230,7 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b { case ABILITY_FLOWER_GIFT: if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerAtk), B_WEATHER_SUN) && IS_MOVE_PHYSICAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; } } @@ -9242,34 +9240,34 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b { case HOLD_EFFECT_THICK_CLUB: if ((atkBaseSpeciesId == SPECIES_CUBONE || atkBaseSpeciesId == SPECIES_MAROWAK) && IS_MOVE_PHYSICAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; case HOLD_EFFECT_DEEP_SEA_TOOTH: if (gBattleMons[battlerAtk].species == SPECIES_CLAMPERL && IS_MOVE_SPECIAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; case HOLD_EFFECT_LIGHT_BALL: if (atkBaseSpeciesId == SPECIES_PIKACHU) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; case HOLD_EFFECT_CHOICE_BAND: if (IS_MOVE_PHYSICAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case HOLD_EFFECT_CHOICE_SPECS: if (IS_MOVE_SPECIAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; } // The offensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 1st badge and 7th badges. // Having the 1st badge boosts physical attack while having the 7th badge boosts special attack. if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, battlerAtk) && IS_MOVE_PHYSICAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.1)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.1)); if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerAtk) && IS_MOVE_SPECIAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.1)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.1)); - return ApplyModifier(modifier, atkStat); + return uq4_12_multiply_by_int_half_down(modifier, atkStat); } static bool32 CanEvolve(u32 species) @@ -9343,7 +9341,7 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, case ABILITY_MARVEL_SCALE: if (gBattleMons[battlerDef].status1 & STATUS1_ANY && usesDefStat) { - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); if (updateFlags) RecordAbilityBattle(battlerDef, ABILITY_MARVEL_SCALE); } @@ -9351,7 +9349,7 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, case ABILITY_FUR_COAT: if (usesDefStat) { - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); if (updateFlags) RecordAbilityBattle(battlerDef, ABILITY_FUR_COAT); } @@ -9359,22 +9357,18 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, case ABILITY_GRASS_PELT: if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && usesDefStat) { - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); if (updateFlags) RecordAbilityBattle(battlerDef, ABILITY_GRASS_PELT); } break; case ABILITY_FLOWER_GIFT: if (gBattleMons[battlerDef].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && !usesDefStat) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - break; - case ABILITY_PUNK_ROCK: - if (gBattleMoves[move].soundMove) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case ABILITY_PURIFYING_SALT: if (gBattleMoves[move].type == TYPE_GHOST) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; } @@ -9385,7 +9379,7 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, { case ABILITY_FLOWER_GIFT: if (gBattleMons[BATTLE_PARTNER(battlerDef)].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerDef), B_WEATHER_SUN) && !usesDefStat) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; } } @@ -9395,240 +9389,374 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, { case HOLD_EFFECT_DEEP_SEA_SCALE: if (gBattleMons[battlerDef].species == SPECIES_CLAMPERL && !usesDefStat) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; case HOLD_EFFECT_METAL_POWDER: if (gBattleMons[battlerDef].species == SPECIES_DITTO && usesDefStat && !(gBattleMons[battlerDef].status2 & STATUS2_TRANSFORMED)) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; case HOLD_EFFECT_EVIOLITE: if (CanEvolve(gBattleMons[battlerDef].species)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case HOLD_EFFECT_ASSAULT_VEST: if (!usesDefStat) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; #if B_SOUL_DEW_BOOST <= GEN_6 case HOLD_EFFECT_SOUL_DEW: if ((gBattleMons[battlerDef].species == SPECIES_LATIAS || gBattleMons[battlerDef].species == SPECIES_LATIOS) && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && !usesDefStat) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; #endif } // sandstorm sp.def boost for rock types if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && gBattleWeather & B_WEATHER_SANDSTORM && WEATHER_HAS_EFFECT && !usesDefStat) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); // snow def boost for ice types if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && gBattleWeather & B_WEATHER_SNOW && WEATHER_HAS_EFFECT && usesDefStat) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); // The defensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 5th badge and 7th badges. // Having the 5th badge boosts physical defense while having the 7th badge boosts special defense. if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerDef) && IS_MOVE_PHYSICAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.1)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.1)); if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerDef) && IS_MOVE_SPECIAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.1)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.1)); - return ApplyModifier(modifier, defStat); + return uq4_12_multiply_by_int_half_down(modifier, defStat); } -static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, uq4_12_t typeEffectivenessModifier, bool32 isCrit, bool32 updateFlags) +// base damage formula before adding any modifiers +static inline s32 CalculateBaseDamage(u32 power, u32 userFinalAttack, u32 level, u32 targetFinalDefense) { - u32 percentBoost; - u32 abilityAtk = GetBattlerAbility(battlerAtk); - u32 abilityDef = GetBattlerAbility(battlerDef); - u32 defSide = GET_BATTLER_SIDE(battlerDef); - uq4_12_t finalModifier = UQ_4_12(1.0); - u16 itemDef = gBattleMons[battlerDef].item; - u16 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); - u16 holdEffectDef = GetBattlerHoldEffect(battlerDef, TRUE); + return power * userFinalAttack * (2 * level / 5 + 2) / targetFinalDefense / 50 + 2; +} - // check multiple targets in double battle +#if B_MULTIPLE_TARGETS_DMG >= GEN_4 + #define V_MULTIPLE_TARGETS_DMG UQ_4_12(0.75) +#else + #define V_MULTIPLE_TARGETS_DMG UQ_4_12(0.5) +#endif + +#if B_CRIT_MULTIPLIER >= GEN_6 + #define V_CRIT_MULTIPLIER UQ_4_12(1.5) +#else + #define V_CRIT_MULTIPLIER UQ_4_12(2.0) +#endif + +#if B_BURN_FACADE_DMG >= GEN_6 + #define FACADE_PREVENTS_BURN_MALUS(move) (gBattleMoves[move].effect == EFFECT_FACADE) +#else + #define FACADE_PREVENTS_BURN_MALUS(move) (FALSE) +#endif + +#if B_PARENTAL_BOND_DMG < GEN_7 + #define V_PARENTAL_BOND_DMG UQ_4_12(0.5) +#else + #define V_PARENTAL_BOND_DMG UQ_4_12(0.25) +#endif + +static inline uq4_12_t GetTargetDamageModifier(u32 move, u32 battlerAtk, u32 battlerDef) +{ if (GetMoveTargetCount(move, battlerAtk, battlerDef) >= 2) - #if B_MULTIPLE_TARGETS_DMG >= GEN_4 - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.75)); - #else - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.5)); - #endif + return V_MULTIPLE_TARGETS_DMG; + return UQ_4_12(1.0); +} - // take type effectiveness - finalModifier = uq4_12_multiply(finalModifier, typeEffectivenessModifier); +static inline uq4_12_t GetParentalBondModifier(u32 battlerAtk) +{ + if (gSpecialStatuses[battlerAtk].parentalBondState != PARENTAL_BOND_2ND_HIT) + return UQ_4_12(1.0); + return V_PARENTAL_BOND_DMG; +} - // check crit - if (isCrit) - #if B_CRIT_MULTIPLIER >= GEN_6 - dmg = ApplyModifier(UQ_4_12(1.5), dmg); - #else - dmg = ApplyModifier(UQ_4_12(2.0), dmg); - #endif +static inline uq4_12_t GetSameTypeAttackBonusModifier(u32 battlerAtk, u32 moveType, u32 move, u32 abilityAtk) +{ + if (!IS_BATTLER_OF_TYPE(battlerAtk, moveType) || move == MOVE_STRUGGLE || move == MOVE_NONE) + return UQ_4_12(1.0); + return (abilityAtk == ABILITY_ADAPTABILITY) ? UQ_4_12(2.0) : UQ_4_12(1.5); +} - // check burn - if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && IS_MOVE_PHYSICAL(move) - #if B_BURN_FACADE_DMG >= GEN_6 - && gBattleMoves[move].effect != EFFECT_FACADE - #endif +// Utility Umbrella holders take normal damage from what would be rain- and sun-weakened attacks. +static uq4_12_t GetWeatherDamageModifier(u32 battlerAtk, u32 move, u32 moveType, u32 holdEffectAtk, u32 holdEffectDef) +{ + if (!WEATHER_HAS_EFFECT) + return UQ_4_12(1.0); + if (gBattleMoves[move].effect == EFFECT_HYDRO_STEAM && (gBattleWeather & B_WEATHER_SUN) && holdEffectAtk != HOLD_EFFECT_UTILITY_UMBRELLA) + return UQ_4_12(1.5); + if (holdEffectDef == HOLD_EFFECT_UTILITY_UMBRELLA) + return UQ_4_12(1.0); + + if (gBattleWeather & B_WEATHER_RAIN) + { + if (moveType != TYPE_FIRE && moveType != TYPE_WATER) + return UQ_4_12(1.0); + return (moveType == TYPE_FIRE) ? UQ_4_12(0.5) : UQ_4_12(1.5); + } + if (gBattleWeather & B_WEATHER_SUN) + { + if (moveType != TYPE_FIRE && moveType != TYPE_WATER) + return UQ_4_12(1.0); + return (moveType == TYPE_WATER) ? UQ_4_12(0.5) : UQ_4_12(1.5); + } + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetBurnOrFrostBiteModifier(u32 battlerAtk, u32 move, u32 abilityAtk) +{ + if (gBattleMons[battlerAtk].status1 & STATUS1_BURN + && IS_MOVE_PHYSICAL(move) + && !FACADE_PREVENTS_BURN_MALUS(move) && abilityAtk != ABILITY_GUTS) - dmg = ApplyModifier(UQ_4_12(0.5), dmg); - - // check frostbite - if (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE && IS_MOVE_SPECIAL(move) - #if B_BURN_FACADE_DMG >= GEN_6 - && gBattleMoves[move].effect != EFFECT_FACADE - #endif + return UQ_4_12(0.5); + if (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE + && IS_MOVE_SPECIAL(move) + && !FACADE_PREVENTS_BURN_MALUS(move) && abilityAtk != ABILITY_GUTS) - dmg = ApplyModifier(UQ_4_12(0.5), dmg); + return UQ_4_12(0.5); + return UQ_4_12(1.0); +} - // check weather - dmg = ApplyWeatherDamageMultiplier(battlerAtk, move, moveType, dmg, holdEffectAtk, holdEffectDef); +static inline uq4_12_t GetCriticalModifier(bool32 isCrit) +{ + return isCrit ? V_CRIT_MULTIPLIER : UQ_4_12(1.0); +} - // check stab - if (IS_BATTLER_OF_TYPE(battlerAtk, moveType) && move != MOVE_STRUGGLE && move != MOVE_NONE) - { - if (abilityAtk == ABILITY_ADAPTABILITY) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(2.0)); - else - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(1.5)); - } - - // Collision Course, Electro Drift - if (gBattleMoves[move].effect == EFFECT_COLLISION_COURSE && typeEffectivenessModifier >= UQ_4_12(2.0)) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(1.3333)); - - // reflect, light screen, aurora veil - if (((gSideStatuses[defSide] & SIDE_STATUS_REFLECT && IS_MOVE_PHYSICAL(move)) - || (gSideStatuses[defSide] & SIDE_STATUS_LIGHTSCREEN && IS_MOVE_SPECIAL(move)) - || (gSideStatuses[defSide] & SIDE_STATUS_AURORA_VEIL)) - && abilityAtk != ABILITY_INFILTRATOR - && !(isCrit) - && !gProtectStructs[battlerAtk].confusionSelfDmg) - { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.66)); - else - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.5)); - } - - // Parental Bond Second Strike - if (gSpecialStatuses[battlerAtk].parentalBondState == PARENTAL_BOND_2ND_HIT) - { - if (B_PARENTAL_BOND_DMG < GEN_7) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.5)); - else - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.25)); - } - - // Z-Moves and Max Moves bypass Protect and do 25% of their original damage +static inline uq4_12_t GetZMoveAgainstProtectionModifier(u32 battlerDef) +{ if (gBattleStruct->zmove.active && IS_BATTLER_PROTECTED(battlerDef)) - { - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.25)); - } + return UQ_4_12(0.25); + return UQ_4_12(1.0); +} - // attacker's abilities +static inline uq4_12_t GetMinimizeModifier(u32 move, u32 battlerDef) +{ + if (gBattleMoves[move].minimizeDoubleDamage && gStatuses3[battlerDef] & STATUS3_MINIMIZED) + return UQ_4_12(2.0); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetUndergroundModifier(u32 move, u32 battlerDef) +{ + if (gBattleMoves[move].damagesUnderground && gStatuses3[battlerDef] & STATUS3_UNDERGROUND) + return UQ_4_12(2.0); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetDiveModifier(u32 move, u32 battlerDef) +{ + if (gBattleMoves[move].damagesUnderwater && gStatuses3[battlerDef] & STATUS3_UNDERWATER) + return UQ_4_12(2.0); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetAirborneModifier(u32 move, u32 battlerDef) +{ + if (gBattleMoves[move].damagesAirborneDoubleDamage && gStatuses3[battlerDef] & STATUS3_ON_AIR) + return UQ_4_12(2.0); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetScreensModifier(u32 move, u32 battlerAtk, u32 battlerDef, bool32 isCrit) +{ + u32 sideStatus = gSideStatuses[GET_BATTLER_SIDE(battlerDef)]; + bool32 lightScreen = (sideStatus & SIDE_STATUS_LIGHTSCREEN) && IS_MOVE_SPECIAL(move); + bool32 reflect = (sideStatus & SIDE_STATUS_REFLECT) && IS_MOVE_PHYSICAL(move); + bool32 auroraVeil = sideStatus & SIDE_STATUS_AURORA_VEIL; + u32 abilityAtk = GetBattlerAbility(battlerAtk); + + if (isCrit || abilityAtk == ABILITY_INFILTRATOR || gProtectStructs[battlerAtk].confusionSelfDmg) + return UQ_4_12(1.0); + if (reflect || lightScreen || auroraVeil) + return (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? UQ_4_12(0.667) : UQ_4_12(0.5); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetCollisionCourseElectroDriftModifier(u32 move, uq4_12_t typeEffectivenessModifier) +{ + if (gBattleMoves[move].effect == EFFECT_COLLISION_COURSE && typeEffectivenessModifier >= UQ_4_12(2.0)) + return UQ_4_12(1.3333); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetAttackerAbilitiesModifier(u32 battlerAtk, uq4_12_t typeEffectivenessModifier, bool32 isCrit) +{ + u32 abilityAtk = GetBattlerAbility(battlerAtk); switch (abilityAtk) { - case ABILITY_TINTED_LENS: - if (typeEffectivenessModifier <= UQ_4_12(0.5)) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(2.0)); + case ABILITY_NEUROFORCE: + if (typeEffectivenessModifier >= UQ_4_12(2.0)) + return UQ_4_12(1.25); break; case ABILITY_SNIPER: if (isCrit) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(1.5)); + return UQ_4_12(1.5); break; - case ABILITY_NEUROFORCE: - if (typeEffectivenessModifier >= UQ_4_12(2.0)) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(1.25)); + case ABILITY_TINTED_LENS: + if (typeEffectivenessModifier <= UQ_4_12(0.5)) + return UQ_4_12(2.0); break; } + return UQ_4_12(1.0); +} - // target's abilities +static inline uq4_12_t GetDefenderAbilitiesModifier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, uq4_12_t typeEffectivenessModifier) +{ + u32 abilityDef = GetBattlerAbility(battlerDef); switch (abilityDef) { case ABILITY_MULTISCALE: case ABILITY_SHADOW_SHIELD: if (BATTLER_MAX_HP(battlerDef)) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.5)); + return UQ_4_12(0.5); break; case ABILITY_FILTER: case ABILITY_SOLID_ROCK: case ABILITY_PRISM_ARMOR: if (typeEffectivenessModifier >= UQ_4_12(2.0)) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.75)); + return UQ_4_12(0.75); + break; + case ABILITY_FLUFFY: + if (!IsMoveMakingContact(move, battlerAtk) && moveType == TYPE_FIRE) + return UQ_4_12(2.0); + if (IsMoveMakingContact(move, battlerAtk) && moveType != TYPE_FIRE) + return UQ_4_12(0.5); + break; + case ABILITY_PUNK_ROCK: + if (gBattleMoves[move].soundMove) + return UQ_4_12(0.5); + break; + case ABILITY_ICE_SCALES: + if (IS_MOVE_SPECIAL(move)) + return UQ_4_12(0.5); break; } + return UQ_4_12(1.0); +} - // target's ally's abilities - if (IsBattlerAlive(BATTLE_PARTNER(battlerDef))) +static inline uq4_12_t GetDefenderPartnerAbilitiesModifier(u32 battlerPartnerDef) +{ + if (!IsBattlerAlive(battlerPartnerDef)) + return UQ_4_12(1.0); + + switch (GetBattlerAbility(battlerPartnerDef)) { - switch (GetBattlerAbility(BATTLE_PARTNER(battlerDef))) - { - case ABILITY_FRIEND_GUARD: - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.75)); - break; - } + case ABILITY_FRIEND_GUARD: + return UQ_4_12(0.75); + break; } + return UQ_4_12(1.0); +} - // attacker's hold effect +static inline uq4_12_t GetAttackerItemsModifier(u32 battlerAtk, uq4_12_t typeEffectivenessModifier) +{ + u32 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); + u32 percentBoost; switch (holdEffectAtk) { case HOLD_EFFECT_METRONOME: percentBoost = min((gBattleStruct->sameMoveTurns[battlerAtk] * GetBattlerHoldEffectParam(battlerAtk)), 100); - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(1.0) + sPercentToModifier[percentBoost]); + return uq4_12_add(sPercentToModifier[percentBoost], UQ_4_12(1.0)); break; case HOLD_EFFECT_EXPERT_BELT: if (typeEffectivenessModifier >= UQ_4_12(2.0)) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(1.2)); + return UQ_4_12(1.2); break; case HOLD_EFFECT_LIFE_ORB: - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(1.3)); + return UQ_4_12(1.3); break; } + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetDefenderItemsModifier(u32 moveType, u32 battlerDef, uq4_12_t typeEffectivenessModifier, bool32 updateFlags) +{ + u32 holdEffectDef = GetBattlerHoldEffect(battlerDef, TRUE); + u32 holdEffectDefParam = GetBattlerHoldEffectParam(battlerDef); + u32 itemDef = gBattleMons[battlerDef].item; + u32 abilityDef = GetBattlerAbility(battlerDef); - // target's hold effect switch (holdEffectDef) { - // berries reducing dmg case HOLD_EFFECT_RESIST_BERRY: - if (moveType == GetBattlerHoldEffectParam(battlerDef) - && (moveType == TYPE_NORMAL || typeEffectivenessModifier >= UQ_4_12(2.0)) - && !UnnerveOn(battlerDef, itemDef)) + if (UnnerveOn(battlerDef, itemDef)) + return UQ_4_12(1.0); + if (moveType == holdEffectDefParam && (moveType == TYPE_NORMAL || typeEffectivenessModifier >= UQ_4_12(2.0))) { - if (abilityDef == ABILITY_RIPEN) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.25)); - else - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(0.5)); if (updateFlags) gSpecialStatuses[battlerDef].berryReduced = TRUE; + return (abilityDef == ABILITY_RIPEN) ? UQ_4_12(0.25) : UQ_4_12(0.5); } break; } - - if (gBattleMoves[move].minimizeDoubleDamage && gStatuses3[battlerDef] & STATUS3_MINIMIZED) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(2.0)); - if (gBattleMoves[move].damagesUnderground && gStatuses3[battlerDef] & STATUS3_UNDERGROUND) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(2.0)); - if (gBattleMoves[move].damagesUnderwater && gStatuses3[battlerDef] & STATUS3_UNDERWATER) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(2.0)); - if (gBattleMoves[move].damagesAirborneDoubleDamage && gStatuses3[battlerDef] & STATUS3_ON_AIR) - finalModifier = uq4_12_multiply(finalModifier, UQ_4_12(2.0)); - - dmg = ApplyModifier(finalModifier, dmg); - if (dmg == 0) - dmg = 1; - - return dmg; + return UQ_4_12(1.0); } -static s32 DoMoveDamageCalc(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, s32 fixedBasePower, +#define DAMAGE_MULTIPLY_MODIFIER(modifier) do { \ + finalModifier = uq4_12_multiply_half_down(modifier, finalModifier); \ +} while (0) + +// Calculates the "other" modifier which accounts for held items, abilities, +// or very specific interactions of moves that are not handled in the basic +// damage calculation. It is implemented as described by bulbapedia: +// https://bulbapedia.bulbagarden.net/wiki/Damage#Generation_V_onward +// Please Note: Fixed Point Multiplication is not associative. +// The order of operations is relevant. +static uq4_12_t GetOtherModifiers(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, bool32 isCrit, uq4_12_t typeEffectivenessModifier, bool32 updateFlags) +{ + u32 abilityAtk = GetBattlerAbility(battlerAtk); + uq4_12_t finalModifier = UQ_4_12(1.0); + u32 battlerDefPartner = BATTLE_PARTNER(battlerDef); + u32 unmodifiedAttackerSpeed = gBattleMons[battlerAtk].speed; + u32 unmodifiedDefenderSpeed = gBattleMons[battlerDef].speed; + //TODO: Behemoth Blade, Behemoth Bash, Dynamax Cannon (Dynamax) + DAMAGE_MULTIPLY_MODIFIER(GetMinimizeModifier(move, battlerDef)); + DAMAGE_MULTIPLY_MODIFIER(GetUndergroundModifier(move, battlerDef)); + DAMAGE_MULTIPLY_MODIFIER(GetDiveModifier(move, battlerDef)); + DAMAGE_MULTIPLY_MODIFIER(GetAirborneModifier(move, battlerDef)); + DAMAGE_MULTIPLY_MODIFIER(GetScreensModifier(move, battlerAtk, battlerDef, isCrit)); + DAMAGE_MULTIPLY_MODIFIER(GetCollisionCourseElectroDriftModifier(move, typeEffectivenessModifier)); + + if (unmodifiedAttackerSpeed >= unmodifiedDefenderSpeed) + { + DAMAGE_MULTIPLY_MODIFIER(GetAttackerAbilitiesModifier(battlerAtk, typeEffectivenessModifier, isCrit)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(move, moveType, battlerAtk, battlerDef, typeEffectivenessModifier)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderPartnerAbilitiesModifier(battlerDefPartner)); + DAMAGE_MULTIPLY_MODIFIER(GetAttackerItemsModifier(battlerAtk, typeEffectivenessModifier)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(moveType, battlerDef, typeEffectivenessModifier, updateFlags)); + } + else + { + DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(move, moveType, battlerAtk, battlerDef, typeEffectivenessModifier)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderPartnerAbilitiesModifier(battlerDefPartner)); + DAMAGE_MULTIPLY_MODIFIER(GetAttackerAbilitiesModifier(battlerAtk, typeEffectivenessModifier, isCrit)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(moveType, battlerDef, typeEffectivenessModifier, updateFlags)); + DAMAGE_MULTIPLY_MODIFIER(GetAttackerItemsModifier(battlerAtk, typeEffectivenessModifier)); + } + return finalModifier; +} + +#undef DAMAGE_ACCUMULATE_MULTIPLIER + +#define DAMAGE_APPLY_MODIFIER(modifier) do { \ + dmg = uq4_12_multiply_by_int_half_down(modifier, dmg); \ +} while (0) + +static s32 DoMoveDamageCalc(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags, uq4_12_t typeEffectivenessModifier) { s32 dmg; + u32 userFinalAttack; + u32 targetFinalDefense; + u32 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); + u32 holdEffectDef = GetBattlerHoldEffect(battlerDef, TRUE); + u32 abilityAtk = GetBattlerAbility(battlerAtk); - // Don't calculate damage if the move has no effect on target. - if (typeEffectivenessModifier == UQ_4_12(0)) + if (typeEffectivenessModifier == UQ_4_12(0.0)) return 0; if (fixedBasePower) @@ -9636,29 +9764,34 @@ static s32 DoMoveDamageCalc(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, else gBattleMovePower = CalcMoveBasePowerAfterModifiers(move, battlerAtk, battlerDef, moveType, updateFlags); - // long dmg basic formula - dmg = ((gBattleMons[battlerAtk].level * 2) / 5) + 2; - dmg *= gBattleMovePower; - dmg *= CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags); - dmg /= CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags); - dmg = (dmg / 50) + 2; + userFinalAttack = CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags); + targetFinalDefense = CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags); - // Calculate final modifiers. - dmg = CalcFinalDmg(dmg, move, battlerAtk, battlerDef, moveType, typeEffectivenessModifier, isCrit, updateFlags); - - // Add a random factor. + dmg = CalculateBaseDamage(gBattleMovePower, userFinalAttack, gBattleMons[battlerAtk].level, targetFinalDefense); + DAMAGE_APPLY_MODIFIER(GetTargetDamageModifier(move, battlerAtk, battlerDef)); + DAMAGE_APPLY_MODIFIER(GetParentalBondModifier(battlerAtk)); + DAMAGE_APPLY_MODIFIER(GetWeatherDamageModifier(battlerAtk, move, moveType, holdEffectAtk, holdEffectDef)); + DAMAGE_APPLY_MODIFIER(GetCriticalModifier(isCrit)); + // TODO: Glaive Rush (Gen IX effect) if (randomFactor) { dmg *= 100 - RandomUniform(RNG_DAMAGE_MODIFIER, 0, 15); dmg /= 100; } + DAMAGE_APPLY_MODIFIER(GetSameTypeAttackBonusModifier(battlerAtk, moveType, move, abilityAtk)); + DAMAGE_APPLY_MODIFIER(typeEffectivenessModifier); + DAMAGE_APPLY_MODIFIER(GetBurnOrFrostBiteModifier(battlerAtk, move, abilityAtk)); + DAMAGE_APPLY_MODIFIER(GetZMoveAgainstProtectionModifier(battlerDef)); + DAMAGE_APPLY_MODIFIER(GetOtherModifiers(move, moveType, battlerAtk, battlerDef, isCrit, typeEffectivenessModifier, updateFlags)); + if (dmg == 0) dmg = 1; - return dmg; } +#undef DAMAGE_APPLY_MODIFIER + s32 CalculateMoveDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags) { return DoMoveDamageCalc(move, battlerAtk, battlerDef, moveType, fixedBasePower, isCrit, randomFactor, @@ -9959,6 +10092,7 @@ bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId) { case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM: case FORM_CHANGE_BATTLE_PRIMAL_REVERSION: + case FORM_CHANGE_BATTLE_ULTRA_BURST: case FORM_CHANGE_ITEM_HOLD: if (formChanges[i].param1 == heldItemId) return TRUE; @@ -10008,14 +10142,14 @@ bool32 CanMegaEvolve(u8 battlerId) species = GetMonData(mon, MON_DATA_SPECIES); itemId = GetMonData(mon, MON_DATA_HELD_ITEM); + if (itemId == ITEM_ENIGMA_BERRY_E_READER) + holdEffect = gEnigmaBerries[battlerId].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(itemId); + // Check if there is an entry in the evolution table for regular Mega Evolution. if (GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM) != SPECIES_NONE) { - if (itemId == ITEM_ENIGMA_BERRY_E_READER) - holdEffect = gEnigmaBerries[battlerId].holdEffect; - else - holdEffect = ItemId_GetHoldEffect(itemId); - // Can Mega Evolve via Mega Stone. if (holdEffect == HOLD_EFFECT_MEGA_STONE) return TRUE; @@ -10023,12 +10157,71 @@ bool32 CanMegaEvolve(u8 battlerId) // Check if there is an entry in the evolution table for Wish Mega Evolution. if (GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE) - return TRUE; + { + // Can't Wish Mega Evolve if holding a Z Crystal. + if (holdEffect != HOLD_EFFECT_Z_CRYSTAL) + return TRUE; + } // No checks passed, the mon CAN'T mega evolve. return FALSE; } +bool32 CanUltraBurst(u8 battlerId) +{ + u32 itemId, holdEffect, species; + struct Pokemon *mon; + u8 battlerPosition = GetBattlerPosition(battlerId); + u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battlerId)); + + // Check if Player has a Z Ring + if ((GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)) + && !CheckBagHasItem(ITEM_Z_POWER_RING, 1)) + return FALSE; + + // Check if trainer already ultra bursted a pokemon. + if (gBattleStruct->burst.alreadyBursted[battlerPosition]) + return FALSE; + + // Cannot use z move and ultra burst on same turn + if (gBattleStruct->zmove.toBeUsed[battlerId]) + return FALSE; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && IsPartnerMonFromSameTrainer(battlerId) + && (gBattleStruct->burst.alreadyBursted[partnerPosition] || (gBattleStruct->burst.toBurst & gBitTable[BATTLE_PARTNER(battlerId)]))) + return FALSE; + + // Check if mon is currently held by Sky Drop + if (gStatuses3[battlerId] & STATUS3_SKY_DROPPED) + return FALSE; + + // Gets mon data. + if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) + mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; + else + mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; + + species = GetMonData(mon, MON_DATA_SPECIES); + itemId = GetMonData(mon, MON_DATA_HELD_ITEM); + + // Check if there is an entry in the evolution table for Ultra Burst. + if (GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_ULTRA_BURST) != SPECIES_NONE) + { + if (itemId == ITEM_ENIGMA_BERRY_E_READER) + holdEffect = gEnigmaBerries[battlerId].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(itemId); + + // Can Ultra Burst via Z Crystal. + if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) + return TRUE; + } + + // No checks passed, the mon CAN'T ultra burst. + return FALSE; +} + bool32 IsBattlerMegaEvolved(u8 battlerId) { // While Transform does copy stats and visuals, it shouldn't be counted as true Mega Evolution. @@ -10045,6 +10238,14 @@ bool32 IsBattlerPrimalReverted(u8 battlerId) return (gSpeciesInfo[gBattleMons[battlerId].species].flags & SPECIES_FLAG_PRIMAL_REVERSION); } +bool32 IsBattlerUltraBursted(u8 battlerId) +{ + // While Transform does copy stats and visuals, it shouldn't be counted as true Ultra Burst. + if (gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) + return FALSE; + return (gSpeciesInfo[gBattleMons[battlerId].species].flags & SPECIES_FLAG_ULTRA_BURST); +} + // Returns SPECIES_NONE if no form change is possible u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) { @@ -10068,6 +10269,7 @@ u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) { case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM: case FORM_CHANGE_BATTLE_PRIMAL_REVERSION: + case FORM_CHANGE_BATTLE_ULTRA_BURST: if (heldItem == formChanges[i].param1) targetSpecies = formChanges[i].targetSpecies; break; @@ -10138,8 +10340,8 @@ bool32 CanBattlerFormChange(u8 battlerId, u16 method) if (gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED && B_TRANSFORM_FORM_CHANGES >= GEN_5) return FALSE; - // Mega Evolved Pokémon should always revert to normal upon fainting or ending the battle. - if (IsBattlerMegaEvolved(battlerId) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) + // Mega Evolved and Ultra Bursted Pokémon should always revert to normal upon fainting or ending the battle. + if ((IsBattlerMegaEvolved(battlerId) || IsBattlerUltraBursted(battlerId)) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) return TRUE; else if (IsBattlerPrimalReverted(battlerId) && (method == FORM_CHANGE_END_BATTLE)) return TRUE; @@ -10175,8 +10377,8 @@ bool32 TryBattleFormChange(u8 battlerId, u16 method) { bool8 restoreSpecies = FALSE; - // Mega Evolved Pokémon should always revert to normal upon fainting or ending the battle, so no need to add it to the form change tables. - if (IsBattlerMegaEvolved(battlerId) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) + // Mega Evolved and Ultra Bursted Pokémon should always revert to normal upon fainting or ending the battle, so no need to add it to the form change tables. + if ((IsBattlerMegaEvolved(battlerId) || IsBattlerUltraBursted(battlerId)) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) restoreSpecies = TRUE; // Unlike Megas, Primal Reversion isn't canceled on fainting. @@ -10621,7 +10823,7 @@ void TrySaveExchangedItem(u8 battlerId, u16 stolenItem) bool32 IsBattlerAffectedByHazards(u8 battlerId, bool32 toxicSpikes) { bool32 ret = TRUE; - u32 holdEffect = GetBattlerHoldEffect(gActiveBattler, TRUE); + u32 holdEffect = GetBattlerHoldEffect(battlerId, TRUE); if (toxicSpikes && holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS && !IS_BATTLER_OF_TYPE(battlerId, TYPE_POISON)) { ret = FALSE; @@ -10775,34 +10977,6 @@ bool32 IsBattlerWeatherAffected(u8 battlerId, u32 weatherFlags) return FALSE; } -// Utility Umbrella holders take normal damage from what would be rain- and sun-weakened attacks. -u32 ApplyWeatherDamageMultiplier(u8 battlerAtk, u16 move, u8 moveType, u32 dmg, u16 holdEffectAtk, u16 holdEffectDef) -{ - if (WEATHER_HAS_EFFECT) - { - if (gBattleMoves[move].effect == EFFECT_HYDRO_STEAM && (gBattleWeather & B_WEATHER_SUN) && holdEffectAtk != HOLD_EFFECT_UTILITY_UMBRELLA) - dmg = ApplyModifier(UQ_4_12(1.5), dmg); - else if (holdEffectDef != HOLD_EFFECT_UTILITY_UMBRELLA) - { - if (gBattleWeather & B_WEATHER_RAIN) - { - if (moveType == TYPE_FIRE) - dmg = ApplyModifier(UQ_4_12(0.5), dmg); - else if (moveType == TYPE_WATER) - dmg = ApplyModifier(UQ_4_12(1.5), dmg); - } - else if (gBattleWeather & B_WEATHER_SUN) - { - if (moveType == TYPE_FIRE) - dmg = ApplyModifier(UQ_4_12(1.5), dmg); - else if (moveType == TYPE_WATER) - dmg = ApplyModifier(UQ_4_12(0.5), dmg); - } - } - } - return dmg; -} - // Gets move target before redirection effects etc. are applied // Possible return values are defined in battle.h following MOVE_TARGET_SELECTED u32 GetBattlerMoveTargetType(u8 battlerId, u16 move) diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 55cc157be..3983f96b9 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -159,7 +159,6 @@ void QueueZMove(u8 battlerId, u16 baseMove) bool32 IsViableZMove(u8 battlerId, u16 move) { struct Pokemon *mon; - struct MegaEvolutionData *mega = &(((struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]))->mega); u8 battlerPosition = GetBattlerPosition(battlerId); u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battlerId)); u32 item; @@ -185,15 +184,6 @@ bool32 IsViableZMove(u8 battlerId, u16 move) if ((GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)) && !CheckBagHasItem(ITEM_Z_POWER_RING, 1)) return FALSE; - if (mega->alreadyEvolved[battlerPosition]) - return FALSE; // Trainer has mega evolved - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - if (IsPartnerMonFromSameTrainer(battlerId) && (mega->alreadyEvolved[partnerPosition] || (mega->toEvolve & gBitTable[BATTLE_PARTNER(battlerId)]))) - return FALSE; // Partner has mega evolved or is about to mega evolve - } - if (item == ITEM_ENIGMA_BERRY_E_READER) return FALSE; // HoldEffect = gEnigmaBerries[battlerId].holdEffect; else @@ -350,9 +340,12 @@ bool32 IsZMoveTriggerSpriteActive(void) void HideZMoveTriggerSprite(void) { - struct Sprite *sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId]; - sprite->tHide = TRUE; + struct Sprite *sprite; gBattleStruct->zmove.viable = FALSE; + if (gBattleStruct->zmove.triggerSpriteId >= MAX_SPRITES) + return; + sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId]; + sprite->tHide = TRUE; } static void ShowZMoveTriggerSprite(u8 battlerId) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index c8c19573f..0902ea1ff 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -9942,7 +9942,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, - .soundMove = TRUE, + .sheerForceBoost = TRUE, .thawsUser = TRUE, .metronomeBanned = TRUE, }, diff --git a/src/data/items.h b/src/data/items.h index 802cd325d..b7e876b1c 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -1,3 +1,5 @@ +#include "constants/moves.h" + #if I_USE_EVO_HELD_ITEMS_FROM_BAG == TRUE #define EVO_HELD_ITEM_TYPE ITEM_USE_PARTY_MENU #define EVO_HELD_ITEM_FIELD_FUNC ItemUseOutOfBattle_EvolutionStone @@ -6,7 +8,7 @@ #define EVO_HELD_ITEM_FIELD_FUNC ItemUseOutOfBattle_CannotUse #endif -#if I_GEM_BOOST_POWER >= GEN_5 +#if I_GEM_BOOST_POWER >= GEN_6 #define GEM_BOOST_PARAM 30 #else #define GEM_BOOST_PARAM 50 @@ -7742,6 +7744,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_FOCUS_PUNCH, }, [ITEM_TM02_DRAGON_CLAW] = @@ -7754,6 +7757,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_DRAGON_CLAW, }, [ITEM_TM03_WATER_PULSE] = @@ -7766,6 +7770,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_WATER_PULSE, }, [ITEM_TM04_CALM_MIND] = @@ -7778,6 +7783,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_CALM_MIND, }, [ITEM_TM05_ROAR] = @@ -7790,6 +7796,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_ROAR, }, [ITEM_TM06_TOXIC] = @@ -7802,6 +7809,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_TOXIC, }, [ITEM_TM07_HAIL] = @@ -7814,6 +7822,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_HAIL, }, [ITEM_TM08_BULK_UP] = @@ -7826,6 +7835,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_BULK_UP, }, [ITEM_TM09_BULLET_SEED] = @@ -7838,6 +7848,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_BULLET_SEED, }, [ITEM_TM10_HIDDEN_POWER] = @@ -7850,6 +7861,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_HIDDEN_POWER, }, [ITEM_TM11_SUNNY_DAY] = @@ -7862,6 +7874,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_SUNNY_DAY, }, [ITEM_TM12_TAUNT] = @@ -7874,6 +7887,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_TAUNT, }, [ITEM_TM13_ICE_BEAM] = @@ -7886,6 +7900,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_ICE_BEAM, }, [ITEM_TM14_BLIZZARD] = @@ -7898,6 +7913,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_BLIZZARD, }, [ITEM_TM15_HYPER_BEAM] = @@ -7910,6 +7926,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_HYPER_BEAM, }, [ITEM_TM16_LIGHT_SCREEN] = @@ -7922,6 +7939,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_LIGHT_SCREEN, }, [ITEM_TM17_PROTECT] = @@ -7934,6 +7952,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_PROTECT, }, [ITEM_TM18_RAIN_DANCE] = @@ -7946,6 +7965,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_RAIN_DANCE, }, [ITEM_TM19_GIGA_DRAIN] = @@ -7958,6 +7978,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_GIGA_DRAIN, }, [ITEM_TM20_SAFEGUARD] = @@ -7970,6 +7991,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_SAFEGUARD, }, [ITEM_TM21_FRUSTRATION] = @@ -7982,6 +8004,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_FRUSTRATION, }, [ITEM_TM22_SOLAR_BEAM] = @@ -7994,6 +8017,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_SOLAR_BEAM, }, [ITEM_TM23_IRON_TAIL] = @@ -8006,6 +8030,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_IRON_TAIL, }, [ITEM_TM24_THUNDERBOLT] = @@ -8018,6 +8043,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_THUNDERBOLT, }, [ITEM_TM25_THUNDER] = @@ -8030,6 +8056,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_THUNDER, }, [ITEM_TM26_EARTHQUAKE] = @@ -8042,6 +8069,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_EARTHQUAKE, }, [ITEM_TM27_RETURN] = @@ -8054,6 +8082,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_RETURN, }, [ITEM_TM28_DIG] = @@ -8066,6 +8095,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_DIG, }, [ITEM_TM29_PSYCHIC] = @@ -8078,6 +8108,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_PSYCHIC, }, [ITEM_TM30_SHADOW_BALL] = @@ -8090,6 +8121,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_SHADOW_BALL, }, [ITEM_TM31_BRICK_BREAK] = @@ -8102,6 +8134,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_BRICK_BREAK, }, [ITEM_TM32_DOUBLE_TEAM] = @@ -8114,6 +8147,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_DOUBLE_TEAM, }, [ITEM_TM33_REFLECT] = @@ -8126,6 +8160,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_REFLECT, }, [ITEM_TM34_SHOCK_WAVE] = @@ -8138,6 +8173,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_SHOCK_WAVE, }, [ITEM_TM35_FLAMETHROWER] = @@ -8150,6 +8186,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_FLAMETHROWER, }, [ITEM_TM36_SLUDGE_BOMB] = @@ -8162,6 +8199,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_SLUDGE_BOMB, }, [ITEM_TM37_SANDSTORM] = @@ -8174,6 +8212,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_SANDSTORM, }, [ITEM_TM38_FIRE_BLAST] = @@ -8186,6 +8225,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_FIRE_BLAST, }, [ITEM_TM39_ROCK_TOMB] = @@ -8198,6 +8238,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_ROCK_TOMB, }, [ITEM_TM40_AERIAL_ACE] = @@ -8210,6 +8251,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_AERIAL_ACE, }, [ITEM_TM41_TORMENT] = @@ -8222,6 +8264,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_TORMENT, }, [ITEM_TM42_FACADE] = @@ -8234,6 +8277,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_FACADE, }, [ITEM_TM43_SECRET_POWER] = @@ -8246,6 +8290,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_SECRET_POWER, }, [ITEM_TM44_REST] = @@ -8258,6 +8303,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_REST, }, [ITEM_TM45_ATTRACT] = @@ -8270,6 +8316,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_ATTRACT, }, [ITEM_TM46_THIEF] = @@ -8282,6 +8329,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_THIEF, }, [ITEM_TM47_STEEL_WING] = @@ -8294,6 +8342,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_STEEL_WING, }, [ITEM_TM48_SKILL_SWAP] = @@ -8306,6 +8355,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_SKILL_SWAP, }, [ITEM_TM49_SNATCH] = @@ -8318,6 +8368,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_SNATCH, }, [ITEM_TM50_OVERHEAT] = @@ -8330,6 +8381,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_OVERHEAT, }, [ITEM_TM51] = @@ -8342,6 +8394,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM52] = @@ -8354,6 +8407,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM53] = @@ -8366,6 +8420,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM54] = @@ -8378,6 +8433,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM55] = @@ -8390,6 +8446,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM56] = @@ -8402,6 +8459,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM57] = @@ -8414,6 +8472,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM58] = @@ -8426,6 +8485,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM59] = @@ -8438,6 +8498,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM60] = @@ -8450,6 +8511,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM61] = @@ -8462,6 +8524,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM62] = @@ -8474,6 +8537,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM63] = @@ -8486,6 +8550,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM64] = @@ -8498,6 +8563,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM65] = @@ -8510,6 +8576,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM66] = @@ -8522,6 +8589,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM67] = @@ -8534,6 +8602,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM68] = @@ -8546,6 +8615,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM69] = @@ -8558,6 +8628,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM70] = @@ -8570,6 +8641,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM71] = @@ -8582,6 +8654,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM72] = @@ -8594,6 +8667,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM73] = @@ -8606,6 +8680,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM74] = @@ -8618,6 +8693,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM75] = @@ -8630,6 +8706,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM76] = @@ -8642,6 +8719,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM77] = @@ -8654,6 +8732,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM78] = @@ -8666,6 +8745,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM79] = @@ -8678,6 +8758,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM80] = @@ -8690,6 +8771,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM81] = @@ -8702,6 +8784,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM82] = @@ -8714,6 +8797,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM83] = @@ -8726,6 +8810,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM84] = @@ -8738,6 +8823,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM85] = @@ -8750,6 +8836,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM86] = @@ -8762,6 +8849,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM87] = @@ -8774,6 +8862,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM88] = @@ -8786,6 +8875,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM89] = @@ -8798,6 +8888,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM90] = @@ -8810,6 +8901,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM91] = @@ -8822,6 +8914,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM92] = @@ -8834,6 +8927,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM93] = @@ -8846,6 +8940,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM94] = @@ -8858,6 +8953,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM95] = @@ -8870,6 +8966,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM96] = @@ -8882,6 +8979,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM97] = @@ -8894,6 +8992,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM98] = @@ -8906,6 +9005,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM99] = @@ -8918,6 +9018,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_TM100] = @@ -8930,6 +9031,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_NONE, // Todo }, [ITEM_HM01_CUT] = @@ -8942,6 +9044,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_CUT, }, [ITEM_HM02_FLY] = @@ -8954,6 +9057,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_FLY, }, [ITEM_HM03_SURF] = @@ -8966,6 +9070,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_SURF, }, [ITEM_HM04_STRENGTH] = @@ -8978,6 +9083,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_STRENGTH, }, [ITEM_HM05_FLASH] = @@ -8990,6 +9096,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_FLASH, }, [ITEM_HM06_ROCK_SMASH] = @@ -9002,6 +9109,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_ROCK_SMASH, }, [ITEM_HM07_WATERFALL] = @@ -9014,6 +9122,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_WATERFALL, }, [ITEM_HM08_DIVE] = @@ -9026,6 +9135,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .secondaryId = MOVE_DIVE, }, @@ -9228,7 +9338,6 @@ const struct Item gItems[] = .price = 0, .description = sBicycleDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_FIELD, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9241,7 +9350,6 @@ const struct Item gItems[] = .price = 0, .description = sMachBikeDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_FIELD, .fieldUseFunc = ItemUseOutOfBattle_Bike, @@ -9255,7 +9363,6 @@ const struct Item gItems[] = .price = 0, .description = sAcroBikeDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_FIELD, .fieldUseFunc = ItemUseOutOfBattle_Bike, @@ -9269,7 +9376,6 @@ const struct Item gItems[] = .price = 0, .description = sOldRodDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_FIELD, .fieldUseFunc = ItemUseOutOfBattle_Rod, @@ -9283,7 +9389,6 @@ const struct Item gItems[] = .price = 0, .description = sGoodRodDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_FIELD, .fieldUseFunc = ItemUseOutOfBattle_Rod, @@ -9297,7 +9402,6 @@ const struct Item gItems[] = .price = 0, .description = sSuperRodDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_FIELD, .fieldUseFunc = ItemUseOutOfBattle_Rod, @@ -9311,7 +9415,6 @@ const struct Item gItems[] = .price = 0, .description = sDowsingMachineDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_FIELD, .fieldUseFunc = ItemUseOutOfBattle_Itemfinder, @@ -9324,7 +9427,6 @@ const struct Item gItems[] = .price = 0, .description = sTownMapDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9337,7 +9439,6 @@ const struct Item gItems[] = .price = 0, .description = sVsSeekerDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_FIELD, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9350,7 +9451,6 @@ const struct Item gItems[] = .price = 0, .description = sTMCaseDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9363,7 +9463,6 @@ const struct Item gItems[] = .price = 0, .description = sBerryPouchDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9400,7 +9499,6 @@ const struct Item gItems[] = .price = 0, .description = sPowderJarDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_PowderJar, @@ -9437,7 +9535,6 @@ const struct Item gItems[] = .price = 0, .description = sPokeblockCaseDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_PBLOCK_CASE, .fieldUseFunc = ItemUseOutOfBattle_PokeblockCase, @@ -9474,7 +9571,6 @@ const struct Item gItems[] = .price = 0, .description = sFameCheckerDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9487,7 +9583,6 @@ const struct Item gItems[] = .price = 0, .description = sTeachyTVDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_FIELD, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9527,7 +9622,6 @@ const struct Item gItems[] = .price = 0, .description = sMysticTicketDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9540,7 +9634,6 @@ const struct Item gItems[] = .price = 0, .description = sAuroraTicketDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9553,7 +9646,6 @@ const struct Item gItems[] = .price = 0, .description = sOldSeaMapDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9710,7 +9802,6 @@ const struct Item gItems[] = .price = 0, .description = sMagmaEmblemDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9819,7 +9910,6 @@ const struct Item gItems[] = .price = 0, .description = sTriPassDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9832,7 +9922,6 @@ const struct Item gItems[] = .price = 0, .description = sRainbowPassDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9845,7 +9934,6 @@ const struct Item gItems[] = .price = 0, .description = sTeaDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9858,7 +9946,6 @@ const struct Item gItems[] = .price = 0, .description = sRubyDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -9871,7 +9958,6 @@ const struct Item gItems[] = .price = 0, .description = sSapphireDesc, .importance = 1, - .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, diff --git a/src/data/party_menu.h b/src/data/party_menu.h index e7ebf9893..4a1c5344c 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -1102,115 +1102,3 @@ static const u8 *const sUnused_StatStrings[] = gText_SpDef4, gText_Speed2 }; - -static const u16 sTMHMMoves[] = -{ - [ITEM_TM01 - ITEM_TM01] = MOVE_FOCUS_PUNCH, - [ITEM_TM02 - ITEM_TM01] = MOVE_DRAGON_CLAW, - [ITEM_TM03 - ITEM_TM01] = MOVE_WATER_PULSE, - [ITEM_TM04 - ITEM_TM01] = MOVE_CALM_MIND, - [ITEM_TM05 - ITEM_TM01] = MOVE_ROAR, - [ITEM_TM06 - ITEM_TM01] = MOVE_TOXIC, - [ITEM_TM07 - ITEM_TM01] = MOVE_HAIL, - [ITEM_TM08 - ITEM_TM01] = MOVE_BULK_UP, - [ITEM_TM09 - ITEM_TM01] = MOVE_BULLET_SEED, - [ITEM_TM10 - ITEM_TM01] = MOVE_HIDDEN_POWER, - [ITEM_TM11 - ITEM_TM01] = MOVE_SUNNY_DAY, - [ITEM_TM12 - ITEM_TM01] = MOVE_TAUNT, - [ITEM_TM13 - ITEM_TM01] = MOVE_ICE_BEAM, - [ITEM_TM14 - ITEM_TM01] = MOVE_BLIZZARD, - [ITEM_TM15 - ITEM_TM01] = MOVE_HYPER_BEAM, - [ITEM_TM16 - ITEM_TM01] = MOVE_LIGHT_SCREEN, - [ITEM_TM17 - ITEM_TM01] = MOVE_PROTECT, - [ITEM_TM18 - ITEM_TM01] = MOVE_RAIN_DANCE, - [ITEM_TM19 - ITEM_TM01] = MOVE_GIGA_DRAIN, - [ITEM_TM20 - ITEM_TM01] = MOVE_SAFEGUARD, - [ITEM_TM21 - ITEM_TM01] = MOVE_FRUSTRATION, - [ITEM_TM22 - ITEM_TM01] = MOVE_SOLAR_BEAM, - [ITEM_TM23 - ITEM_TM01] = MOVE_IRON_TAIL, - [ITEM_TM24 - ITEM_TM01] = MOVE_THUNDERBOLT, - [ITEM_TM25 - ITEM_TM01] = MOVE_THUNDER, - [ITEM_TM26 - ITEM_TM01] = MOVE_EARTHQUAKE, - [ITEM_TM27 - ITEM_TM01] = MOVE_RETURN, - [ITEM_TM28 - ITEM_TM01] = MOVE_DIG, - [ITEM_TM29 - ITEM_TM01] = MOVE_PSYCHIC, - [ITEM_TM30 - ITEM_TM01] = MOVE_SHADOW_BALL, - [ITEM_TM31 - ITEM_TM01] = MOVE_BRICK_BREAK, - [ITEM_TM32 - ITEM_TM01] = MOVE_DOUBLE_TEAM, - [ITEM_TM33 - ITEM_TM01] = MOVE_REFLECT, - [ITEM_TM34 - ITEM_TM01] = MOVE_SHOCK_WAVE, - [ITEM_TM35 - ITEM_TM01] = MOVE_FLAMETHROWER, - [ITEM_TM36 - ITEM_TM01] = MOVE_SLUDGE_BOMB, - [ITEM_TM37 - ITEM_TM01] = MOVE_SANDSTORM, - [ITEM_TM38 - ITEM_TM01] = MOVE_FIRE_BLAST, - [ITEM_TM39 - ITEM_TM01] = MOVE_ROCK_TOMB, - [ITEM_TM40 - ITEM_TM01] = MOVE_AERIAL_ACE, - [ITEM_TM41 - ITEM_TM01] = MOVE_TORMENT, - [ITEM_TM42 - ITEM_TM01] = MOVE_FACADE, - [ITEM_TM43 - ITEM_TM01] = MOVE_SECRET_POWER, - [ITEM_TM44 - ITEM_TM01] = MOVE_REST, - [ITEM_TM45 - ITEM_TM01] = MOVE_ATTRACT, - [ITEM_TM46 - ITEM_TM01] = MOVE_THIEF, - [ITEM_TM47 - ITEM_TM01] = MOVE_STEEL_WING, - [ITEM_TM48 - ITEM_TM01] = MOVE_SKILL_SWAP, - [ITEM_TM49 - ITEM_TM01] = MOVE_SNATCH, - [ITEM_TM50 - ITEM_TM01] = MOVE_OVERHEAT, - [ITEM_TM51 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM52 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM53 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM54 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM55 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM56 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM57 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM58 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM59 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM60 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM61 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM62 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM63 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM64 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM65 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM66 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM67 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM68 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM69 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM70 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM71 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM72 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM73 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM74 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM75 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM76 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM77 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM78 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM79 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM80 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM81 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM82 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM83 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM84 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM85 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM86 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM87 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM88 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM89 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM90 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM91 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM92 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM93 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM94 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM95 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM96 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM97 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM98 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM99 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_TM100 - ITEM_TM01] = MOVE_NONE, // Todo - [ITEM_HM01 - ITEM_TM01] = MOVE_CUT, - [ITEM_HM02 - ITEM_TM01] = MOVE_FLY, - [ITEM_HM03 - ITEM_TM01] = MOVE_SURF, - [ITEM_HM04 - ITEM_TM01] = MOVE_STRENGTH, - [ITEM_HM05 - ITEM_TM01] = MOVE_FLASH, - [ITEM_HM06 - ITEM_TM01] = MOVE_ROCK_SMASH, - [ITEM_HM07 - ITEM_TM01] = MOVE_WATERFALL, - [ITEM_HM08 - ITEM_TM01] = MOVE_DIVE, -}; diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 8453ed480..9f75ee3e2 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -210,6 +210,8 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_MINIOR_CORE_VIOLET] = sMiniorVioletFormChangeTable, [SPECIES_MINIOR_METEOR_YELLOW] = sMiniorYellowFormChangeTable, [SPECIES_MINIOR_CORE_YELLOW] = sMiniorYellowFormChangeTable, + [SPECIES_NECROZMA_DUSK_MANE] = sNecrozmaDuskManeFormChangeTable, + [SPECIES_NECROZMA_DAWN_WINGS] = sNecrozmaDawnWingsFormChangeTable, #endif #if P_GEN_8_POKEMON == TRUE [SPECIES_CRAMORANT] = sCramorantFormChangeTable, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 1d9b0e8dc..2db4d8a1d 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -548,6 +548,14 @@ static const struct FormChange sMiniorYellowFormChangeTable[] = { {FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_YELLOW}, {FORM_CHANGE_TERMINATOR}, }; +static const struct FormChange sNecrozmaDuskManeFormChangeTable[] = { + {FORM_CHANGE_BATTLE_ULTRA_BURST, SPECIES_NECROZMA_ULTRA, ITEM_ULTRANECROZIUM_Z}, + {FORM_CHANGE_TERMINATOR}, +}; +static const struct FormChange sNecrozmaDawnWingsFormChangeTable[] = { + {FORM_CHANGE_BATTLE_ULTRA_BURST, SPECIES_NECROZMA_ULTRA, ITEM_ULTRANECROZIUM_Z}, + {FORM_CHANGE_TERMINATOR}, +}; #endif #if P_GEN_8_POKEMON == TRUE diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 37028623b..b6eb71483 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -24484,7 +24484,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .abilities = {ABILITY_NEUROFORCE, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, - .flags = SPECIES_FLAG_LEGENDARY, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_ULTRA_BURST, }, [SPECIES_MAGEARNA_ORIGINAL_COLOR] = MAGEARNA_SPECIES_INFO(BODY_COLOR_RED), diff --git a/src/data/pokemon_graphics/enemy_mon_elevation.h b/src/data/pokemon_graphics/enemy_mon_elevation.h index 9471451ea..007c6a90a 100644 --- a/src/data/pokemon_graphics/enemy_mon_elevation.h +++ b/src/data/pokemon_graphics/enemy_mon_elevation.h @@ -9,7 +9,7 @@ const u8 gEnemyMonElevation[NUM_SPECIES + 1] = [SPECIES_ZUBAT] = 16, [SPECIES_GOLBAT] = 10, [SPECIES_VENOMOTH] = 16, - [SPECIES_GEODUDE] = 16, + [SPECIES_GEODUDE] = 10, [SPECIES_MAGNEMITE] = 17, [SPECIES_MAGNETON] = 9, [SPECIES_GASTLY] = 10, diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index 309e14e89..95ea6f943 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -64,9 +64,10 @@ static const union AnimCmd sAnim_Charizard_1[] = static const union AnimCmd sAnim_Squirtle_1[] = { - ANIMCMD_FRAME(1, 50), - ANIMCMD_FRAME(1, 50), - ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 11), + ANIMCMD_FRAME(0, 11), + ANIMCMD_FRAME(1, 11), + ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; @@ -80,11 +81,10 @@ static const union AnimCmd sAnim_Wartortle_1[] = static const union AnimCmd sAnim_Blastoise_1[] = { - ANIMCMD_FRAME(0, 50), - ANIMCMD_FRAME(1, 25), + ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 25), - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; @@ -158,26 +158,19 @@ static const union AnimCmd sAnim_Beedrill_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 35), - ANIMCMD_FRAME(0, 28), + ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 20), + ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; static const union AnimCmd sAnim_Pidgey_1[] = { - ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 5), - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(1, 25), ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 5), - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(1, 5), - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 5), - ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; @@ -202,10 +195,10 @@ static const union AnimCmd sAnim_Pidgeot_1[] = static const union AnimCmd sAnim_Rattata_1[] = { - ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(1, 50), - ANIMCMD_FRAME(1, 28), - ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(1, 11), + ANIMCMD_FRAME(0, 11), + ANIMCMD_FRAME(1, 11), + ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; @@ -228,22 +221,10 @@ static const union AnimCmd sAnim_Raticate_1[] = static const union AnimCmd sAnim_Spearow_1[] = { - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 5), - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 5), - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 5), - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 5), - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 5), - ANIMCMD_FRAME(0, 20), - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 5), - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 5), - ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(1, 11), + ANIMCMD_FRAME(0, 11), + ANIMCMD_FRAME(1, 11), + ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; @@ -282,10 +263,9 @@ static const union AnimCmd sAnim_Arbok_1[] = static const union AnimCmd sAnim_Pikachu_1[] = { ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(1, 60), ANIMCMD_FRAME(1, 20), - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(1, 20), - ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; @@ -393,8 +373,8 @@ static const union AnimCmd sAnim_NidoranM_1[] = static const union AnimCmd sAnim_Nidorino_1[] = { - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(1, 15), + ANIMCMD_FRAME(0, 7), + ANIMCMD_FRAME(1, 23), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -418,11 +398,8 @@ static const union AnimCmd sAnim_Clefairy_1[] = static const union AnimCmd sAnim_Clefable_1[] = { - ANIMCMD_FRAME(1, 27), - ANIMCMD_FRAME(0, 27), - ANIMCMD_FRAME(1, 24), - ANIMCMD_FRAME(0, 25), - ANIMCMD_FRAME(1, 27), + ANIMCMD_FRAME(0, 16), + ANIMCMD_FRAME(1, 48), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -568,10 +545,7 @@ static const union AnimCmd sAnim_Gloom_1[] = static const union AnimCmd sAnim_Vileplume_1[] = { - ANIMCMD_FRAME(0, 50), - ANIMCMD_FRAME(1, 25), - ANIMCMD_FRAME(0, 20), - ANIMCMD_FRAME(1, 25), + ANIMCMD_FRAME(1, 38), ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; @@ -738,12 +712,13 @@ static const union AnimCmd sAnim_Mankey_1[] = static const union AnimCmd sAnim_Primeape_1[] = { - ANIMCMD_FRAME(1, 15), - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(1, 15), - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(1, 15), - ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(0, 14), + ANIMCMD_FRAME(1, 14), + ANIMCMD_FRAME(0, 14), + ANIMCMD_FRAME(1, 14), + ANIMCMD_FRAME(0, 14), + ANIMCMD_FRAME(1, 10), + ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; @@ -760,12 +735,8 @@ static const union AnimCmd sAnim_Growlithe_1[] = static const union AnimCmd sAnim_Arcanine_1[] = { - ANIMCMD_FRAME(1, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(1, 8), - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(1, 40), - ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 38), + ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; @@ -822,9 +793,7 @@ static const union AnimCmd sAnim_Alakazam_1[] = static const union AnimCmd sAnim_Machop_1[] = { - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(1, 15), - ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -934,7 +903,7 @@ static const union AnimCmd sAnim_Golem_1[] = static const union AnimCmd sAnim_Ponyta_1[] = { - ANIMCMD_FRAME(1, 45), + ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -957,7 +926,6 @@ static const union AnimCmd sAnim_Slowpoke_1[] = static const union AnimCmd sAnim_Slowbro_1[] = { - ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 10), ANIMCMD_END, diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h index eb2786fde..897ce6330 100644 --- a/src/data/pokemon_graphics/front_pic_coordinates.h +++ b/src/data/pokemon_graphics/front_pic_coordinates.h @@ -9,11 +9,11 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_IVYSAUR] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 9 }, [SPECIES_VENUSAUR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_CHARMANDER] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 10 }, - [SPECIES_CHARMELEON] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, + [SPECIES_CHARMELEON] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 8 }, [SPECIES_CHARIZARD] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SQUIRTLE] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, [SPECIES_WARTORTLE] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, - [SPECIES_BLASTOISE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_BLASTOISE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, [SPECIES_CATERPIE] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 12 }, [SPECIES_METAPOD] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 14 }, [SPECIES_BUTTERFREE] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 10 }, @@ -47,10 +47,10 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_WIGGLYTUFF] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 4 }, [SPECIES_ZUBAT] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 16 }, [SPECIES_GOLBAT] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, - [SPECIES_ODDISH] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 14 }, + [SPECIES_ODDISH] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 15 }, [SPECIES_GLOOM] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 11 }, [SPECIES_VILEPLUME] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, - [SPECIES_PARAS] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, + [SPECIES_PARAS] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 15 }, [SPECIES_PARASECT] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, [SPECIES_VENONAT] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 8 }, [SPECIES_VENOMOTH] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, @@ -59,10 +59,10 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_MEOWTH] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 10 }, [SPECIES_PERSIAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, [SPECIES_PSYDUCK] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, - [SPECIES_GOLDUCK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_GOLDUCK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, [SPECIES_MANKEY] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 11 }, [SPECIES_PRIMEAPE] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, - [SPECIES_GROWLITHE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, + [SPECIES_GROWLITHE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_ARCANINE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_POLIWAG] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 13 }, [SPECIES_POLIWHIRL] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, @@ -70,7 +70,7 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_ABRA] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 10 }, [SPECIES_KADABRA] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, [SPECIES_ALAKAZAM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, - [SPECIES_MACHOP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 10 }, + [SPECIES_MACHOP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 8 }, [SPECIES_MACHOKE] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 4 }, [SPECIES_MACHAMP] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_BELLSPROUT] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 12 }, diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index 1759120b7..ed53a181d 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -1,825 +1,768 @@ -static const struct TrainerMonNoItemDefaultMoves sParty_Sawyer1[] = { +static const struct TrainerMon sParty_Sawyer1[] = { { - .iv = 0, .lvl = 21, .species = SPECIES_GEODUDE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout1[] = { +static const struct TrainerMon sParty_GruntAquaHideout1[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_POOCHYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout2[] = { +static const struct TrainerMon sParty_GruntAquaHideout2[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_ZUBAT, }, { - .iv = 0, .lvl = 31, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout3[] = { +static const struct TrainerMon sParty_GruntAquaHideout3[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout4[] = { +static const struct TrainerMon sParty_GruntAquaHideout4[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSeafloorCavern1[] = { +static const struct TrainerMon sParty_GruntSeafloorCavern1[] = { { - .iv = 0, .lvl = 36, .species = SPECIES_POOCHYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSeafloorCavern2[] = { +static const struct TrainerMon sParty_GruntSeafloorCavern2[] = { { - .iv = 0, .lvl = 36, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSeafloorCavern3[] = { +static const struct TrainerMon sParty_GruntSeafloorCavern3[] = { { - .iv = 0, .lvl = 36, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Gabrielle1[] = { +static const struct TrainerMon sParty_Gabrielle1[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_SKITTY, }, { - .iv = 0, .lvl = 26, .species = SPECIES_POOCHYENA, }, { - .iv = 0, .lvl = 26, .species = SPECIES_ZIGZAGOON, }, { - .iv = 0, .lvl = 26, .species = SPECIES_LOTAD, }, { - .iv = 0, .lvl = 26, .species = SPECIES_SEEDOT, }, { - .iv = 0, .lvl = 26, .species = SPECIES_TAILLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntPetalburgWoods[] = { +static const struct TrainerMon sParty_GruntPetalburgWoods[] = { { - .iv = 0, .lvl = 9, .species = SPECIES_POOCHYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Marcel[] = { +static const struct TrainerMon sParty_Marcel[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_MANECTRIC, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_SHIFTRY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Alberto[] = { +static const struct TrainerMon sParty_Alberto[] = { { - .iv = 0, .lvl = 30, .species = SPECIES_PELIPPER, }, { - .iv = 0, .lvl = 30, .species = SPECIES_XATU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ed[] = { +static const struct TrainerMon sParty_Ed[] = { { - .iv = 0, .lvl = 30, .species = SPECIES_ZANGOOSE, }, { - .iv = 0, .lvl = 30, .species = SPECIES_SEVIPER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSeafloorCavern4[] = { +static const struct TrainerMon sParty_GruntSeafloorCavern4[] = { { - .iv = 0, .lvl = 36, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Declan[] = { +static const struct TrainerMon sParty_Declan[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_GYARADOS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntRusturfTunnel[] = { +static const struct TrainerMon sParty_GruntRusturfTunnel[] = { { - .iv = 0, .lvl = 11, .species = SPECIES_POOCHYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntWeatherInst1[] = { +static const struct TrainerMon sParty_GruntWeatherInst1[] = { { - .iv = 0, .lvl = 27, .species = SPECIES_ZUBAT, }, { - .iv = 0, .lvl = 27, .species = SPECIES_POOCHYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntWeatherInst2[] = { +static const struct TrainerMon sParty_GruntWeatherInst2[] = { { - .iv = 0, .lvl = 27, .species = SPECIES_POOCHYENA, }, { - .iv = 0, .lvl = 27, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntWeatherInst3[] = { +static const struct TrainerMon sParty_GruntWeatherInst3[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_POOCHYENA, }, { - .iv = 0, .lvl = 26, .species = SPECIES_ZUBAT, }, { - .iv = 0, .lvl = 26, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMuseum1[] = { +static const struct TrainerMon sParty_GruntMuseum1[] = { { - .iv = 0, .lvl = 15, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMuseum2[] = { +static const struct TrainerMon sParty_GruntMuseum2[] = { { - .iv = 0, .lvl = 14, .species = SPECIES_ZUBAT, }, { - .iv = 0, .lvl = 14, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter1[] = { +static const struct TrainerMon sParty_GruntSpaceCenter1[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtPyre1[] = { +static const struct TrainerMon sParty_GruntMtPyre1[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtPyre2[] = { +static const struct TrainerMon sParty_GruntMtPyre2[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtPyre3[] = { +static const struct TrainerMon sParty_GruntMtPyre3[] = { { - .iv = 0, .lvl = 30, .species = SPECIES_POOCHYENA, }, { - .iv = 0, .lvl = 30, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntWeatherInst4[] = { +static const struct TrainerMon sParty_GruntWeatherInst4[] = { { - .iv = 0, .lvl = 28, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout5[] = { +static const struct TrainerMon sParty_GruntAquaHideout5[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout6[] = { +static const struct TrainerMon sParty_GruntAquaHideout6[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Fredrick[] = { +static const struct TrainerMon sParty_Fredrick[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 30, .species = SPECIES_MAKUHITA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 30, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Matt[] = { +static const struct TrainerMon sParty_Matt[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 34, .species = SPECIES_MIGHTYENA, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 34, .species = SPECIES_GOLBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Zander[] = { +static const struct TrainerMon sParty_Zander[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_ShellyWeatherInstitute[] = { +static const struct TrainerMon sParty_ShellyWeatherInstitute[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 28, .species = SPECIES_CARVANHA, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 28, .species = SPECIES_MIGHTYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_ShellySeafloorCavern[] = { +static const struct TrainerMon sParty_ShellySeafloorCavern[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 37, .species = SPECIES_SHARPEDO, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 37, .species = SPECIES_MIGHTYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Archie[] = { +static const struct TrainerMon sParty_Archie[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 41, .species = SPECIES_MIGHTYENA, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 41, .species = SPECIES_CROBAT, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 43, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Leah[] = { +static const struct TrainerMon sParty_Leah[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_SPOINK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Daisy[] = { +static const struct TrainerMon sParty_Daisy[] = { { - .iv = 0, .lvl = 14, .species = SPECIES_SHROOMISH, }, { - .iv = 0, .lvl = 14, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Rose1[] = { +static const struct TrainerMon sParty_Rose1[] = { { - .iv = 0, .lvl = 14, .species = SPECIES_ROSELIA, }, { - .iv = 0, .lvl = 14, .species = SPECIES_SHROOMISH, }, { - .iv = 0, .lvl = 14, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Felix[] = { +static const struct TrainerMon sParty_Felix[] = { { - .iv = 0, .lvl = 43, .species = SPECIES_MEDICHAM, .moves = {MOVE_PSYCHIC, MOVE_NONE, MOVE_NONE, MOVE_NONE} }, { - .iv = 0, .lvl = 43, .species = SPECIES_CLAYDOL, .moves = {MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Violet[] = { +static const struct TrainerMon sParty_Violet[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_ROSELIA, }, { - .iv = 0, .lvl = 26, .species = SPECIES_GLOOM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Rose2[] = { +static const struct TrainerMon sParty_Rose2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_SHROOMISH, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Rose3[] = { +static const struct TrainerMon sParty_Rose3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_SHROOMISH, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_GLOOM, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Rose4[] = { +static const struct TrainerMon sParty_Rose4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_SHROOMISH, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_GLOOM, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Rose5[] = { +static const struct TrainerMon sParty_Rose5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_BRELOOM, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_GLOOM, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Dusty1[] = { +static const struct TrainerMon sParty_Dusty1[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 23, .species = SPECIES_SANDSLASH, .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Chip[] = { +static const struct TrainerMon sParty_Chip[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 27, .species = SPECIES_BALTOY, .moves = {MOVE_PSYBEAM, MOVE_SELF_DESTRUCT, MOVE_SANDSTORM, MOVE_ANCIENT_POWER} }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 27, .species = SPECIES_SANDSHREW, .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING} }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 27, .species = SPECIES_SANDSLASH, .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Foster[] = { +static const struct TrainerMon sParty_Foster[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 25, .species = SPECIES_SANDSHREW, .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 25, .species = SPECIES_SANDSLASH, .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Dusty2[] = { +static const struct TrainerMon sParty_Dusty2[] = { { - .iv = 60, + .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), .lvl = 27, .species = SPECIES_SANDSLASH, .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Dusty3[] = { +static const struct TrainerMon sParty_Dusty3[] = { { - .iv = 70, + .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), .lvl = 30, .species = SPECIES_SANDSLASH, .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Dusty4[] = { +static const struct TrainerMon sParty_Dusty4[] = { { - .iv = 80, + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), .lvl = 33, .species = SPECIES_SANDSLASH, .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Dusty5[] = { +static const struct TrainerMon sParty_Dusty5[] = { { - .iv = 90, + .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), .lvl = 36, .species = SPECIES_SANDSLASH, .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GabbyAndTy1[] = { +static const struct TrainerMon sParty_GabbyAndTy1[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 17, .species = SPECIES_MAGNEMITE, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 17, .species = SPECIES_WHISMUR, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GabbyAndTy2[] = { +static const struct TrainerMon sParty_GabbyAndTy2[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_MAGNEMITE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_LOUDRED, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GabbyAndTy3[] = { +static const struct TrainerMon sParty_GabbyAndTy3[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 30, .species = SPECIES_MAGNETON, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 30, .species = SPECIES_LOUDRED, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GabbyAndTy4[] = { +static const struct TrainerMon sParty_GabbyAndTy4[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 33, .species = SPECIES_MAGNETON, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 33, .species = SPECIES_LOUDRED, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GabbyAndTy5[] = { +static const struct TrainerMon sParty_GabbyAndTy5[] = { { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 36, .species = SPECIES_MAGNETON, }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 36, .species = SPECIES_LOUDRED, } }; -static const struct TrainerMonNoItemCustomMoves sParty_GabbyAndTy6[] = { +static const struct TrainerMon sParty_GabbyAndTy6[] = { { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 39, .species = SPECIES_MAGNETON, .moves = {MOVE_SONIC_BOOM, MOVE_THUNDER_WAVE, MOVE_METAL_SOUND, MOVE_THUNDERBOLT} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 39, .species = SPECIES_EXPLOUD, .moves = {MOVE_ASTONISH, MOVE_STOMP, MOVE_SUPERSONIC, MOVE_HYPER_VOICE} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lola1[] = { +static const struct TrainerMon sParty_Lola1[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 12, .species = SPECIES_AZURILL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 12, .species = SPECIES_AZURILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Austina[] = { +static const struct TrainerMon sParty_Austina[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Gwen[] = { +static const struct TrainerMon sParty_Gwen[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lola2[] = { +static const struct TrainerMon sParty_Lola2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_MARILL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lola3[] = { +static const struct TrainerMon sParty_Lola3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_MARILL, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lola4[] = { +static const struct TrainerMon sParty_Lola4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 32, .species = SPECIES_MARILL, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 32, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lola5[] = { +static const struct TrainerMon sParty_Lola5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 35, .species = SPECIES_AZUMARILL, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 35, .species = SPECIES_AZUMARILL, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Ricky1[] = { +static const struct TrainerMon sParty_Ricky1[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 13, .species = SPECIES_ZIGZAGOON, .moves = {MOVE_SAND_ATTACK, MOVE_HEADBUTT, MOVE_TAIL_WHIP, MOVE_SURF} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Simon[] = { +static const struct TrainerMon sParty_Simon[] = { { - .iv = 0, .lvl = 12, .species = SPECIES_AZURILL, }, { - .iv = 0, .lvl = 12, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Charlie[] = { +static const struct TrainerMon sParty_Charlie[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Ricky2[] = { +static const struct TrainerMon sParty_Ricky2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 27, .species = SPECIES_LINOONE, .moves = {MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Ricky3[] = { +static const struct TrainerMon sParty_Ricky3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 30, .species = SPECIES_LINOONE, .moves = {MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Ricky4[] = { +static const struct TrainerMon sParty_Ricky4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 33, .species = SPECIES_LINOONE, .moves = {MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Ricky5[] = { +static const struct TrainerMon sParty_Ricky5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 36, .species = SPECIES_LINOONE, .moves = {MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF} } }; -static const struct TrainerMonItemCustomMoves sParty_Randall[] = { +static const struct TrainerMon sParty_Randall[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 26, .species = SPECIES_SWELLOW, .heldItem = ITEM_NONE, @@ -827,9 +770,9 @@ static const struct TrainerMonItemCustomMoves sParty_Randall[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Parker[] = { +static const struct TrainerMon sParty_Parker[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 26, .species = SPECIES_SPINDA, .heldItem = ITEM_NONE, @@ -837,9 +780,9 @@ static const struct TrainerMonItemCustomMoves sParty_Parker[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_George[] = { +static const struct TrainerMon sParty_George[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 26, .species = SPECIES_SLAKOTH, .heldItem = ITEM_SITRUS_BERRY, @@ -847,9 +790,9 @@ static const struct TrainerMonItemCustomMoves sParty_George[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Berke[] = { +static const struct TrainerMon sParty_Berke[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 26, .species = SPECIES_VIGOROTH, .heldItem = ITEM_NONE, @@ -857,261 +800,261 @@ static const struct TrainerMonItemCustomMoves sParty_Berke[] = { } }; -static const struct TrainerMonNoItemCustomMoves sParty_Braxton[] = { +static const struct TrainerMon sParty_Braxton[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 28, .species = SPECIES_SWELLOW, .moves = {MOVE_FOCUS_ENERGY, MOVE_QUICK_ATTACK, MOVE_WING_ATTACK, MOVE_ENDEAVOR} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 28, .species = SPECIES_TRAPINCH, .moves = {MOVE_BITE, MOVE_DIG, MOVE_FEINT_ATTACK, MOVE_SAND_TOMB} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 28, .species = SPECIES_WAILMER, .moves = {MOVE_ROLLOUT, MOVE_WHIRLPOOL, MOVE_ASTONISH, MOVE_WATER_PULSE} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 28, .species = SPECIES_MAGNETON, .moves = {MOVE_THUNDERBOLT, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, MOVE_SONIC_BOOM} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 28, .species = SPECIES_SHIFTRY, .moves = {MOVE_GIGA_DRAIN, MOVE_FEINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_SWAGGER} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Vincent[] = { +static const struct TrainerMon sParty_Vincent[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 44, .species = SPECIES_SABLEYE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 44, .species = SPECIES_MEDICHAM, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 44, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Leroy[] = { +static const struct TrainerMon sParty_Leroy[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 46, .species = SPECIES_MAWILE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 46, .species = SPECIES_STARMIE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Wilton1[] = { +static const struct TrainerMon sParty_Wilton1[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_ELECTRIKE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_WAILMER, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Edgar[] = { +static const struct TrainerMon sParty_Edgar[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 43, .species = SPECIES_CACTURNE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 43, .species = SPECIES_PELIPPER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Albert[] = { +static const struct TrainerMon sParty_Albert[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 43, .species = SPECIES_MAGNETON, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 43, .species = SPECIES_MUK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Samuel[] = { +static const struct TrainerMon sParty_Samuel[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_SWELLOW, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_MAWILE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_KADABRA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Vito[] = { +static const struct TrainerMon sParty_Vito[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_DODRIO, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_KADABRA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_ELECTRODE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_SHIFTRY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Owen[] = { +static const struct TrainerMon sParty_Owen[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_KECLEON, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_GRAVELER, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_WAILORD, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Wilton2[] = { +static const struct TrainerMon sParty_Wilton2[] = { { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 26, .species = SPECIES_ELECTRIKE, }, { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 26, .species = SPECIES_WAILMER, }, { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 26, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Wilton3[] = { +static const struct TrainerMon sParty_Wilton3[] = { { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 29, .species = SPECIES_MANECTRIC, }, { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 29, .species = SPECIES_WAILMER, }, { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 29, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Wilton4[] = { +static const struct TrainerMon sParty_Wilton4[] = { { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 32, .species = SPECIES_MANECTRIC, }, { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 32, .species = SPECIES_WAILMER, }, { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 32, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Wilton5[] = { +static const struct TrainerMon sParty_Wilton5[] = { { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 35, .species = SPECIES_MANECTRIC, }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 35, .species = SPECIES_WAILMER, }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 35, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Warren[] = { +static const struct TrainerMon sParty_Warren[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 33, .species = SPECIES_GRAVELER, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 33, .species = SPECIES_LUDICOLO, } }; -static const struct TrainerMonItemCustomMoves sParty_Mary[] = { +static const struct TrainerMon sParty_Mary[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 26, .species = SPECIES_DELCATTY, .heldItem = ITEM_NONE, @@ -1119,9 +1062,9 @@ static const struct TrainerMonItemCustomMoves sParty_Mary[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Alexia[] = { +static const struct TrainerMon sParty_Alexia[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 26, .species = SPECIES_WIGGLYTUFF, .heldItem = ITEM_NONE, @@ -1129,9 +1072,9 @@ static const struct TrainerMonItemCustomMoves sParty_Alexia[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Jody[] = { +static const struct TrainerMon sParty_Jody[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 26, .species = SPECIES_ZANGOOSE, .heldItem = ITEM_NONE, @@ -1139,334 +1082,326 @@ static const struct TrainerMonItemCustomMoves sParty_Jody[] = { } }; -static const struct TrainerMonNoItemCustomMoves sParty_Wendy[] = { +static const struct TrainerMon sParty_Wendy[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_MAWILE, .moves = {MOVE_BATON_PASS, MOVE_FEINT_ATTACK, MOVE_FAKE_TEARS, MOVE_BITE} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_ROSELIA, .moves = {MOVE_MEGA_DRAIN, MOVE_MAGICAL_LEAF, MOVE_GRASS_WHISTLE, MOVE_LEECH_SEED} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_PELIPPER, .moves = {MOVE_FLY, MOVE_WATER_GUN, MOVE_MIST, MOVE_PROTECT} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Keira[] = { +static const struct TrainerMon sParty_Keira[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 45, .species = SPECIES_LAIRON, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 45, .species = SPECIES_MANECTRIC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Brooke1[] = { +static const struct TrainerMon sParty_Brooke1[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_WINGULL, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_NUMEL, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jennifer[] = { +static const struct TrainerMon sParty_Jennifer[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 30, .species = SPECIES_SABLEYE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Hope[] = { +static const struct TrainerMon sParty_Hope[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 45, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Shannon[] = { +static const struct TrainerMon sParty_Shannon[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 45, .species = SPECIES_CLAYDOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Michelle[] = { +static const struct TrainerMon sParty_Michelle[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_TORKOAL, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_MEDICHAM, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_LUDICOLO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Caroline[] = { +static const struct TrainerMon sParty_Caroline[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 43, .species = SPECIES_SKARMORY, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 43, .species = SPECIES_SABLEYE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Julie[] = { +static const struct TrainerMon sParty_Julie[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_SANDSLASH, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_NINETALES, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 42, .species = SPECIES_TROPIUS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Brooke2[] = { +static const struct TrainerMon sParty_Brooke2[] = { { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 26, .species = SPECIES_WINGULL, }, { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 26, .species = SPECIES_NUMEL, }, { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 26, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Brooke3[] = { +static const struct TrainerMon sParty_Brooke3[] = { { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 29, .species = SPECIES_PELIPPER, }, { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 29, .species = SPECIES_NUMEL, }, { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 29, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Brooke4[] = { +static const struct TrainerMon sParty_Brooke4[] = { { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 32, .species = SPECIES_PELIPPER, }, { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 32, .species = SPECIES_NUMEL, }, { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 32, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Brooke5[] = { +static const struct TrainerMon sParty_Brooke5[] = { { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 34, .species = SPECIES_PELIPPER, }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 34, .species = SPECIES_CAMERUPT, }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 34, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Patricia[] = { +static const struct TrainerMon sParty_Patricia[] = { { - .iv = 0, .lvl = 41, .species = SPECIES_BANETTE, }, { - .iv = 0, .lvl = 41, .species = SPECIES_LUNATONE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kindra[] = { +static const struct TrainerMon sParty_Kindra[] = { { - .iv = 0, .lvl = 30, .species = SPECIES_DUSKULL, }, { - .iv = 0, .lvl = 30, .species = SPECIES_SHUPPET, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tammy[] = { +static const struct TrainerMon sParty_Tammy[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_DUSKULL, }, { - .iv = 0, .lvl = 29, .species = SPECIES_SHUPPET, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Valerie1[] = { +static const struct TrainerMon sParty_Valerie1[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_SABLEYE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tasha[] = { +static const struct TrainerMon sParty_Tasha[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 32, .species = SPECIES_SHUPPET, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Valerie2[] = { +static const struct TrainerMon sParty_Valerie2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_SABLEYE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_SPOINK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Valerie3[] = { +static const struct TrainerMon sParty_Valerie3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 35, .species = SPECIES_SPOINK, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 35, .species = SPECIES_SABLEYE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Valerie4[] = { +static const struct TrainerMon sParty_Valerie4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 40, .species = SPECIES_SPOINK, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 40, .species = SPECIES_SABLEYE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Valerie5[] = { +static const struct TrainerMon sParty_Valerie5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 42, .species = SPECIES_DUSKULL, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 42, .species = SPECIES_SABLEYE, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 42, .species = SPECIES_GRUMPIG, } }; -static const struct TrainerMonItemDefaultMoves sParty_Cindy1[] = { +static const struct TrainerMon sParty_Cindy1[] = { { - .iv = 0, .lvl = 7, .species = SPECIES_ZIGZAGOON, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonItemCustomMoves sParty_Daphne[] = { +static const struct TrainerMon sParty_Daphne[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 39, .species = SPECIES_LUVDISC, .heldItem = ITEM_NUGGET, .moves = {MOVE_ATTRACT, MOVE_SWEET_KISS, MOVE_FLAIL, MOVE_WATER_PULSE} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 39, .species = SPECIES_LUVDISC, .heldItem = ITEM_NUGGET, @@ -1474,27 +1409,23 @@ static const struct TrainerMonItemCustomMoves sParty_Daphne[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter2[] = { +static const struct TrainerMon sParty_GruntSpaceCenter2[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_MIGHTYENA, }, { - .iv = 0, .lvl = 28, .species = SPECIES_MIGHTYENA, }, { - .iv = 0, .lvl = 30, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonItemCustomMoves sParty_Cindy2[] = { +static const struct TrainerMon sParty_Cindy2[] = { { - .iv = 0, .lvl = 11, .species = SPECIES_ZIGZAGOON, .heldItem = ITEM_NUGGET, @@ -1502,54 +1433,54 @@ static const struct TrainerMonItemCustomMoves sParty_Cindy2[] = { } }; -static const struct TrainerMonItemDefaultMoves sParty_Brianna[] = { +static const struct TrainerMon sParty_Brianna[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 40, .species = SPECIES_SEAKING, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonItemDefaultMoves sParty_Naomi[] = { +static const struct TrainerMon sParty_Naomi[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 45, .species = SPECIES_ROSELIA, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonItemDefaultMoves sParty_Cindy3[] = { +static const struct TrainerMon sParty_Cindy3[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 27, .species = SPECIES_LINOONE, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonItemDefaultMoves sParty_Cindy4[] = { +static const struct TrainerMon sParty_Cindy4[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 30, .species = SPECIES_LINOONE, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonItemDefaultMoves sParty_Cindy5[] = { +static const struct TrainerMon sParty_Cindy5[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 33, .species = SPECIES_LINOONE, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonItemCustomMoves sParty_Cindy6[] = { +static const struct TrainerMon sParty_Cindy6[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 36, .species = SPECIES_LINOONE, .heldItem = ITEM_NUGGET, @@ -1557,216 +1488,204 @@ static const struct TrainerMonItemCustomMoves sParty_Cindy6[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Melissa[] = { +static const struct TrainerMon sParty_Melissa[] = { { - .iv = 0, .lvl = 21, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sheila[] = { +static const struct TrainerMon sParty_Sheila[] = { { - .iv = 0, .lvl = 21, .species = SPECIES_SHROOMISH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Shirley[] = { +static const struct TrainerMon sParty_Shirley[] = { { - .iv = 0, .lvl = 21, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Jessica1[] = { +static const struct TrainerMon sParty_Jessica1[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_KECLEON, .moves = {MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FEINT_ATTACK} }, { - .iv = 0, .lvl = 29, .species = SPECIES_SEVIPER, .moves = {MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Connie[] = { +static const struct TrainerMon sParty_Connie[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 40, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Bridget[] = { +static const struct TrainerMon sParty_Bridget[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 40, .species = SPECIES_AZUMARILL, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Olivia[] = { +static const struct TrainerMon sParty_Olivia[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 35, .species = SPECIES_CLAMPERL, .moves = {MOVE_IRON_DEFENSE, MOVE_WHIRLPOOL, MOVE_RAIN_DANCE, MOVE_WATER_PULSE} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 37, .species = SPECIES_CORPHISH, .moves = {MOVE_TAUNT, MOVE_CRABHAMMER, MOVE_WATER_PULSE, MOVE_NONE} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 39, .species = SPECIES_LOMBRE, .moves = {MOVE_UPROAR, MOVE_FURY_SWIPES, MOVE_FAKE_OUT, MOVE_WATER_PULSE} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tiffany[] = { +static const struct TrainerMon sParty_Tiffany[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 39, .species = SPECIES_CARVANHA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 39, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Jessica2[] = { +static const struct TrainerMon sParty_Jessica2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 35, .species = SPECIES_KECLEON, .moves = {MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FEINT_ATTACK} }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 35, .species = SPECIES_SEVIPER, .moves = {MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Jessica3[] = { +static const struct TrainerMon sParty_Jessica3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 38, .species = SPECIES_KECLEON, .moves = {MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FEINT_ATTACK} }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 38, .species = SPECIES_SEVIPER, .moves = {MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Jessica4[] = { +static const struct TrainerMon sParty_Jessica4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 41, .species = SPECIES_KECLEON, .moves = {MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FEINT_ATTACK} }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 41, .species = SPECIES_SEVIPER, .moves = {MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Jessica5[] = { +static const struct TrainerMon sParty_Jessica5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 44, .species = SPECIES_KECLEON, .moves = {MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FEINT_ATTACK} }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 44, .species = SPECIES_SEVIPER, .moves = {MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH} } }; -static const struct TrainerMonItemDefaultMoves sParty_Winston1[] = { +static const struct TrainerMon sParty_Winston1[] = { { - .iv = 0, .lvl = 7, .species = SPECIES_ZIGZAGOON, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Mollie[] = { +static const struct TrainerMon sParty_Mollie[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_WHISCASH, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 33, .species = SPECIES_MEDITITE, } }; -static const struct TrainerMonItemDefaultMoves sParty_Garret[] = { +static const struct TrainerMon sParty_Garret[] = { { - .iv = 0, .lvl = 45, .species = SPECIES_AZUMARILL, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonItemDefaultMoves sParty_Winston2[] = { +static const struct TrainerMon sParty_Winston2[] = { { - .iv = 0, .lvl = 27, .species = SPECIES_LINOONE, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonItemDefaultMoves sParty_Winston3[] = { +static const struct TrainerMon sParty_Winston3[] = { { - .iv = 0, .lvl = 30, .species = SPECIES_LINOONE, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonItemDefaultMoves sParty_Winston4[] = { +static const struct TrainerMon sParty_Winston4[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_LINOONE, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonItemCustomMoves sParty_Winston5[] = { +static const struct TrainerMon sParty_Winston5[] = { { - .iv = 0, .lvl = 36, .species = SPECIES_LINOONE, .heldItem = ITEM_NUGGET, @@ -1774,1475 +1693,1396 @@ static const struct TrainerMonItemCustomMoves sParty_Winston5[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Steve1[] = { +static const struct TrainerMon sParty_Steve1[] = { { - .iv = 0, .lvl = 19, .species = SPECIES_ARON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Thalia1[] = { +static const struct TrainerMon sParty_Thalia1[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_WAILMER, }, { - .iv = 0, .lvl = 25, .species = SPECIES_HORSEA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Mark[] = { +static const struct TrainerMon sParty_Mark[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_RHYHORN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtChimney1[] = { +static const struct TrainerMon sParty_GruntMtChimney1[] = { { - .iv = 0, .lvl = 20, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Steve2[] = { +static const struct TrainerMon sParty_Steve2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 27, .species = SPECIES_LAIRON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Steve3[] = { +static const struct TrainerMon sParty_Steve3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_LAIRON, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_RHYHORN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Steve4[] = { +static const struct TrainerMon sParty_Steve4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 32, .species = SPECIES_LAIRON, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 32, .species = SPECIES_RHYHORN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Steve5[] = { +static const struct TrainerMon sParty_Steve5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 35, .species = SPECIES_AGGRON, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 35, .species = SPECIES_RHYDON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Luis[] = { +static const struct TrainerMon sParty_Luis[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dominik[] = { +static const struct TrainerMon sParty_Dominik[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Douglas[] = { +static const struct TrainerMon sParty_Douglas[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 24, .species = SPECIES_TENTACOOL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 24, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Darrin[] = { +static const struct TrainerMon sParty_Darrin[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 24, .species = SPECIES_TENTACOOL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 24, .species = SPECIES_WINGULL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 24, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tony1[] = { +static const struct TrainerMon sParty_Tony1[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jerome[] = { +static const struct TrainerMon sParty_Jerome[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_TENTACRUEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Matthew[] = { +static const struct TrainerMon sParty_Matthew[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_David[] = { +static const struct TrainerMon sParty_David[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 25, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Spencer[] = { +static const struct TrainerMon sParty_Spencer[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 33, .species = SPECIES_WINGULL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Roland[] = { +static const struct TrainerMon sParty_Roland[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nolen[] = { +static const struct TrainerMon sParty_Nolen[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_TENTACRUEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Stan[] = { +static const struct TrainerMon sParty_Stan[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_HORSEA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Barry[] = { +static const struct TrainerMon sParty_Barry[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_GYARADOS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dean[] = { +static const struct TrainerMon sParty_Dean[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_CARVANHA, }, { - .iv = 0, .lvl = 31, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 31, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Rodney[] = { +static const struct TrainerMon sParty_Rodney[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_GYARADOS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Richard[] = { +static const struct TrainerMon sParty_Richard[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_PELIPPER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Herman[] = { +static const struct TrainerMon sParty_Herman[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 33, .species = SPECIES_TENTACRUEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Santiago[] = { +static const struct TrainerMon sParty_Santiago[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_TENTACRUEL, }, { - .iv = 0, .lvl = 33, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Gilbert[] = { +static const struct TrainerMon sParty_Gilbert[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Franklin[] = { +static const struct TrainerMon sParty_Franklin[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_SEALEO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kevin[] = { +static const struct TrainerMon sParty_Kevin[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_SPHEAL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jack[] = { +static const struct TrainerMon sParty_Jack[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_GYARADOS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dudley[] = { +static const struct TrainerMon sParty_Dudley[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 33, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 33, .species = SPECIES_TENTACRUEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Chad[] = { +static const struct TrainerMon sParty_Chad[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 33, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tony2[] = { +static const struct TrainerMon sParty_Tony2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 30, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tony3[] = { +static const struct TrainerMon sParty_Tony3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tony4[] = { +static const struct TrainerMon sParty_Tony4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 34, .species = SPECIES_STARYU, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 36, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tony5[] = { +static const struct TrainerMon sParty_Tony5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_STARMIE, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 39, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Takao[] = { +static const struct TrainerMon sParty_Takao[] = { { - .iv = 127, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 13, .species = SPECIES_MACHOP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Hitoshi[] = { +static const struct TrainerMon sParty_Hitoshi[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 32, .species = SPECIES_MACHOP, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 32, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kiyo[] = { +static const struct TrainerMon sParty_Kiyo[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 34, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Koichi[] = { +static const struct TrainerMon sParty_Koichi[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 24, .species = SPECIES_MACHOP, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 28, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nob1[] = { +static const struct TrainerMon sParty_Nob1[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 19, .species = SPECIES_MACHOP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nob2[] = { +static const struct TrainerMon sParty_Nob2[] = { { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 27, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nob3[] = { +static const struct TrainerMon sParty_Nob3[] = { { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 29, .species = SPECIES_MACHOP, }, { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 29, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nob4[] = { +static const struct TrainerMon sParty_Nob4[] = { { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 31, .species = SPECIES_MACHOP, }, { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 31, .species = SPECIES_MACHOKE, }, { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 31, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonItemDefaultMoves sParty_Nob5[] = { +static const struct TrainerMon sParty_Nob5[] = { { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 33, .species = SPECIES_MACHOP, .heldItem = ITEM_NONE }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 33, .species = SPECIES_MACHOKE, .heldItem = ITEM_NONE }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 33, .species = SPECIES_MACHOKE, .heldItem = ITEM_NONE }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 33, .species = SPECIES_MACHAMP, .heldItem = ITEM_BLACK_BELT } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Yuji[] = { +static const struct TrainerMon sParty_Yuji[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 26, .species = SPECIES_MAKUHITA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 26, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Daisuke[] = { +static const struct TrainerMon sParty_Daisuke[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 19, .species = SPECIES_MACHOP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Atsushi[] = { +static const struct TrainerMon sParty_Atsushi[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 32, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Kirk[] = { +static const struct TrainerMon sParty_Kirk[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_ELECTRIKE, .moves = {MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SPARK, MOVE_LEER} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_VOLTORB, .moves = {MOVE_CHARGE, MOVE_SHOCK_WAVE, MOVE_SCREECH, MOVE_NONE} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout7[] = { +static const struct TrainerMon sParty_GruntAquaHideout7[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_POOCHYENA, }, { - .iv = 0, .lvl = 31, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout8[] = { +static const struct TrainerMon sParty_GruntAquaHideout8[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Shawn[] = { +static const struct TrainerMon sParty_Shawn[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_VOLTORB, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Fernando1[] = { +static const struct TrainerMon sParty_Fernando1[] = { { - .iv = 0, .lvl = 30, .species = SPECIES_ELECTRIKE, }, { - .iv = 0, .lvl = 30, .species = SPECIES_LOUDRED, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dalton1[] = { +static const struct TrainerMon sParty_Dalton1[] = { { - .iv = 0, .lvl = 15, .species = SPECIES_MAGNEMITE, }, { - .iv = 0, .lvl = 15, .species = SPECIES_WHISMUR, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dalton2[] = { +static const struct TrainerMon sParty_Dalton2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_MAGNEMITE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_WHISMUR, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dalton3[] = { +static const struct TrainerMon sParty_Dalton3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_MAGNEMITE, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_LOUDRED, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dalton4[] = { +static const struct TrainerMon sParty_Dalton4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_MAGNETON, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_LOUDRED, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_MAGNETON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dalton5[] = { +static const struct TrainerMon sParty_Dalton5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_MAGNETON, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_EXPLOUD, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_MAGNETON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cole[] = { +static const struct TrainerMon sParty_Cole[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 23, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jeff[] = { +static const struct TrainerMon sParty_Jeff[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 22, .species = SPECIES_SLUGMA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 22, .species = SPECIES_SLUGMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Axle[] = { +static const struct TrainerMon sParty_Axle[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 23, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jace[] = { +static const struct TrainerMon sParty_Jace[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 23, .species = SPECIES_SLUGMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Keegan[] = { +static const struct TrainerMon sParty_Keegan[] = { { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 23, .species = SPECIES_SLUGMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Bernie1[] = { +static const struct TrainerMon sParty_Bernie1[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_SLUGMA, }, { - .iv = 0, .lvl = 18, .species = SPECIES_WINGULL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Bernie2[] = { +static const struct TrainerMon sParty_Bernie2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_SLUGMA, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_WINGULL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Bernie3[] = { +static const struct TrainerMon sParty_Bernie3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_SLUGMA, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_PELIPPER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Bernie4[] = { +static const struct TrainerMon sParty_Bernie4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 32, .species = SPECIES_SLUGMA, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 32, .species = SPECIES_PELIPPER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Bernie5[] = { +static const struct TrainerMon sParty_Bernie5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 35, .species = SPECIES_MAGCARGO, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 35, .species = SPECIES_PELIPPER, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Drew[] = { +static const struct TrainerMon sParty_Drew[] = { { - .iv = 0, .lvl = 23, .species = SPECIES_SANDSHREW, .moves = {MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Beau[] = { +static const struct TrainerMon sParty_Beau[] = { { - .iv = 0, .lvl = 21, .species = SPECIES_BALTOY, .moves = {MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB} }, { - .iv = 0, .lvl = 21, .species = SPECIES_SANDSHREW, .moves = {MOVE_POISON_STING, MOVE_SAND_ATTACK, MOVE_SCRATCH, MOVE_DIG} }, { - .iv = 0, .lvl = 21, .species = SPECIES_BALTOY, .moves = {MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Larry[] = { +static const struct TrainerMon sParty_Larry[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_NUZLEAF, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Shane[] = { +static const struct TrainerMon sParty_Shane[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_SANDSHREW, }, { - .iv = 0, .lvl = 18, .species = SPECIES_NUZLEAF, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Justin[] = { +static const struct TrainerMon sParty_Justin[] = { { - .iv = 0, .lvl = 24, .species = SPECIES_KECLEON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ethan1[] = { +static const struct TrainerMon sParty_Ethan1[] = { { - .iv = 0, .lvl = 20, .species = SPECIES_ZIGZAGOON, }, { - .iv = 0, .lvl = 20, .species = SPECIES_TAILLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Autumn[] = { +static const struct TrainerMon sParty_Autumn[] = { { - .iv = 0, .lvl = 21, .species = SPECIES_SHROOMISH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Travis[] = { +static const struct TrainerMon sParty_Travis[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_SANDSHREW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ethan2[] = { +static const struct TrainerMon sParty_Ethan2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_ZIGZAGOON, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_TAILLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ethan3[] = { +static const struct TrainerMon sParty_Ethan3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_LINOONE, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_SWELLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ethan4[] = { +static const struct TrainerMon sParty_Ethan4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_SANDSHREW, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_SWELLOW, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_LINOONE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ethan5[] = { +static const struct TrainerMon sParty_Ethan5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_SWELLOW, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_SANDSLASH, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_LINOONE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Brent[] = { +static const struct TrainerMon sParty_Brent[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 26, .species = SPECIES_SURSKIT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Donald[] = { +static const struct TrainerMon sParty_Donald[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 24, .species = SPECIES_WURMPLE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 24, .species = SPECIES_SILCOON, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 24, .species = SPECIES_BEAUTIFLY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Taylor[] = { +static const struct TrainerMon sParty_Taylor[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_WURMPLE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_CASCOON, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_DUSTOX, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jeffrey1[] = { +static const struct TrainerMon sParty_Jeffrey1[] = { { - .iv = 0, .lvl = 27, .species = SPECIES_SURSKIT, }, { - .iv = 0, .lvl = 27, .species = SPECIES_SURSKIT, }, { - .iv = 0, .lvl = 27, .species = SPECIES_SURSKIT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Derek[] = { +static const struct TrainerMon sParty_Derek[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 16, .species = SPECIES_DUSTOX, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 16, .species = SPECIES_BEAUTIFLY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jeffrey2[] = { +static const struct TrainerMon sParty_Jeffrey2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_SURSKIT, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_SURSKIT, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_SURSKIT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jeffrey3[] = { +static const struct TrainerMon sParty_Jeffrey3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 34, .species = SPECIES_SURSKIT, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 34, .species = SPECIES_SURSKIT, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 34, .species = SPECIES_MASQUERAIN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jeffrey4[] = { +static const struct TrainerMon sParty_Jeffrey4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 36, .species = SPECIES_SURSKIT, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 36, .species = SPECIES_WURMPLE, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 36, .species = SPECIES_SURSKIT, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 36, .species = SPECIES_MASQUERAIN, } }; -static const struct TrainerMonItemDefaultMoves sParty_Jeffrey5[] = { +static const struct TrainerMon sParty_Jeffrey5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 38, .species = SPECIES_SURSKIT, .heldItem = ITEM_NONE }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 38, .species = SPECIES_DUSTOX, .heldItem = ITEM_NONE }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 38, .species = SPECIES_SURSKIT, .heldItem = ITEM_NONE }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 38, .species = SPECIES_MASQUERAIN, .heldItem = ITEM_SILVER_POWDER }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 38, .species = SPECIES_BEAUTIFLY, .heldItem = ITEM_NONE } }; -static const struct TrainerMonNoItemCustomMoves sParty_Edward[] = { +static const struct TrainerMon sParty_Edward[] = { { - .iv = 0, .lvl = 15, .species = SPECIES_ABRA, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Preston[] = { +static const struct TrainerMon sParty_Preston[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 36, .species = SPECIES_KIRLIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Virgil[] = { +static const struct TrainerMon sParty_Virgil[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 36, .species = SPECIES_RALTS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Blake[] = { +static const struct TrainerMon sParty_Blake[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 36, .species = SPECIES_GIRAFARIG, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_William[] = { +static const struct TrainerMon sParty_William[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_RALTS, }, { - .iv = 0, .lvl = 26, .species = SPECIES_RALTS, }, { - .iv = 0, .lvl = 26, .species = SPECIES_KIRLIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Joshua[] = { +static const struct TrainerMon sParty_Joshua[] = { { - .iv = 0, .lvl = 41, .species = SPECIES_KADABRA, }, { - .iv = 0, .lvl = 41, .species = SPECIES_SOLROCK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cameron1[] = { +static const struct TrainerMon sParty_Cameron1[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_SOLROCK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cameron2[] = { +static const struct TrainerMon sParty_Cameron2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 33, .species = SPECIES_KADABRA, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 33, .species = SPECIES_SOLROCK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cameron3[] = { +static const struct TrainerMon sParty_Cameron3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 38, .species = SPECIES_KADABRA, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 38, .species = SPECIES_SOLROCK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cameron4[] = { +static const struct TrainerMon sParty_Cameron4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 41, .species = SPECIES_KADABRA, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 41, .species = SPECIES_SOLROCK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cameron5[] = { +static const struct TrainerMon sParty_Cameron5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 45, .species = SPECIES_SOLROCK, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 45, .species = SPECIES_ALAKAZAM, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Jaclyn[] = { +static const struct TrainerMon sParty_Jaclyn[] = { { - .iv = 0, .lvl = 16, .species = SPECIES_ABRA, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Hannah[] = { +static const struct TrainerMon sParty_Hannah[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 36, .species = SPECIES_KIRLIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Samantha[] = { +static const struct TrainerMon sParty_Samantha[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 36, .species = SPECIES_XATU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Maura[] = { +static const struct TrainerMon sParty_Maura[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 36, .species = SPECIES_KADABRA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kayla[] = { +static const struct TrainerMon sParty_Kayla[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_WOBBUFFET, }, { - .iv = 0, .lvl = 26, .species = SPECIES_NATU, }, { - .iv = 0, .lvl = 26, .species = SPECIES_KADABRA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Alexis[] = { +static const struct TrainerMon sParty_Alexis[] = { { - .iv = 0, .lvl = 41, .species = SPECIES_KIRLIA, }, { - .iv = 0, .lvl = 41, .species = SPECIES_XATU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jacki1[] = { +static const struct TrainerMon sParty_Jacki1[] = { { - .iv = 0, .lvl = 30, .species = SPECIES_KADABRA, }, { - .iv = 0, .lvl = 30, .species = SPECIES_LUNATONE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jacki2[] = { +static const struct TrainerMon sParty_Jacki2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 34, .species = SPECIES_KADABRA, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 34, .species = SPECIES_LUNATONE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jacki3[] = { +static const struct TrainerMon sParty_Jacki3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 37, .species = SPECIES_KADABRA, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 37, .species = SPECIES_LUNATONE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jacki4[] = { +static const struct TrainerMon sParty_Jacki4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 40, .species = SPECIES_KADABRA, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 40, .species = SPECIES_LUNATONE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jacki5[] = { +static const struct TrainerMon sParty_Jacki5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 43, .species = SPECIES_LUNATONE, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 43, .species = SPECIES_ALAKAZAM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Walter1[] = { +static const struct TrainerMon sParty_Walter1[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_MANECTRIC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Micah[] = { +static const struct TrainerMon sParty_Micah[] = { { - .iv = 0, .lvl = 44, .species = SPECIES_MANECTRIC, }, { - .iv = 0, .lvl = 44, .species = SPECIES_MANECTRIC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Thomas[] = { +static const struct TrainerMon sParty_Thomas[] = { { - .iv = 0, .lvl = 45, .species = SPECIES_ZANGOOSE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Walter2[] = { +static const struct TrainerMon sParty_Walter2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 34, .species = SPECIES_MANECTRIC, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Walter3[] = { +static const struct TrainerMon sParty_Walter3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 36, .species = SPECIES_LINOONE, .moves = {MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES} }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 36, .species = SPECIES_MANECTRIC, .moves = {MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_ROAR} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Walter4[] = { +static const struct TrainerMon sParty_Walter4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 39, .species = SPECIES_LINOONE, .moves = {MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES} }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 39, .species = SPECIES_MANECTRIC, .moves = {MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_NONE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Walter5[] = { +static const struct TrainerMon sParty_Walter5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 41, .species = SPECIES_LINOONE, .moves = {MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES} }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 41, .species = SPECIES_GOLDUCK, .moves = {MOVE_FURY_SWIPES, MOVE_DISABLE, MOVE_CONFUSION, MOVE_PSYCH_UP} }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 41, .species = SPECIES_MANECTRIC, .moves = {MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_ROAR} } }; -static const struct TrainerMonItemCustomMoves sParty_Sidney[] = { +static const struct TrainerMon sParty_Sidney[] = { { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 46, .species = SPECIES_MIGHTYENA, .heldItem = ITEM_NONE, .moves = {MOVE_ROAR, MOVE_DOUBLE_EDGE, MOVE_SAND_ATTACK, MOVE_CRUNCH} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 48, .species = SPECIES_SHIFTRY, .heldItem = ITEM_NONE, .moves = {MOVE_TORMENT, MOVE_DOUBLE_TEAM, MOVE_SWAGGER, MOVE_EXTRASENSORY} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 46, .species = SPECIES_CACTURNE, .heldItem = ITEM_NONE, .moves = {MOVE_LEECH_SEED, MOVE_FEINT_ATTACK, MOVE_NEEDLE_ARM, MOVE_COTTON_SPORE} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 48, .species = SPECIES_CRAWDAUNT, .heldItem = ITEM_NONE, .moves = {MOVE_SURF, MOVE_SWORDS_DANCE, MOVE_STRENGTH, MOVE_FACADE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 49, .species = SPECIES_ABSOL, .heldItem = ITEM_SITRUS_BERRY, @@ -3250,37 +3090,37 @@ static const struct TrainerMonItemCustomMoves sParty_Sidney[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Phoebe[] = { +static const struct TrainerMon sParty_Phoebe[] = { { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 48, .species = SPECIES_DUSCLOPS, .heldItem = ITEM_NONE, .moves = {MOVE_SHADOW_PUNCH, MOVE_CONFUSE_RAY, MOVE_CURSE, MOVE_PROTECT} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 49, .species = SPECIES_BANETTE, .heldItem = ITEM_NONE, .moves = {MOVE_SHADOW_BALL, MOVE_GRUDGE, MOVE_WILL_O_WISP, MOVE_FEINT_ATTACK} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 50, .species = SPECIES_SABLEYE, .heldItem = ITEM_NONE, .moves = {MOVE_SHADOW_BALL, MOVE_DOUBLE_TEAM, MOVE_NIGHT_SHADE, MOVE_FEINT_ATTACK} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 49, .species = SPECIES_BANETTE, .heldItem = ITEM_NONE, .moves = {MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FACADE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 51, .species = SPECIES_DUSCLOPS, .heldItem = ITEM_SITRUS_BERRY, @@ -3288,37 +3128,37 @@ static const struct TrainerMonItemCustomMoves sParty_Phoebe[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Glacia[] = { +static const struct TrainerMon sParty_Glacia[] = { { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 50, .species = SPECIES_SEALEO, .heldItem = ITEM_NONE, .moves = {MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_HAIL, MOVE_ICE_BALL} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 50, .species = SPECIES_GLALIE, .heldItem = ITEM_NONE, .moves = {MOVE_LIGHT_SCREEN, MOVE_CRUNCH, MOVE_ICY_WIND, MOVE_ICE_BEAM} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 52, .species = SPECIES_SEALEO, .heldItem = ITEM_NONE, .moves = {MOVE_ATTRACT, MOVE_DOUBLE_EDGE, MOVE_HAIL, MOVE_BLIZZARD} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 52, .species = SPECIES_GLALIE, .heldItem = ITEM_NONE, .moves = {MOVE_SHADOW_BALL, MOVE_EXPLOSION, MOVE_HAIL, MOVE_ICE_BEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_WALREIN, .heldItem = ITEM_SITRUS_BERRY, @@ -3326,37 +3166,37 @@ static const struct TrainerMonItemCustomMoves sParty_Glacia[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Drake[] = { +static const struct TrainerMon sParty_Drake[] = { { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 52, .species = SPECIES_SHELGON, .heldItem = ITEM_NONE, .moves = {MOVE_ROCK_TOMB, MOVE_DRAGON_CLAW, MOVE_PROTECT, MOVE_DOUBLE_EDGE} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 54, .species = SPECIES_ALTARIA, .heldItem = ITEM_NONE, .moves = {MOVE_DOUBLE_EDGE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 53, .species = SPECIES_KINGDRA, .heldItem = ITEM_NONE, .moves = {MOVE_SMOKESCREEN, MOVE_DRAGON_DANCE, MOVE_SURF, MOVE_BODY_SLAM} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 53, .species = SPECIES_FLYGON, .heldItem = ITEM_NONE, .moves = {MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_DRAGON_BREATH, MOVE_EARTHQUAKE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 55, .species = SPECIES_SALAMENCE, .heldItem = ITEM_SITRUS_BERRY, @@ -3364,23 +3204,23 @@ static const struct TrainerMonItemCustomMoves sParty_Drake[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Roxanne1[] = { +static const struct TrainerMon sParty_Roxanne1[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 12, .species = SPECIES_GEODUDE, .heldItem = ITEM_NONE, .moves = {MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, MOVE_ROCK_TOMB} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 12, .species = SPECIES_GEODUDE, .heldItem = ITEM_NONE, .moves = {MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, MOVE_ROCK_TOMB} }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 15, .species = SPECIES_NOSEPASS, .heldItem = ITEM_ORAN_BERRY, @@ -3388,23 +3228,23 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne1[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Brawly1[] = { +static const struct TrainerMon sParty_Brawly1[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 16, .species = SPECIES_MACHOP, .heldItem = ITEM_NONE, .moves = {MOVE_KARATE_CHOP, MOVE_LOW_KICK, MOVE_SEISMIC_TOSS, MOVE_BULK_UP} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 16, .species = SPECIES_MEDITITE, .heldItem = ITEM_NONE, .moves = {MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_BULK_UP} }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 19, .species = SPECIES_MAKUHITA, .heldItem = ITEM_SITRUS_BERRY, @@ -3412,30 +3252,30 @@ static const struct TrainerMonItemCustomMoves sParty_Brawly1[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Wattson1[] = { +static const struct TrainerMon sParty_Wattson1[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 20, .species = SPECIES_VOLTORB, .heldItem = ITEM_NONE, .moves = {MOVE_ROLLOUT, MOVE_SPARK, MOVE_SELF_DESTRUCT, MOVE_SHOCK_WAVE} }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 20, .species = SPECIES_ELECTRIKE, .heldItem = ITEM_NONE, .moves = {MOVE_SHOCK_WAVE, MOVE_LEER, MOVE_QUICK_ATTACK, MOVE_HOWL} }, { - .iv = 220, + .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), .lvl = 22, .species = SPECIES_MAGNETON, .heldItem = ITEM_NONE, .moves = {MOVE_SUPERSONIC, MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, MOVE_SONIC_BOOM} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 24, .species = SPECIES_MANECTRIC, .heldItem = ITEM_SITRUS_BERRY, @@ -3443,30 +3283,30 @@ static const struct TrainerMonItemCustomMoves sParty_Wattson1[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Flannery1[] = { +static const struct TrainerMon sParty_Flannery1[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 24, .species = SPECIES_NUMEL, .heldItem = ITEM_NONE, .moves = {MOVE_OVERHEAT, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY} }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 24, .species = SPECIES_SLUGMA, .heldItem = ITEM_NONE, .moves = {MOVE_OVERHEAT, MOVE_SMOG, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 26, .species = SPECIES_CAMERUPT, .heldItem = ITEM_NONE, .moves = {MOVE_OVERHEAT, MOVE_TACKLE, MOVE_SUNNY_DAY, MOVE_ATTRACT} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 29, .species = SPECIES_TORKOAL, .heldItem = ITEM_WHITE_HERB, @@ -3474,30 +3314,30 @@ static const struct TrainerMonItemCustomMoves sParty_Flannery1[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Norman1[] = { +static const struct TrainerMon sParty_Norman1[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 27, .species = SPECIES_SPINDA, .heldItem = ITEM_NONE, .moves = {MOVE_TEETER_DANCE, MOVE_PSYBEAM, MOVE_FACADE, MOVE_ENCORE} }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 27, .species = SPECIES_VIGOROTH, .heldItem = ITEM_NONE, .moves = {MOVE_SLASH, MOVE_FACADE, MOVE_ENCORE, MOVE_FEINT_ATTACK} }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 29, .species = SPECIES_LINOONE, .heldItem = ITEM_NONE, .moves = {MOVE_SLASH, MOVE_BELLY_DRUM, MOVE_FACADE, MOVE_HEADBUTT} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 31, .species = SPECIES_SLAKING, .heldItem = ITEM_SITRUS_BERRY, @@ -3505,37 +3345,37 @@ static const struct TrainerMonItemCustomMoves sParty_Norman1[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Winona1[] = { +static const struct TrainerMon sParty_Winona1[] = { { - .iv = 210, + .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), .lvl = 29, .species = SPECIES_SWABLU, .heldItem = ITEM_NONE, .moves = {MOVE_PERISH_SONG, MOVE_MIRROR_MOVE, MOVE_SAFEGUARD, MOVE_AERIAL_ACE} }, { - .iv = 210, + .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), .lvl = 29, .species = SPECIES_TROPIUS, .heldItem = ITEM_NONE, .moves = {MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_SYNTHESIS} }, { - .iv = 210, + .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), .lvl = 30, .species = SPECIES_PELIPPER, .heldItem = ITEM_NONE, .moves = {MOVE_WATER_GUN, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE} }, { - .iv = 220, + .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), .lvl = 31, .species = SPECIES_SKARMORY, .heldItem = ITEM_NONE, .moves = {MOVE_SAND_ATTACK, MOVE_FURY_ATTACK, MOVE_STEEL_WING, MOVE_AERIAL_ACE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 33, .species = SPECIES_ALTARIA, .heldItem = ITEM_ORAN_BERRY, @@ -3543,30 +3383,30 @@ static const struct TrainerMonItemCustomMoves sParty_Winona1[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_TateAndLiza1[] = { +static const struct TrainerMon sParty_TateAndLiza1[] = { { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 41, .species = SPECIES_CLAYDOL, .heldItem = ITEM_NONE, .moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 41, .species = SPECIES_XATU, .heldItem = ITEM_NONE, .moves = {MOVE_PSYCHIC, MOVE_SUNNY_DAY, MOVE_CONFUSE_RAY, MOVE_CALM_MIND} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 42, .species = SPECIES_LUNATONE, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_CALM_MIND} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 42, .species = SPECIES_SOLROCK, .heldItem = ITEM_SITRUS_BERRY, @@ -3574,37 +3414,37 @@ static const struct TrainerMonItemCustomMoves sParty_TateAndLiza1[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Juan1[] = { +static const struct TrainerMon sParty_Juan1[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 41, .species = SPECIES_LUVDISC, .heldItem = ITEM_NONE, .moves = {MOVE_WATER_PULSE, MOVE_ATTRACT, MOVE_SWEET_KISS, MOVE_FLAIL} }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 41, .species = SPECIES_WHISCASH, .heldItem = ITEM_NONE, .moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_AMNESIA, MOVE_EARTHQUAKE} }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 43, .species = SPECIES_SEALEO, .heldItem = ITEM_NONE, .moves = {MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_AURORA_BEAM, MOVE_WATER_PULSE} }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 43, .species = SPECIES_CRAWDAUNT, .heldItem = ITEM_NONE, .moves = {MOVE_WATER_PULSE, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_LEER} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 46, .species = SPECIES_KINGDRA, .heldItem = ITEM_CHESTO_BERRY, @@ -3612,322 +3452,311 @@ static const struct TrainerMonItemCustomMoves sParty_Juan1[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jerry1[] = { +static const struct TrainerMon sParty_Jerry1[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 9, .species = SPECIES_RALTS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ted[] = { +static const struct TrainerMon sParty_Ted[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 17, .species = SPECIES_RALTS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Paul[] = { +static const struct TrainerMon sParty_Paul[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 15, .species = SPECIES_NUMEL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 15, .species = SPECIES_ODDISH, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 15, .species = SPECIES_WINGULL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jerry2[] = { +static const struct TrainerMon sParty_Jerry2[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 26, .species = SPECIES_RALTS, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 26, .species = SPECIES_MEDITITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jerry3[] = { +static const struct TrainerMon sParty_Jerry3[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 29, .species = SPECIES_KIRLIA, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 29, .species = SPECIES_MEDITITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jerry4[] = { +static const struct TrainerMon sParty_Jerry4[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 32, .species = SPECIES_KIRLIA, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 32, .species = SPECIES_MEDICHAM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jerry5[] = { +static const struct TrainerMon sParty_Jerry5[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 34, .species = SPECIES_KIRLIA, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 34, .species = SPECIES_BANETTE, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 34, .species = SPECIES_MEDICHAM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Karen1[] = { +static const struct TrainerMon sParty_Karen1[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 9, .species = SPECIES_SHROOMISH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Georgia[] = { +static const struct TrainerMon sParty_Georgia[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 16, .species = SPECIES_SHROOMISH, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 16, .species = SPECIES_BEAUTIFLY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Karen2[] = { +static const struct TrainerMon sParty_Karen2[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 26, .species = SPECIES_SHROOMISH, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 26, .species = SPECIES_WHISMUR, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Karen3[] = { +static const struct TrainerMon sParty_Karen3[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 29, .species = SPECIES_SHROOMISH, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 29, .species = SPECIES_LOUDRED, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Karen4[] = { +static const struct TrainerMon sParty_Karen4[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 32, .species = SPECIES_BRELOOM, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 32, .species = SPECIES_LOUDRED, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Karen5[] = { +static const struct TrainerMon sParty_Karen5[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 35, .species = SPECIES_BRELOOM, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 35, .species = SPECIES_EXPLOUD, } }; -static const struct TrainerMonNoItemCustomMoves sParty_KateAndJoy[] = { +static const struct TrainerMon sParty_KateAndJoy[] = { { - .iv = 0, .lvl = 30, .species = SPECIES_SPINDA, .moves = {MOVE_HYPNOSIS, MOVE_PSYBEAM, MOVE_DIZZY_PUNCH, MOVE_TEETER_DANCE} }, { - .iv = 0, .lvl = 32, .species = SPECIES_SLAKING, .moves = {MOVE_FOCUS_PUNCH, MOVE_YAWN, MOVE_SLACK_OFF, MOVE_FEINT_ATTACK} } }; -static const struct TrainerMonNoItemCustomMoves sParty_AnnaAndMeg1[] = { +static const struct TrainerMon sParty_AnnaAndMeg1[] = { { - .iv = 0, .lvl = 15, .species = SPECIES_ZIGZAGOON, .moves = {MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH} }, { - .iv = 0, .lvl = 17, .species = SPECIES_MAKUHITA, .moves = {MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_AnnaAndMeg2[] = { +static const struct TrainerMon sParty_AnnaAndMeg2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 28, .species = SPECIES_ZIGZAGOON, .moves = {MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH} }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 30, .species = SPECIES_MAKUHITA, .moves = {MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_AnnaAndMeg3[] = { +static const struct TrainerMon sParty_AnnaAndMeg3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 31, .species = SPECIES_ZIGZAGOON, .moves = {MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH} }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_MAKUHITA, .moves = {MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_AnnaAndMeg4[] = { +static const struct TrainerMon sParty_AnnaAndMeg4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 34, .species = SPECIES_LINOONE, .moves = {MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH} }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 36, .species = SPECIES_MAKUHITA, .moves = {MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_AnnaAndMeg5[] = { +static const struct TrainerMon sParty_AnnaAndMeg5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 36, .species = SPECIES_LINOONE, .moves = {MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH} }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 38, .species = SPECIES_HARIYAMA, .moves = {MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE} } }; -static const struct TrainerMonItemDefaultMoves sParty_Victor[] = { +static const struct TrainerMon sParty_Victor[] = { { - .iv = 25, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 16, .species = SPECIES_TAILLOW, .heldItem = ITEM_ORAN_BERRY }, { - .iv = 25, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 16, .species = SPECIES_ZIGZAGOON, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Miguel1[] = { +static const struct TrainerMon sParty_Miguel1[] = { { - .iv = 0, .lvl = 15, .species = SPECIES_SKITTY, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemCustomMoves sParty_Colton[] = { +static const struct TrainerMon sParty_Colton[] = { { - .iv = 0, .lvl = 22, .species = SPECIES_SKITTY, .heldItem = ITEM_ORAN_BERRY, .moves = {MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, MOVE_HEAL_BELL} }, { - .iv = 0, .lvl = 36, .species = SPECIES_SKITTY, .heldItem = ITEM_ORAN_BERRY, .moves = {MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, MOVE_HEAL_BELL} }, { - .iv = 0, .lvl = 40, .species = SPECIES_SKITTY, .heldItem = ITEM_ORAN_BERRY, .moves = {MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, MOVE_HEAL_BELL} }, { - .iv = 0, .lvl = 12, .species = SPECIES_SKITTY, .heldItem = ITEM_ORAN_BERRY, .moves = {MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, MOVE_HEAL_BELL} }, { - .iv = 0, .lvl = 30, .species = SPECIES_SKITTY, .heldItem = ITEM_ORAN_BERRY, .moves = {MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, MOVE_HEAL_BELL} }, { - .iv = 0, .lvl = 42, .species = SPECIES_DELCATTY, .heldItem = ITEM_ORAN_BERRY, @@ -3935,520 +3764,501 @@ static const struct TrainerMonItemCustomMoves sParty_Colton[] = { } }; -static const struct TrainerMonItemDefaultMoves sParty_Miguel2[] = { +static const struct TrainerMon sParty_Miguel2[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_SKITTY, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Miguel3[] = { +static const struct TrainerMon sParty_Miguel3[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_SKITTY, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Miguel4[] = { +static const struct TrainerMon sParty_Miguel4[] = { { - .iv = 0, .lvl = 35, .species = SPECIES_DELCATTY, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Miguel5[] = { +static const struct TrainerMon sParty_Miguel5[] = { { - .iv = 0, .lvl = 38, .species = SPECIES_DELCATTY, .heldItem = ITEM_SITRUS_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Victoria[] = { +static const struct TrainerMon sParty_Victoria[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 17, .species = SPECIES_ROSELIA, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Vanessa[] = { +static const struct TrainerMon sParty_Vanessa[] = { { - .iv = 0, .lvl = 30, .species = SPECIES_PIKACHU, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Bethany[] = { +static const struct TrainerMon sParty_Bethany[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 35, .species = SPECIES_AZURILL, .heldItem = ITEM_ORAN_BERRY }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 37, .species = SPECIES_MARILL, .heldItem = ITEM_ORAN_BERRY }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 39, .species = SPECIES_AZUMARILL, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Isabel1[] = { +static const struct TrainerMon sParty_Isabel1[] = { { - .iv = 0, .lvl = 14, .species = SPECIES_PLUSLE, .heldItem = ITEM_ORAN_BERRY }, { - .iv = 0, .lvl = 14, .species = SPECIES_MINUN, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Isabel2[] = { +static const struct TrainerMon sParty_Isabel2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_PLUSLE, .heldItem = ITEM_ORAN_BERRY }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_MINUN, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Isabel3[] = { +static const struct TrainerMon sParty_Isabel3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_PLUSLE, .heldItem = ITEM_ORAN_BERRY }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_MINUN, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Isabel4[] = { +static const struct TrainerMon sParty_Isabel4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 32, .species = SPECIES_PLUSLE, .heldItem = ITEM_ORAN_BERRY }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 32, .species = SPECIES_MINUN, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonItemDefaultMoves sParty_Isabel5[] = { +static const struct TrainerMon sParty_Isabel5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 35, .species = SPECIES_PLUSLE, .heldItem = ITEM_SITRUS_BERRY }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 35, .species = SPECIES_MINUN, .heldItem = ITEM_SITRUS_BERRY } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Timothy1[] = { +static const struct TrainerMon sParty_Timothy1[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 27, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Timothy2[] = { +static const struct TrainerMon sParty_Timothy2[] = { { - .iv = 210, + .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), .lvl = 33, .species = SPECIES_HARIYAMA, .moves = {MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, MOVE_DIG} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Timothy3[] = { +static const struct TrainerMon sParty_Timothy3[] = { { - .iv = 220, + .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), .lvl = 36, .species = SPECIES_HARIYAMA, .moves = {MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, MOVE_DIG} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Timothy4[] = { +static const struct TrainerMon sParty_Timothy4[] = { { - .iv = 230, + .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), .lvl = 39, .species = SPECIES_HARIYAMA, .moves = {MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, MOVE_DIG} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Timothy5[] = { +static const struct TrainerMon sParty_Timothy5[] = { { - .iv = 240, + .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), .lvl = 42, .species = SPECIES_HARIYAMA, .moves = {MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, MOVE_DIG} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Vicky[] = { +static const struct TrainerMon sParty_Vicky[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 18, .species = SPECIES_MEDITITE, .moves = {MOVE_HIGH_JUMP_KICK, MOVE_MEDITATE, MOVE_CONFUSION, MOVE_DETECT} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Shelby1[] = { +static const struct TrainerMon sParty_Shelby1[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 21, .species = SPECIES_MEDITITE, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 21, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Shelby2[] = { +static const struct TrainerMon sParty_Shelby2[] = { { - .iv = 210, + .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), .lvl = 30, .species = SPECIES_MEDITITE, }, { - .iv = 210, + .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), .lvl = 30, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Shelby3[] = { +static const struct TrainerMon sParty_Shelby3[] = { { - .iv = 220, + .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), .lvl = 33, .species = SPECIES_MEDICHAM, }, { - .iv = 220, + .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), .lvl = 33, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Shelby4[] = { +static const struct TrainerMon sParty_Shelby4[] = { { - .iv = 230, + .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), .lvl = 36, .species = SPECIES_MEDICHAM, }, { - .iv = 230, + .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), .lvl = 36, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Shelby5[] = { +static const struct TrainerMon sParty_Shelby5[] = { { - .iv = 240, + .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), .lvl = 39, .species = SPECIES_MEDICHAM, }, { - .iv = 240, + .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), .lvl = 39, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Calvin1[] = { +static const struct TrainerMon sParty_Calvin1[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_POOCHYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Billy[] = { +static const struct TrainerMon sParty_Billy[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_ZIGZAGOON, }, { - .iv = 0, .lvl = 7, .species = SPECIES_SEEDOT, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Josh[] = { +static const struct TrainerMon sParty_Josh[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 10, .species = SPECIES_GEODUDE, .moves = {MOVE_TACKLE, MOVE_NONE, MOVE_NONE, MOVE_NONE} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tommy[] = { +static const struct TrainerMon sParty_Tommy[] = { { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 8, .species = SPECIES_GEODUDE, }, { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 8, .species = SPECIES_GEODUDE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Joey[] = { +static const struct TrainerMon sParty_Joey[] = { { - .iv = 0, .lvl = 9, .species = SPECIES_MACHOP, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Ben[] = { +static const struct TrainerMon sParty_Ben[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 17, .species = SPECIES_ZIGZAGOON, .moves = {MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_GROWL, MOVE_THUNDERBOLT} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 17, .species = SPECIES_GULPIN, .moves = {MOVE_AMNESIA, MOVE_SLUDGE, MOVE_YAWN, MOVE_POUND} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Quincy[] = { +static const struct TrainerMon sParty_Quincy[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 43, .species = SPECIES_SLAKING, .moves = {MOVE_ATTRACT, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_FLAMETHROWER} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 43, .species = SPECIES_DUSCLOPS, .moves = {MOVE_SKILL_SWAP, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_TOXIC} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Katelynn[] = { +static const struct TrainerMon sParty_Katelynn[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 43, .species = SPECIES_GARDEVOIR, .moves = {MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CALM_MIND} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 43, .species = SPECIES_SLAKING, .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jaylen[] = { +static const struct TrainerMon sParty_Jaylen[] = { { - .iv = 0, .lvl = 19, .species = SPECIES_TRAPINCH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dillon[] = { +static const struct TrainerMon sParty_Dillon[] = { { - .iv = 0, .lvl = 19, .species = SPECIES_ARON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Calvin2[] = { +static const struct TrainerMon sParty_Calvin2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 27, .species = SPECIES_MIGHTYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Calvin3[] = { +static const struct TrainerMon sParty_Calvin3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_SWELLOW, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 30, .species = SPECIES_MIGHTYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Calvin4[] = { +static const struct TrainerMon sParty_Calvin4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_SWELLOW, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 29, .species = SPECIES_LINOONE, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 33, .species = SPECIES_MIGHTYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Calvin5[] = { +static const struct TrainerMon sParty_Calvin5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_SWELLOW, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 32, .species = SPECIES_LINOONE, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 36, .species = SPECIES_MIGHTYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Eddie[] = { +static const struct TrainerMon sParty_Eddie[] = { { - .iv = 0, .lvl = 14, .species = SPECIES_ZIGZAGOON, }, { - .iv = 0, .lvl = 16, .species = SPECIES_ZIGZAGOON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Allen[] = { +static const struct TrainerMon sParty_Allen[] = { { - .iv = 0, .lvl = 4, .species = SPECIES_ZIGZAGOON, }, { - .iv = 0, .lvl = 3, .species = SPECIES_TAILLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Timmy[] = { +static const struct TrainerMon sParty_Timmy[] = { { - .iv = 0, .lvl = 15, .species = SPECIES_ARON, }, { - .iv = 0, .lvl = 13, .species = SPECIES_ELECTRIKE, } }; -static const struct TrainerMonItemCustomMoves sParty_Wallace[] = { +static const struct TrainerMon sParty_Wallace[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 57, .species = SPECIES_WAILORD, .heldItem = ITEM_NONE, .moves = {MOVE_RAIN_DANCE, MOVE_WATER_SPOUT, MOVE_DOUBLE_EDGE, MOVE_BLIZZARD} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 55, .species = SPECIES_TENTACRUEL, .heldItem = ITEM_NONE, .moves = {MOVE_TOXIC, MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, MOVE_ICE_BEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 56, .species = SPECIES_LUDICOLO, .heldItem = ITEM_NONE, .moves = {MOVE_GIGA_DRAIN, MOVE_SURF, MOVE_LEECH_SEED, MOVE_DOUBLE_TEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 56, .species = SPECIES_WHISCASH, .heldItem = ITEM_NONE, .moves = {MOVE_EARTHQUAKE, MOVE_SURF, MOVE_AMNESIA, MOVE_HYPER_BEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 56, .species = SPECIES_GYARADOS, .heldItem = ITEM_NONE, .moves = {MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE, MOVE_HYPER_BEAM, MOVE_SURF} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 58, .species = SPECIES_MILOTIC, .heldItem = ITEM_SITRUS_BERRY, @@ -4456,978 +4266,912 @@ static const struct TrainerMonItemCustomMoves sParty_Wallace[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Andrew[] = { +static const struct TrainerMon sParty_Andrew[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_MAGIKARP, }, { - .iv = 0, .lvl = 10, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 15, .species = SPECIES_MAGIKARP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ivan[] = { +static const struct TrainerMon sParty_Ivan[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_MAGIKARP, }, { - .iv = 0, .lvl = 6, .species = SPECIES_MAGIKARP, }, { - .iv = 0, .lvl = 7, .species = SPECIES_MAGIKARP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Claude[] = { +static const struct TrainerMon sParty_Claude[] = { { - .iv = 0, .lvl = 16, .species = SPECIES_MAGIKARP, }, { - .iv = 0, .lvl = 17, .species = SPECIES_GOLDEEN, }, { - .iv = 0, .lvl = 18, .species = SPECIES_BARBOACH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Elliot1[] = { +static const struct TrainerMon sParty_Elliot1[] = { { - .iv = 0, .lvl = 10, .species = SPECIES_MAGIKARP, }, { - .iv = 0, .lvl = 7, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 10, .species = SPECIES_MAGIKARP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ned[] = { +static const struct TrainerMon sParty_Ned[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 11, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dale[] = { +static const struct TrainerMon sParty_Dale[] = { { - .iv = 0, .lvl = 11, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 14, .species = SPECIES_WAILMER, }, { - .iv = 0, .lvl = 11, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 14, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nolan[] = { +static const struct TrainerMon sParty_Nolan[] = { { - .iv = 0, .lvl = 19, .species = SPECIES_BARBOACH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Barny[] = { +static const struct TrainerMon sParty_Barny[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 25, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Wade[] = { +static const struct TrainerMon sParty_Wade[] = { { - .iv = 0, .lvl = 16, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Carter[] = { +static const struct TrainerMon sParty_Carter[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_WAILMER, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_TENTACRUEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Elliot2[] = { +static const struct TrainerMon sParty_Elliot2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 24, .species = SPECIES_TENTACOOL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 27, .species = SPECIES_GYARADOS, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 27, .species = SPECIES_GYARADOS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Elliot3[] = { +static const struct TrainerMon sParty_Elliot3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_GYARADOS, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 26, .species = SPECIES_CARVANHA, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 26, .species = SPECIES_TENTACOOL, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_GYARADOS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Elliot4[] = { +static const struct TrainerMon sParty_Elliot4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_GYARADOS, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_CARVANHA, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_TENTACRUEL, }, { - .iv = 31, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_GYARADOS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Elliot5[] = { +static const struct TrainerMon sParty_Elliot5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_GYARADOS, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_SHARPEDO, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_GYARADOS, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 35, .species = SPECIES_TENTACRUEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ronald[] = { +static const struct TrainerMon sParty_Ronald[] = { { - .iv = 0, .lvl = 19, .species = SPECIES_MAGIKARP, }, { - .iv = 0, .lvl = 21, .species = SPECIES_GYARADOS, }, { - .iv = 0, .lvl = 23, .species = SPECIES_GYARADOS, }, { - .iv = 0, .lvl = 26, .species = SPECIES_GYARADOS, }, { - .iv = 0, .lvl = 30, .species = SPECIES_GYARADOS, }, { - .iv = 0, .lvl = 35, .species = SPECIES_GYARADOS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jacob[] = { +static const struct TrainerMon sParty_Jacob[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 6, .species = SPECIES_VOLTORB, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 6, .species = SPECIES_VOLTORB, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 14, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Anthony[] = { +static const struct TrainerMon sParty_Anthony[] = { { - .iv = 0, .lvl = 14, .species = SPECIES_MAGNEMITE, }, { - .iv = 0, .lvl = 14, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Benjamin1[] = { +static const struct TrainerMon sParty_Benjamin1[] = { { - .iv = 0, .lvl = 16, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Benjamin2[] = { +static const struct TrainerMon sParty_Benjamin2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 30, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Benjamin3[] = { +static const struct TrainerMon sParty_Benjamin3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Benjamin4[] = { +static const struct TrainerMon sParty_Benjamin4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 36, .species = SPECIES_MAGNETON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Benjamin5[] = { +static const struct TrainerMon sParty_Benjamin5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 39, .species = SPECIES_MAGNETON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Abigail1[] = { +static const struct TrainerMon sParty_Abigail1[] = { { - .iv = 0, .lvl = 16, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jasmine[] = { +static const struct TrainerMon sParty_Jasmine[] = { { - .iv = 80, + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), .lvl = 14, .species = SPECIES_MAGNEMITE, }, { - .iv = 80, + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), .lvl = 14, .species = SPECIES_MAGNEMITE, }, { - .iv = 0, .lvl = 6, .species = SPECIES_VOLTORB, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Abigail2[] = { +static const struct TrainerMon sParty_Abigail2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 28, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Abigail3[] = { +static const struct TrainerMon sParty_Abigail3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 31, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Abigail4[] = { +static const struct TrainerMon sParty_Abigail4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 34, .species = SPECIES_MAGNETON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Abigail5[] = { +static const struct TrainerMon sParty_Abigail5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_MAGNETON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dylan1[] = { +static const struct TrainerMon sParty_Dylan1[] = { { - .iv = 0, .lvl = 17, .species = SPECIES_DODUO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dylan2[] = { +static const struct TrainerMon sParty_Dylan2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 28, .species = SPECIES_DODUO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dylan3[] = { +static const struct TrainerMon sParty_Dylan3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 31, .species = SPECIES_DODUO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dylan4[] = { +static const struct TrainerMon sParty_Dylan4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 34, .species = SPECIES_DODRIO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dylan5[] = { +static const struct TrainerMon sParty_Dylan5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_DODRIO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Maria1[] = { +static const struct TrainerMon sParty_Maria1[] = { { - .iv = 0, .lvl = 17, .species = SPECIES_DODUO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Maria2[] = { +static const struct TrainerMon sParty_Maria2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 28, .species = SPECIES_DODUO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Maria3[] = { +static const struct TrainerMon sParty_Maria3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 31, .species = SPECIES_DODUO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Maria4[] = { +static const struct TrainerMon sParty_Maria4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 34, .species = SPECIES_DODRIO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Maria5[] = { +static const struct TrainerMon sParty_Maria5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_DODRIO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Camden[] = { +static const struct TrainerMon sParty_Camden[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_STARYU, }, { - .iv = 0, .lvl = 33, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Demetrius[] = { +static const struct TrainerMon sParty_Demetrius[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_ZIGZAGOON, }, { - .iv = 0, .lvl = 25, .species = SPECIES_ELECTRIKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isaiah1[] = { +static const struct TrainerMon sParty_Isaiah1[] = { { - .iv = 0, .lvl = 35, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Pablo1[] = { +static const struct TrainerMon sParty_Pablo1[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_STARYU, }, { - .iv = 0, .lvl = 33, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Chase[] = { +static const struct TrainerMon sParty_Chase[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_WINGULL, }, { - .iv = 80, + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), .lvl = 34, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isaiah2[] = { +static const struct TrainerMon sParty_Isaiah2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 39, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isaiah3[] = { +static const struct TrainerMon sParty_Isaiah3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 42, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isaiah4[] = { +static const struct TrainerMon sParty_Isaiah4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 45, .species = SPECIES_STARMIE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isaiah5[] = { +static const struct TrainerMon sParty_Isaiah5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 48, .species = SPECIES_STARMIE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isobel[] = { +static const struct TrainerMon sParty_Isobel[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Donny[] = { +static const struct TrainerMon sParty_Donny[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_WINGULL, }, { - .iv = 160, + .iv = TRAINER_PARTY_IVS(19, 19, 19, 19, 19, 19), .lvl = 34, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Talia[] = { +static const struct TrainerMon sParty_Talia[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Katelyn1[] = { +static const struct TrainerMon sParty_Katelyn1[] = { { - .iv = 0, .lvl = 35, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Allison[] = { +static const struct TrainerMon sParty_Allison[] = { { - .iv = 0, .lvl = 27, .species = SPECIES_WINGULL, }, { - .iv = 240, + .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), .lvl = 33, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Katelyn2[] = { +static const struct TrainerMon sParty_Katelyn2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 39, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Katelyn3[] = { +static const struct TrainerMon sParty_Katelyn3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 42, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Katelyn4[] = { +static const struct TrainerMon sParty_Katelyn4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 45, .species = SPECIES_STARMIE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Katelyn5[] = { +static const struct TrainerMon sParty_Katelyn5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 48, .species = SPECIES_STARMIE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nicolas1[] = { +static const struct TrainerMon sParty_Nicolas1[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 37, .species = SPECIES_ALTARIA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 37, .species = SPECIES_ALTARIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nicolas2[] = { +static const struct TrainerMon sParty_Nicolas2[] = { { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 41, .species = SPECIES_ALTARIA, }, { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 41, .species = SPECIES_ALTARIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nicolas3[] = { +static const struct TrainerMon sParty_Nicolas3[] = { { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 44, .species = SPECIES_ALTARIA, }, { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 44, .species = SPECIES_ALTARIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nicolas4[] = { +static const struct TrainerMon sParty_Nicolas4[] = { { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 46, .species = SPECIES_BAGON, }, { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 46, .species = SPECIES_ALTARIA, }, { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 46, .species = SPECIES_ALTARIA, } }; -static const struct TrainerMonItemDefaultMoves sParty_Nicolas5[] = { +static const struct TrainerMon sParty_Nicolas5[] = { { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 49, .species = SPECIES_ALTARIA, .heldItem = ITEM_NONE }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 49, .species = SPECIES_ALTARIA, .heldItem = ITEM_NONE }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 49, .species = SPECIES_SHELGON, .heldItem = ITEM_DRAGON_FANG } }; -static const struct TrainerMonNoItemCustomMoves sParty_Aaron[] = { +static const struct TrainerMon sParty_Aaron[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 34, .species = SPECIES_BAGON, .moves = {MOVE_DRAGON_BREATH, MOVE_HEADBUTT, MOVE_FOCUS_ENERGY, MOVE_EMBER} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Perry[] = { +static const struct TrainerMon sParty_Perry[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_WINGULL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Hugh[] = { +static const struct TrainerMon sParty_Hugh[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 25, .species = SPECIES_TROPIUS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Phil[] = { +static const struct TrainerMon sParty_Phil[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_SWELLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jared[] = { +static const struct TrainerMon sParty_Jared[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_DODUO, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_SKARMORY, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_TROPIUS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Humberto[] = { +static const struct TrainerMon sParty_Humberto[] = { { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 30, .species = SPECIES_SKARMORY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Presley[] = { +static const struct TrainerMon sParty_Presley[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_TROPIUS, }, { - .iv = 0, .lvl = 33, .species = SPECIES_XATU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Edwardo[] = { +static const struct TrainerMon sParty_Edwardo[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 29, .species = SPECIES_DODUO, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 29, .species = SPECIES_PELIPPER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Colin[] = { +static const struct TrainerMon sParty_Colin[] = { { - .iv = 0, .lvl = 28, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 28, .species = SPECIES_NATU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Robert1[] = { +static const struct TrainerMon sParty_Robert1[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_SWABLU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Benny[] = { +static const struct TrainerMon sParty_Benny[] = { { - .iv = 0, .lvl = 36, .species = SPECIES_SWELLOW, }, { - .iv = 0, .lvl = 36, .species = SPECIES_PELIPPER, }, { - .iv = 0, .lvl = 36, .species = SPECIES_XATU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Chester[] = { +static const struct TrainerMon sParty_Chester[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_TAILLOW, }, { - .iv = 0, .lvl = 25, .species = SPECIES_SWELLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Robert2[] = { +static const struct TrainerMon sParty_Robert2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 32, .species = SPECIES_NATU, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 32, .species = SPECIES_SWABLU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Robert3[] = { +static const struct TrainerMon sParty_Robert3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 35, .species = SPECIES_NATU, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 35, .species = SPECIES_ALTARIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Robert4[] = { +static const struct TrainerMon sParty_Robert4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 38, .species = SPECIES_NATU, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 38, .species = SPECIES_ALTARIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Robert5[] = { +static const struct TrainerMon sParty_Robert5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 41, .species = SPECIES_ALTARIA, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 41, .species = SPECIES_XATU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Alex[] = { +static const struct TrainerMon sParty_Alex[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 33, .species = SPECIES_NATU, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 33, .species = SPECIES_SWELLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Beck[] = { +static const struct TrainerMon sParty_Beck[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_TROPIUS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Yasu[] = { +static const struct TrainerMon sParty_Yasu[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_NINJASK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Takashi[] = { +static const struct TrainerMon sParty_Takashi[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_NINJASK, }, { - .iv = 0, .lvl = 25, .species = SPECIES_KOFFING, } }; -static const struct TrainerMonItemCustomMoves sParty_Dianne[] = { +static const struct TrainerMon sParty_Dianne[] = { { - .iv = 0, .lvl = 43, .species = SPECIES_CLAYDOL, .heldItem = ITEM_NONE, .moves = {MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE} }, { - .iv = 0, .lvl = 43, .species = SPECIES_LANTURN, .heldItem = ITEM_NONE, @@ -5435,153 +5179,143 @@ static const struct TrainerMonItemCustomMoves sParty_Dianne[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jani[] = { +static const struct TrainerMon sParty_Jani[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Lao1[] = { +static const struct TrainerMon sParty_Lao1[] = { { - .iv = 0, .lvl = 17, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, MOVE_SELF_DESTRUCT} }, { - .iv = 0, .lvl = 17, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, MOVE_SELF_DESTRUCT} }, { - .iv = 0, .lvl = 17, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lung[] = { +static const struct TrainerMon sParty_Lung[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_KOFFING, }, { - .iv = 0, .lvl = 18, .species = SPECIES_NINJASK, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Lao2[] = { +static const struct TrainerMon sParty_Lao2[] = { { - .iv = 0, .lvl = 24, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT} }, { - .iv = 0, .lvl = 24, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE} }, { - .iv = 0, .lvl = 24, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT} }, { - .iv = 0, .lvl = 26, .species = SPECIES_KOFFING, .moves = {MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Lao3[] = { +static const struct TrainerMon sParty_Lao3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 27, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT} }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 27, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT} }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 27, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE} }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_KOFFING, .moves = {MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Lao4[] = { +static const struct TrainerMon sParty_Lao4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE} }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE} }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE} }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 32, .species = SPECIES_KOFFING, .moves = {MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE} } }; -static const struct TrainerMonItemCustomMoves sParty_Lao5[] = { +static const struct TrainerMon sParty_Lao5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_KOFFING, .heldItem = ITEM_NONE, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE} }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_KOFFING, .heldItem = ITEM_NONE, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT} }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_KOFFING, .heldItem = ITEM_NONE, .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT} }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 35, .species = SPECIES_WEEZING, .heldItem = ITEM_SMOKE_BALL, @@ -5589,966 +5323,882 @@ static const struct TrainerMonItemCustomMoves sParty_Lao5[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jocelyn[] = { +static const struct TrainerMon sParty_Jocelyn[] = { { - .iv = 127, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 13, .species = SPECIES_MEDITITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Laura[] = { +static const struct TrainerMon sParty_Laura[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 13, .species = SPECIES_MEDITITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cyndy1[] = { +static const struct TrainerMon sParty_Cyndy1[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 18, .species = SPECIES_MEDITITE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 18, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cora[] = { +static const struct TrainerMon sParty_Cora[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_MEDITITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Paula[] = { +static const struct TrainerMon sParty_Paula[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_BRELOOM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cyndy2[] = { +static const struct TrainerMon sParty_Cyndy2[] = { { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 26, .species = SPECIES_MEDITITE, }, { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 26, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cyndy3[] = { +static const struct TrainerMon sParty_Cyndy3[] = { { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 29, .species = SPECIES_MEDITITE, }, { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 29, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cyndy4[] = { +static const struct TrainerMon sParty_Cyndy4[] = { { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 32, .species = SPECIES_MEDICHAM, }, { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 32, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cyndy5[] = { +static const struct TrainerMon sParty_Cyndy5[] = { { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 35, .species = SPECIES_MEDICHAM, }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 35, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Madeline1[] = { +static const struct TrainerMon sParty_Madeline1[] = { { - .iv = 0, .lvl = 19, .species = SPECIES_NUMEL, .moves = {MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, MOVE_SUNNY_DAY} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Clarissa[] = { +static const struct TrainerMon sParty_Clarissa[] = { { - .iv = 0, .lvl = 28, .species = SPECIES_ROSELIA, }, { - .iv = 0, .lvl = 28, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Angelica[] = { +static const struct TrainerMon sParty_Angelica[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 30, .species = SPECIES_CASTFORM, .moves = {MOVE_RAIN_DANCE, MOVE_WEATHER_BALL, MOVE_THUNDER, MOVE_WATER_PULSE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Madeline2[] = { +static const struct TrainerMon sParty_Madeline2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 29, .species = SPECIES_NUMEL, .moves = {MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, MOVE_SUNNY_DAY} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Madeline3[] = { +static const struct TrainerMon sParty_Madeline3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 32, .species = SPECIES_NUMEL, .moves = {MOVE_EMBER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Madeline4[] = { +static const struct TrainerMon sParty_Madeline4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 34, .species = SPECIES_ROSELIA, .moves = {MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_SUNNY_DAY} }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 34, .species = SPECIES_NUMEL, .moves = {MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Madeline5[] = { +static const struct TrainerMon sParty_Madeline5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_ROSELIA, .moves = {MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY} }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_CAMERUPT, .moves = {MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_EARTHQUAKE, MOVE_SUNNY_DAY} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Beverly[] = { +static const struct TrainerMon sParty_Beverly[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 25, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Imani[] = { +static const struct TrainerMon sParty_Imani[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kyla[] = { +static const struct TrainerMon sParty_Kyla[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Denise[] = { +static const struct TrainerMon sParty_Denise[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 25, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Beth[] = { +static const struct TrainerMon sParty_Beth[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tara[] = { +static const struct TrainerMon sParty_Tara[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_HORSEA, }, { - .iv = 0, .lvl = 25, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Missy[] = { +static const struct TrainerMon sParty_Missy[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Alice[] = { +static const struct TrainerMon sParty_Alice[] = { { - .iv = 0, .lvl = 24, .species = SPECIES_GOLDEEN, }, { - .iv = 0, .lvl = 24, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 24, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jenny1[] = { +static const struct TrainerMon sParty_Jenny1[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Grace[] = { +static const struct TrainerMon sParty_Grace[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tanya[] = { +static const struct TrainerMon sParty_Tanya[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_LUVDISC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sharon[] = { +static const struct TrainerMon sParty_Sharon[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_SEAKING, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nikki[] = { +static const struct TrainerMon sParty_Nikki[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_MARILL, }, { - .iv = 0, .lvl = 33, .species = SPECIES_SPHEAL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Brenda[] = { +static const struct TrainerMon sParty_Brenda[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Katie[] = { +static const struct TrainerMon sParty_Katie[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_GOLDEEN, }, { - .iv = 0, .lvl = 33, .species = SPECIES_SPHEAL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Susie[] = { +static const struct TrainerMon sParty_Susie[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_LUVDISC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kara[] = { +static const struct TrainerMon sParty_Kara[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_SEAKING, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dana[] = { +static const struct TrainerMon sParty_Dana[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_AZUMARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sienna[] = { +static const struct TrainerMon sParty_Sienna[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_LUVDISC, }, { - .iv = 0, .lvl = 33, .species = SPECIES_LUVDISC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Debra[] = { +static const struct TrainerMon sParty_Debra[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_SEAKING, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Linda[] = { +static const struct TrainerMon sParty_Linda[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_HORSEA, }, { - .iv = 0, .lvl = 33, .species = SPECIES_SEADRA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kaylee[] = { +static const struct TrainerMon sParty_Kaylee[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_LANTURN, }, { - .iv = 0, .lvl = 34, .species = SPECIES_PELIPPER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Laurel[] = { +static const struct TrainerMon sParty_Laurel[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_LUVDISC, }, { - .iv = 0, .lvl = 33, .species = SPECIES_LUVDISC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Carlee[] = { +static const struct TrainerMon sParty_Carlee[] = { { - .iv = 0, .lvl = 35, .species = SPECIES_SEAKING, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jenny2[] = { +static const struct TrainerMon sParty_Jenny2[] = { { - .iv = 0, .lvl = 38, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jenny3[] = { +static const struct TrainerMon sParty_Jenny3[] = { { - .iv = 0, .lvl = 41, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jenny4[] = { +static const struct TrainerMon sParty_Jenny4[] = { { - .iv = 0, .lvl = 43, .species = SPECIES_STARYU, }, { - .iv = 0, .lvl = 43, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jenny5[] = { +static const struct TrainerMon sParty_Jenny5[] = { { - .iv = 0, .lvl = 45, .species = SPECIES_LUVDISC, }, { - .iv = 0, .lvl = 45, .species = SPECIES_WAILMER, }, { - .iv = 0, .lvl = 45, .species = SPECIES_STARMIE, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Heidi[] = { +static const struct TrainerMon sParty_Heidi[] = { { - .iv = 0, .lvl = 22, .species = SPECIES_SANDSHREW, .moves = {MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH} }, { - .iv = 0, .lvl = 22, .species = SPECIES_BALTOY, .moves = {MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Becky[] = { +static const struct TrainerMon sParty_Becky[] = { { - .iv = 0, .lvl = 22, .species = SPECIES_SANDSHREW, .moves = {MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH, MOVE_DIG} }, { - .iv = 0, .lvl = 22, .species = SPECIES_MARILL, .moves = {MOVE_ROLLOUT, MOVE_BUBBLE_BEAM, MOVE_TAIL_WHIP, MOVE_DEFENSE_CURL} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Carol[] = { +static const struct TrainerMon sParty_Carol[] = { { - .iv = 0, .lvl = 17, .species = SPECIES_TAILLOW, }, { - .iv = 0, .lvl = 17, .species = SPECIES_LOMBRE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nancy[] = { +static const struct TrainerMon sParty_Nancy[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_MARILL, }, { - .iv = 0, .lvl = 18, .species = SPECIES_LOMBRE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Martha[] = { +static const struct TrainerMon sParty_Martha[] = { { - .iv = 0, .lvl = 23, .species = SPECIES_SKITTY, }, { - .iv = 0, .lvl = 23, .species = SPECIES_SWABLU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Diana1[] = { +static const struct TrainerMon sParty_Diana1[] = { { - .iv = 0, .lvl = 19, .species = SPECIES_SHROOMISH, }, { - .iv = 0, .lvl = 19, .species = SPECIES_ODDISH, }, { - .iv = 0, .lvl = 19, .species = SPECIES_SWABLU, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Cedric[] = { +static const struct TrainerMon sParty_Cedric[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_WOBBUFFET, .moves = {MOVE_DESTINY_BOND, MOVE_SAFEGUARD, MOVE_COUNTER, MOVE_MIRROR_COAT} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Irene[] = { +static const struct TrainerMon sParty_Irene[] = { { - .iv = 0, .lvl = 17, .species = SPECIES_SHROOMISH, }, { - .iv = 0, .lvl = 17, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Diana2[] = { +static const struct TrainerMon sParty_Diana2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_SHROOMISH, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_GLOOM, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_SWABLU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Diana3[] = { +static const struct TrainerMon sParty_Diana3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_BRELOOM, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_GLOOM, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_SWABLU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Diana4[] = { +static const struct TrainerMon sParty_Diana4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_BRELOOM, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_GLOOM, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_SWABLU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Diana5[] = { +static const struct TrainerMon sParty_Diana5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 40, .species = SPECIES_BRELOOM, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 40, .species = SPECIES_VILEPLUME, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 40, .species = SPECIES_ALTARIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_AmyAndLiv1[] = { +static const struct TrainerMon sParty_AmyAndLiv1[] = { { - .iv = 0, .lvl = 15, .species = SPECIES_PLUSLE, }, { - .iv = 0, .lvl = 15, .species = SPECIES_MINUN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_AmyAndLiv2[] = { +static const struct TrainerMon sParty_AmyAndLiv2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 27, .species = SPECIES_PLUSLE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 27, .species = SPECIES_MINUN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GinaAndMia1[] = { +static const struct TrainerMon sParty_GinaAndMia1[] = { { - .iv = 0, .lvl = 6, .species = SPECIES_SEEDOT, }, { - .iv = 0, .lvl = 6, .species = SPECIES_LOTAD, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MiuAndYuki[] = { +static const struct TrainerMon sParty_MiuAndYuki[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_BEAUTIFLY, }, { - .iv = 0, .lvl = 26, .species = SPECIES_DUSTOX, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_AmyAndLiv3[] = { +static const struct TrainerMon sParty_AmyAndLiv3[] = { { - .iv = 0, .lvl = 9, .species = SPECIES_PLUSLE, }, { - .iv = 0, .lvl = 9, .species = SPECIES_MINUN, } }; -static const struct TrainerMonNoItemCustomMoves sParty_GinaAndMia2[] = { +static const struct TrainerMon sParty_GinaAndMia2[] = { { - .iv = 0, .lvl = 10, .species = SPECIES_DUSKULL, .moves = {MOVE_NIGHT_SHADE, MOVE_DISABLE, MOVE_NONE, MOVE_NONE} }, { - .iv = 0, .lvl = 10, .species = SPECIES_SHROOMISH, .moves = {MOVE_ABSORB, MOVE_LEECH_SEED, MOVE_NONE, MOVE_NONE} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_AmyAndLiv4[] = { +static const struct TrainerMon sParty_AmyAndLiv4[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 30, .species = SPECIES_PLUSLE, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 30, .species = SPECIES_MINUN, } }; -static const struct TrainerMonNoItemCustomMoves sParty_AmyAndLiv5[] = { +static const struct TrainerMon sParty_AmyAndLiv5[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 33, .species = SPECIES_PLUSLE, .moves = {MOVE_SPARK, MOVE_CHARGE, MOVE_FAKE_TEARS, MOVE_HELPING_HAND} }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 33, .species = SPECIES_MINUN, .moves = {MOVE_SPARK, MOVE_CHARGE, MOVE_CHARM, MOVE_HELPING_HAND} } }; -static const struct TrainerMonNoItemCustomMoves sParty_AmyAndLiv6[] = { +static const struct TrainerMon sParty_AmyAndLiv6[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 36, .species = SPECIES_PLUSLE, .moves = {MOVE_THUNDER, MOVE_CHARGE, MOVE_FAKE_TEARS, MOVE_HELPING_HAND} }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 36, .species = SPECIES_MINUN, .moves = {MOVE_THUNDER, MOVE_CHARGE, MOVE_CHARM, MOVE_HELPING_HAND} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Huey[] = { +static const struct TrainerMon sParty_Huey[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 12, .species = SPECIES_WINGULL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 12, .species = SPECIES_MACHOP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Edmond[] = { +static const struct TrainerMon sParty_Edmond[] = { { - .iv = 0, .lvl = 13, .species = SPECIES_WINGULL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ernest1[] = { +static const struct TrainerMon sParty_Ernest1[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 33, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dwayne[] = { +static const struct TrainerMon sParty_Dwayne[] = { { - .iv = 0, .lvl = 11, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 11, .species = SPECIES_MACHOP, }, { - .iv = 0, .lvl = 11, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Phillip[] = { +static const struct TrainerMon sParty_Phillip[] = { { - .iv = 0, .lvl = 44, .species = SPECIES_TENTACRUEL, }, { - .iv = 0, .lvl = 44, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Leonard[] = { +static const struct TrainerMon sParty_Leonard[] = { { - .iv = 0, .lvl = 43, .species = SPECIES_MACHOP, }, { - .iv = 0, .lvl = 43, .species = SPECIES_PELIPPER, }, { - .iv = 0, .lvl = 43, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Duncan[] = { +static const struct TrainerMon sParty_Duncan[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_SPHEAL, }, { - .iv = 0, .lvl = 25, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ernest2[] = { +static const struct TrainerMon sParty_Ernest2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 36, .species = SPECIES_WINGULL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 36, .species = SPECIES_TENTACOOL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 36, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ernest3[] = { +static const struct TrainerMon sParty_Ernest3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 39, .species = SPECIES_PELIPPER, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 39, .species = SPECIES_TENTACOOL, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 39, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ernest4[] = { +static const struct TrainerMon sParty_Ernest4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 42, .species = SPECIES_PELIPPER, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 42, .species = SPECIES_TENTACOOL, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 42, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ernest5[] = { +static const struct TrainerMon sParty_Ernest5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 45, .species = SPECIES_PELIPPER, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 45, .species = SPECIES_MACHOKE, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 45, .species = SPECIES_TENTACRUEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Eli[] = { +static const struct TrainerMon sParty_Eli[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 23, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonItemCustomMoves sParty_Annika[] = { +static const struct TrainerMon sParty_Annika[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 39, .species = SPECIES_FEEBAS, .heldItem = ITEM_ORAN_BERRY, .moves = {MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, MOVE_ATTRACT} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 39, .species = SPECIES_FEEBAS, .heldItem = ITEM_ORAN_BERRY, @@ -6556,61 +6206,56 @@ static const struct TrainerMonItemCustomMoves sParty_Annika[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jazmyn[] = { +static const struct TrainerMon sParty_Jazmyn[] = { { - .iv = 0, .lvl = 27, .species = SPECIES_ABSOL, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Jonas[] = { +static const struct TrainerMon sParty_Jonas[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_KOFFING, .moves = {MOVE_TOXIC, MOVE_THUNDER, MOVE_SELF_DESTRUCT, MOVE_SLUDGE_BOMB} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Kayley[] = { +static const struct TrainerMon sParty_Kayley[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_CASTFORM, .moves = {MOVE_SUNNY_DAY, MOVE_WEATHER_BALL, MOVE_FLAMETHROWER, MOVE_SOLAR_BEAM} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Auron[] = { +static const struct TrainerMon sParty_Auron[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_MANECTRIC, }, { - .iv = 0, .lvl = 33, .species = SPECIES_MACHAMP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kelvin[] = { +static const struct TrainerMon sParty_Kelvin[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 33, .species = SPECIES_MACHOKE, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 33, .species = SPECIES_SPHEAL, } }; -static const struct TrainerMonItemCustomMoves sParty_Marley[] = { +static const struct TrainerMon sParty_Marley[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 34, .species = SPECIES_MANECTRIC, .heldItem = ITEM_NONE, @@ -6618,1097 +6263,1053 @@ static const struct TrainerMonItemCustomMoves sParty_Marley[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Reyna[] = { +static const struct TrainerMon sParty_Reyna[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 33, .species = SPECIES_MEDITITE, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 33, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Hudson[] = { +static const struct TrainerMon sParty_Hudson[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Conor[] = { +static const struct TrainerMon sParty_Conor[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_CHINCHOU, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 33, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Edwin1[] = { +static const struct TrainerMon sParty_Edwin1[] = { { - .iv = 0, .lvl = 14, .species = SPECIES_LOMBRE, }, { - .iv = 0, .lvl = 14, .species = SPECIES_NUZLEAF, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Hector[] = { +static const struct TrainerMon sParty_Hector[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_ZANGOOSE, }, { - .iv = 0, .lvl = 18, .species = SPECIES_SEVIPER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_TabithaMossdeep[] = { +static const struct TrainerMon sParty_TabithaMossdeep[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 36, .species = SPECIES_CAMERUPT, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 38, .species = SPECIES_MIGHTYENA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 40, .species = SPECIES_GOLBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Edwin2[] = { +static const struct TrainerMon sParty_Edwin2[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_LOMBRE, }, { - .iv = 0, .lvl = 26, .species = SPECIES_NUZLEAF, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Edwin3[] = { +static const struct TrainerMon sParty_Edwin3[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_LOMBRE, }, { - .iv = 0, .lvl = 29, .species = SPECIES_NUZLEAF, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Edwin4[] = { +static const struct TrainerMon sParty_Edwin4[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_LOMBRE, }, { - .iv = 0, .lvl = 32, .species = SPECIES_NUZLEAF, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Edwin5[] = { +static const struct TrainerMon sParty_Edwin5[] = { { - .iv = 0, .lvl = 35, .species = SPECIES_LUDICOLO, }, { - .iv = 0, .lvl = 35, .species = SPECIES_SHIFTRY, } }; -static const struct TrainerMonNoItemCustomMoves sParty_WallyVR1[] = { +static const struct TrainerMon sParty_WallyVR1[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 44, .species = SPECIES_ALTARIA, .moves = {MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 43, .species = SPECIES_DELCATTY, .moves = {MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 44, .species = SPECIES_ROSELIA, .moves = {MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 41, .species = SPECIES_MAGNETON, .moves = {MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 45, .species = SPECIES_GARDEVOIR, .moves = {MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Mudkip[] = { +static const struct TrainerMon sParty_BrendanRoute103Mudkip[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_TREECKO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute110Mudkip[] = { +static const struct TrainerMon sParty_BrendanRoute110Mudkip[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_SLUGMA, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_WINGULL, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 20, .species = SPECIES_GROVYLE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute119Mudkip[] = { +static const struct TrainerMon sParty_BrendanRoute119Mudkip[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_SLUGMA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_PELIPPER, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_GROVYLE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Treecko[] = { +static const struct TrainerMon sParty_BrendanRoute103Treecko[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_TORCHIC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute110Treecko[] = { +static const struct TrainerMon sParty_BrendanRoute110Treecko[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_WINGULL, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_LOMBRE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 20, .species = SPECIES_COMBUSKEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute119Treecko[] = { +static const struct TrainerMon sParty_BrendanRoute119Treecko[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_PELIPPER, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_LOMBRE, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_COMBUSKEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Torchic[] = { +static const struct TrainerMon sParty_BrendanRoute103Torchic[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_MUDKIP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute110Torchic[] = { +static const struct TrainerMon sParty_BrendanRoute110Torchic[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_LOMBRE, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_SLUGMA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 20, .species = SPECIES_MARSHTOMP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute119Torchic[] = { +static const struct TrainerMon sParty_BrendanRoute119Torchic[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_LOMBRE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_SLUGMA, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_MARSHTOMP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute103Mudkip[] = { +static const struct TrainerMon sParty_MayRoute103Mudkip[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_TREECKO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute110Mudkip[] = { +static const struct TrainerMon sParty_MayRoute110Mudkip[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_WINGULL, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_SLUGMA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 20, .species = SPECIES_GROVYLE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute119Mudkip[] = { +static const struct TrainerMon sParty_MayRoute119Mudkip[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_SLUGMA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_LOMBRE, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_GROVYLE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute103Treecko[] = { +static const struct TrainerMon sParty_MayRoute103Treecko[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_TORCHIC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute110Treecko[] = { +static const struct TrainerMon sParty_MayRoute110Treecko[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_WINGULL, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_LOMBRE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 20, .species = SPECIES_COMBUSKEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute119Treecko[] = { +static const struct TrainerMon sParty_MayRoute119Treecko[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_PELIPPER, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_LOMBRE, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_COMBUSKEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute103Torchic[] = { +static const struct TrainerMon sParty_MayRoute103Torchic[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_MUDKIP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute110Torchic[] = { +static const struct TrainerMon sParty_MayRoute110Torchic[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_LOMBRE, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_SLUGMA, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 20, .species = SPECIES_MARSHTOMP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute119Torchic[] = { +static const struct TrainerMon sParty_MayRoute119Torchic[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_LOMBRE, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_SLUGMA, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_MARSHTOMP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isaac1[] = { +static const struct TrainerMon sParty_Isaac1[] = { { - .iv = 0, .lvl = 11, .species = SPECIES_WHISMUR, }, { - .iv = 0, .lvl = 11, .species = SPECIES_ZIGZAGOON, }, { - .iv = 0, .lvl = 11, .species = SPECIES_ARON, }, { - .iv = 0, .lvl = 11, .species = SPECIES_POOCHYENA, }, { - .iv = 0, .lvl = 11, .species = SPECIES_TAILLOW, }, { - .iv = 0, .lvl = 11, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Davis[] = { +static const struct TrainerMon sParty_Davis[] = { { - .iv = 0, .lvl = 27, .species = SPECIES_PINSIR, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Mitchell[] = { +static const struct TrainerMon sParty_Mitchell[] = { { - .iv = 0, .lvl = 43, .species = SPECIES_LUNATONE, .moves = {MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC} }, { - .iv = 0, .lvl = 43, .species = SPECIES_SOLROCK, .moves = {MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_SHADOW_BALL} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isaac2[] = { +static const struct TrainerMon sParty_Isaac2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_LOUDRED, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_LINOONE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_ARON, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_MIGHTYENA, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_SWELLOW, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isaac3[] = { +static const struct TrainerMon sParty_Isaac3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_LOUDRED, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_LINOONE, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_ARON, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_MIGHTYENA, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_SWELLOW, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isaac4[] = { +static const struct TrainerMon sParty_Isaac4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_LOUDRED, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_LINOONE, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_ARON, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_MIGHTYENA, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_SWELLOW, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isaac5[] = { +static const struct TrainerMon sParty_Isaac5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_LOUDRED, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_LINOONE, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_LAIRON, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_MIGHTYENA, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_SWELLOW, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_HARIYAMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lydia1[] = { +static const struct TrainerMon sParty_Lydia1[] = { { - .iv = 0, .lvl = 11, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 11, .species = SPECIES_SHROOMISH, }, { - .iv = 0, .lvl = 11, .species = SPECIES_MARILL, }, { - .iv = 0, .lvl = 11, .species = SPECIES_ROSELIA, }, { - .iv = 0, .lvl = 11, .species = SPECIES_SKITTY, }, { - .iv = 0, .lvl = 11, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Halle[] = { +static const struct TrainerMon sParty_Halle[] = { { - .iv = 0, .lvl = 43, .species = SPECIES_SABLEYE, }, { - .iv = 0, .lvl = 43, .species = SPECIES_ABSOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Garrison[] = { +static const struct TrainerMon sParty_Garrison[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_SANDSLASH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lydia2[] = { +static const struct TrainerMon sParty_Lydia2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_WINGULL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_SHROOMISH, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_MARILL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_ROSELIA, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_SKITTY, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 22, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lydia3[] = { +static const struct TrainerMon sParty_Lydia3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_PELIPPER, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_BRELOOM, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_MARILL, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_ROSELIA, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_DELCATTY, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 25, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lydia4[] = { +static const struct TrainerMon sParty_Lydia4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_PELIPPER, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_BRELOOM, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_MARILL, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_ROSELIA, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_DELCATTY, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 28, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lydia5[] = { +static const struct TrainerMon sParty_Lydia5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_PELIPPER, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_BRELOOM, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_AZUMARILL, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_ROSELIA, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_DELCATTY, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 31, .species = SPECIES_SEAKING, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jackson1[] = { +static const struct TrainerMon sParty_Jackson1[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 27, .species = SPECIES_BRELOOM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lorenzo[] = { +static const struct TrainerMon sParty_Lorenzo[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 28, .species = SPECIES_SEEDOT, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 28, .species = SPECIES_NUZLEAF, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 28, .species = SPECIES_LOMBRE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sebastian[] = { +static const struct TrainerMon sParty_Sebastian[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 39, .species = SPECIES_CACTURNE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jackson2[] = { +static const struct TrainerMon sParty_Jackson2[] = { { - .iv = 60, + .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), .lvl = 31, .species = SPECIES_BRELOOM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jackson3[] = { +static const struct TrainerMon sParty_Jackson3[] = { { - .iv = 70, + .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), .lvl = 34, .species = SPECIES_BRELOOM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jackson4[] = { +static const struct TrainerMon sParty_Jackson4[] = { { - .iv = 80, + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), .lvl = 37, .species = SPECIES_BRELOOM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jackson5[] = { +static const struct TrainerMon sParty_Jackson5[] = { { - .iv = 90, + .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), .lvl = 39, .species = SPECIES_KECLEON, }, { - .iv = 90, + .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), .lvl = 39, .species = SPECIES_BRELOOM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Catherine1[] = { +static const struct TrainerMon sParty_Catherine1[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 26, .species = SPECIES_GLOOM, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 26, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jenna[] = { +static const struct TrainerMon sParty_Jenna[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 28, .species = SPECIES_LOTAD, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 28, .species = SPECIES_LOMBRE, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 28, .species = SPECIES_NUZLEAF, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sophia[] = { +static const struct TrainerMon sParty_Sophia[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 38, .species = SPECIES_SWABLU, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 38, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Catherine2[] = { +static const struct TrainerMon sParty_Catherine2[] = { { - .iv = 60, + .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), .lvl = 30, .species = SPECIES_GLOOM, }, { - .iv = 60, + .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), .lvl = 30, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Catherine3[] = { +static const struct TrainerMon sParty_Catherine3[] = { { - .iv = 70, + .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), .lvl = 33, .species = SPECIES_GLOOM, }, { - .iv = 70, + .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), .lvl = 33, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Catherine4[] = { +static const struct TrainerMon sParty_Catherine4[] = { { - .iv = 80, + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), .lvl = 36, .species = SPECIES_GLOOM, }, { - .iv = 80, + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), .lvl = 36, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Catherine5[] = { +static const struct TrainerMon sParty_Catherine5[] = { { - .iv = 90, + .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), .lvl = 39, .species = SPECIES_BELLOSSOM, }, { - .iv = 90, + .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), .lvl = 39, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Julio[] = { +static const struct TrainerMon sParty_Julio[] = { { - .iv = 0, .lvl = 21, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSeafloorCavern5[] = { +static const struct TrainerMon sParty_GruntSeafloorCavern5[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 35, .species = SPECIES_MIGHTYENA, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 35, .species = SPECIES_GOLBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntUnused[] = { +static const struct TrainerMon sParty_GruntUnused[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_WAILMER, }, { - .iv = 0, .lvl = 31, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtPyre4[] = { +static const struct TrainerMon sParty_GruntMtPyre4[] = { { - .iv = 0, .lvl = 30, .species = SPECIES_WAILMER, }, { - .iv = 0, .lvl = 30, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntJaggedPass[] = { +static const struct TrainerMon sParty_GruntJaggedPass[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 22, .species = SPECIES_POOCHYENA, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 22, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Marc[] = { +static const struct TrainerMon sParty_Marc[] = { { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 8, .species = SPECIES_GEODUDE, }, { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 8, .species = SPECIES_GEODUDE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Brenden[] = { +static const struct TrainerMon sParty_Brenden[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 13, .species = SPECIES_MACHOP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lilith[] = { +static const struct TrainerMon sParty_Lilith[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 13, .species = SPECIES_MEDITITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cristian[] = { +static const struct TrainerMon sParty_Cristian[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 13, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sylvia[] = { +static const struct TrainerMon sParty_Sylvia[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 36, .species = SPECIES_MEDITITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Leonardo[] = { +static const struct TrainerMon sParty_Leonardo[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonItemCustomMoves sParty_Athena[] = { +static const struct TrainerMon sParty_Athena[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 32, .species = SPECIES_MANECTRIC, .heldItem = ITEM_NONE, .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_NONE} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 32, .species = SPECIES_LINOONE, .heldItem = ITEM_NONE, @@ -7716,2612 +7317,2396 @@ static const struct TrainerMonItemCustomMoves sParty_Athena[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Harrison[] = { +static const struct TrainerMon sParty_Harrison[] = { { - .iv = 0, .lvl = 35, .species = SPECIES_TENTACRUEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtChimney2[] = { +static const struct TrainerMon sParty_GruntMtChimney2[] = { { - .iv = 0, .lvl = 20, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Clarence[] = { +static const struct TrainerMon sParty_Clarence[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Terry[] = { +static const struct TrainerMon sParty_Terry[] = { { - .iv = 0, .lvl = 37, .species = SPECIES_GIRAFARIG, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nate[] = { +static const struct TrainerMon sParty_Nate[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 36, .species = SPECIES_SPOINK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kathleen[] = { +static const struct TrainerMon sParty_Kathleen[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 36, .species = SPECIES_KADABRA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Clifford[] = { +static const struct TrainerMon sParty_Clifford[] = { { - .iv = 0, .lvl = 36, .species = SPECIES_GIRAFARIG, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Nicholas[] = { +static const struct TrainerMon sParty_Nicholas[] = { { - .iv = 0, .lvl = 36, .species = SPECIES_WOBBUFFET, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter3[] = { +static const struct TrainerMon sParty_GruntSpaceCenter3[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_ZUBAT, }, { - .iv = 0, .lvl = 31, .species = SPECIES_POOCHYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter4[] = { +static const struct TrainerMon sParty_GruntSpaceCenter4[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_BALTOY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter5[] = { +static const struct TrainerMon sParty_GruntSpaceCenter5[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter6[] = { +static const struct TrainerMon sParty_GruntSpaceCenter6[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_MIGHTYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter7[] = { +static const struct TrainerMon sParty_GruntSpaceCenter7[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_BALTOY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Macey[] = { +static const struct TrainerMon sParty_Macey[] = { { - .iv = 0, .lvl = 36, .species = SPECIES_NATU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRustboroTreecko[] = { +static const struct TrainerMon sParty_BrendanRustboroTreecko[] = { { - .iv = 25, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 13, .species = SPECIES_LOTAD, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 15, .species = SPECIES_TORCHIC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRustboroMudkip[] = { +static const struct TrainerMon sParty_BrendanRustboroMudkip[] = { { - .iv = 25, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 13, .species = SPECIES_WINGULL, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 15, .species = SPECIES_TREECKO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Paxton[] = { +static const struct TrainerMon sParty_Paxton[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_SWELLOW, }, { - .iv = 0, .lvl = 33, .species = SPECIES_BRELOOM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isabella[] = { +static const struct TrainerMon sParty_Isabella[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntWeatherInst5[] = { +static const struct TrainerMon sParty_GruntWeatherInst5[] = { { - .iv = 0, .lvl = 27, .species = SPECIES_ZUBAT, }, { - .iv = 0, .lvl = 27, .species = SPECIES_POOCHYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_TabithaMtChimney[] = { +static const struct TrainerMon sParty_TabithaMtChimney[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 18, .species = SPECIES_NUMEL, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 20, .species = SPECIES_POOCHYENA, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 22, .species = SPECIES_NUMEL, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 22, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jonathan[] = { +static const struct TrainerMon sParty_Jonathan[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_KECLEON, }, { - .iv = 0, .lvl = 33, .species = SPECIES_LOUDRED, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRustboroTorchic[] = { +static const struct TrainerMon sParty_BrendanRustboroTorchic[] = { { - .iv = 25, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 13, .species = SPECIES_SLUGMA, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 15, .species = SPECIES_MUDKIP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRustboroMudkip[] = { +static const struct TrainerMon sParty_MayRustboroMudkip[] = { { - .iv = 25, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 13, .species = SPECIES_WINGULL, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 15, .species = SPECIES_TREECKO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MaxieMagmaHideout[] = { +static const struct TrainerMon sParty_MaxieMagmaHideout[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 37, .species = SPECIES_MIGHTYENA, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 38, .species = SPECIES_CROBAT, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 39, .species = SPECIES_CAMERUPT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MaxieMtChimney[] = { +static const struct TrainerMon sParty_MaxieMtChimney[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 24, .species = SPECIES_MIGHTYENA, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 24, .species = SPECIES_ZUBAT, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 25, .species = SPECIES_CAMERUPT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tiana[] = { +static const struct TrainerMon sParty_Tiana[] = { { - .iv = 0, .lvl = 4, .species = SPECIES_ZIGZAGOON, }, { - .iv = 0, .lvl = 4, .species = SPECIES_SHROOMISH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Haley1[] = { +static const struct TrainerMon sParty_Haley1[] = { { - .iv = 0, .lvl = 6, .species = SPECIES_LOTAD, }, { - .iv = 0, .lvl = 6, .species = SPECIES_SHROOMISH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Janice[] = { +static const struct TrainerMon sParty_Janice[] = { { - .iv = 0, .lvl = 9, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Vivi[] = { +static const struct TrainerMon sParty_Vivi[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 15, .species = SPECIES_MARILL, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 15, .species = SPECIES_SHROOMISH, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 15, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Haley2[] = { +static const struct TrainerMon sParty_Haley2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_LOMBRE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_SHROOMISH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Haley3[] = { +static const struct TrainerMon sParty_Haley3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_LOMBRE, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_BRELOOM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Haley4[] = { +static const struct TrainerMon sParty_Haley4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 32, .species = SPECIES_LOMBRE, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 32, .species = SPECIES_BRELOOM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Haley5[] = { +static const struct TrainerMon sParty_Haley5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_SWELLOW, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_LOMBRE, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 34, .species = SPECIES_BRELOOM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sally[] = { +static const struct TrainerMon sParty_Sally[] = { { - .iv = 0, .lvl = 16, .species = SPECIES_ODDISH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Robin[] = { +static const struct TrainerMon sParty_Robin[] = { { - .iv = 0, .lvl = 14, .species = SPECIES_SKITTY, }, { - .iv = 0, .lvl = 14, .species = SPECIES_SHROOMISH, }, { - .iv = 0, .lvl = 14, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Andrea[] = { +static const struct TrainerMon sParty_Andrea[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 40, .species = SPECIES_LUVDISC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Crissy[] = { +static const struct TrainerMon sParty_Crissy[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 39, .species = SPECIES_GOLDEEN, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 39, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Rick[] = { +static const struct TrainerMon sParty_Rick[] = { { - .iv = 0, .lvl = 4, .species = SPECIES_WURMPLE, }, { - .iv = 0, .lvl = 4, .species = SPECIES_WURMPLE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lyle[] = { +static const struct TrainerMon sParty_Lyle[] = { { - .iv = 0, .lvl = 3, .species = SPECIES_WURMPLE, }, { - .iv = 0, .lvl = 3, .species = SPECIES_WURMPLE, }, { - .iv = 0, .lvl = 3, .species = SPECIES_WURMPLE, }, { - .iv = 0, .lvl = 3, .species = SPECIES_WURMPLE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jose[] = { +static const struct TrainerMon sParty_Jose[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 8, .species = SPECIES_WURMPLE, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 8, .species = SPECIES_NINCADA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Doug[] = { +static const struct TrainerMon sParty_Doug[] = { { - .iv = 0, .lvl = 28, .species = SPECIES_NINCADA, }, { - .iv = 0, .lvl = 28, .species = SPECIES_NINJASK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Greg[] = { +static const struct TrainerMon sParty_Greg[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_VOLBEAT, }, { - .iv = 0, .lvl = 25, .species = SPECIES_ILLUMISE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kent[] = { +static const struct TrainerMon sParty_Kent[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_NINJASK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_James1[] = { +static const struct TrainerMon sParty_James1[] = { { - .iv = 0, .lvl = 6, .species = SPECIES_NINCADA, }, { - .iv = 0, .lvl = 6, .species = SPECIES_NINCADA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_James2[] = { +static const struct TrainerMon sParty_James2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 27, .species = SPECIES_NINJASK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_James3[] = { +static const struct TrainerMon sParty_James3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_DUSTOX, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 29, .species = SPECIES_NINJASK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_James4[] = { +static const struct TrainerMon sParty_James4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_SURSKIT, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_DUSTOX, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 31, .species = SPECIES_NINJASK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_James5[] = { +static const struct TrainerMon sParty_James5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_SURSKIT, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_NINJASK, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_DUSTOX, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_NINJASK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Brice[] = { +static const struct TrainerMon sParty_Brice[] = { { - .iv = 0, .lvl = 17, .species = SPECIES_NUMEL, }, { - .iv = 0, .lvl = 17, .species = SPECIES_MACHOP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Trent1[] = { +static const struct TrainerMon sParty_Trent1[] = { { - .iv = 0, .lvl = 16, .species = SPECIES_GEODUDE, }, { - .iv = 0, .lvl = 17, .species = SPECIES_GEODUDE, }, { - .iv = 0, .lvl = 16, .species = SPECIES_GEODUDE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lenny[] = { +static const struct TrainerMon sParty_Lenny[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_GEODUDE, }, { - .iv = 0, .lvl = 18, .species = SPECIES_MACHOP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lucas1[] = { +static const struct TrainerMon sParty_Lucas1[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_GEODUDE, }, { - .iv = 0, .lvl = 18, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Alan[] = { +static const struct TrainerMon sParty_Alan[] = { { - .iv = 0, .lvl = 22, .species = SPECIES_GEODUDE, }, { - .iv = 0, .lvl = 22, .species = SPECIES_NOSEPASS, }, { - .iv = 0, .lvl = 22, .species = SPECIES_GRAVELER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Clark[] = { +static const struct TrainerMon sParty_Clark[] = { { - .iv = 0, .lvl = 8, .species = SPECIES_GEODUDE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Eric[] = { +static const struct TrainerMon sParty_Eric[] = { { - .iv = 0, .lvl = 20, .species = SPECIES_GEODUDE, }, { - .iv = 0, .lvl = 20, .species = SPECIES_BALTOY, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Lucas2[] = { +static const struct TrainerMon sParty_Lucas2[] = { { - .iv = 0, .lvl = 9, .species = SPECIES_WAILMER, .moves = {MOVE_SPLASH, MOVE_WATER_GUN, MOVE_NONE, MOVE_NONE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Mike1[] = { +static const struct TrainerMon sParty_Mike1[] = { { - .iv = 0, .lvl = 10, .species = SPECIES_PELIPPER, .moves = {MOVE_GUST, MOVE_GROWL, MOVE_NONE, MOVE_NONE} }, { - .iv = 0, .lvl = 10, .species = SPECIES_POOCHYENA, .moves = {MOVE_BITE, MOVE_SCARY_FACE, MOVE_NONE, MOVE_NONE} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Mike2[] = { +static const struct TrainerMon sParty_Mike2[] = { { - .iv = 0, .lvl = 16, .species = SPECIES_GEODUDE, }, { - .iv = 0, .lvl = 16, .species = SPECIES_GEODUDE, }, { - .iv = 0, .lvl = 16, .species = SPECIES_MACHOP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Trent2[] = { +static const struct TrainerMon sParty_Trent2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 24, .species = SPECIES_GEODUDE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 24, .species = SPECIES_GEODUDE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 24, .species = SPECIES_GEODUDE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 24, .species = SPECIES_GRAVELER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Trent3[] = { +static const struct TrainerMon sParty_Trent3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 27, .species = SPECIES_GEODUDE, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 27, .species = SPECIES_GEODUDE, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 27, .species = SPECIES_GRAVELER, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 27, .species = SPECIES_GRAVELER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Trent4[] = { +static const struct TrainerMon sParty_Trent4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_GEODUDE, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_GRAVELER, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_GRAVELER, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_GRAVELER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Trent5[] = { +static const struct TrainerMon sParty_Trent5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_GRAVELER, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_GRAVELER, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_GRAVELER, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_GOLEM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_DezAndLuke[] = { +static const struct TrainerMon sParty_DezAndLuke[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_DELCATTY, }, { - .iv = 0, .lvl = 31, .species = SPECIES_MANECTRIC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_LeaAndJed[] = { +static const struct TrainerMon sParty_LeaAndJed[] = { { - .iv = 0, .lvl = 45, .species = SPECIES_LUVDISC, }, { - .iv = 0, .lvl = 45, .species = SPECIES_LUVDISC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_KiraAndDan1[] = { +static const struct TrainerMon sParty_KiraAndDan1[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_VOLBEAT, }, { - .iv = 0, .lvl = 25, .species = SPECIES_ILLUMISE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_KiraAndDan2[] = { +static const struct TrainerMon sParty_KiraAndDan2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 30, .species = SPECIES_VOLBEAT, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 30, .species = SPECIES_ILLUMISE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_KiraAndDan3[] = { +static const struct TrainerMon sParty_KiraAndDan3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_VOLBEAT, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_ILLUMISE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_KiraAndDan4[] = { +static const struct TrainerMon sParty_KiraAndDan4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 36, .species = SPECIES_VOLBEAT, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 36, .species = SPECIES_ILLUMISE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_KiraAndDan5[] = { +static const struct TrainerMon sParty_KiraAndDan5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 39, .species = SPECIES_VOLBEAT, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 39, .species = SPECIES_ILLUMISE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Johanna[] = { +static const struct TrainerMon sParty_Johanna[] = { { - .iv = 0, .lvl = 13, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Gerald[] = { +static const struct TrainerMon sParty_Gerald[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 23, .species = SPECIES_KECLEON, .moves = {MOVE_FLAMETHROWER, MOVE_FURY_SWIPES, MOVE_FEINT_ATTACK, MOVE_BIND} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Vivian[] = { +static const struct TrainerMon sParty_Vivian[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_MEDITITE, .moves = {MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, MOVE_THUNDER_PUNCH} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_MEDITITE, .moves = {MOVE_THUNDER_PUNCH, MOVE_DETECT, MOVE_CONFUSION, MOVE_MEDITATE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Danielle[] = { +static const struct TrainerMon sParty_Danielle[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 23, .species = SPECIES_MEDITITE, .moves = {MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, MOVE_FIRE_PUNCH} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Hideo[] = { +static const struct TrainerMon sParty_Hideo[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_KOFFING, .moves = {MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN} }, { - .iv = 0, .lvl = 25, .species = SPECIES_KOFFING, .moves = {MOVE_TACKLE, MOVE_POISON_GAS, MOVE_SLUDGE, MOVE_SMOKESCREEN} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Keigo[] = { +static const struct TrainerMon sParty_Keigo[] = { { - .iv = 0, .lvl = 28, .species = SPECIES_KOFFING, .moves = {MOVE_POISON_GAS, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN} }, { - .iv = 0, .lvl = 28, .species = SPECIES_NINJASK, .moves = {MOVE_SAND_ATTACK, MOVE_DOUBLE_TEAM, MOVE_FURY_CUTTER, MOVE_SWORDS_DANCE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_Riley[] = { +static const struct TrainerMon sParty_Riley[] = { { - .iv = 0, .lvl = 28, .species = SPECIES_NINCADA, .moves = {MOVE_LEECH_LIFE, MOVE_FURY_SWIPES, MOVE_MIND_READER, MOVE_DIG} }, { - .iv = 0, .lvl = 28, .species = SPECIES_KOFFING, .moves = {MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Flint[] = { +static const struct TrainerMon sParty_Flint[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 29, .species = SPECIES_SWELLOW, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 29, .species = SPECIES_XATU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ashley[] = { +static const struct TrainerMon sParty_Ashley[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_SWABLU, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_SWABLU, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 27, .species = SPECIES_SWABLU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_WallyMauville[] = { +static const struct TrainerMon sParty_WallyMauville[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 16, .species = SPECIES_RALTS, } }; -static const struct TrainerMonNoItemCustomMoves sParty_WallyVR2[] = { +static const struct TrainerMon sParty_WallyVR2[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 47, .species = SPECIES_ALTARIA, .moves = {MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 46, .species = SPECIES_DELCATTY, .moves = {MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 47, .species = SPECIES_ROSELIA, .moves = {MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 44, .species = SPECIES_MAGNETON, .moves = {MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 48, .species = SPECIES_GARDEVOIR, .moves = {MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT} } }; -static const struct TrainerMonNoItemCustomMoves sParty_WallyVR3[] = { +static const struct TrainerMon sParty_WallyVR3[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 50, .species = SPECIES_ALTARIA, .moves = {MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 49, .species = SPECIES_DELCATTY, .moves = {MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 50, .species = SPECIES_ROSELIA, .moves = {MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 47, .species = SPECIES_MAGNETON, .moves = {MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 51, .species = SPECIES_GARDEVOIR, .moves = {MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT} } }; -static const struct TrainerMonNoItemCustomMoves sParty_WallyVR4[] = { +static const struct TrainerMon sParty_WallyVR4[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 53, .species = SPECIES_ALTARIA, .moves = {MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 52, .species = SPECIES_DELCATTY, .moves = {MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 53, .species = SPECIES_ROSELIA, .moves = {MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 50, .species = SPECIES_MAGNETON, .moves = {MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 54, .species = SPECIES_GARDEVOIR, .moves = {MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT} } }; -static const struct TrainerMonNoItemCustomMoves sParty_WallyVR5[] = { +static const struct TrainerMon sParty_WallyVR5[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 56, .species = SPECIES_ALTARIA, .moves = {MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 55, .species = SPECIES_DELCATTY, .moves = {MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 56, .species = SPECIES_ROSELIA, .moves = {MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC} }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 53, .species = SPECIES_MAGNETON, .moves = {MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH} }, { - .iv = 250, + .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), .lvl = 57, .species = SPECIES_GARDEVOIR, .moves = {MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanLilycoveMudkip[] = { +static const struct TrainerMon sParty_BrendanLilycoveMudkip[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_TROPIUS, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_SLUGMA, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_PELIPPER, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 34, .species = SPECIES_GROVYLE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanLilycoveTreecko[] = { +static const struct TrainerMon sParty_BrendanLilycoveTreecko[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_TROPIUS, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_PELIPPER, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_LUDICOLO, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 34, .species = SPECIES_COMBUSKEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanLilycoveTorchic[] = { +static const struct TrainerMon sParty_BrendanLilycoveTorchic[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_TROPIUS, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_LUDICOLO, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_SLUGMA, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 34, .species = SPECIES_MARSHTOMP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayLilycoveMudkip[] = { +static const struct TrainerMon sParty_MayLilycoveMudkip[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_TROPIUS, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_SLUGMA, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_PELIPPER, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 34, .species = SPECIES_GROVYLE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayLilycoveTreecko[] = { +static const struct TrainerMon sParty_MayLilycoveTreecko[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_TROPIUS, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_PELIPPER, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_LUDICOLO, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 34, .species = SPECIES_COMBUSKEN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayLilycoveTorchic[] = { +static const struct TrainerMon sParty_MayLilycoveTorchic[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 31, .species = SPECIES_TROPIUS, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_LUDICOLO, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 32, .species = SPECIES_SLUGMA, }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 34, .species = SPECIES_MARSHTOMP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jonah[] = { +static const struct TrainerMon sParty_Jonah[] = { { - .iv = 0, .lvl = 30, .species = SPECIES_WAILMER, }, { - .iv = 0, .lvl = 31, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 32, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Henry[] = { +static const struct TrainerMon sParty_Henry[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_CARVANHA, }, { - .iv = 0, .lvl = 34, .species = SPECIES_TENTACRUEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Roger[] = { +static const struct TrainerMon sParty_Roger[] = { { - .iv = 0, .lvl = 15, .species = SPECIES_MAGIKARP, }, { - .iv = 0, .lvl = 25, .species = SPECIES_MAGIKARP, }, { - .iv = 0, .lvl = 35, .species = SPECIES_GYARADOS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Alexa[] = { +static const struct TrainerMon sParty_Alexa[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 34, .species = SPECIES_GLOOM, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 34, .species = SPECIES_AZUMARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Ruben[] = { +static const struct TrainerMon sParty_Ruben[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 34, .species = SPECIES_SHIFTRY, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 34, .species = SPECIES_NOSEPASS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Koji1[] = { +static const struct TrainerMon sParty_Koji1[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Wayne[] = { +static const struct TrainerMon sParty_Wayne[] = { { - .iv = 0, .lvl = 31, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 31, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 36, .species = SPECIES_WAILMER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Aidan[] = { +static const struct TrainerMon sParty_Aidan[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_SWELLOW, }, { - .iv = 0, .lvl = 32, .species = SPECIES_SKARMORY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Reed[] = { +static const struct TrainerMon sParty_Reed[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_SPHEAL, }, { - .iv = 0, .lvl = 33, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tisha[] = { +static const struct TrainerMon sParty_Tisha[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_CHINCHOU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_ToriAndTia[] = { +static const struct TrainerMon sParty_ToriAndTia[] = { { - .iv = 0, .lvl = 19, .species = SPECIES_SPINDA, }, { - .iv = 0, .lvl = 19, .species = SPECIES_SPINDA, } }; -static const struct TrainerMonNoItemCustomMoves sParty_KimAndIris[] = { +static const struct TrainerMon sParty_KimAndIris[] = { { - .iv = 0, .lvl = 32, .species = SPECIES_SWABLU, .moves = {MOVE_SING, MOVE_FURY_ATTACK, MOVE_SAFEGUARD, MOVE_AERIAL_ACE} }, { - .iv = 0, .lvl = 35, .species = SPECIES_NUMEL, .moves = {MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_REST, MOVE_EARTHQUAKE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_TyraAndIvy[] = { +static const struct TrainerMon sParty_TyraAndIvy[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_ROSELIA, .moves = {MOVE_GROWTH, MOVE_STUN_SPORE, MOVE_MEGA_DRAIN, MOVE_LEECH_SEED} }, { - .iv = 0, .lvl = 20, .species = SPECIES_GRAVELER, .moves = {MOVE_DEFENSE_CURL, MOVE_ROLLOUT, MOVE_MUD_SPORT, MOVE_ROCK_THROW} } }; -static const struct TrainerMonNoItemCustomMoves sParty_MelAndPaul[] = { +static const struct TrainerMon sParty_MelAndPaul[] = { { - .iv = 0, .lvl = 27, .species = SPECIES_DUSTOX, .moves = {MOVE_GUST, MOVE_PSYBEAM, MOVE_TOXIC, MOVE_PROTECT} }, { - .iv = 0, .lvl = 27, .species = SPECIES_BEAUTIFLY, .moves = {MOVE_GUST, MOVE_MEGA_DRAIN, MOVE_ATTRACT, MOVE_STUN_SPORE} } }; -static const struct TrainerMonNoItemCustomMoves sParty_JohnAndJay1[] = { +static const struct TrainerMon sParty_JohnAndJay1[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 39, .species = SPECIES_MEDICHAM, .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT} }, { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 39, .species = SPECIES_HARIYAMA, .moves = {MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM} } }; -static const struct TrainerMonNoItemCustomMoves sParty_JohnAndJay2[] = { +static const struct TrainerMon sParty_JohnAndJay2[] = { { - .iv = 210, + .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), .lvl = 43, .species = SPECIES_MEDICHAM, .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT} }, { - .iv = 210, + .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), .lvl = 43, .species = SPECIES_HARIYAMA, .moves = {MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM} } }; -static const struct TrainerMonNoItemCustomMoves sParty_JohnAndJay3[] = { +static const struct TrainerMon sParty_JohnAndJay3[] = { { - .iv = 220, + .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), .lvl = 46, .species = SPECIES_MEDICHAM, .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT} }, { - .iv = 220, + .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), .lvl = 46, .species = SPECIES_HARIYAMA, .moves = {MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM} } }; -static const struct TrainerMonNoItemCustomMoves sParty_JohnAndJay4[] = { +static const struct TrainerMon sParty_JohnAndJay4[] = { { - .iv = 230, + .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), .lvl = 49, .species = SPECIES_MEDICHAM, .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT} }, { - .iv = 230, + .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), .lvl = 49, .species = SPECIES_HARIYAMA, .moves = {MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM} } }; -static const struct TrainerMonNoItemCustomMoves sParty_JohnAndJay5[] = { +static const struct TrainerMon sParty_JohnAndJay5[] = { { - .iv = 240, + .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), .lvl = 52, .species = SPECIES_MEDICHAM, .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT} }, { - .iv = 240, + .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), .lvl = 52, .species = SPECIES_HARIYAMA, .moves = {MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_ReliAndIan[] = { +static const struct TrainerMon sParty_ReliAndIan[] = { { - .iv = 0, .lvl = 35, .species = SPECIES_AZUMARILL, }, { - .iv = 0, .lvl = 33, .species = SPECIES_WINGULL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_LilaAndRoy1[] = { +static const struct TrainerMon sParty_LilaAndRoy1[] = { { - .iv = 0, .lvl = 34, .species = SPECIES_CHINCHOU, }, { - .iv = 0, .lvl = 33, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_LilaAndRoy2[] = { +static const struct TrainerMon sParty_LilaAndRoy2[] = { { - .iv = 0, .lvl = 42, .species = SPECIES_CHINCHOU, }, { - .iv = 0, .lvl = 40, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_LilaAndRoy3[] = { +static const struct TrainerMon sParty_LilaAndRoy3[] = { { - .iv = 0, .lvl = 45, .species = SPECIES_LANTURN, }, { - .iv = 0, .lvl = 43, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_LilaAndRoy4[] = { +static const struct TrainerMon sParty_LilaAndRoy4[] = { { - .iv = 0, .lvl = 48, .species = SPECIES_LANTURN, }, { - .iv = 0, .lvl = 46, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_LilaAndRoy5[] = { +static const struct TrainerMon sParty_LilaAndRoy5[] = { { - .iv = 0, .lvl = 51, .species = SPECIES_LANTURN, }, { - .iv = 0, .lvl = 49, .species = SPECIES_SHARPEDO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_LisaAndRay[] = { +static const struct TrainerMon sParty_LisaAndRay[] = { { - .iv = 0, .lvl = 27, .species = SPECIES_GOLDEEN, }, { - .iv = 0, .lvl = 25, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Chris[] = { +static const struct TrainerMon sParty_Chris[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_MAGIKARP, }, { - .iv = 0, .lvl = 20, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 26, .species = SPECIES_FEEBAS, }, { - .iv = 0, .lvl = 23, .species = SPECIES_CARVANHA, } }; -static const struct TrainerMonItemDefaultMoves sParty_Dawson[] = { +static const struct TrainerMon sParty_Dawson[] = { { - .iv = 0, .lvl = 8, .species = SPECIES_ZIGZAGOON, .heldItem = ITEM_NUGGET }, { - .iv = 0, .lvl = 8, .species = SPECIES_POOCHYENA, .heldItem = ITEM_NONE } }; -static const struct TrainerMonItemDefaultMoves sParty_Sarah[] = { +static const struct TrainerMon sParty_Sarah[] = { { - .iv = 0, .lvl = 8, .species = SPECIES_LOTAD, .heldItem = ITEM_NONE }, { - .iv = 0, .lvl = 8, .species = SPECIES_ZIGZAGOON, .heldItem = ITEM_NUGGET } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Darian[] = { +static const struct TrainerMon sParty_Darian[] = { { - .iv = 0, .lvl = 9, .species = SPECIES_MAGIKARP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Hailey[] = { +static const struct TrainerMon sParty_Hailey[] = { { - .iv = 0, .lvl = 13, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Chandler[] = { +static const struct TrainerMon sParty_Chandler[] = { { - .iv = 0, .lvl = 12, .species = SPECIES_TENTACOOL, }, { - .iv = 0, .lvl = 12, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonItemDefaultMoves sParty_Kaleb[] = { +static const struct TrainerMon sParty_Kaleb[] = { { - .iv = 0, .lvl = 14, .species = SPECIES_MINUN, .heldItem = ITEM_ORAN_BERRY }, { - .iv = 0, .lvl = 14, .species = SPECIES_PLUSLE, .heldItem = ITEM_ORAN_BERRY } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Joseph[] = { +static const struct TrainerMon sParty_Joseph[] = { { - .iv = 0, .lvl = 14, .species = SPECIES_ELECTRIKE, }, { - .iv = 0, .lvl = 14, .species = SPECIES_VOLTORB, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Alyssa[] = { +static const struct TrainerMon sParty_Alyssa[] = { { - .iv = 0, .lvl = 15, .species = SPECIES_MAGNEMITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Marcos[] = { +static const struct TrainerMon sParty_Marcos[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 15, .species = SPECIES_VOLTORB, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Rhett[] = { +static const struct TrainerMon sParty_Rhett[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 15, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tyron[] = { +static const struct TrainerMon sParty_Tyron[] = { { - .iv = 0, .lvl = 19, .species = SPECIES_SANDSHREW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Celina[] = { +static const struct TrainerMon sParty_Celina[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Bianca[] = { +static const struct TrainerMon sParty_Bianca[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_SHROOMISH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Hayden[] = { +static const struct TrainerMon sParty_Hayden[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sophie[] = { +static const struct TrainerMon sParty_Sophie[] = { { - .iv = 0, .lvl = 17, .species = SPECIES_MARILL, }, { - .iv = 0, .lvl = 19, .species = SPECIES_LOMBRE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Coby[] = { +static const struct TrainerMon sParty_Coby[] = { { - .iv = 0, .lvl = 17, .species = SPECIES_SKARMORY, }, { - .iv = 0, .lvl = 19, .species = SPECIES_SWELLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lawrence[] = { +static const struct TrainerMon sParty_Lawrence[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_BALTOY, }, { - .iv = 0, .lvl = 18, .species = SPECIES_SANDSHREW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Wyatt[] = { +static const struct TrainerMon sParty_Wyatt[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_ARON, }, { - .iv = 0, .lvl = 18, .species = SPECIES_ARON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Angelina[] = { +static const struct TrainerMon sParty_Angelina[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_LOMBRE, }, { - .iv = 0, .lvl = 18, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kai[] = { +static const struct TrainerMon sParty_Kai[] = { { - .iv = 0, .lvl = 19, .species = SPECIES_BARBOACH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Charlotte[] = { +static const struct TrainerMon sParty_Charlotte[] = { { - .iv = 0, .lvl = 19, .species = SPECIES_NUZLEAF, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Deandre[] = { +static const struct TrainerMon sParty_Deandre[] = { { - .iv = 0, .lvl = 14, .species = SPECIES_ZIGZAGOON, }, { - .iv = 0, .lvl = 14, .species = SPECIES_ARON, }, { - .iv = 0, .lvl = 14, .species = SPECIES_ELECTRIKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout1[] = { +static const struct TrainerMon sParty_GruntMagmaHideout1[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout2[] = { +static const struct TrainerMon sParty_GruntMagmaHideout2[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_POOCHYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout3[] = { +static const struct TrainerMon sParty_GruntMagmaHideout3[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout4[] = { +static const struct TrainerMon sParty_GruntMagmaHideout4[] = { { - .iv = 0, .lvl = 28, .species = SPECIES_BALTOY, }, { - .iv = 0, .lvl = 28, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout5[] = { +static const struct TrainerMon sParty_GruntMagmaHideout5[] = { { - .iv = 0, .lvl = 28, .species = SPECIES_BALTOY, }, { - .iv = 0, .lvl = 28, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout6[] = { +static const struct TrainerMon sParty_GruntMagmaHideout6[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_MIGHTYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout7[] = { +static const struct TrainerMon sParty_GruntMagmaHideout7[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout8[] = { +static const struct TrainerMon sParty_GruntMagmaHideout8[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_POOCHYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout9[] = { +static const struct TrainerMon sParty_GruntMagmaHideout9[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout10[] = { +static const struct TrainerMon sParty_GruntMagmaHideout10[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_MIGHTYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout11[] = { +static const struct TrainerMon sParty_GruntMagmaHideout11[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_BALTOY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout12[] = { +static const struct TrainerMon sParty_GruntMagmaHideout12[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout13[] = { +static const struct TrainerMon sParty_GruntMagmaHideout13[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_ZUBAT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout14[] = { +static const struct TrainerMon sParty_GruntMagmaHideout14[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_MIGHTYENA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout15[] = { +static const struct TrainerMon sParty_GruntMagmaHideout15[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout16[] = { +static const struct TrainerMon sParty_GruntMagmaHideout16[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_BALTOY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_TabithaMagmaHideout[] = { +static const struct TrainerMon sParty_TabithaMagmaHideout[] = { { - .iv = 75, + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), .lvl = 26, .species = SPECIES_NUMEL, }, { - .iv = 75, + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), .lvl = 28, .species = SPECIES_MIGHTYENA, }, { - .iv = 75, + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), .lvl = 30, .species = SPECIES_ZUBAT, }, { - .iv = 75, + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), .lvl = 33, .species = SPECIES_CAMERUPT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Darcy[] = { +static const struct TrainerMon sParty_Darcy[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_PELIPPER, }, { - .iv = 0, .lvl = 33, .species = SPECIES_CAMERUPT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MaxieMossdeep[] = { +static const struct TrainerMon sParty_MaxieMossdeep[] = { { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 42, .species = SPECIES_MIGHTYENA, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 43, .species = SPECIES_CROBAT, }, { - .iv = 150, + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), .lvl = 44, .species = SPECIES_CAMERUPT, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Pete[] = { +static const struct TrainerMon sParty_Pete[] = { { - .iv = 0, .lvl = 15, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Isabelle[] = { +static const struct TrainerMon sParty_Isabelle[] = { { - .iv = 0, .lvl = 15, .species = SPECIES_MARILL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Andres1[] = { +static const struct TrainerMon sParty_Andres1[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 25, .species = SPECIES_SANDSHREW, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 25, .species = SPECIES_SANDSHREW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Josue[] = { +static const struct TrainerMon sParty_Josue[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 25, .species = SPECIES_TAILLOW, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 25, .species = SPECIES_WINGULL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Camron[] = { +static const struct TrainerMon sParty_Camron[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cory1[] = { +static const struct TrainerMon sParty_Cory1[] = { { - .iv = 0, .lvl = 24, .species = SPECIES_WINGULL, }, { - .iv = 0, .lvl = 24, .species = SPECIES_MACHOP, }, { - .iv = 0, .lvl = 24, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Carolina[] = { +static const struct TrainerMon sParty_Carolina[] = { { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 24, .species = SPECIES_MANECTRIC, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 24, .species = SPECIES_SWELLOW, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 24, .species = SPECIES_MANECTRIC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Elijah[] = { +static const struct TrainerMon sParty_Elijah[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_SKARMORY, }, { - .iv = 0, .lvl = 25, .species = SPECIES_SKARMORY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Celia[] = { +static const struct TrainerMon sParty_Celia[] = { { - .iv = 0, .lvl = 22, .species = SPECIES_MARILL, }, { - .iv = 0, .lvl = 22, .species = SPECIES_LOMBRE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Bryan[] = { +static const struct TrainerMon sParty_Bryan[] = { { - .iv = 0, .lvl = 22, .species = SPECIES_SANDSHREW, }, { - .iv = 0, .lvl = 22, .species = SPECIES_SANDSLASH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Branden[] = { +static const struct TrainerMon sParty_Branden[] = { { - .iv = 0, .lvl = 22, .species = SPECIES_TAILLOW, }, { - .iv = 0, .lvl = 22, .species = SPECIES_NUZLEAF, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Bryant[] = { +static const struct TrainerMon sParty_Bryant[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_NUMEL, }, { - .iv = 0, .lvl = 18, .species = SPECIES_SLUGMA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Shayla[] = { +static const struct TrainerMon sParty_Shayla[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_SHROOMISH, }, { - .iv = 0, .lvl = 18, .species = SPECIES_ROSELIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Kyra[] = { +static const struct TrainerMon sParty_Kyra[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_DODUO, }, { - .iv = 0, .lvl = 26, .species = SPECIES_DODRIO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Jaiden[] = { +static const struct TrainerMon sParty_Jaiden[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_NINJASK, }, { - .iv = 0, .lvl = 26, .species = SPECIES_GULPIN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Alix[] = { +static const struct TrainerMon sParty_Alix[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_KADABRA, }, { - .iv = 0, .lvl = 26, .species = SPECIES_KIRLIA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Helene[] = { +static const struct TrainerMon sParty_Helene[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_MEDITITE, }, { - .iv = 0, .lvl = 26, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Marlene[] = { +static const struct TrainerMon sParty_Marlene[] = { { - .iv = 0, .lvl = 18, .species = SPECIES_MEDITITE, }, { - .iv = 0, .lvl = 18, .species = SPECIES_SPOINK, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Devan[] = { +static const struct TrainerMon sParty_Devan[] = { { - .iv = 0, .lvl = 8, .species = SPECIES_GEODUDE, }, { - .iv = 0, .lvl = 8, .species = SPECIES_GEODUDE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Johnson[] = { +static const struct TrainerMon sParty_Johnson[] = { { - .iv = 0, .lvl = 8, .species = SPECIES_SHROOMISH, }, { - .iv = 0, .lvl = 8, .species = SPECIES_LOTAD, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Melina[] = { +static const struct TrainerMon sParty_Melina[] = { { - .iv = 0, .lvl = 17, .species = SPECIES_DODUO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Brandi[] = { +static const struct TrainerMon sParty_Brandi[] = { { - .iv = 0, .lvl = 17, .species = SPECIES_RALTS, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Aisha[] = { +static const struct TrainerMon sParty_Aisha[] = { { - .iv = 0, .lvl = 17, .species = SPECIES_MEDITITE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Makayla[] = { +static const struct TrainerMon sParty_Makayla[] = { { - .iv = 0, .lvl = 33, .species = SPECIES_ROSELIA, }, { - .iv = 0, .lvl = 33, .species = SPECIES_MEDICHAM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Fabian[] = { +static const struct TrainerMon sParty_Fabian[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_MANECTRIC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Dayton[] = { +static const struct TrainerMon sParty_Dayton[] = { { - .iv = 0, .lvl = 25, .species = SPECIES_SLUGMA, }, { - .iv = 0, .lvl = 25, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Rachel[] = { +static const struct TrainerMon sParty_Rachel[] = { { - .iv = 0, .lvl = 26, .species = SPECIES_GOLDEEN, } }; -static const struct TrainerMonNoItemCustomMoves sParty_Leonel[] = { +static const struct TrainerMon sParty_Leonel[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 30, .species = SPECIES_MANECTRIC, .moves = {MOVE_THUNDER, MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_NONE} } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Callie[] = { +static const struct TrainerMon sParty_Callie[] = { { - .iv = 0, .lvl = 28, .species = SPECIES_MEDITITE, }, { - .iv = 0, .lvl = 28, .species = SPECIES_MAKUHITA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cale[] = { +static const struct TrainerMon sParty_Cale[] = { { - .iv = 0, .lvl = 29, .species = SPECIES_DUSTOX, }, { - .iv = 0, .lvl = 29, .species = SPECIES_BEAUTIFLY, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Myles[] = { +static const struct TrainerMon sParty_Myles[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_MAKUHITA, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_WINGULL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_TROPIUS, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_ZIGZAGOON, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_ELECTRIKE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Pat[] = { +static const struct TrainerMon sParty_Pat[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_POOCHYENA, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_SHROOMISH, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_ELECTRIKE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_MARILL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_SANDSHREW, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 25, .species = SPECIES_GULPIN, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cristin1[] = { +static const struct TrainerMon sParty_Cristin1[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_LOUDRED, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 29, .species = SPECIES_VIGOROTH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRustboroTreecko[] = { +static const struct TrainerMon sParty_MayRustboroTreecko[] = { { - .iv = 25, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 13, .species = SPECIES_LOTAD, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 15, .species = SPECIES_TORCHIC, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayRustboroTorchic[] = { +static const struct TrainerMon sParty_MayRustboroTorchic[] = { { - .iv = 25, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 13, .species = SPECIES_TORKOAL, }, { - .iv = 50, + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 15, .species = SPECIES_MUDKIP, } }; -static const struct TrainerMonItemCustomMoves sParty_Roxanne2[] = { +static const struct TrainerMon sParty_Roxanne2[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 32, .species = SPECIES_GOLEM, .heldItem = ITEM_NONE, .moves = {MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 35, .species = SPECIES_KABUTO, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 35, .species = SPECIES_ONIX, .heldItem = ITEM_NONE, .moves = {MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 37, .species = SPECIES_NOSEPASS, .heldItem = ITEM_SITRUS_BERRY, @@ -10329,37 +9714,37 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne2[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Roxanne3[] = { +static const struct TrainerMon sParty_Roxanne3[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 37, .species = SPECIES_OMANYTE, .heldItem = ITEM_NONE, .moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 37, .species = SPECIES_GOLEM, .heldItem = ITEM_NONE, .moves = {MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 40, .species = SPECIES_KABUTOPS, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 40, .species = SPECIES_ONIX, .heldItem = ITEM_NONE, .moves = {MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 42, .species = SPECIES_NOSEPASS, .heldItem = ITEM_SITRUS_BERRY, @@ -10367,37 +9752,37 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne3[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Roxanne4[] = { +static const struct TrainerMon sParty_Roxanne4[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 42, .species = SPECIES_OMASTAR, .heldItem = ITEM_NONE, .moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 42, .species = SPECIES_GOLEM, .heldItem = ITEM_NONE, .moves = {MOVE_PROTECT, MOVE_ROLLOUT, MOVE_EARTHQUAKE, MOVE_EXPLOSION} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 45, .species = SPECIES_KABUTOPS, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 45, .species = SPECIES_ONIX, .heldItem = ITEM_NONE, .moves = {MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 47, .species = SPECIES_NOSEPASS, .heldItem = ITEM_SITRUS_BERRY, @@ -10405,44 +9790,44 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne4[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Roxanne5[] = { +static const struct TrainerMon sParty_Roxanne5[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 47, .species = SPECIES_AERODACTYL, .heldItem = ITEM_NONE, .moves = {MOVE_ROCK_SLIDE, MOVE_HYPER_BEAM, MOVE_SUPERSONIC, MOVE_PROTECT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 47, .species = SPECIES_GOLEM, .heldItem = ITEM_NONE, .moves = {MOVE_FOCUS_PUNCH, MOVE_ROLLOUT, MOVE_EARTHQUAKE, MOVE_EXPLOSION} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 47, .species = SPECIES_OMASTAR, .heldItem = ITEM_NONE, .moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_KABUTOPS, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_STEELIX, .heldItem = ITEM_NONE, .moves = {MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 52, .species = SPECIES_NOSEPASS, .heldItem = ITEM_SITRUS_BERRY, @@ -10450,30 +9835,30 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne5[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Brawly2[] = { +static const struct TrainerMon sParty_Brawly2[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 33, .species = SPECIES_MACHAMP, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 33, .species = SPECIES_MEDITITE, .heldItem = ITEM_NONE, .moves = {MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOCUS_PUNCH} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 35, .species = SPECIES_HITMONTOP, .heldItem = ITEM_NONE, .moves = {MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 37, .species = SPECIES_HARIYAMA, .heldItem = ITEM_SITRUS_BERRY, @@ -10481,30 +9866,30 @@ static const struct TrainerMonItemCustomMoves sParty_Brawly2[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Brawly3[] = { +static const struct TrainerMon sParty_Brawly3[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 38, .species = SPECIES_MACHAMP, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 38, .species = SPECIES_MEDICHAM, .heldItem = ITEM_NONE, .moves = {MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOCUS_PUNCH} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 40, .species = SPECIES_HITMONTOP, .heldItem = ITEM_NONE, .moves = {MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 42, .species = SPECIES_HARIYAMA, .heldItem = ITEM_SITRUS_BERRY, @@ -10512,37 +9897,37 @@ static const struct TrainerMonItemCustomMoves sParty_Brawly3[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Brawly4[] = { +static const struct TrainerMon sParty_Brawly4[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 40, .species = SPECIES_HITMONCHAN, .heldItem = ITEM_NONE, .moves = {MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 43, .species = SPECIES_MACHAMP, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 43, .species = SPECIES_MEDICHAM, .heldItem = ITEM_NONE, .moves = {MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_PSYCHIC} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 45, .species = SPECIES_HITMONTOP, .heldItem = ITEM_NONE, .moves = {MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 47, .species = SPECIES_HARIYAMA, .heldItem = ITEM_SITRUS_BERRY, @@ -10550,44 +9935,44 @@ static const struct TrainerMonItemCustomMoves sParty_Brawly4[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Brawly5[] = { +static const struct TrainerMon sParty_Brawly5[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 46, .species = SPECIES_HITMONLEE, .heldItem = ITEM_NONE, .moves = {MOVE_MEGA_KICK, MOVE_FOCUS_PUNCH, MOVE_EARTHQUAKE, MOVE_BULK_UP} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 46, .species = SPECIES_HITMONCHAN, .heldItem = ITEM_NONE, .moves = {MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 48, .species = SPECIES_MACHAMP, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 48, .species = SPECIES_MEDICHAM, .heldItem = ITEM_NONE, .moves = {MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_PSYCHIC} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_HITMONTOP, .heldItem = ITEM_NONE, .moves = {MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 52, .species = SPECIES_HARIYAMA, .heldItem = ITEM_SITRUS_BERRY, @@ -10595,30 +9980,30 @@ static const struct TrainerMonItemCustomMoves sParty_Brawly5[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Wattson2[] = { +static const struct TrainerMon sParty_Wattson2[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 36, .species = SPECIES_MAREEP, .heldItem = ITEM_NONE, .moves = {MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 36, .species = SPECIES_ELECTRODE, .heldItem = ITEM_NONE, .moves = {MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 38, .species = SPECIES_MAGNETON, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 40, .species = SPECIES_MANECTRIC, .heldItem = ITEM_SITRUS_BERRY, @@ -10626,37 +10011,37 @@ static const struct TrainerMonItemCustomMoves sParty_Wattson2[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Wattson3[] = { +static const struct TrainerMon sParty_Wattson3[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 39, .species = SPECIES_PIKACHU, .heldItem = ITEM_NONE, .moves = {MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_SHOCK_WAVE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 41, .species = SPECIES_FLAAFFY, .heldItem = ITEM_NONE, .moves = {MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 41, .species = SPECIES_ELECTRODE, .heldItem = ITEM_NONE, .moves = {MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 43, .species = SPECIES_MAGNETON, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 45, .species = SPECIES_MANECTRIC, .heldItem = ITEM_SITRUS_BERRY, @@ -10664,37 +10049,37 @@ static const struct TrainerMonItemCustomMoves sParty_Wattson3[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Wattson4[] = { +static const struct TrainerMon sParty_Wattson4[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 44, .species = SPECIES_RAICHU, .heldItem = ITEM_NONE, .moves = {MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_PROTECT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 46, .species = SPECIES_AMPHAROS, .heldItem = ITEM_NONE, .moves = {MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 46, .species = SPECIES_ELECTRODE, .heldItem = ITEM_NONE, .moves = {MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 48, .species = SPECIES_MAGNETON, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_MANECTRIC, .heldItem = ITEM_SITRUS_BERRY, @@ -10702,44 +10087,44 @@ static const struct TrainerMonItemCustomMoves sParty_Wattson4[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Wattson5[] = { +static const struct TrainerMon sParty_Wattson5[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_ELECTABUZZ, .heldItem = ITEM_NONE, .moves = {MOVE_SWIFT, MOVE_FOCUS_PUNCH, MOVE_THUNDER_PUNCH, MOVE_LIGHT_SCREEN} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 51, .species = SPECIES_RAICHU, .heldItem = ITEM_NONE, .moves = {MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_PROTECT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 51, .species = SPECIES_AMPHAROS, .heldItem = ITEM_NONE, .moves = {MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_ELECTRODE, .heldItem = ITEM_NONE, .moves = {MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_MAGNETON, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 55, .species = SPECIES_MANECTRIC, .heldItem = ITEM_SITRUS_BERRY, @@ -10747,30 +10132,30 @@ static const struct TrainerMonItemCustomMoves sParty_Wattson5[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Flannery2[] = { +static const struct TrainerMon sParty_Flannery2[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 38, .species = SPECIES_MAGCARGO, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 36, .species = SPECIES_PONYTA, .heldItem = ITEM_NONE, .moves = {MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 38, .species = SPECIES_CAMERUPT, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 40, .species = SPECIES_TORKOAL, .heldItem = ITEM_WHITE_HERB, @@ -10778,37 +10163,37 @@ static const struct TrainerMonItemCustomMoves sParty_Flannery2[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Flannery3[] = { +static const struct TrainerMon sParty_Flannery3[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 41, .species = SPECIES_GROWLITHE, .heldItem = ITEM_NONE, .moves = {MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_ROAR, MOVE_SUNNY_DAY} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 43, .species = SPECIES_MAGCARGO, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 41, .species = SPECIES_PONYTA, .heldItem = ITEM_NONE, .moves = {MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 43, .species = SPECIES_CAMERUPT, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 45, .species = SPECIES_TORKOAL, .heldItem = ITEM_WHITE_HERB, @@ -10816,44 +10201,44 @@ static const struct TrainerMonItemCustomMoves sParty_Flannery3[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Flannery4[] = { +static const struct TrainerMon sParty_Flannery4[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 46, .species = SPECIES_HOUNDOUR, .heldItem = ITEM_NONE, .moves = {MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, MOVE_SUNNY_DAY} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 46, .species = SPECIES_GROWLITHE, .heldItem = ITEM_NONE, .moves = {MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, MOVE_ROAR} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 48, .species = SPECIES_MAGCARGO, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 46, .species = SPECIES_RAPIDASH, .heldItem = ITEM_NONE, .moves = {MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 48, .species = SPECIES_CAMERUPT, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_TORKOAL, .heldItem = ITEM_WHITE_HERB, @@ -10861,44 +10246,44 @@ static const struct TrainerMonItemCustomMoves sParty_Flannery4[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Flannery5[] = { +static const struct TrainerMon sParty_Flannery5[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 51, .species = SPECIES_ARCANINE, .heldItem = ITEM_NONE, .moves = {MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, MOVE_ROAR} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_MAGCARGO, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 51, .species = SPECIES_HOUNDOOM, .heldItem = ITEM_NONE, .moves = {MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, MOVE_SUNNY_DAY} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 51, .species = SPECIES_RAPIDASH, .heldItem = ITEM_NONE, .moves = {MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_CAMERUPT, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 55, .species = SPECIES_TORKOAL, .heldItem = ITEM_WHITE_HERB, @@ -10906,30 +10291,30 @@ static const struct TrainerMonItemCustomMoves sParty_Flannery5[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Norman2[] = { +static const struct TrainerMon sParty_Norman2[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 42, .species = SPECIES_CHANSEY, .heldItem = ITEM_NONE, .moves = {MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 42, .species = SPECIES_SLAKING, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 43, .species = SPECIES_SPINDA, .heldItem = ITEM_NONE, .moves = {MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 45, .species = SPECIES_SLAKING, .heldItem = ITEM_SITRUS_BERRY, @@ -10937,37 +10322,37 @@ static const struct TrainerMonItemCustomMoves sParty_Norman2[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Norman3[] = { +static const struct TrainerMon sParty_Norman3[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 47, .species = SPECIES_SLAKING, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 47, .species = SPECIES_CHANSEY, .heldItem = ITEM_NONE, .moves = {MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 45, .species = SPECIES_KANGASKHAN, .heldItem = ITEM_NONE, .moves = {MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 48, .species = SPECIES_SPINDA, .heldItem = ITEM_NONE, .moves = {MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_SLAKING, .heldItem = ITEM_SITRUS_BERRY, @@ -10975,37 +10360,37 @@ static const struct TrainerMonItemCustomMoves sParty_Norman3[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Norman4[] = { +static const struct TrainerMon sParty_Norman4[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 52, .species = SPECIES_SLAKING, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 52, .species = SPECIES_BLISSEY, .heldItem = ITEM_NONE, .moves = {MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_KANGASKHAN, .heldItem = ITEM_NONE, .moves = {MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_SPINDA, .heldItem = ITEM_NONE, .moves = {MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 55, .species = SPECIES_SLAKING, .heldItem = ITEM_SITRUS_BERRY, @@ -11013,44 +10398,44 @@ static const struct TrainerMonItemCustomMoves sParty_Norman4[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Norman5[] = { +static const struct TrainerMon sParty_Norman5[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 57, .species = SPECIES_SLAKING, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 57, .species = SPECIES_BLISSEY, .heldItem = ITEM_NONE, .moves = {MOVE_PROTECT, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 55, .species = SPECIES_KANGASKHAN, .heldItem = ITEM_NONE, .moves = {MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 57, .species = SPECIES_TAUROS, .heldItem = ITEM_NONE, .moves = {MOVE_TAKE_DOWN, MOVE_PROTECT, MOVE_FIRE_BLAST, MOVE_EARTHQUAKE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 58, .species = SPECIES_SPINDA, .heldItem = ITEM_NONE, .moves = {MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 60, .species = SPECIES_SLAKING, .heldItem = ITEM_SITRUS_BERRY, @@ -11058,37 +10443,37 @@ static const struct TrainerMonItemCustomMoves sParty_Norman5[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Winona2[] = { +static const struct TrainerMon sParty_Winona2[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 40, .species = SPECIES_DRATINI, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 38, .species = SPECIES_TROPIUS, .heldItem = ITEM_NONE, .moves = {MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 41, .species = SPECIES_PELIPPER, .heldItem = ITEM_NONE, .moves = {MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 43, .species = SPECIES_SKARMORY, .heldItem = ITEM_NONE, .moves = {MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 45, .species = SPECIES_ALTARIA, .heldItem = ITEM_CHESTO_BERRY, @@ -11096,44 +10481,44 @@ static const struct TrainerMonItemCustomMoves sParty_Winona2[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Winona3[] = { +static const struct TrainerMon sParty_Winona3[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 43, .species = SPECIES_HOOTHOOT, .heldItem = ITEM_NONE, .moves = {MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 43, .species = SPECIES_TROPIUS, .heldItem = ITEM_NONE, .moves = {MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 45, .species = SPECIES_DRAGONAIR, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 46, .species = SPECIES_PELIPPER, .heldItem = ITEM_NONE, .moves = {MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 48, .species = SPECIES_SKARMORY, .heldItem = ITEM_NONE, .moves = {MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_ALTARIA, .heldItem = ITEM_CHESTO_BERRY, @@ -11141,44 +10526,44 @@ static const struct TrainerMonItemCustomMoves sParty_Winona3[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Winona4[] = { +static const struct TrainerMon sParty_Winona4[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 48, .species = SPECIES_NOCTOWL, .heldItem = ITEM_NONE, .moves = {MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 49, .species = SPECIES_TROPIUS, .heldItem = ITEM_NONE, .moves = {MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_DRAGONAIR, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 51, .species = SPECIES_PELIPPER, .heldItem = ITEM_NONE, .moves = {MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_SKARMORY, .heldItem = ITEM_NONE, .moves = {MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 55, .species = SPECIES_ALTARIA, .heldItem = ITEM_CHESTO_BERRY, @@ -11186,44 +10571,44 @@ static const struct TrainerMonItemCustomMoves sParty_Winona4[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Winona5[] = { +static const struct TrainerMon sParty_Winona5[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_NOCTOWL, .heldItem = ITEM_NONE, .moves = {MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 54, .species = SPECIES_TROPIUS, .heldItem = ITEM_NONE, .moves = {MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 55, .species = SPECIES_PELIPPER, .heldItem = ITEM_NONE, .moves = {MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 55, .species = SPECIES_DRAGONITE, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_HYPER_BEAM, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_ICE_BEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 58, .species = SPECIES_SKARMORY, .heldItem = ITEM_NONE, .moves = {MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 60, .species = SPECIES_ALTARIA, .heldItem = ITEM_CHESTO_BERRY, @@ -11231,37 +10616,37 @@ static const struct TrainerMonItemCustomMoves sParty_Winona5[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_TateAndLiza2[] = { +static const struct TrainerMon sParty_TateAndLiza2[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 48, .species = SPECIES_SLOWPOKE, .heldItem = ITEM_NONE, .moves = {MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 49, .species = SPECIES_CLAYDOL, .heldItem = ITEM_NONE, .moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 49, .species = SPECIES_XATU, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_LUNATONE, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_SOLROCK, .heldItem = ITEM_SITRUS_BERRY, @@ -11269,44 +10654,44 @@ static const struct TrainerMonItemCustomMoves sParty_TateAndLiza2[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_TateAndLiza3[] = { +static const struct TrainerMon sParty_TateAndLiza3[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_DROWZEE, .heldItem = ITEM_NONE, .moves = {MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_SLOWPOKE, .heldItem = ITEM_NONE, .moves = {MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 54, .species = SPECIES_CLAYDOL, .heldItem = ITEM_NONE, .moves = {MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 54, .species = SPECIES_XATU, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 55, .species = SPECIES_LUNATONE, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 55, .species = SPECIES_SOLROCK, .heldItem = ITEM_SITRUS_BERRY, @@ -11314,44 +10699,44 @@ static const struct TrainerMonItemCustomMoves sParty_TateAndLiza3[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_TateAndLiza4[] = { +static const struct TrainerMon sParty_TateAndLiza4[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 58, .species = SPECIES_HYPNO, .heldItem = ITEM_NONE, .moves = {MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 59, .species = SPECIES_CLAYDOL, .heldItem = ITEM_NONE, .moves = {MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 58, .species = SPECIES_SLOWPOKE, .heldItem = ITEM_NONE, .moves = {MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 59, .species = SPECIES_XATU, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 60, .species = SPECIES_LUNATONE, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 60, .species = SPECIES_SOLROCK, .heldItem = ITEM_SITRUS_BERRY, @@ -11359,44 +10744,44 @@ static const struct TrainerMonItemCustomMoves sParty_TateAndLiza4[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_TateAndLiza5[] = { +static const struct TrainerMon sParty_TateAndLiza5[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 63, .species = SPECIES_HYPNO, .heldItem = ITEM_NONE, .moves = {MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 64, .species = SPECIES_CLAYDOL, .heldItem = ITEM_NONE, .moves = {MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 63, .species = SPECIES_SLOWKING, .heldItem = ITEM_NONE, .moves = {MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 64, .species = SPECIES_XATU, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 65, .species = SPECIES_LUNATONE, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 65, .species = SPECIES_SOLROCK, .heldItem = ITEM_SITRUS_BERRY, @@ -11404,37 +10789,37 @@ static const struct TrainerMonItemCustomMoves sParty_TateAndLiza5[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Juan2[] = { +static const struct TrainerMon sParty_Juan2[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 46, .species = SPECIES_POLIWAG, .heldItem = ITEM_NONE, .moves = {MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 46, .species = SPECIES_WHISCASH, .heldItem = ITEM_NONE, .moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 48, .species = SPECIES_WALREIN, .heldItem = ITEM_NONE, .moves = {MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 48, .species = SPECIES_CRAWDAUNT, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_REST, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_DOUBLE_TEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 51, .species = SPECIES_KINGDRA, .heldItem = ITEM_CHESTO_BERRY, @@ -11442,37 +10827,37 @@ static const struct TrainerMonItemCustomMoves sParty_Juan2[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Juan3[] = { +static const struct TrainerMon sParty_Juan3[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 50, .species = SPECIES_POLIWHIRL, .heldItem = ITEM_NONE, .moves = {MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 51, .species = SPECIES_WHISCASH, .heldItem = ITEM_NONE, .moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_WALREIN, .heldItem = ITEM_NONE, .moves = {MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 53, .species = SPECIES_CRAWDAUNT, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 56, .species = SPECIES_KINGDRA, .heldItem = ITEM_CHESTO_BERRY, @@ -11480,44 +10865,44 @@ static const struct TrainerMonItemCustomMoves sParty_Juan3[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Juan4[] = { +static const struct TrainerMon sParty_Juan4[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 56, .species = SPECIES_LAPRAS, .heldItem = ITEM_NONE, .moves = {MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, MOVE_CONFUSE_RAY} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 58, .species = SPECIES_WHISCASH, .heldItem = ITEM_NONE, .moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 56, .species = SPECIES_POLIWHIRL, .heldItem = ITEM_NONE, .moves = {MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 58, .species = SPECIES_WALREIN, .heldItem = ITEM_NONE, .moves = {MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 58, .species = SPECIES_CRAWDAUNT, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 61, .species = SPECIES_KINGDRA, .heldItem = ITEM_CHESTO_BERRY, @@ -11525,44 +10910,44 @@ static const struct TrainerMonItemCustomMoves sParty_Juan4[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Juan5[] = { +static const struct TrainerMon sParty_Juan5[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 61, .species = SPECIES_LAPRAS, .heldItem = ITEM_NONE, .moves = {MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, MOVE_CONFUSE_RAY} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 63, .species = SPECIES_WHISCASH, .heldItem = ITEM_NONE, .moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 61, .species = SPECIES_POLITOED, .heldItem = ITEM_NONE, .moves = {MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_HYDRO_PUMP, MOVE_PERISH_SONG} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 63, .species = SPECIES_WALREIN, .heldItem = ITEM_NONE, .moves = {MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_SHEER_COLD} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 63, .species = SPECIES_CRAWDAUNT, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 66, .species = SPECIES_KINGDRA, .heldItem = ITEM_CHESTO_BERRY, @@ -11570,16 +10955,16 @@ static const struct TrainerMonItemCustomMoves sParty_Juan5[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Angelo[] = { +static const struct TrainerMon sParty_Angelo[] = { { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_ILLUMISE, .heldItem = ITEM_NONE, .moves = {MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CHARM, MOVE_NONE} }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 17, .species = SPECIES_VOLBEAT, .heldItem = ITEM_NONE, @@ -11587,52 +10972,52 @@ static const struct TrainerMonItemCustomMoves sParty_Angelo[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Darius[] = { +static const struct TrainerMon sParty_Darius[] = { { - .iv = 200, + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), .lvl = 30, .species = SPECIES_TROPIUS, } }; -static const struct TrainerMonItemCustomMoves sParty_Steven[] = { +static const struct TrainerMon sParty_Steven[] = { { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 77, .species = SPECIES_SKARMORY, .heldItem = ITEM_NONE, .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_SPIKES, MOVE_STEEL_WING} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 75, .species = SPECIES_CLAYDOL, .heldItem = ITEM_NONE, .moves = {MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_ANCIENT_POWER, MOVE_EARTHQUAKE} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 76, .species = SPECIES_AGGRON, .heldItem = ITEM_NONE, .moves = {MOVE_THUNDER, MOVE_EARTHQUAKE, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 76, .species = SPECIES_CRADILY, .heldItem = ITEM_NONE, .moves = {MOVE_GIGA_DRAIN, MOVE_ANCIENT_POWER, MOVE_INGRAIN, MOVE_CONFUSE_RAY} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 76, .species = SPECIES_ARMALDO, .heldItem = ITEM_NONE, .moves = {MOVE_WATER_PULSE, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE, MOVE_SLASH} }, { - .iv = 255, + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 78, .species = SPECIES_METAGROSS, .heldItem = ITEM_SITRUS_BERRY, @@ -11640,796 +11025,781 @@ static const struct TrainerMonItemCustomMoves sParty_Steven[] = { } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Anabel[] = { +static const struct TrainerMon sParty_Anabel[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_BELDUM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Tucker[] = { +static const struct TrainerMon sParty_Tucker[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_BELDUM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Spenser[] = { +static const struct TrainerMon sParty_Spenser[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_BELDUM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Greta[] = { +static const struct TrainerMon sParty_Greta[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_BELDUM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Noland[] = { +static const struct TrainerMon sParty_Noland[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_BELDUM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Lucy[] = { +static const struct TrainerMon sParty_Lucy[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_BELDUM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Brandon[] = { +static const struct TrainerMon sParty_Brandon[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_BELDUM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Andres2[] = { +static const struct TrainerMon sParty_Andres2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_SANDSHREW, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_SANDSHREW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Andres3[] = { +static const struct TrainerMon sParty_Andres3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_NOSEPASS, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_SANDSHREW, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_SANDSHREW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Andres4[] = { +static const struct TrainerMon sParty_Andres4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 35, .species = SPECIES_NOSEPASS, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 35, .species = SPECIES_SANDSHREW, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 35, .species = SPECIES_SANDSHREW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Andres5[] = { +static const struct TrainerMon sParty_Andres5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_NOSEPASS, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_SANDSLASH, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_SANDSLASH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cory2[] = { +static const struct TrainerMon sParty_Cory2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 30, .species = SPECIES_WINGULL, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 30, .species = SPECIES_MACHOP, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 30, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cory3[] = { +static const struct TrainerMon sParty_Cory3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 32, .species = SPECIES_PELIPPER, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 32, .species = SPECIES_MACHOP, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 32, .species = SPECIES_TENTACOOL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cory4[] = { +static const struct TrainerMon sParty_Cory4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 34, .species = SPECIES_PELIPPER, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 34, .species = SPECIES_MACHOP, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 34, .species = SPECIES_TENTACRUEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cory5[] = { +static const struct TrainerMon sParty_Cory5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 36, .species = SPECIES_PELIPPER, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 36, .species = SPECIES_MACHOKE, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 36, .species = SPECIES_TENTACRUEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Pablo2[] = { +static const struct TrainerMon sParty_Pablo2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 37, .species = SPECIES_STARYU, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 37, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Pablo3[] = { +static const struct TrainerMon sParty_Pablo3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 39, .species = SPECIES_WINGULL, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 39, .species = SPECIES_STARYU, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 39, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Pablo4[] = { +static const struct TrainerMon sParty_Pablo4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 41, .species = SPECIES_PELIPPER, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 41, .species = SPECIES_STARYU, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 41, .species = SPECIES_STARYU, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Pablo5[] = { +static const struct TrainerMon sParty_Pablo5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 43, .species = SPECIES_PELIPPER, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 43, .species = SPECIES_STARMIE, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 43, .species = SPECIES_STARMIE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Koji2[] = { +static const struct TrainerMon sParty_Koji2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 37, .species = SPECIES_MACHOKE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 37, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Koji3[] = { +static const struct TrainerMon sParty_Koji3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 39, .species = SPECIES_MAKUHITA, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 39, .species = SPECIES_MACHOKE, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 39, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Koji4[] = { +static const struct TrainerMon sParty_Koji4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 41, .species = SPECIES_HARIYAMA, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 41, .species = SPECIES_MACHOKE, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 41, .species = SPECIES_MACHOKE, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Koji5[] = { +static const struct TrainerMon sParty_Koji5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 43, .species = SPECIES_HARIYAMA, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 43, .species = SPECIES_MACHAMP, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 43, .species = SPECIES_MACHAMP, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cristin2[] = { +static const struct TrainerMon sParty_Cristin2[] = { { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 35, .species = SPECIES_LOUDRED, }, { - .iv = 110, + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), .lvl = 35, .species = SPECIES_VIGOROTH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cristin3[] = { +static const struct TrainerMon sParty_Cristin3[] = { { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 37, .species = SPECIES_SPINDA, }, { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 37, .species = SPECIES_LOUDRED, }, { - .iv = 120, + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), .lvl = 37, .species = SPECIES_VIGOROTH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cristin4[] = { +static const struct TrainerMon sParty_Cristin4[] = { { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 39, .species = SPECIES_SPINDA, }, { - .iv = 130, + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), .lvl = 39, .species = SPECIES_LOUDRED, }, { - .iv = 100, + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), .lvl = 39, .species = SPECIES_VIGOROTH, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Cristin5[] = { +static const struct TrainerMon sParty_Cristin5[] = { { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 41, .species = SPECIES_SPINDA, }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 41, .species = SPECIES_EXPLOUD, }, { - .iv = 140, + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), .lvl = 41, .species = SPECIES_SLAKING, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Fernando2[] = { +static const struct TrainerMon sParty_Fernando2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 35, .species = SPECIES_ELECTRIKE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 35, .species = SPECIES_ELECTRIKE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 35, .species = SPECIES_LOUDRED, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Fernando3[] = { +static const struct TrainerMon sParty_Fernando3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 37, .species = SPECIES_ELECTRIKE, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 37, .species = SPECIES_MANECTRIC, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 37, .species = SPECIES_LOUDRED, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Fernando4[] = { +static const struct TrainerMon sParty_Fernando4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 39, .species = SPECIES_MANECTRIC, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 39, .species = SPECIES_MANECTRIC, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 39, .species = SPECIES_LOUDRED, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Fernando5[] = { +static const struct TrainerMon sParty_Fernando5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 41, .species = SPECIES_MANECTRIC, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 41, .species = SPECIES_MANECTRIC, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 41, .species = SPECIES_EXPLOUD, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sawyer2[] = { +static const struct TrainerMon sParty_Sawyer2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_GEODUDE, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 26, .species = SPECIES_NUMEL, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sawyer3[] = { +static const struct TrainerMon sParty_Sawyer3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_MACHOP, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_NUMEL, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 28, .species = SPECIES_GRAVELER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sawyer4[] = { +static const struct TrainerMon sParty_Sawyer4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_MACHOP, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_NUMEL, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 30, .species = SPECIES_GRAVELER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Sawyer5[] = { +static const struct TrainerMon sParty_Sawyer5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_MACHOKE, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_CAMERUPT, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 33, .species = SPECIES_GOLEM, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Gabrielle2[] = { +static const struct TrainerMon sParty_Gabrielle2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_SKITTY, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_MIGHTYENA, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_ZIGZAGOON, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_LOTAD, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_SEEDOT, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 31, .species = SPECIES_TAILLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Gabrielle3[] = { +static const struct TrainerMon sParty_Gabrielle3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_SKITTY, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_MIGHTYENA, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_LINOONE, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_LOMBRE, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_NUZLEAF, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 33, .species = SPECIES_TAILLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Gabrielle4[] = { +static const struct TrainerMon sParty_Gabrielle4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 35, .species = SPECIES_DELCATTY, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 35, .species = SPECIES_MIGHTYENA, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 35, .species = SPECIES_LINOONE, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 35, .species = SPECIES_LOMBRE, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 35, .species = SPECIES_NUZLEAF, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 35, .species = SPECIES_SWELLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Gabrielle5[] = { +static const struct TrainerMon sParty_Gabrielle5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_DELCATTY, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_MIGHTYENA, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_LINOONE, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_LUDICOLO, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_SHIFTRY, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 37, .species = SPECIES_SWELLOW, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Thalia2[] = { +static const struct TrainerMon sParty_Thalia2[] = { { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 34, .species = SPECIES_WAILMER, }, { - .iv = 10, + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), .lvl = 34, .species = SPECIES_HORSEA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Thalia3[] = { +static const struct TrainerMon sParty_Thalia3[] = { { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 36, .species = SPECIES_LUVDISC, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 36, .species = SPECIES_WAILMER, }, { - .iv = 20, + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), .lvl = 36, .species = SPECIES_SEADRA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Thalia4[] = { +static const struct TrainerMon sParty_Thalia4[] = { { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 38, .species = SPECIES_LUVDISC, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 38, .species = SPECIES_WAILMER, }, { - .iv = 30, + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), .lvl = 38, .species = SPECIES_SEADRA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Thalia5[] = { +static const struct TrainerMon sParty_Thalia5[] = { { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 40, .species = SPECIES_LUVDISC, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 40, .species = SPECIES_WAILORD, }, { - .iv = 40, + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), .lvl = 40, .species = SPECIES_KINGDRA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Mariela[] = { +static const struct TrainerMon sParty_Mariela[] = { { - .iv = 0, .lvl = 41, .species = SPECIES_CHIMECHO, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Alvaro[] = { +static const struct TrainerMon sParty_Alvaro[] = { { - .iv = 0, .lvl = 41, .species = SPECIES_BANETTE, }, { - .iv = 0, .lvl = 41, .species = SPECIES_KADABRA, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Everett[] = { +static const struct TrainerMon sParty_Everett[] = { { - .iv = 0, .lvl = 41, .species = SPECIES_WOBBUFFET, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Red[] = { +static const struct TrainerMon sParty_Red[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_CHARMANDER, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_Leaf[] = { +static const struct TrainerMon sParty_Leaf[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_BULBASAUR, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_BrendanLinkPlaceholder[] = { +static const struct TrainerMon sParty_BrendanLinkPlaceholder[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_GROUDON, } }; -static const struct TrainerMonNoItemDefaultMoves sParty_MayLinkPlaceholder[] = { +static const struct TrainerMon sParty_MayLinkPlaceholder[] = { { - .iv = 0, .lvl = 5, .species = SPECIES_KYOGRE, } diff --git a/src/data/trainers.h b/src/data/trainers.h index 75f7edc8b..7a34223b8 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -1,7 +1,6 @@ const struct Trainer gTrainers[] = { [TRAINER_NONE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_HIKER, @@ -10,7 +9,7 @@ const struct Trainer gTrainers[] = { .doubleBattle = FALSE, .aiFlags = 0, .partySize = 0, - .party = {.NoItemDefaultMoves = NULL}, + .party = NULL, }, [TRAINER_SAWYER_1] = @@ -22,7 +21,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer1), + .party = TRAINER_PARTY(sParty_Sawyer1), }, [TRAINER_GRUNT_AQUA_HIDEOUT_1] = @@ -34,7 +33,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout1), + .party = TRAINER_PARTY(sParty_GruntAquaHideout1), }, [TRAINER_GRUNT_AQUA_HIDEOUT_2] = @@ -46,7 +45,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout2), + .party = TRAINER_PARTY(sParty_GruntAquaHideout2), }, [TRAINER_GRUNT_AQUA_HIDEOUT_3] = @@ -58,7 +57,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout3), + .party = TRAINER_PARTY(sParty_GruntAquaHideout3), }, [TRAINER_GRUNT_AQUA_HIDEOUT_4] = @@ -70,7 +69,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout4), + .party = TRAINER_PARTY(sParty_GruntAquaHideout4), }, [TRAINER_GRUNT_SEAFLOOR_CAVERN_1] = @@ -82,7 +81,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern1), + .party = TRAINER_PARTY(sParty_GruntSeafloorCavern1), }, [TRAINER_GRUNT_SEAFLOOR_CAVERN_2] = @@ -94,7 +93,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern2), + .party = TRAINER_PARTY(sParty_GruntSeafloorCavern2), }, [TRAINER_GRUNT_SEAFLOOR_CAVERN_3] = @@ -106,7 +105,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern3), + .party = TRAINER_PARTY(sParty_GruntSeafloorCavern3), }, [TRAINER_GABRIELLE_1] = @@ -118,7 +117,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle1), + .party = TRAINER_PARTY(sParty_Gabrielle1), }, [TRAINER_GRUNT_PETALBURG_WOODS] = @@ -130,7 +129,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntPetalburgWoods), + .party = TRAINER_PARTY(sParty_GruntPetalburgWoods), }, [TRAINER_MARCEL] = @@ -142,7 +141,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Marcel), + .party = TRAINER_PARTY(sParty_Marcel), }, [TRAINER_ALBERTO] = @@ -154,7 +153,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Alberto), + .party = TRAINER_PARTY(sParty_Alberto), }, [TRAINER_ED] = @@ -166,7 +165,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ed), + .party = TRAINER_PARTY(sParty_Ed), }, [TRAINER_GRUNT_SEAFLOOR_CAVERN_4] = @@ -178,7 +177,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern4), + .party = TRAINER_PARTY(sParty_GruntSeafloorCavern4), }, [TRAINER_DECLAN] = @@ -190,7 +189,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Declan), + .party = TRAINER_PARTY(sParty_Declan), }, [TRAINER_GRUNT_RUSTURF_TUNNEL] = @@ -202,7 +201,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntRusturfTunnel), + .party = TRAINER_PARTY(sParty_GruntRusturfTunnel), }, [TRAINER_GRUNT_WEATHER_INST_1] = @@ -214,7 +213,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst1), + .party = TRAINER_PARTY(sParty_GruntWeatherInst1), }, [TRAINER_GRUNT_WEATHER_INST_2] = @@ -226,7 +225,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst2), + .party = TRAINER_PARTY(sParty_GruntWeatherInst2), }, [TRAINER_GRUNT_WEATHER_INST_3] = @@ -238,7 +237,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst3), + .party = TRAINER_PARTY(sParty_GruntWeatherInst3), }, [TRAINER_GRUNT_MUSEUM_1] = @@ -250,7 +249,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMuseum1), + .party = TRAINER_PARTY(sParty_GruntMuseum1), }, [TRAINER_GRUNT_MUSEUM_2] = @@ -262,7 +261,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMuseum2), + .party = TRAINER_PARTY(sParty_GruntMuseum2), }, [TRAINER_GRUNT_SPACE_CENTER_1] = @@ -274,7 +273,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter1), + .party = TRAINER_PARTY(sParty_GruntSpaceCenter1), }, [TRAINER_GRUNT_MT_PYRE_1] = @@ -286,7 +285,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre1), + .party = TRAINER_PARTY(sParty_GruntMtPyre1), }, [TRAINER_GRUNT_MT_PYRE_2] = @@ -298,7 +297,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre2), + .party = TRAINER_PARTY(sParty_GruntMtPyre2), }, [TRAINER_GRUNT_MT_PYRE_3] = @@ -310,7 +309,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre3), + .party = TRAINER_PARTY(sParty_GruntMtPyre3), }, [TRAINER_GRUNT_WEATHER_INST_4] = @@ -322,7 +321,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst4), + .party = TRAINER_PARTY(sParty_GruntWeatherInst4), }, [TRAINER_GRUNT_AQUA_HIDEOUT_5] = @@ -334,7 +333,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout5), + .party = TRAINER_PARTY(sParty_GruntAquaHideout5), }, [TRAINER_GRUNT_AQUA_HIDEOUT_6] = @@ -346,7 +345,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout6), + .party = TRAINER_PARTY(sParty_GruntAquaHideout6), }, [TRAINER_FREDRICK] = @@ -358,7 +357,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Fredrick), + .party = TRAINER_PARTY(sParty_Fredrick), }, [TRAINER_MATT] = @@ -370,7 +369,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Matt), + .party = TRAINER_PARTY(sParty_Matt), }, [TRAINER_ZANDER] = @@ -382,7 +381,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Zander), + .party = TRAINER_PARTY(sParty_Zander), }, [TRAINER_SHELLY_WEATHER_INSTITUTE] = @@ -394,7 +393,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_ShellyWeatherInstitute), + .party = TRAINER_PARTY(sParty_ShellyWeatherInstitute), }, [TRAINER_SHELLY_SEAFLOOR_CAVERN] = @@ -406,7 +405,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_ShellySeafloorCavern), + .party = TRAINER_PARTY(sParty_ShellySeafloorCavern), }, [TRAINER_ARCHIE] = @@ -418,7 +417,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Archie), + .party = TRAINER_PARTY(sParty_Archie), }, [TRAINER_LEAH] = @@ -430,7 +429,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Leah), + .party = TRAINER_PARTY(sParty_Leah), }, [TRAINER_DAISY] = @@ -442,7 +441,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Daisy), + .party = TRAINER_PARTY(sParty_Daisy), }, [TRAINER_ROSE_1] = @@ -454,7 +453,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose1), + .party = TRAINER_PARTY(sParty_Rose1), }, [TRAINER_FELIX] = @@ -466,7 +465,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Felix), + .party = TRAINER_PARTY(sParty_Felix), }, [TRAINER_VIOLET] = @@ -478,7 +477,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Violet), + .party = TRAINER_PARTY(sParty_Violet), }, [TRAINER_ROSE_2] = @@ -490,7 +489,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose2), + .party = TRAINER_PARTY(sParty_Rose2), }, [TRAINER_ROSE_3] = @@ -502,7 +501,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose3), + .party = TRAINER_PARTY(sParty_Rose3), }, [TRAINER_ROSE_4] = @@ -514,7 +513,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose4), + .party = TRAINER_PARTY(sParty_Rose4), }, [TRAINER_ROSE_5] = @@ -526,7 +525,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose5), + .party = TRAINER_PARTY(sParty_Rose5), }, [TRAINER_DUSTY_1] = @@ -538,7 +537,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty1), + .party = TRAINER_PARTY(sParty_Dusty1), }, [TRAINER_CHIP] = @@ -550,7 +549,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Chip), + .party = TRAINER_PARTY(sParty_Chip), }, [TRAINER_FOSTER] = @@ -562,7 +561,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Foster), + .party = TRAINER_PARTY(sParty_Foster), }, [TRAINER_DUSTY_2] = @@ -574,7 +573,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty2), + .party = TRAINER_PARTY(sParty_Dusty2), }, [TRAINER_DUSTY_3] = @@ -586,7 +585,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty3), + .party = TRAINER_PARTY(sParty_Dusty3), }, [TRAINER_DUSTY_4] = @@ -598,7 +597,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty4), + .party = TRAINER_PARTY(sParty_Dusty4), }, [TRAINER_DUSTY_5] = @@ -610,7 +609,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty5), + .party = TRAINER_PARTY(sParty_Dusty5), }, [TRAINER_GABBY_AND_TY_1] = @@ -622,7 +621,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy1), + .party = TRAINER_PARTY(sParty_GabbyAndTy1), }, [TRAINER_GABBY_AND_TY_2] = @@ -634,7 +633,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy2), + .party = TRAINER_PARTY(sParty_GabbyAndTy2), }, [TRAINER_GABBY_AND_TY_3] = @@ -646,7 +645,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy3), + .party = TRAINER_PARTY(sParty_GabbyAndTy3), }, [TRAINER_GABBY_AND_TY_4] = @@ -658,7 +657,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy4), + .party = TRAINER_PARTY(sParty_GabbyAndTy4), }, [TRAINER_GABBY_AND_TY_5] = @@ -670,7 +669,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy5), + .party = TRAINER_PARTY(sParty_GabbyAndTy5), }, [TRAINER_GABBY_AND_TY_6] = @@ -682,7 +681,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_GabbyAndTy6), + .party = TRAINER_PARTY(sParty_GabbyAndTy6), }, [TRAINER_LOLA_1] = @@ -694,7 +693,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola1), + .party = TRAINER_PARTY(sParty_Lola1), }, [TRAINER_AUSTINA] = @@ -706,7 +705,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Austina), + .party = TRAINER_PARTY(sParty_Austina), }, [TRAINER_GWEN] = @@ -718,7 +717,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Gwen), + .party = TRAINER_PARTY(sParty_Gwen), }, [TRAINER_LOLA_2] = @@ -730,7 +729,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola2), + .party = TRAINER_PARTY(sParty_Lola2), }, [TRAINER_LOLA_3] = @@ -742,7 +741,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola3), + .party = TRAINER_PARTY(sParty_Lola3), }, [TRAINER_LOLA_4] = @@ -754,7 +753,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola4), + .party = TRAINER_PARTY(sParty_Lola4), }, [TRAINER_LOLA_5] = @@ -766,7 +765,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola5), + .party = TRAINER_PARTY(sParty_Lola5), }, [TRAINER_RICKY_1] = @@ -778,7 +777,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky1), + .party = TRAINER_PARTY(sParty_Ricky1), }, [TRAINER_SIMON] = @@ -790,7 +789,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Simon), + .party = TRAINER_PARTY(sParty_Simon), }, [TRAINER_CHARLIE] = @@ -802,7 +801,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Charlie), + .party = TRAINER_PARTY(sParty_Charlie), }, [TRAINER_RICKY_2] = @@ -814,7 +813,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky2), + .party = TRAINER_PARTY(sParty_Ricky2), }, [TRAINER_RICKY_3] = @@ -826,7 +825,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky3), + .party = TRAINER_PARTY(sParty_Ricky3), }, [TRAINER_RICKY_4] = @@ -838,7 +837,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky4), + .party = TRAINER_PARTY(sParty_Ricky4), }, [TRAINER_RICKY_5] = @@ -850,7 +849,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky5), + .party = TRAINER_PARTY(sParty_Ricky5), }, [TRAINER_RANDALL] = @@ -862,7 +861,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Randall), + .party = TRAINER_PARTY(sParty_Randall), }, [TRAINER_PARKER] = @@ -874,7 +873,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Parker), + .party = TRAINER_PARTY(sParty_Parker), }, [TRAINER_GEORGE] = @@ -886,7 +885,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_George), + .party = TRAINER_PARTY(sParty_George), }, [TRAINER_BERKE] = @@ -898,7 +897,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Berke), + .party = TRAINER_PARTY(sParty_Berke), }, [TRAINER_BRAXTON] = @@ -910,7 +909,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Braxton), + .party = TRAINER_PARTY(sParty_Braxton), }, [TRAINER_VINCENT] = @@ -922,7 +921,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Vincent), + .party = TRAINER_PARTY(sParty_Vincent), }, [TRAINER_LEROY] = @@ -934,7 +933,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Leroy), + .party = TRAINER_PARTY(sParty_Leroy), }, [TRAINER_WILTON_1] = @@ -946,7 +945,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton1), + .party = TRAINER_PARTY(sParty_Wilton1), }, [TRAINER_EDGAR] = @@ -958,7 +957,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Edgar), + .party = TRAINER_PARTY(sParty_Edgar), }, [TRAINER_ALBERT] = @@ -970,7 +969,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Albert), + .party = TRAINER_PARTY(sParty_Albert), }, [TRAINER_SAMUEL] = @@ -982,7 +981,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Samuel), + .party = TRAINER_PARTY(sParty_Samuel), }, [TRAINER_VITO] = @@ -994,7 +993,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Vito), + .party = TRAINER_PARTY(sParty_Vito), }, [TRAINER_OWEN] = @@ -1006,7 +1005,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Owen), + .party = TRAINER_PARTY(sParty_Owen), }, [TRAINER_WILTON_2] = @@ -1018,7 +1017,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton2), + .party = TRAINER_PARTY(sParty_Wilton2), }, [TRAINER_WILTON_3] = @@ -1030,7 +1029,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton3), + .party = TRAINER_PARTY(sParty_Wilton3), }, [TRAINER_WILTON_4] = @@ -1042,7 +1041,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton4), + .party = TRAINER_PARTY(sParty_Wilton4), }, [TRAINER_WILTON_5] = @@ -1054,7 +1053,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton5), + .party = TRAINER_PARTY(sParty_Wilton5), }, [TRAINER_WARREN] = @@ -1066,7 +1065,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Warren), + .party = TRAINER_PARTY(sParty_Warren), }, [TRAINER_MARY] = @@ -1078,7 +1077,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Mary), + .party = TRAINER_PARTY(sParty_Mary), }, [TRAINER_ALEXIA] = @@ -1090,7 +1089,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Alexia), + .party = TRAINER_PARTY(sParty_Alexia), }, [TRAINER_JODY] = @@ -1102,7 +1101,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = ITEM_CUSTOM_MOVES(sParty_Jody), + .party = TRAINER_PARTY(sParty_Jody), }, [TRAINER_WENDY] = @@ -1114,7 +1113,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Wendy), + .party = TRAINER_PARTY(sParty_Wendy), }, [TRAINER_KEIRA] = @@ -1126,7 +1125,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Keira), + .party = TRAINER_PARTY(sParty_Keira), }, [TRAINER_BROOKE_1] = @@ -1138,7 +1137,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke1), + .party = TRAINER_PARTY(sParty_Brooke1), }, [TRAINER_JENNIFER] = @@ -1150,7 +1149,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jennifer), + .party = TRAINER_PARTY(sParty_Jennifer), }, [TRAINER_HOPE] = @@ -1162,7 +1161,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Hope), + .party = TRAINER_PARTY(sParty_Hope), }, [TRAINER_SHANNON] = @@ -1174,7 +1173,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Shannon), + .party = TRAINER_PARTY(sParty_Shannon), }, [TRAINER_MICHELLE] = @@ -1186,7 +1185,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Michelle), + .party = TRAINER_PARTY(sParty_Michelle), }, [TRAINER_CAROLINE] = @@ -1198,7 +1197,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Caroline), + .party = TRAINER_PARTY(sParty_Caroline), }, [TRAINER_JULIE] = @@ -1210,7 +1209,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Julie), + .party = TRAINER_PARTY(sParty_Julie), }, [TRAINER_BROOKE_2] = @@ -1222,7 +1221,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke2), + .party = TRAINER_PARTY(sParty_Brooke2), }, [TRAINER_BROOKE_3] = @@ -1234,7 +1233,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke3), + .party = TRAINER_PARTY(sParty_Brooke3), }, [TRAINER_BROOKE_4] = @@ -1246,7 +1245,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke4), + .party = TRAINER_PARTY(sParty_Brooke4), }, [TRAINER_BROOKE_5] = @@ -1258,7 +1257,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke5), + .party = TRAINER_PARTY(sParty_Brooke5), }, [TRAINER_PATRICIA] = @@ -1270,7 +1269,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Patricia), + .party = TRAINER_PARTY(sParty_Patricia), }, [TRAINER_KINDRA] = @@ -1282,7 +1281,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kindra), + .party = TRAINER_PARTY(sParty_Kindra), }, [TRAINER_TAMMY] = @@ -1294,7 +1293,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tammy), + .party = TRAINER_PARTY(sParty_Tammy), }, [TRAINER_VALERIE_1] = @@ -1306,7 +1305,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie1), + .party = TRAINER_PARTY(sParty_Valerie1), }, [TRAINER_TASHA] = @@ -1318,7 +1317,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tasha), + .party = TRAINER_PARTY(sParty_Tasha), }, [TRAINER_VALERIE_2] = @@ -1330,7 +1329,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie2), + .party = TRAINER_PARTY(sParty_Valerie2), }, [TRAINER_VALERIE_3] = @@ -1342,7 +1341,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie3), + .party = TRAINER_PARTY(sParty_Valerie3), }, [TRAINER_VALERIE_4] = @@ -1354,7 +1353,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie4), + .party = TRAINER_PARTY(sParty_Valerie4), }, [TRAINER_VALERIE_5] = @@ -1366,7 +1365,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie5), + .party = TRAINER_PARTY(sParty_Valerie5), }, [TRAINER_CINDY_1] = @@ -1378,7 +1377,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Cindy1), + .party = TRAINER_PARTY(sParty_Cindy1), }, [TRAINER_DAPHNE] = @@ -1390,7 +1389,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_CUSTOM_MOVES(sParty_Daphne), + .party = TRAINER_PARTY(sParty_Daphne), }, [TRAINER_GRUNT_SPACE_CENTER_2] = @@ -1402,7 +1401,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter2), + .party = TRAINER_PARTY(sParty_GruntSpaceCenter2), }, [TRAINER_CINDY_2] = @@ -1414,7 +1413,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_CUSTOM_MOVES(sParty_Cindy2), + .party = TRAINER_PARTY(sParty_Cindy2), }, [TRAINER_BRIANNA] = @@ -1426,7 +1425,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Brianna), + .party = TRAINER_PARTY(sParty_Brianna), }, [TRAINER_NAOMI] = @@ -1438,7 +1437,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Naomi), + .party = TRAINER_PARTY(sParty_Naomi), }, [TRAINER_CINDY_3] = @@ -1450,7 +1449,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Cindy3), + .party = TRAINER_PARTY(sParty_Cindy3), }, [TRAINER_CINDY_4] = @@ -1462,7 +1461,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Cindy4), + .party = TRAINER_PARTY(sParty_Cindy4), }, [TRAINER_CINDY_5] = @@ -1474,7 +1473,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Cindy5), + .party = TRAINER_PARTY(sParty_Cindy5), }, [TRAINER_CINDY_6] = @@ -1486,7 +1485,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_CUSTOM_MOVES(sParty_Cindy6), + .party = TRAINER_PARTY(sParty_Cindy6), }, [TRAINER_MELISSA] = @@ -1498,7 +1497,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Melissa), + .party = TRAINER_PARTY(sParty_Melissa), }, [TRAINER_SHEILA] = @@ -1510,7 +1509,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sheila), + .party = TRAINER_PARTY(sParty_Sheila), }, [TRAINER_SHIRLEY] = @@ -1522,7 +1521,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Shirley), + .party = TRAINER_PARTY(sParty_Shirley), }, [TRAINER_JESSICA_1] = @@ -1534,7 +1533,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica1), + .party = TRAINER_PARTY(sParty_Jessica1), }, [TRAINER_CONNIE] = @@ -1546,7 +1545,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Connie), + .party = TRAINER_PARTY(sParty_Connie), }, [TRAINER_BRIDGET] = @@ -1558,7 +1557,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Bridget), + .party = TRAINER_PARTY(sParty_Bridget), }, [TRAINER_OLIVIA] = @@ -1570,7 +1569,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Olivia), + .party = TRAINER_PARTY(sParty_Olivia), }, [TRAINER_TIFFANY] = @@ -1582,7 +1581,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tiffany), + .party = TRAINER_PARTY(sParty_Tiffany), }, [TRAINER_JESSICA_2] = @@ -1594,7 +1593,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica2), + .party = TRAINER_PARTY(sParty_Jessica2), }, [TRAINER_JESSICA_3] = @@ -1606,7 +1605,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica3), + .party = TRAINER_PARTY(sParty_Jessica3), }, [TRAINER_JESSICA_4] = @@ -1618,7 +1617,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica4), + .party = TRAINER_PARTY(sParty_Jessica4), }, [TRAINER_JESSICA_5] = @@ -1630,7 +1629,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica5), + .party = TRAINER_PARTY(sParty_Jessica5), }, [TRAINER_WINSTON_1] = @@ -1642,7 +1641,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Winston1), + .party = TRAINER_PARTY(sParty_Winston1), }, [TRAINER_MOLLIE] = @@ -1654,7 +1653,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Mollie), + .party = TRAINER_PARTY(sParty_Mollie), }, [TRAINER_GARRET] = @@ -1666,7 +1665,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Garret), + .party = TRAINER_PARTY(sParty_Garret), }, [TRAINER_WINSTON_2] = @@ -1678,7 +1677,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Winston2), + .party = TRAINER_PARTY(sParty_Winston2), }, [TRAINER_WINSTON_3] = @@ -1690,7 +1689,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Winston3), + .party = TRAINER_PARTY(sParty_Winston3), }, [TRAINER_WINSTON_4] = @@ -1702,7 +1701,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Winston4), + .party = TRAINER_PARTY(sParty_Winston4), }, [TRAINER_WINSTON_5] = @@ -1714,7 +1713,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_CUSTOM_MOVES(sParty_Winston5), + .party = TRAINER_PARTY(sParty_Winston5), }, [TRAINER_STEVE_1] = @@ -1726,7 +1725,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve1), + .party = TRAINER_PARTY(sParty_Steve1), }, [TRAINER_THALIA_1] = @@ -1738,7 +1737,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia1), + .party = TRAINER_PARTY(sParty_Thalia1), }, [TRAINER_MARK] = @@ -1750,7 +1749,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Mark), + .party = TRAINER_PARTY(sParty_Mark), }, [TRAINER_GRUNT_MT_CHIMNEY_1] = @@ -1762,7 +1761,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtChimney1), + .party = TRAINER_PARTY(sParty_GruntMtChimney1), }, [TRAINER_STEVE_2] = @@ -1774,7 +1773,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve2), + .party = TRAINER_PARTY(sParty_Steve2), }, [TRAINER_STEVE_3] = @@ -1786,7 +1785,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve3), + .party = TRAINER_PARTY(sParty_Steve3), }, [TRAINER_STEVE_4] = @@ -1798,7 +1797,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve4), + .party = TRAINER_PARTY(sParty_Steve4), }, [TRAINER_STEVE_5] = @@ -1810,7 +1809,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve5), + .party = TRAINER_PARTY(sParty_Steve5), }, [TRAINER_LUIS] = @@ -1822,7 +1821,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Luis), + .party = TRAINER_PARTY(sParty_Luis), }, [TRAINER_DOMINIK] = @@ -1834,7 +1833,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dominik), + .party = TRAINER_PARTY(sParty_Dominik), }, [TRAINER_DOUGLAS] = @@ -1846,7 +1845,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Douglas), + .party = TRAINER_PARTY(sParty_Douglas), }, [TRAINER_DARRIN] = @@ -1858,7 +1857,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Darrin), + .party = TRAINER_PARTY(sParty_Darrin), }, [TRAINER_TONY_1] = @@ -1870,7 +1869,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony1), + .party = TRAINER_PARTY(sParty_Tony1), }, [TRAINER_JEROME] = @@ -1882,7 +1881,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerome), + .party = TRAINER_PARTY(sParty_Jerome), }, [TRAINER_MATTHEW] = @@ -1894,7 +1893,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Matthew), + .party = TRAINER_PARTY(sParty_Matthew), }, [TRAINER_DAVID] = @@ -1906,7 +1905,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_David), + .party = TRAINER_PARTY(sParty_David), }, [TRAINER_SPENCER] = @@ -1918,7 +1917,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Spencer), + .party = TRAINER_PARTY(sParty_Spencer), }, [TRAINER_ROLAND] = @@ -1930,7 +1929,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Roland), + .party = TRAINER_PARTY(sParty_Roland), }, [TRAINER_NOLEN] = @@ -1942,7 +1941,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nolen), + .party = TRAINER_PARTY(sParty_Nolen), }, [TRAINER_STAN] = @@ -1954,7 +1953,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Stan), + .party = TRAINER_PARTY(sParty_Stan), }, [TRAINER_BARRY] = @@ -1966,7 +1965,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Barry), + .party = TRAINER_PARTY(sParty_Barry), }, [TRAINER_DEAN] = @@ -1978,7 +1977,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dean), + .party = TRAINER_PARTY(sParty_Dean), }, [TRAINER_RODNEY] = @@ -1990,7 +1989,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Rodney), + .party = TRAINER_PARTY(sParty_Rodney), }, [TRAINER_RICHARD] = @@ -2002,7 +2001,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Richard), + .party = TRAINER_PARTY(sParty_Richard), }, [TRAINER_HERMAN] = @@ -2014,7 +2013,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Herman), + .party = TRAINER_PARTY(sParty_Herman), }, [TRAINER_SANTIAGO] = @@ -2026,7 +2025,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Santiago), + .party = TRAINER_PARTY(sParty_Santiago), }, [TRAINER_GILBERT] = @@ -2038,7 +2037,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Gilbert), + .party = TRAINER_PARTY(sParty_Gilbert), }, [TRAINER_FRANKLIN] = @@ -2050,7 +2049,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Franklin), + .party = TRAINER_PARTY(sParty_Franklin), }, [TRAINER_KEVIN] = @@ -2062,7 +2061,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kevin), + .party = TRAINER_PARTY(sParty_Kevin), }, [TRAINER_JACK] = @@ -2074,7 +2073,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jack), + .party = TRAINER_PARTY(sParty_Jack), }, [TRAINER_DUDLEY] = @@ -2086,7 +2085,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dudley), + .party = TRAINER_PARTY(sParty_Dudley), }, [TRAINER_CHAD] = @@ -2098,7 +2097,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Chad), + .party = TRAINER_PARTY(sParty_Chad), }, [TRAINER_TONY_2] = @@ -2110,7 +2109,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony2), + .party = TRAINER_PARTY(sParty_Tony2), }, [TRAINER_TONY_3] = @@ -2122,7 +2121,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony3), + .party = TRAINER_PARTY(sParty_Tony3), }, [TRAINER_TONY_4] = @@ -2134,7 +2133,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony4), + .party = TRAINER_PARTY(sParty_Tony4), }, [TRAINER_TONY_5] = @@ -2146,7 +2145,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony5), + .party = TRAINER_PARTY(sParty_Tony5), }, [TRAINER_TAKAO] = @@ -2158,7 +2157,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Takao), + .party = TRAINER_PARTY(sParty_Takao), }, [TRAINER_HITOSHI] = @@ -2170,7 +2169,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Hitoshi), + .party = TRAINER_PARTY(sParty_Hitoshi), }, [TRAINER_KIYO] = @@ -2182,7 +2181,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kiyo), + .party = TRAINER_PARTY(sParty_Kiyo), }, [TRAINER_KOICHI] = @@ -2194,7 +2193,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Koichi), + .party = TRAINER_PARTY(sParty_Koichi), }, [TRAINER_NOB_1] = @@ -2206,7 +2205,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob1), + .party = TRAINER_PARTY(sParty_Nob1), }, [TRAINER_NOB_2] = @@ -2218,7 +2217,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob2), + .party = TRAINER_PARTY(sParty_Nob2), }, [TRAINER_NOB_3] = @@ -2230,7 +2229,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob3), + .party = TRAINER_PARTY(sParty_Nob3), }, [TRAINER_NOB_4] = @@ -2242,7 +2241,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob4), + .party = TRAINER_PARTY(sParty_Nob4), }, [TRAINER_NOB_5] = @@ -2254,7 +2253,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Nob5), + .party = TRAINER_PARTY(sParty_Nob5), }, [TRAINER_YUJI] = @@ -2266,7 +2265,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Yuji), + .party = TRAINER_PARTY(sParty_Yuji), }, [TRAINER_DAISUKE] = @@ -2278,7 +2277,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Daisuke), + .party = TRAINER_PARTY(sParty_Daisuke), }, [TRAINER_ATSUSHI] = @@ -2290,7 +2289,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Atsushi), + .party = TRAINER_PARTY(sParty_Atsushi), }, [TRAINER_KIRK] = @@ -2302,7 +2301,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Kirk), + .party = TRAINER_PARTY(sParty_Kirk), }, [TRAINER_GRUNT_AQUA_HIDEOUT_7] = @@ -2314,7 +2313,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout7), + .party = TRAINER_PARTY(sParty_GruntAquaHideout7), }, [TRAINER_GRUNT_AQUA_HIDEOUT_8] = @@ -2326,7 +2325,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout8), + .party = TRAINER_PARTY(sParty_GruntAquaHideout8), }, [TRAINER_SHAWN] = @@ -2338,7 +2337,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Shawn), + .party = TRAINER_PARTY(sParty_Shawn), }, [TRAINER_FERNANDO_1] = @@ -2350,7 +2349,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando1), + .party = TRAINER_PARTY(sParty_Fernando1), }, [TRAINER_DALTON_1] = @@ -2362,7 +2361,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton1), + .party = TRAINER_PARTY(sParty_Dalton1), }, [TRAINER_DALTON_2] = @@ -2374,7 +2373,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton2), + .party = TRAINER_PARTY(sParty_Dalton2), }, [TRAINER_DALTON_3] = @@ -2386,7 +2385,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton3), + .party = TRAINER_PARTY(sParty_Dalton3), }, [TRAINER_DALTON_4] = @@ -2398,7 +2397,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton4), + .party = TRAINER_PARTY(sParty_Dalton4), }, [TRAINER_DALTON_5] = @@ -2410,7 +2409,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton5), + .party = TRAINER_PARTY(sParty_Dalton5), }, [TRAINER_COLE] = @@ -2422,7 +2421,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cole), + .party = TRAINER_PARTY(sParty_Cole), }, [TRAINER_JEFF] = @@ -2434,7 +2433,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeff), + .party = TRAINER_PARTY(sParty_Jeff), }, [TRAINER_AXLE] = @@ -2446,7 +2445,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Axle), + .party = TRAINER_PARTY(sParty_Axle), }, [TRAINER_JACE] = @@ -2458,7 +2457,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jace), + .party = TRAINER_PARTY(sParty_Jace), }, [TRAINER_KEEGAN] = @@ -2470,7 +2469,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Keegan), + .party = TRAINER_PARTY(sParty_Keegan), }, [TRAINER_BERNIE_1] = @@ -2482,7 +2481,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie1), + .party = TRAINER_PARTY(sParty_Bernie1), }, [TRAINER_BERNIE_2] = @@ -2494,7 +2493,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie2), + .party = TRAINER_PARTY(sParty_Bernie2), }, [TRAINER_BERNIE_3] = @@ -2506,7 +2505,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie3), + .party = TRAINER_PARTY(sParty_Bernie3), }, [TRAINER_BERNIE_4] = @@ -2518,7 +2517,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie4), + .party = TRAINER_PARTY(sParty_Bernie4), }, [TRAINER_BERNIE_5] = @@ -2530,7 +2529,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie5), + .party = TRAINER_PARTY(sParty_Bernie5), }, [TRAINER_DREW] = @@ -2542,7 +2541,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Drew), + .party = TRAINER_PARTY(sParty_Drew), }, [TRAINER_BEAU] = @@ -2554,7 +2553,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Beau), + .party = TRAINER_PARTY(sParty_Beau), }, [TRAINER_LARRY] = @@ -2566,7 +2565,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Larry), + .party = TRAINER_PARTY(sParty_Larry), }, [TRAINER_SHANE] = @@ -2578,7 +2577,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Shane), + .party = TRAINER_PARTY(sParty_Shane), }, [TRAINER_JUSTIN] = @@ -2590,7 +2589,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Justin), + .party = TRAINER_PARTY(sParty_Justin), }, [TRAINER_ETHAN_1] = @@ -2602,7 +2601,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan1), + .party = TRAINER_PARTY(sParty_Ethan1), }, [TRAINER_AUTUMN] = @@ -2614,7 +2613,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Autumn), + .party = TRAINER_PARTY(sParty_Autumn), }, [TRAINER_TRAVIS] = @@ -2626,7 +2625,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Travis), + .party = TRAINER_PARTY(sParty_Travis), }, [TRAINER_ETHAN_2] = @@ -2638,7 +2637,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan2), + .party = TRAINER_PARTY(sParty_Ethan2), }, [TRAINER_ETHAN_3] = @@ -2650,7 +2649,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan3), + .party = TRAINER_PARTY(sParty_Ethan3), }, [TRAINER_ETHAN_4] = @@ -2662,7 +2661,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan4), + .party = TRAINER_PARTY(sParty_Ethan4), }, [TRAINER_ETHAN_5] = @@ -2674,7 +2673,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan5), + .party = TRAINER_PARTY(sParty_Ethan5), }, [TRAINER_BRENT] = @@ -2686,7 +2685,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Brent), + .party = TRAINER_PARTY(sParty_Brent), }, [TRAINER_DONALD] = @@ -2698,7 +2697,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Donald), + .party = TRAINER_PARTY(sParty_Donald), }, [TRAINER_TAYLOR] = @@ -2710,7 +2709,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Taylor), + .party = TRAINER_PARTY(sParty_Taylor), }, [TRAINER_JEFFREY_1] = @@ -2722,7 +2721,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey1), + .party = TRAINER_PARTY(sParty_Jeffrey1), }, [TRAINER_DEREK] = @@ -2734,7 +2733,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Derek), + .party = TRAINER_PARTY(sParty_Derek), }, [TRAINER_JEFFREY_2] = @@ -2746,7 +2745,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey2), + .party = TRAINER_PARTY(sParty_Jeffrey2), }, [TRAINER_JEFFREY_3] = @@ -2758,7 +2757,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey3), + .party = TRAINER_PARTY(sParty_Jeffrey3), }, [TRAINER_JEFFREY_4] = @@ -2770,7 +2769,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey4), + .party = TRAINER_PARTY(sParty_Jeffrey4), }, [TRAINER_JEFFREY_5] = @@ -2782,7 +2781,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Jeffrey5), + .party = TRAINER_PARTY(sParty_Jeffrey5), }, [TRAINER_EDWARD] = @@ -2794,7 +2793,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Edward), + .party = TRAINER_PARTY(sParty_Edward), }, [TRAINER_PRESTON] = @@ -2806,7 +2805,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Preston), + .party = TRAINER_PARTY(sParty_Preston), }, [TRAINER_VIRGIL] = @@ -2818,7 +2817,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Virgil), + .party = TRAINER_PARTY(sParty_Virgil), }, [TRAINER_BLAKE] = @@ -2830,7 +2829,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Blake), + .party = TRAINER_PARTY(sParty_Blake), }, [TRAINER_WILLIAM] = @@ -2842,7 +2841,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_William), + .party = TRAINER_PARTY(sParty_William), }, [TRAINER_JOSHUA] = @@ -2854,7 +2853,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Joshua), + .party = TRAINER_PARTY(sParty_Joshua), }, [TRAINER_CAMERON_1] = @@ -2866,7 +2865,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron1), + .party = TRAINER_PARTY(sParty_Cameron1), }, [TRAINER_CAMERON_2] = @@ -2878,7 +2877,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron2), + .party = TRAINER_PARTY(sParty_Cameron2), }, [TRAINER_CAMERON_3] = @@ -2890,7 +2889,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron3), + .party = TRAINER_PARTY(sParty_Cameron3), }, [TRAINER_CAMERON_4] = @@ -2902,7 +2901,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron4), + .party = TRAINER_PARTY(sParty_Cameron4), }, [TRAINER_CAMERON_5] = @@ -2914,7 +2913,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron5), + .party = TRAINER_PARTY(sParty_Cameron5), }, [TRAINER_JACLYN] = @@ -2926,7 +2925,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Jaclyn), + .party = TRAINER_PARTY(sParty_Jaclyn), }, [TRAINER_HANNAH] = @@ -2938,7 +2937,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Hannah), + .party = TRAINER_PARTY(sParty_Hannah), }, [TRAINER_SAMANTHA] = @@ -2950,7 +2949,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Samantha), + .party = TRAINER_PARTY(sParty_Samantha), }, [TRAINER_MAURA] = @@ -2962,7 +2961,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Maura), + .party = TRAINER_PARTY(sParty_Maura), }, [TRAINER_KAYLA] = @@ -2974,7 +2973,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kayla), + .party = TRAINER_PARTY(sParty_Kayla), }, [TRAINER_ALEXIS] = @@ -2986,7 +2985,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Alexis), + .party = TRAINER_PARTY(sParty_Alexis), }, [TRAINER_JACKI_1] = @@ -2998,7 +2997,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki1), + .party = TRAINER_PARTY(sParty_Jacki1), }, [TRAINER_JACKI_2] = @@ -3010,7 +3009,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki2), + .party = TRAINER_PARTY(sParty_Jacki2), }, [TRAINER_JACKI_3] = @@ -3022,7 +3021,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki3), + .party = TRAINER_PARTY(sParty_Jacki3), }, [TRAINER_JACKI_4] = @@ -3034,7 +3033,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki4), + .party = TRAINER_PARTY(sParty_Jacki4), }, [TRAINER_JACKI_5] = @@ -3046,7 +3045,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki5), + .party = TRAINER_PARTY(sParty_Jacki5), }, [TRAINER_WALTER_1] = @@ -3058,7 +3057,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Walter1), + .party = TRAINER_PARTY(sParty_Walter1), }, [TRAINER_MICAH] = @@ -3070,7 +3069,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Micah), + .party = TRAINER_PARTY(sParty_Micah), }, [TRAINER_THOMAS] = @@ -3082,7 +3081,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Thomas), + .party = TRAINER_PARTY(sParty_Thomas), }, [TRAINER_WALTER_2] = @@ -3094,7 +3093,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Walter2), + .party = TRAINER_PARTY(sParty_Walter2), }, [TRAINER_WALTER_3] = @@ -3106,7 +3105,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Walter3), + .party = TRAINER_PARTY(sParty_Walter3), }, [TRAINER_WALTER_4] = @@ -3118,7 +3117,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Walter4), + .party = TRAINER_PARTY(sParty_Walter4), }, [TRAINER_WALTER_5] = @@ -3130,7 +3129,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Walter5), + .party = TRAINER_PARTY(sParty_Walter5), }, [TRAINER_SIDNEY] = @@ -3142,7 +3141,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SETUP_FIRST_TURN, - .party = ITEM_CUSTOM_MOVES(sParty_Sidney), + .party = TRAINER_PARTY(sParty_Sidney), }, [TRAINER_PHOEBE] = @@ -3154,7 +3153,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Phoebe), + .party = TRAINER_PARTY(sParty_Phoebe), }, [TRAINER_GLACIA] = @@ -3166,7 +3165,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Glacia), + .party = TRAINER_PARTY(sParty_Glacia), }, [TRAINER_DRAKE] = @@ -3178,7 +3177,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Drake), + .party = TRAINER_PARTY(sParty_Drake), }, [TRAINER_ROXANNE_1] = @@ -3190,7 +3189,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_POTION, ITEM_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Roxanne1), + .party = TRAINER_PARTY(sParty_Roxanne1), }, [TRAINER_BRAWLY_1] = @@ -3202,7 +3201,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Brawly1), + .party = TRAINER_PARTY(sParty_Brawly1), }, [TRAINER_WATTSON_1] = @@ -3214,7 +3213,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Wattson1), + .party = TRAINER_PARTY(sParty_Wattson1), }, [TRAINER_FLANNERY_1] = @@ -3226,7 +3225,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Flannery1), + .party = TRAINER_PARTY(sParty_Flannery1), }, [TRAINER_NORMAN_1] = @@ -3238,7 +3237,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Norman1), + .party = TRAINER_PARTY(sParty_Norman1), }, [TRAINER_WINONA_1] = @@ -3250,7 +3249,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, - .party = ITEM_CUSTOM_MOVES(sParty_Winona1), + .party = TRAINER_PARTY(sParty_Winona1), }, [TRAINER_TATE_AND_LIZA_1] = @@ -3262,7 +3261,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza1), + .party = TRAINER_PARTY(sParty_TateAndLiza1), }, [TRAINER_JUAN_1] = @@ -3274,7 +3273,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Juan1), + .party = TRAINER_PARTY(sParty_Juan1), }, [TRAINER_JERRY_1] = @@ -3286,7 +3285,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry1), + .party = TRAINER_PARTY(sParty_Jerry1), }, [TRAINER_TED] = @@ -3298,7 +3297,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ted), + .party = TRAINER_PARTY(sParty_Ted), }, [TRAINER_PAUL] = @@ -3310,7 +3309,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Paul), + .party = TRAINER_PARTY(sParty_Paul), }, [TRAINER_JERRY_2] = @@ -3322,7 +3321,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry2), + .party = TRAINER_PARTY(sParty_Jerry2), }, [TRAINER_JERRY_3] = @@ -3334,7 +3333,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry3), + .party = TRAINER_PARTY(sParty_Jerry3), }, [TRAINER_JERRY_4] = @@ -3346,7 +3345,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry4), + .party = TRAINER_PARTY(sParty_Jerry4), }, [TRAINER_JERRY_5] = @@ -3358,7 +3357,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry5), + .party = TRAINER_PARTY(sParty_Jerry5), }, [TRAINER_KAREN_1] = @@ -3370,7 +3369,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen1), + .party = TRAINER_PARTY(sParty_Karen1), }, [TRAINER_GEORGIA] = @@ -3382,7 +3381,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Georgia), + .party = TRAINER_PARTY(sParty_Georgia), }, [TRAINER_KAREN_2] = @@ -3394,7 +3393,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen2), + .party = TRAINER_PARTY(sParty_Karen2), }, [TRAINER_KAREN_3] = @@ -3406,7 +3405,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen3), + .party = TRAINER_PARTY(sParty_Karen3), }, [TRAINER_KAREN_4] = @@ -3418,7 +3417,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen4), + .party = TRAINER_PARTY(sParty_Karen4), }, [TRAINER_KAREN_5] = @@ -3430,7 +3429,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen5), + .party = TRAINER_PARTY(sParty_Karen5), }, [TRAINER_KATE_AND_JOY] = @@ -3442,7 +3441,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_KateAndJoy), + .party = TRAINER_PARTY(sParty_KateAndJoy), }, [TRAINER_ANNA_AND_MEG_1] = @@ -3454,7 +3453,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg1), + .party = TRAINER_PARTY(sParty_AnnaAndMeg1), }, [TRAINER_ANNA_AND_MEG_2] = @@ -3466,7 +3465,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg2), + .party = TRAINER_PARTY(sParty_AnnaAndMeg2), }, [TRAINER_ANNA_AND_MEG_3] = @@ -3478,7 +3477,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg3), + .party = TRAINER_PARTY(sParty_AnnaAndMeg3), }, [TRAINER_ANNA_AND_MEG_4] = @@ -3490,7 +3489,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg4), + .party = TRAINER_PARTY(sParty_AnnaAndMeg4), }, [TRAINER_ANNA_AND_MEG_5] = @@ -3502,7 +3501,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg5), + .party = TRAINER_PARTY(sParty_AnnaAndMeg5), }, [TRAINER_VICTOR] = @@ -3514,7 +3513,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Victor), + .party = TRAINER_PARTY(sParty_Victor), }, [TRAINER_MIGUEL_1] = @@ -3526,7 +3525,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Miguel1), + .party = TRAINER_PARTY(sParty_Miguel1), }, [TRAINER_COLTON] = @@ -3538,7 +3537,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_CUSTOM_MOVES(sParty_Colton), + .party = TRAINER_PARTY(sParty_Colton), }, [TRAINER_MIGUEL_2] = @@ -3550,7 +3549,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Miguel2), + .party = TRAINER_PARTY(sParty_Miguel2), }, [TRAINER_MIGUEL_3] = @@ -3562,7 +3561,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Miguel3), + .party = TRAINER_PARTY(sParty_Miguel3), }, [TRAINER_MIGUEL_4] = @@ -3574,7 +3573,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Miguel4), + .party = TRAINER_PARTY(sParty_Miguel4), }, [TRAINER_MIGUEL_5] = @@ -3586,7 +3585,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Miguel5), + .party = TRAINER_PARTY(sParty_Miguel5), }, [TRAINER_VICTORIA] = @@ -3598,7 +3597,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, - .party = ITEM_DEFAULT_MOVES(sParty_Victoria), + .party = TRAINER_PARTY(sParty_Victoria), }, [TRAINER_VANESSA] = @@ -3610,7 +3609,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Vanessa), + .party = TRAINER_PARTY(sParty_Vanessa), }, [TRAINER_BETHANY] = @@ -3622,7 +3621,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Bethany), + .party = TRAINER_PARTY(sParty_Bethany), }, [TRAINER_ISABEL_1] = @@ -3634,7 +3633,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Isabel1), + .party = TRAINER_PARTY(sParty_Isabel1), }, [TRAINER_ISABEL_2] = @@ -3646,7 +3645,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Isabel2), + .party = TRAINER_PARTY(sParty_Isabel2), }, [TRAINER_ISABEL_3] = @@ -3658,7 +3657,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Isabel3), + .party = TRAINER_PARTY(sParty_Isabel3), }, [TRAINER_ISABEL_4] = @@ -3670,7 +3669,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Isabel4), + .party = TRAINER_PARTY(sParty_Isabel4), }, [TRAINER_ISABEL_5] = @@ -3682,7 +3681,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Isabel5), + .party = TRAINER_PARTY(sParty_Isabel5), }, [TRAINER_TIMOTHY_1] = @@ -3694,7 +3693,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Timothy1), + .party = TRAINER_PARTY(sParty_Timothy1), }, [TRAINER_TIMOTHY_2] = @@ -3706,7 +3705,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy2), + .party = TRAINER_PARTY(sParty_Timothy2), }, [TRAINER_TIMOTHY_3] = @@ -3718,7 +3717,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy3), + .party = TRAINER_PARTY(sParty_Timothy3), }, [TRAINER_TIMOTHY_4] = @@ -3730,7 +3729,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy4), + .party = TRAINER_PARTY(sParty_Timothy4), }, [TRAINER_TIMOTHY_5] = @@ -3742,7 +3741,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy5), + .party = TRAINER_PARTY(sParty_Timothy5), }, [TRAINER_VICKY] = @@ -3754,7 +3753,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Vicky), + .party = TRAINER_PARTY(sParty_Vicky), }, [TRAINER_SHELBY_1] = @@ -3766,7 +3765,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby1), + .party = TRAINER_PARTY(sParty_Shelby1), }, [TRAINER_SHELBY_2] = @@ -3778,7 +3777,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby2), + .party = TRAINER_PARTY(sParty_Shelby2), }, [TRAINER_SHELBY_3] = @@ -3790,7 +3789,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby3), + .party = TRAINER_PARTY(sParty_Shelby3), }, [TRAINER_SHELBY_4] = @@ -3802,7 +3801,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby4), + .party = TRAINER_PARTY(sParty_Shelby4), }, [TRAINER_SHELBY_5] = @@ -3814,7 +3813,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby5), + .party = TRAINER_PARTY(sParty_Shelby5), }, [TRAINER_CALVIN_1] = @@ -3826,7 +3825,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin1), + .party = TRAINER_PARTY(sParty_Calvin1), }, [TRAINER_BILLY] = @@ -3838,7 +3837,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Billy), + .party = TRAINER_PARTY(sParty_Billy), }, [TRAINER_JOSH] = @@ -3850,7 +3849,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Josh), + .party = TRAINER_PARTY(sParty_Josh), }, [TRAINER_TOMMY] = @@ -3862,7 +3861,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tommy), + .party = TRAINER_PARTY(sParty_Tommy), }, [TRAINER_JOEY] = @@ -3874,7 +3873,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Joey), + .party = TRAINER_PARTY(sParty_Joey), }, [TRAINER_BEN] = @@ -3886,7 +3885,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Ben), + .party = TRAINER_PARTY(sParty_Ben), }, [TRAINER_QUINCY] = @@ -3898,7 +3897,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Quincy), + .party = TRAINER_PARTY(sParty_Quincy), }, [TRAINER_KATELYNN] = @@ -3910,7 +3909,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Katelynn), + .party = TRAINER_PARTY(sParty_Katelynn), }, [TRAINER_JAYLEN] = @@ -3922,7 +3921,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jaylen), + .party = TRAINER_PARTY(sParty_Jaylen), }, [TRAINER_DILLON] = @@ -3934,7 +3933,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dillon), + .party = TRAINER_PARTY(sParty_Dillon), }, [TRAINER_CALVIN_2] = @@ -3946,7 +3945,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin2), + .party = TRAINER_PARTY(sParty_Calvin2), }, [TRAINER_CALVIN_3] = @@ -3958,7 +3957,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin3), + .party = TRAINER_PARTY(sParty_Calvin3), }, [TRAINER_CALVIN_4] = @@ -3970,7 +3969,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin4), + .party = TRAINER_PARTY(sParty_Calvin4), }, [TRAINER_CALVIN_5] = @@ -3982,7 +3981,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin5), + .party = TRAINER_PARTY(sParty_Calvin5), }, [TRAINER_EDDIE] = @@ -3994,7 +3993,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Eddie), + .party = TRAINER_PARTY(sParty_Eddie), }, [TRAINER_ALLEN] = @@ -4006,7 +4005,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Allen), + .party = TRAINER_PARTY(sParty_Allen), }, [TRAINER_TIMMY] = @@ -4018,7 +4017,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Timmy), + .party = TRAINER_PARTY(sParty_Timmy), }, [TRAINER_WALLACE] = @@ -4030,7 +4029,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Wallace), + .party = TRAINER_PARTY(sParty_Wallace), }, [TRAINER_ANDREW] = @@ -4042,7 +4041,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Andrew), + .party = TRAINER_PARTY(sParty_Andrew), }, [TRAINER_IVAN] = @@ -4054,7 +4053,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ivan), + .party = TRAINER_PARTY(sParty_Ivan), }, [TRAINER_CLAUDE] = @@ -4066,7 +4065,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Claude), + .party = TRAINER_PARTY(sParty_Claude), }, [TRAINER_ELLIOT_1] = @@ -4078,7 +4077,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot1), + .party = TRAINER_PARTY(sParty_Elliot1), }, [TRAINER_NED] = @@ -4090,7 +4089,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ned), + .party = TRAINER_PARTY(sParty_Ned), }, [TRAINER_DALE] = @@ -4102,7 +4101,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dale), + .party = TRAINER_PARTY(sParty_Dale), }, [TRAINER_NOLAN] = @@ -4114,7 +4113,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nolan), + .party = TRAINER_PARTY(sParty_Nolan), }, [TRAINER_BARNY] = @@ -4126,7 +4125,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Barny), + .party = TRAINER_PARTY(sParty_Barny), }, [TRAINER_WADE] = @@ -4138,7 +4137,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Wade), + .party = TRAINER_PARTY(sParty_Wade), }, [TRAINER_CARTER] = @@ -4150,7 +4149,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Carter), + .party = TRAINER_PARTY(sParty_Carter), }, [TRAINER_ELLIOT_2] = @@ -4162,7 +4161,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot2), + .party = TRAINER_PARTY(sParty_Elliot2), }, [TRAINER_ELLIOT_3] = @@ -4174,7 +4173,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot3), + .party = TRAINER_PARTY(sParty_Elliot3), }, [TRAINER_ELLIOT_4] = @@ -4186,7 +4185,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot4), + .party = TRAINER_PARTY(sParty_Elliot4), }, [TRAINER_ELLIOT_5] = @@ -4198,7 +4197,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot5), + .party = TRAINER_PARTY(sParty_Elliot5), }, [TRAINER_RONALD] = @@ -4210,7 +4209,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ronald), + .party = TRAINER_PARTY(sParty_Ronald), }, [TRAINER_JACOB] = @@ -4222,7 +4221,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacob), + .party = TRAINER_PARTY(sParty_Jacob), }, [TRAINER_ANTHONY] = @@ -4234,7 +4233,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Anthony), + .party = TRAINER_PARTY(sParty_Anthony), }, [TRAINER_BENJAMIN_1] = @@ -4246,7 +4245,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin1), + .party = TRAINER_PARTY(sParty_Benjamin1), }, [TRAINER_BENJAMIN_2] = @@ -4258,7 +4257,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin2), + .party = TRAINER_PARTY(sParty_Benjamin2), }, [TRAINER_BENJAMIN_3] = @@ -4270,7 +4269,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin3), + .party = TRAINER_PARTY(sParty_Benjamin3), }, [TRAINER_BENJAMIN_4] = @@ -4282,7 +4281,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin4), + .party = TRAINER_PARTY(sParty_Benjamin4), }, [TRAINER_BENJAMIN_5] = @@ -4294,7 +4293,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin5), + .party = TRAINER_PARTY(sParty_Benjamin5), }, [TRAINER_ABIGAIL_1] = @@ -4306,7 +4305,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail1), + .party = TRAINER_PARTY(sParty_Abigail1), }, [TRAINER_JASMINE] = @@ -4318,7 +4317,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jasmine), + .party = TRAINER_PARTY(sParty_Jasmine), }, [TRAINER_ABIGAIL_2] = @@ -4330,7 +4329,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail2), + .party = TRAINER_PARTY(sParty_Abigail2), }, [TRAINER_ABIGAIL_3] = @@ -4342,7 +4341,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail3), + .party = TRAINER_PARTY(sParty_Abigail3), }, [TRAINER_ABIGAIL_4] = @@ -4354,7 +4353,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail4), + .party = TRAINER_PARTY(sParty_Abigail4), }, [TRAINER_ABIGAIL_5] = @@ -4366,7 +4365,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail5), + .party = TRAINER_PARTY(sParty_Abigail5), }, [TRAINER_DYLAN_1] = @@ -4378,7 +4377,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan1), + .party = TRAINER_PARTY(sParty_Dylan1), }, [TRAINER_DYLAN_2] = @@ -4390,7 +4389,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan2), + .party = TRAINER_PARTY(sParty_Dylan2), }, [TRAINER_DYLAN_3] = @@ -4402,7 +4401,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan3), + .party = TRAINER_PARTY(sParty_Dylan3), }, [TRAINER_DYLAN_4] = @@ -4414,7 +4413,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan4), + .party = TRAINER_PARTY(sParty_Dylan4), }, [TRAINER_DYLAN_5] = @@ -4426,7 +4425,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan5), + .party = TRAINER_PARTY(sParty_Dylan5), }, [TRAINER_MARIA_1] = @@ -4438,7 +4437,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria1), + .party = TRAINER_PARTY(sParty_Maria1), }, [TRAINER_MARIA_2] = @@ -4450,7 +4449,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria2), + .party = TRAINER_PARTY(sParty_Maria2), }, [TRAINER_MARIA_3] = @@ -4462,7 +4461,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria3), + .party = TRAINER_PARTY(sParty_Maria3), }, [TRAINER_MARIA_4] = @@ -4474,7 +4473,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria4), + .party = TRAINER_PARTY(sParty_Maria4), }, [TRAINER_MARIA_5] = @@ -4486,7 +4485,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria5), + .party = TRAINER_PARTY(sParty_Maria5), }, [TRAINER_CAMDEN] = @@ -4498,7 +4497,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Camden), + .party = TRAINER_PARTY(sParty_Camden), }, [TRAINER_DEMETRIUS] = @@ -4510,7 +4509,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Demetrius), + .party = TRAINER_PARTY(sParty_Demetrius), }, [TRAINER_ISAIAH_1] = @@ -4522,7 +4521,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah1), + .party = TRAINER_PARTY(sParty_Isaiah1), }, [TRAINER_PABLO_1] = @@ -4534,7 +4533,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo1), + .party = TRAINER_PARTY(sParty_Pablo1), }, [TRAINER_CHASE] = @@ -4546,7 +4545,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Chase), + .party = TRAINER_PARTY(sParty_Chase), }, [TRAINER_ISAIAH_2] = @@ -4558,7 +4557,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah2), + .party = TRAINER_PARTY(sParty_Isaiah2), }, [TRAINER_ISAIAH_3] = @@ -4570,7 +4569,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah3), + .party = TRAINER_PARTY(sParty_Isaiah3), }, [TRAINER_ISAIAH_4] = @@ -4582,7 +4581,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah4), + .party = TRAINER_PARTY(sParty_Isaiah4), }, [TRAINER_ISAIAH_5] = @@ -4594,7 +4593,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah5), + .party = TRAINER_PARTY(sParty_Isaiah5), }, [TRAINER_ISOBEL] = @@ -4606,7 +4605,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isobel), + .party = TRAINER_PARTY(sParty_Isobel), }, [TRAINER_DONNY] = @@ -4618,7 +4617,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Donny), + .party = TRAINER_PARTY(sParty_Donny), }, [TRAINER_TALIA] = @@ -4630,7 +4629,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Talia), + .party = TRAINER_PARTY(sParty_Talia), }, [TRAINER_KATELYN_1] = @@ -4642,7 +4641,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn1), + .party = TRAINER_PARTY(sParty_Katelyn1), }, [TRAINER_ALLISON] = @@ -4654,7 +4653,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Allison), + .party = TRAINER_PARTY(sParty_Allison), }, [TRAINER_KATELYN_2] = @@ -4666,7 +4665,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn2), + .party = TRAINER_PARTY(sParty_Katelyn2), }, [TRAINER_KATELYN_3] = @@ -4678,7 +4677,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn3), + .party = TRAINER_PARTY(sParty_Katelyn3), }, [TRAINER_KATELYN_4] = @@ -4690,7 +4689,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn4), + .party = TRAINER_PARTY(sParty_Katelyn4), }, [TRAINER_KATELYN_5] = @@ -4702,7 +4701,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn5), + .party = TRAINER_PARTY(sParty_Katelyn5), }, [TRAINER_NICOLAS_1] = @@ -4714,7 +4713,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas1), + .party = TRAINER_PARTY(sParty_Nicolas1), }, [TRAINER_NICOLAS_2] = @@ -4726,7 +4725,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas2), + .party = TRAINER_PARTY(sParty_Nicolas2), }, [TRAINER_NICOLAS_3] = @@ -4738,7 +4737,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas3), + .party = TRAINER_PARTY(sParty_Nicolas3), }, [TRAINER_NICOLAS_4] = @@ -4750,7 +4749,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas4), + .party = TRAINER_PARTY(sParty_Nicolas4), }, [TRAINER_NICOLAS_5] = @@ -4762,7 +4761,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Nicolas5), + .party = TRAINER_PARTY(sParty_Nicolas5), }, [TRAINER_AARON] = @@ -4774,7 +4773,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Aaron), + .party = TRAINER_PARTY(sParty_Aaron), }, [TRAINER_PERRY] = @@ -4786,7 +4785,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Perry), + .party = TRAINER_PARTY(sParty_Perry), }, [TRAINER_HUGH] = @@ -4798,7 +4797,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Hugh), + .party = TRAINER_PARTY(sParty_Hugh), }, [TRAINER_PHIL] = @@ -4810,7 +4809,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Phil), + .party = TRAINER_PARTY(sParty_Phil), }, [TRAINER_JARED] = @@ -4822,7 +4821,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jared), + .party = TRAINER_PARTY(sParty_Jared), }, [TRAINER_HUMBERTO] = @@ -4834,7 +4833,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Humberto), + .party = TRAINER_PARTY(sParty_Humberto), }, [TRAINER_PRESLEY] = @@ -4846,7 +4845,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Presley), + .party = TRAINER_PARTY(sParty_Presley), }, [TRAINER_EDWARDO] = @@ -4858,7 +4857,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwardo), + .party = TRAINER_PARTY(sParty_Edwardo), }, [TRAINER_COLIN] = @@ -4870,7 +4869,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Colin), + .party = TRAINER_PARTY(sParty_Colin), }, [TRAINER_ROBERT_1] = @@ -4882,7 +4881,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert1), + .party = TRAINER_PARTY(sParty_Robert1), }, [TRAINER_BENNY] = @@ -4894,7 +4893,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Benny), + .party = TRAINER_PARTY(sParty_Benny), }, [TRAINER_CHESTER] = @@ -4906,7 +4905,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Chester), + .party = TRAINER_PARTY(sParty_Chester), }, [TRAINER_ROBERT_2] = @@ -4918,7 +4917,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert2), + .party = TRAINER_PARTY(sParty_Robert2), }, [TRAINER_ROBERT_3] = @@ -4930,7 +4929,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert3), + .party = TRAINER_PARTY(sParty_Robert3), }, [TRAINER_ROBERT_4] = @@ -4942,7 +4941,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert4), + .party = TRAINER_PARTY(sParty_Robert4), }, [TRAINER_ROBERT_5] = @@ -4954,7 +4953,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert5), + .party = TRAINER_PARTY(sParty_Robert5), }, [TRAINER_ALEX] = @@ -4966,7 +4965,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Alex), + .party = TRAINER_PARTY(sParty_Alex), }, [TRAINER_BECK] = @@ -4978,7 +4977,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Beck), + .party = TRAINER_PARTY(sParty_Beck), }, [TRAINER_YASU] = @@ -4990,7 +4989,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Yasu), + .party = TRAINER_PARTY(sParty_Yasu), }, [TRAINER_TAKASHI] = @@ -5002,7 +5001,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Takashi), + .party = TRAINER_PARTY(sParty_Takashi), }, [TRAINER_DIANNE] = @@ -5014,7 +5013,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = 0, - .party = ITEM_CUSTOM_MOVES(sParty_Dianne), + .party = TRAINER_PARTY(sParty_Dianne), }, [TRAINER_JANI] = @@ -5026,7 +5025,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jani), + .party = TRAINER_PARTY(sParty_Jani), }, [TRAINER_LAO_1] = @@ -5038,7 +5037,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao1), + .party = TRAINER_PARTY(sParty_Lao1), }, [TRAINER_LUNG] = @@ -5050,7 +5049,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lung), + .party = TRAINER_PARTY(sParty_Lung), }, [TRAINER_LAO_2] = @@ -5062,7 +5061,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao2), + .party = TRAINER_PARTY(sParty_Lao2), }, [TRAINER_LAO_3] = @@ -5074,7 +5073,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao3), + .party = TRAINER_PARTY(sParty_Lao3), }, [TRAINER_LAO_4] = @@ -5086,7 +5085,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao4), + .party = TRAINER_PARTY(sParty_Lao4), }, [TRAINER_LAO_5] = @@ -5098,7 +5097,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = ITEM_CUSTOM_MOVES(sParty_Lao5), + .party = TRAINER_PARTY(sParty_Lao5), }, [TRAINER_JOCELYN] = @@ -5110,7 +5109,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jocelyn), + .party = TRAINER_PARTY(sParty_Jocelyn), }, [TRAINER_LAURA] = @@ -5122,7 +5121,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Laura), + .party = TRAINER_PARTY(sParty_Laura), }, [TRAINER_CYNDY_1] = @@ -5134,7 +5133,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy1), + .party = TRAINER_PARTY(sParty_Cyndy1), }, [TRAINER_CORA] = @@ -5146,7 +5145,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cora), + .party = TRAINER_PARTY(sParty_Cora), }, [TRAINER_PAULA] = @@ -5158,7 +5157,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Paula), + .party = TRAINER_PARTY(sParty_Paula), }, [TRAINER_CYNDY_2] = @@ -5170,7 +5169,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy2), + .party = TRAINER_PARTY(sParty_Cyndy2), }, [TRAINER_CYNDY_3] = @@ -5182,7 +5181,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy3), + .party = TRAINER_PARTY(sParty_Cyndy3), }, [TRAINER_CYNDY_4] = @@ -5194,7 +5193,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy4), + .party = TRAINER_PARTY(sParty_Cyndy4), }, [TRAINER_CYNDY_5] = @@ -5206,7 +5205,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy5), + .party = TRAINER_PARTY(sParty_Cyndy5), }, [TRAINER_MADELINE_1] = @@ -5218,7 +5217,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline1), + .party = TRAINER_PARTY(sParty_Madeline1), }, [TRAINER_CLARISSA] = @@ -5230,7 +5229,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Clarissa), + .party = TRAINER_PARTY(sParty_Clarissa), }, [TRAINER_ANGELICA] = @@ -5242,7 +5241,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Angelica), + .party = TRAINER_PARTY(sParty_Angelica), }, [TRAINER_MADELINE_2] = @@ -5254,7 +5253,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline2), + .party = TRAINER_PARTY(sParty_Madeline2), }, [TRAINER_MADELINE_3] = @@ -5266,7 +5265,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline3), + .party = TRAINER_PARTY(sParty_Madeline3), }, [TRAINER_MADELINE_4] = @@ -5278,7 +5277,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline4), + .party = TRAINER_PARTY(sParty_Madeline4), }, [TRAINER_MADELINE_5] = @@ -5290,7 +5289,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline5), + .party = TRAINER_PARTY(sParty_Madeline5), }, [TRAINER_BEVERLY] = @@ -5302,7 +5301,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Beverly), + .party = TRAINER_PARTY(sParty_Beverly), }, [TRAINER_IMANI] = @@ -5314,7 +5313,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Imani), + .party = TRAINER_PARTY(sParty_Imani), }, [TRAINER_KYLA] = @@ -5326,7 +5325,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kyla), + .party = TRAINER_PARTY(sParty_Kyla), }, [TRAINER_DENISE] = @@ -5338,7 +5337,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Denise), + .party = TRAINER_PARTY(sParty_Denise), }, [TRAINER_BETH] = @@ -5350,7 +5349,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Beth), + .party = TRAINER_PARTY(sParty_Beth), }, [TRAINER_TARA] = @@ -5362,7 +5361,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tara), + .party = TRAINER_PARTY(sParty_Tara), }, [TRAINER_MISSY] = @@ -5374,7 +5373,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Missy), + .party = TRAINER_PARTY(sParty_Missy), }, [TRAINER_ALICE] = @@ -5386,7 +5385,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Alice), + .party = TRAINER_PARTY(sParty_Alice), }, [TRAINER_JENNY_1] = @@ -5398,7 +5397,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny1), + .party = TRAINER_PARTY(sParty_Jenny1), }, [TRAINER_GRACE] = @@ -5410,7 +5409,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Grace), + .party = TRAINER_PARTY(sParty_Grace), }, [TRAINER_TANYA] = @@ -5422,7 +5421,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tanya), + .party = TRAINER_PARTY(sParty_Tanya), }, [TRAINER_SHARON] = @@ -5434,7 +5433,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sharon), + .party = TRAINER_PARTY(sParty_Sharon), }, [TRAINER_NIKKI] = @@ -5446,7 +5445,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nikki), + .party = TRAINER_PARTY(sParty_Nikki), }, [TRAINER_BRENDA] = @@ -5458,7 +5457,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Brenda), + .party = TRAINER_PARTY(sParty_Brenda), }, [TRAINER_KATIE] = @@ -5470,7 +5469,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Katie), + .party = TRAINER_PARTY(sParty_Katie), }, [TRAINER_SUSIE] = @@ -5482,7 +5481,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Susie), + .party = TRAINER_PARTY(sParty_Susie), }, [TRAINER_KARA] = @@ -5494,7 +5493,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kara), + .party = TRAINER_PARTY(sParty_Kara), }, [TRAINER_DANA] = @@ -5506,7 +5505,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dana), + .party = TRAINER_PARTY(sParty_Dana), }, [TRAINER_SIENNA] = @@ -5518,7 +5517,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sienna), + .party = TRAINER_PARTY(sParty_Sienna), }, [TRAINER_DEBRA] = @@ -5530,7 +5529,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Debra), + .party = TRAINER_PARTY(sParty_Debra), }, [TRAINER_LINDA] = @@ -5542,7 +5541,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Linda), + .party = TRAINER_PARTY(sParty_Linda), }, [TRAINER_KAYLEE] = @@ -5554,7 +5553,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kaylee), + .party = TRAINER_PARTY(sParty_Kaylee), }, [TRAINER_LAUREL] = @@ -5566,7 +5565,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Laurel), + .party = TRAINER_PARTY(sParty_Laurel), }, [TRAINER_CARLEE] = @@ -5578,7 +5577,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Carlee), + .party = TRAINER_PARTY(sParty_Carlee), }, [TRAINER_JENNY_2] = @@ -5590,7 +5589,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny2), + .party = TRAINER_PARTY(sParty_Jenny2), }, [TRAINER_JENNY_3] = @@ -5602,7 +5601,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny3), + .party = TRAINER_PARTY(sParty_Jenny3), }, [TRAINER_JENNY_4] = @@ -5614,7 +5613,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny4), + .party = TRAINER_PARTY(sParty_Jenny4), }, [TRAINER_JENNY_5] = @@ -5626,7 +5625,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny5), + .party = TRAINER_PARTY(sParty_Jenny5), }, [TRAINER_HEIDI] = @@ -5638,7 +5637,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Heidi), + .party = TRAINER_PARTY(sParty_Heidi), }, [TRAINER_BECKY] = @@ -5650,7 +5649,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Becky), + .party = TRAINER_PARTY(sParty_Becky), }, [TRAINER_CAROL] = @@ -5662,7 +5661,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Carol), + .party = TRAINER_PARTY(sParty_Carol), }, [TRAINER_NANCY] = @@ -5674,7 +5673,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nancy), + .party = TRAINER_PARTY(sParty_Nancy), }, [TRAINER_MARTHA] = @@ -5686,7 +5685,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Martha), + .party = TRAINER_PARTY(sParty_Martha), }, [TRAINER_DIANA_1] = @@ -5698,7 +5697,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana1), + .party = TRAINER_PARTY(sParty_Diana1), }, [TRAINER_CEDRIC] = @@ -5710,7 +5709,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Cedric), + .party = TRAINER_PARTY(sParty_Cedric), }, [TRAINER_IRENE] = @@ -5722,7 +5721,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Irene), + .party = TRAINER_PARTY(sParty_Irene), }, [TRAINER_DIANA_2] = @@ -5734,7 +5733,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana2), + .party = TRAINER_PARTY(sParty_Diana2), }, [TRAINER_DIANA_3] = @@ -5746,7 +5745,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana3), + .party = TRAINER_PARTY(sParty_Diana3), }, [TRAINER_DIANA_4] = @@ -5758,7 +5757,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana4), + .party = TRAINER_PARTY(sParty_Diana4), }, [TRAINER_DIANA_5] = @@ -5770,7 +5769,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana5), + .party = TRAINER_PARTY(sParty_Diana5), }, [TRAINER_AMY_AND_LIV_1] = @@ -5782,7 +5781,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv1), + .party = TRAINER_PARTY(sParty_AmyAndLiv1), }, [TRAINER_AMY_AND_LIV_2] = @@ -5794,7 +5793,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv2), + .party = TRAINER_PARTY(sParty_AmyAndLiv2), }, [TRAINER_GINA_AND_MIA_1] = @@ -5806,7 +5805,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GinaAndMia1), + .party = TRAINER_PARTY(sParty_GinaAndMia1), }, [TRAINER_MIU_AND_YUKI] = @@ -5818,7 +5817,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MiuAndYuki), + .party = TRAINER_PARTY(sParty_MiuAndYuki), }, [TRAINER_AMY_AND_LIV_3] = @@ -5830,7 +5829,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv3), + .party = TRAINER_PARTY(sParty_AmyAndLiv3), }, [TRAINER_GINA_AND_MIA_2] = @@ -5842,7 +5841,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_GinaAndMia2), + .party = TRAINER_PARTY(sParty_GinaAndMia2), }, [TRAINER_AMY_AND_LIV_4] = @@ -5854,7 +5853,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv4), + .party = TRAINER_PARTY(sParty_AmyAndLiv4), }, [TRAINER_AMY_AND_LIV_5] = @@ -5866,7 +5865,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_AmyAndLiv5), + .party = TRAINER_PARTY(sParty_AmyAndLiv5), }, [TRAINER_AMY_AND_LIV_6] = @@ -5878,7 +5877,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_AmyAndLiv6), + .party = TRAINER_PARTY(sParty_AmyAndLiv6), }, [TRAINER_HUEY] = @@ -5890,7 +5889,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Huey), + .party = TRAINER_PARTY(sParty_Huey), }, [TRAINER_EDMOND] = @@ -5902,7 +5901,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Edmond), + .party = TRAINER_PARTY(sParty_Edmond), }, [TRAINER_ERNEST_1] = @@ -5914,7 +5913,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest1), + .party = TRAINER_PARTY(sParty_Ernest1), }, [TRAINER_DWAYNE] = @@ -5926,7 +5925,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dwayne), + .party = TRAINER_PARTY(sParty_Dwayne), }, [TRAINER_PHILLIP] = @@ -5938,7 +5937,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Phillip), + .party = TRAINER_PARTY(sParty_Phillip), }, [TRAINER_LEONARD] = @@ -5950,7 +5949,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Leonard), + .party = TRAINER_PARTY(sParty_Leonard), }, [TRAINER_DUNCAN] = @@ -5962,7 +5961,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Duncan), + .party = TRAINER_PARTY(sParty_Duncan), }, [TRAINER_ERNEST_2] = @@ -5974,7 +5973,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest2), + .party = TRAINER_PARTY(sParty_Ernest2), }, [TRAINER_ERNEST_3] = @@ -5986,7 +5985,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest3), + .party = TRAINER_PARTY(sParty_Ernest3), }, [TRAINER_ERNEST_4] = @@ -5998,7 +5997,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest4), + .party = TRAINER_PARTY(sParty_Ernest4), }, [TRAINER_ERNEST_5] = @@ -6010,7 +6009,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest5), + .party = TRAINER_PARTY(sParty_Ernest5), }, [TRAINER_ELI] = @@ -6022,7 +6021,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Eli), + .party = TRAINER_PARTY(sParty_Eli), }, [TRAINER_ANNIKA] = @@ -6034,7 +6033,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_CUSTOM_MOVES(sParty_Annika), + .party = TRAINER_PARTY(sParty_Annika), }, [TRAINER_JAZMYN] = @@ -6046,7 +6045,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jazmyn), + .party = TRAINER_PARTY(sParty_Jazmyn), }, [TRAINER_JONAS] = @@ -6058,7 +6057,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Jonas), + .party = TRAINER_PARTY(sParty_Jonas), }, [TRAINER_KAYLEY] = @@ -6070,7 +6069,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Kayley), + .party = TRAINER_PARTY(sParty_Kayley), }, [TRAINER_AURON] = @@ -6082,7 +6081,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Auron), + .party = TRAINER_PARTY(sParty_Auron), }, [TRAINER_KELVIN] = @@ -6094,7 +6093,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kelvin), + .party = TRAINER_PARTY(sParty_Kelvin), }, [TRAINER_MARLEY] = @@ -6106,7 +6105,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Marley), + .party = TRAINER_PARTY(sParty_Marley), }, [TRAINER_REYNA] = @@ -6118,7 +6117,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Reyna), + .party = TRAINER_PARTY(sParty_Reyna), }, [TRAINER_HUDSON] = @@ -6130,7 +6129,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Hudson), + .party = TRAINER_PARTY(sParty_Hudson), }, [TRAINER_CONOR] = @@ -6142,7 +6141,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Conor), + .party = TRAINER_PARTY(sParty_Conor), }, [TRAINER_EDWIN_1] = @@ -6154,7 +6153,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin1), + .party = TRAINER_PARTY(sParty_Edwin1), }, [TRAINER_HECTOR] = @@ -6166,7 +6165,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Hector), + .party = TRAINER_PARTY(sParty_Hector), }, [TRAINER_TABITHA_MOSSDEEP] = @@ -6178,7 +6177,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_TabithaMossdeep), + .party = TRAINER_PARTY(sParty_TabithaMossdeep), }, [TRAINER_EDWIN_2] = @@ -6190,7 +6189,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin2), + .party = TRAINER_PARTY(sParty_Edwin2), }, [TRAINER_EDWIN_3] = @@ -6202,7 +6201,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin3), + .party = TRAINER_PARTY(sParty_Edwin3), }, [TRAINER_EDWIN_4] = @@ -6214,7 +6213,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin4), + .party = TRAINER_PARTY(sParty_Edwin4), }, [TRAINER_EDWIN_5] = @@ -6226,7 +6225,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin5), + .party = TRAINER_PARTY(sParty_Edwin5), }, [TRAINER_WALLY_VR_1] = @@ -6238,7 +6237,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR1), + .party = TRAINER_PARTY(sParty_WallyVR1), }, [TRAINER_BRENDAN_ROUTE_103_MUDKIP] = @@ -6250,7 +6249,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute103Mudkip), + .party = TRAINER_PARTY(sParty_BrendanRoute103Mudkip), }, [TRAINER_BRENDAN_ROUTE_110_MUDKIP] = @@ -6262,7 +6261,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute110Mudkip), + .party = TRAINER_PARTY(sParty_BrendanRoute110Mudkip), }, [TRAINER_BRENDAN_ROUTE_119_MUDKIP] = @@ -6274,7 +6273,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute119Mudkip), + .party = TRAINER_PARTY(sParty_BrendanRoute119Mudkip), }, [TRAINER_BRENDAN_ROUTE_103_TREECKO] = @@ -6286,7 +6285,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute103Treecko), + .party = TRAINER_PARTY(sParty_BrendanRoute103Treecko), }, [TRAINER_BRENDAN_ROUTE_110_TREECKO] = @@ -6298,7 +6297,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute110Treecko), + .party = TRAINER_PARTY(sParty_BrendanRoute110Treecko), }, [TRAINER_BRENDAN_ROUTE_119_TREECKO] = @@ -6310,7 +6309,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute119Treecko), + .party = TRAINER_PARTY(sParty_BrendanRoute119Treecko), }, [TRAINER_BRENDAN_ROUTE_103_TORCHIC] = @@ -6322,7 +6321,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute103Torchic), + .party = TRAINER_PARTY(sParty_BrendanRoute103Torchic), }, [TRAINER_BRENDAN_ROUTE_110_TORCHIC] = @@ -6334,7 +6333,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute110Torchic), + .party = TRAINER_PARTY(sParty_BrendanRoute110Torchic), }, [TRAINER_BRENDAN_ROUTE_119_TORCHIC] = @@ -6346,7 +6345,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute119Torchic), + .party = TRAINER_PARTY(sParty_BrendanRoute119Torchic), }, [TRAINER_MAY_ROUTE_103_MUDKIP] = @@ -6358,7 +6357,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute103Mudkip), + .party = TRAINER_PARTY(sParty_MayRoute103Mudkip), }, [TRAINER_MAY_ROUTE_110_MUDKIP] = @@ -6370,7 +6369,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute110Mudkip), + .party = TRAINER_PARTY(sParty_MayRoute110Mudkip), }, [TRAINER_MAY_ROUTE_119_MUDKIP] = @@ -6382,7 +6381,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute119Mudkip), + .party = TRAINER_PARTY(sParty_MayRoute119Mudkip), }, [TRAINER_MAY_ROUTE_103_TREECKO] = @@ -6394,7 +6393,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute103Treecko), + .party = TRAINER_PARTY(sParty_MayRoute103Treecko), }, [TRAINER_MAY_ROUTE_110_TREECKO] = @@ -6406,7 +6405,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute110Treecko), + .party = TRAINER_PARTY(sParty_MayRoute110Treecko), }, [TRAINER_MAY_ROUTE_119_TREECKO] = @@ -6418,7 +6417,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute119Treecko), + .party = TRAINER_PARTY(sParty_MayRoute119Treecko), }, [TRAINER_MAY_ROUTE_103_TORCHIC] = @@ -6430,7 +6429,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute103Torchic), + .party = TRAINER_PARTY(sParty_MayRoute103Torchic), }, [TRAINER_MAY_ROUTE_110_TORCHIC] = @@ -6442,7 +6441,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute110Torchic), + .party = TRAINER_PARTY(sParty_MayRoute110Torchic), }, [TRAINER_MAY_ROUTE_119_TORCHIC] = @@ -6454,7 +6453,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute119Torchic), + .party = TRAINER_PARTY(sParty_MayRoute119Torchic), }, [TRAINER_ISAAC_1] = @@ -6466,7 +6465,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac1), + .party = TRAINER_PARTY(sParty_Isaac1), }, [TRAINER_DAVIS] = @@ -6478,7 +6477,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Davis), + .party = TRAINER_PARTY(sParty_Davis), }, [TRAINER_MITCHELL] = @@ -6490,7 +6489,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Mitchell), + .party = TRAINER_PARTY(sParty_Mitchell), }, [TRAINER_ISAAC_2] = @@ -6502,7 +6501,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac2), + .party = TRAINER_PARTY(sParty_Isaac2), }, [TRAINER_ISAAC_3] = @@ -6514,7 +6513,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac3), + .party = TRAINER_PARTY(sParty_Isaac3), }, [TRAINER_ISAAC_4] = @@ -6526,7 +6525,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac4), + .party = TRAINER_PARTY(sParty_Isaac4), }, [TRAINER_ISAAC_5] = @@ -6538,7 +6537,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac5), + .party = TRAINER_PARTY(sParty_Isaac5), }, [TRAINER_LYDIA_1] = @@ -6550,7 +6549,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia1), + .party = TRAINER_PARTY(sParty_Lydia1), }, [TRAINER_HALLE] = @@ -6562,7 +6561,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Halle), + .party = TRAINER_PARTY(sParty_Halle), }, [TRAINER_GARRISON] = @@ -6574,7 +6573,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Garrison), + .party = TRAINER_PARTY(sParty_Garrison), }, [TRAINER_LYDIA_2] = @@ -6586,7 +6585,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia2), + .party = TRAINER_PARTY(sParty_Lydia2), }, [TRAINER_LYDIA_3] = @@ -6598,7 +6597,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia3), + .party = TRAINER_PARTY(sParty_Lydia3), }, [TRAINER_LYDIA_4] = @@ -6610,7 +6609,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia4), + .party = TRAINER_PARTY(sParty_Lydia4), }, [TRAINER_LYDIA_5] = @@ -6622,7 +6621,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia5), + .party = TRAINER_PARTY(sParty_Lydia5), }, [TRAINER_JACKSON_1] = @@ -6634,7 +6633,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson1), + .party = TRAINER_PARTY(sParty_Jackson1), }, [TRAINER_LORENZO] = @@ -6646,7 +6645,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lorenzo), + .party = TRAINER_PARTY(sParty_Lorenzo), }, [TRAINER_SEBASTIAN] = @@ -6658,7 +6657,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sebastian), + .party = TRAINER_PARTY(sParty_Sebastian), }, [TRAINER_JACKSON_2] = @@ -6670,7 +6669,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson2), + .party = TRAINER_PARTY(sParty_Jackson2), }, [TRAINER_JACKSON_3] = @@ -6682,7 +6681,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson3), + .party = TRAINER_PARTY(sParty_Jackson3), }, [TRAINER_JACKSON_4] = @@ -6694,7 +6693,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson4), + .party = TRAINER_PARTY(sParty_Jackson4), }, [TRAINER_JACKSON_5] = @@ -6706,7 +6705,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson5), + .party = TRAINER_PARTY(sParty_Jackson5), }, [TRAINER_CATHERINE_1] = @@ -6718,7 +6717,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine1), + .party = TRAINER_PARTY(sParty_Catherine1), }, [TRAINER_JENNA] = @@ -6730,7 +6729,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenna), + .party = TRAINER_PARTY(sParty_Jenna), }, [TRAINER_SOPHIA] = @@ -6742,7 +6741,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sophia), + .party = TRAINER_PARTY(sParty_Sophia), }, [TRAINER_CATHERINE_2] = @@ -6754,7 +6753,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine2), + .party = TRAINER_PARTY(sParty_Catherine2), }, [TRAINER_CATHERINE_3] = @@ -6766,7 +6765,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine3), + .party = TRAINER_PARTY(sParty_Catherine3), }, [TRAINER_CATHERINE_4] = @@ -6778,7 +6777,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine4), + .party = TRAINER_PARTY(sParty_Catherine4), }, [TRAINER_CATHERINE_5] = @@ -6790,7 +6789,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine5), + .party = TRAINER_PARTY(sParty_Catherine5), }, [TRAINER_JULIO] = @@ -6802,7 +6801,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Julio), + .party = TRAINER_PARTY(sParty_Julio), }, [TRAINER_GRUNT_SEAFLOOR_CAVERN_5] = @@ -6814,7 +6813,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern5), + .party = TRAINER_PARTY(sParty_GruntSeafloorCavern5), }, [TRAINER_GRUNT_UNUSED] = @@ -6826,7 +6825,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntUnused), + .party = TRAINER_PARTY(sParty_GruntUnused), }, [TRAINER_GRUNT_MT_PYRE_4] = @@ -6838,7 +6837,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre4), + .party = TRAINER_PARTY(sParty_GruntMtPyre4), }, [TRAINER_GRUNT_JAGGED_PASS] = @@ -6850,7 +6849,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntJaggedPass), + .party = TRAINER_PARTY(sParty_GruntJaggedPass), }, [TRAINER_MARC] = @@ -6862,7 +6861,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Marc), + .party = TRAINER_PARTY(sParty_Marc), }, [TRAINER_BRENDEN] = @@ -6874,7 +6873,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Brenden), + .party = TRAINER_PARTY(sParty_Brenden), }, [TRAINER_LILITH] = @@ -6886,7 +6885,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lilith), + .party = TRAINER_PARTY(sParty_Lilith), }, [TRAINER_CRISTIAN] = @@ -6898,7 +6897,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristian), + .party = TRAINER_PARTY(sParty_Cristian), }, [TRAINER_SYLVIA] = @@ -6910,7 +6909,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sylvia), + .party = TRAINER_PARTY(sParty_Sylvia), }, [TRAINER_LEONARDO] = @@ -6922,7 +6921,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Leonardo), + .party = TRAINER_PARTY(sParty_Leonardo), }, [TRAINER_ATHENA] = @@ -6934,7 +6933,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Athena), + .party = TRAINER_PARTY(sParty_Athena), }, [TRAINER_HARRISON] = @@ -6946,7 +6945,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Harrison), + .party = TRAINER_PARTY(sParty_Harrison), }, [TRAINER_GRUNT_MT_CHIMNEY_2] = @@ -6958,7 +6957,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtChimney2), + .party = TRAINER_PARTY(sParty_GruntMtChimney2), }, [TRAINER_CLARENCE] = @@ -6970,7 +6969,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Clarence), + .party = TRAINER_PARTY(sParty_Clarence), }, [TRAINER_TERRY] = @@ -6982,7 +6981,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Terry), + .party = TRAINER_PARTY(sParty_Terry), }, [TRAINER_NATE] = @@ -6994,7 +6993,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nate), + .party = TRAINER_PARTY(sParty_Nate), }, [TRAINER_KATHLEEN] = @@ -7006,7 +7005,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kathleen), + .party = TRAINER_PARTY(sParty_Kathleen), }, [TRAINER_CLIFFORD] = @@ -7018,7 +7017,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Clifford), + .party = TRAINER_PARTY(sParty_Clifford), }, [TRAINER_NICHOLAS] = @@ -7030,7 +7029,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicholas), + .party = TRAINER_PARTY(sParty_Nicholas), }, [TRAINER_GRUNT_SPACE_CENTER_3] = @@ -7042,7 +7041,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter3), + .party = TRAINER_PARTY(sParty_GruntSpaceCenter3), }, [TRAINER_GRUNT_SPACE_CENTER_4] = @@ -7054,7 +7053,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter4), + .party = TRAINER_PARTY(sParty_GruntSpaceCenter4), }, [TRAINER_GRUNT_SPACE_CENTER_5] = @@ -7066,7 +7065,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter5), + .party = TRAINER_PARTY(sParty_GruntSpaceCenter5), }, [TRAINER_GRUNT_SPACE_CENTER_6] = @@ -7078,7 +7077,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter6), + .party = TRAINER_PARTY(sParty_GruntSpaceCenter6), }, [TRAINER_GRUNT_SPACE_CENTER_7] = @@ -7090,7 +7089,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter7), + .party = TRAINER_PARTY(sParty_GruntSpaceCenter7), }, [TRAINER_MACEY] = @@ -7102,7 +7101,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Macey), + .party = TRAINER_PARTY(sParty_Macey), }, [TRAINER_BRENDAN_RUSTBORO_TREECKO] = @@ -7114,7 +7113,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRustboroTreecko), + .party = TRAINER_PARTY(sParty_BrendanRustboroTreecko), }, [TRAINER_BRENDAN_RUSTBORO_MUDKIP] = @@ -7126,7 +7125,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRustboroMudkip), + .party = TRAINER_PARTY(sParty_BrendanRustboroMudkip), }, [TRAINER_PAXTON] = @@ -7138,7 +7137,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Paxton), + .party = TRAINER_PARTY(sParty_Paxton), }, [TRAINER_ISABELLA] = @@ -7150,7 +7149,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isabella), + .party = TRAINER_PARTY(sParty_Isabella), }, [TRAINER_GRUNT_WEATHER_INST_5] = @@ -7162,7 +7161,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst5), + .party = TRAINER_PARTY(sParty_GruntWeatherInst5), }, [TRAINER_TABITHA_MT_CHIMNEY] = @@ -7174,7 +7173,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_TabithaMtChimney), + .party = TRAINER_PARTY(sParty_TabithaMtChimney), }, [TRAINER_JONATHAN] = @@ -7186,7 +7185,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jonathan), + .party = TRAINER_PARTY(sParty_Jonathan), }, [TRAINER_BRENDAN_RUSTBORO_TORCHIC] = @@ -7198,7 +7197,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRustboroTorchic), + .party = TRAINER_PARTY(sParty_BrendanRustboroTorchic), }, [TRAINER_MAY_RUSTBORO_MUDKIP] = @@ -7210,7 +7209,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRustboroMudkip), + .party = TRAINER_PARTY(sParty_MayRustboroMudkip), }, [TRAINER_MAXIE_MAGMA_HIDEOUT] = @@ -7222,7 +7221,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MaxieMagmaHideout), + .party = TRAINER_PARTY(sParty_MaxieMagmaHideout), }, [TRAINER_MAXIE_MT_CHIMNEY] = @@ -7234,7 +7233,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MaxieMtChimney), + .party = TRAINER_PARTY(sParty_MaxieMtChimney), }, [TRAINER_TIANA] = @@ -7246,7 +7245,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tiana), + .party = TRAINER_PARTY(sParty_Tiana), }, [TRAINER_HALEY_1] = @@ -7258,7 +7257,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley1), + .party = TRAINER_PARTY(sParty_Haley1), }, [TRAINER_JANICE] = @@ -7270,7 +7269,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Janice), + .party = TRAINER_PARTY(sParty_Janice), }, [TRAINER_VIVI] = @@ -7282,7 +7281,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Vivi), + .party = TRAINER_PARTY(sParty_Vivi), }, [TRAINER_HALEY_2] = @@ -7294,7 +7293,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley2), + .party = TRAINER_PARTY(sParty_Haley2), }, [TRAINER_HALEY_3] = @@ -7306,7 +7305,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley3), + .party = TRAINER_PARTY(sParty_Haley3), }, [TRAINER_HALEY_4] = @@ -7318,7 +7317,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley4), + .party = TRAINER_PARTY(sParty_Haley4), }, [TRAINER_HALEY_5] = @@ -7330,7 +7329,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley5), + .party = TRAINER_PARTY(sParty_Haley5), }, [TRAINER_SALLY] = @@ -7342,7 +7341,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sally), + .party = TRAINER_PARTY(sParty_Sally), }, [TRAINER_ROBIN] = @@ -7354,7 +7353,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Robin), + .party = TRAINER_PARTY(sParty_Robin), }, [TRAINER_ANDREA] = @@ -7366,7 +7365,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Andrea), + .party = TRAINER_PARTY(sParty_Andrea), }, [TRAINER_CRISSY] = @@ -7378,7 +7377,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Crissy), + .party = TRAINER_PARTY(sParty_Crissy), }, [TRAINER_RICK] = @@ -7390,7 +7389,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Rick), + .party = TRAINER_PARTY(sParty_Rick), }, [TRAINER_LYLE] = @@ -7402,7 +7401,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lyle), + .party = TRAINER_PARTY(sParty_Lyle), }, [TRAINER_JOSE] = @@ -7414,7 +7413,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jose), + .party = TRAINER_PARTY(sParty_Jose), }, [TRAINER_DOUG] = @@ -7426,7 +7425,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Doug), + .party = TRAINER_PARTY(sParty_Doug), }, [TRAINER_GREG] = @@ -7438,7 +7437,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Greg), + .party = TRAINER_PARTY(sParty_Greg), }, [TRAINER_KENT] = @@ -7450,7 +7449,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kent), + .party = TRAINER_PARTY(sParty_Kent), }, [TRAINER_JAMES_1] = @@ -7462,7 +7461,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_James1), + .party = TRAINER_PARTY(sParty_James1), }, [TRAINER_JAMES_2] = @@ -7474,7 +7473,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_James2), + .party = TRAINER_PARTY(sParty_James2), }, [TRAINER_JAMES_3] = @@ -7486,7 +7485,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_James3), + .party = TRAINER_PARTY(sParty_James3), }, [TRAINER_JAMES_4] = @@ -7498,7 +7497,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_James4), + .party = TRAINER_PARTY(sParty_James4), }, [TRAINER_JAMES_5] = @@ -7510,7 +7509,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_James5), + .party = TRAINER_PARTY(sParty_James5), }, [TRAINER_BRICE] = @@ -7522,7 +7521,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Brice), + .party = TRAINER_PARTY(sParty_Brice), }, [TRAINER_TRENT_1] = @@ -7534,7 +7533,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent1), + .party = TRAINER_PARTY(sParty_Trent1), }, [TRAINER_LENNY] = @@ -7546,7 +7545,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lenny), + .party = TRAINER_PARTY(sParty_Lenny), }, [TRAINER_LUCAS_1] = @@ -7558,7 +7557,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lucas1), + .party = TRAINER_PARTY(sParty_Lucas1), }, [TRAINER_ALAN] = @@ -7570,7 +7569,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Alan), + .party = TRAINER_PARTY(sParty_Alan), }, [TRAINER_CLARK] = @@ -7582,7 +7581,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Clark), + .party = TRAINER_PARTY(sParty_Clark), }, [TRAINER_ERIC] = @@ -7594,7 +7593,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Eric), + .party = TRAINER_PARTY(sParty_Eric), }, [TRAINER_LUCAS_2] = @@ -7606,7 +7605,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Lucas2), + .party = TRAINER_PARTY(sParty_Lucas2), }, [TRAINER_MIKE_1] = @@ -7618,7 +7617,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Mike1), + .party = TRAINER_PARTY(sParty_Mike1), }, [TRAINER_MIKE_2] = @@ -7630,7 +7629,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Mike2), + .party = TRAINER_PARTY(sParty_Mike2), }, [TRAINER_TRENT_2] = @@ -7642,7 +7641,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent2), + .party = TRAINER_PARTY(sParty_Trent2), }, [TRAINER_TRENT_3] = @@ -7654,7 +7653,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent3), + .party = TRAINER_PARTY(sParty_Trent3), }, [TRAINER_TRENT_4] = @@ -7666,7 +7665,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent4), + .party = TRAINER_PARTY(sParty_Trent4), }, [TRAINER_TRENT_5] = @@ -7678,7 +7677,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent5), + .party = TRAINER_PARTY(sParty_Trent5), }, [TRAINER_DEZ_AND_LUKE] = @@ -7690,7 +7689,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_DezAndLuke), + .party = TRAINER_PARTY(sParty_DezAndLuke), }, [TRAINER_LEA_AND_JED] = @@ -7702,7 +7701,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_LeaAndJed), + .party = TRAINER_PARTY(sParty_LeaAndJed), }, [TRAINER_KIRA_AND_DAN_1] = @@ -7714,7 +7713,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan1), + .party = TRAINER_PARTY(sParty_KiraAndDan1), }, [TRAINER_KIRA_AND_DAN_2] = @@ -7726,7 +7725,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan2), + .party = TRAINER_PARTY(sParty_KiraAndDan2), }, [TRAINER_KIRA_AND_DAN_3] = @@ -7738,7 +7737,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan3), + .party = TRAINER_PARTY(sParty_KiraAndDan3), }, [TRAINER_KIRA_AND_DAN_4] = @@ -7750,7 +7749,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan4), + .party = TRAINER_PARTY(sParty_KiraAndDan4), }, [TRAINER_KIRA_AND_DAN_5] = @@ -7762,7 +7761,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan5), + .party = TRAINER_PARTY(sParty_KiraAndDan5), }, [TRAINER_JOHANNA] = @@ -7774,7 +7773,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Johanna), + .party = TRAINER_PARTY(sParty_Johanna), }, [TRAINER_GERALD] = @@ -7786,7 +7785,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Gerald), + .party = TRAINER_PARTY(sParty_Gerald), }, [TRAINER_VIVIAN] = @@ -7798,7 +7797,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Vivian), + .party = TRAINER_PARTY(sParty_Vivian), }, [TRAINER_DANIELLE] = @@ -7810,7 +7809,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Danielle), + .party = TRAINER_PARTY(sParty_Danielle), }, [TRAINER_HIDEO] = @@ -7822,7 +7821,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Hideo), + .party = TRAINER_PARTY(sParty_Hideo), }, [TRAINER_KEIGO] = @@ -7834,7 +7833,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Keigo), + .party = TRAINER_PARTY(sParty_Keigo), }, [TRAINER_RILEY] = @@ -7846,7 +7845,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Riley), + .party = TRAINER_PARTY(sParty_Riley), }, [TRAINER_FLINT] = @@ -7858,7 +7857,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Flint), + .party = TRAINER_PARTY(sParty_Flint), }, [TRAINER_ASHLEY] = @@ -7870,7 +7869,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ashley), + .party = TRAINER_PARTY(sParty_Ashley), }, [TRAINER_WALLY_MAUVILLE] = @@ -7882,7 +7881,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_WallyMauville), + .party = TRAINER_PARTY(sParty_WallyMauville), }, [TRAINER_WALLY_VR_2] = @@ -7894,7 +7893,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR2), + .party = TRAINER_PARTY(sParty_WallyVR2), }, [TRAINER_WALLY_VR_3] = @@ -7906,7 +7905,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR3), + .party = TRAINER_PARTY(sParty_WallyVR3), }, [TRAINER_WALLY_VR_4] = @@ -7918,7 +7917,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR4), + .party = TRAINER_PARTY(sParty_WallyVR4), }, [TRAINER_WALLY_VR_5] = @@ -7930,7 +7929,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR5), + .party = TRAINER_PARTY(sParty_WallyVR5), }, [TRAINER_BRENDAN_LILYCOVE_MUDKIP] = @@ -7942,7 +7941,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLilycoveMudkip), + .party = TRAINER_PARTY(sParty_BrendanLilycoveMudkip), }, [TRAINER_BRENDAN_LILYCOVE_TREECKO] = @@ -7954,7 +7953,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLilycoveTreecko), + .party = TRAINER_PARTY(sParty_BrendanLilycoveTreecko), }, [TRAINER_BRENDAN_LILYCOVE_TORCHIC] = @@ -7966,7 +7965,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLilycoveTorchic), + .party = TRAINER_PARTY(sParty_BrendanLilycoveTorchic), }, [TRAINER_MAY_LILYCOVE_MUDKIP] = @@ -7978,7 +7977,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLilycoveMudkip), + .party = TRAINER_PARTY(sParty_MayLilycoveMudkip), }, [TRAINER_MAY_LILYCOVE_TREECKO] = @@ -7990,7 +7989,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLilycoveTreecko), + .party = TRAINER_PARTY(sParty_MayLilycoveTreecko), }, [TRAINER_MAY_LILYCOVE_TORCHIC] = @@ -8002,7 +8001,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLilycoveTorchic), + .party = TRAINER_PARTY(sParty_MayLilycoveTorchic), }, [TRAINER_JONAH] = @@ -8014,7 +8013,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jonah), + .party = TRAINER_PARTY(sParty_Jonah), }, [TRAINER_HENRY] = @@ -8026,7 +8025,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Henry), + .party = TRAINER_PARTY(sParty_Henry), }, [TRAINER_ROGER] = @@ -8038,7 +8037,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Roger), + .party = TRAINER_PARTY(sParty_Roger), }, [TRAINER_ALEXA] = @@ -8050,7 +8049,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Alexa), + .party = TRAINER_PARTY(sParty_Alexa), }, [TRAINER_RUBEN] = @@ -8062,7 +8061,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Ruben), + .party = TRAINER_PARTY(sParty_Ruben), }, [TRAINER_KOJI_1] = @@ -8074,7 +8073,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji1), + .party = TRAINER_PARTY(sParty_Koji1), }, [TRAINER_WAYNE] = @@ -8086,7 +8085,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Wayne), + .party = TRAINER_PARTY(sParty_Wayne), }, [TRAINER_AIDAN] = @@ -8098,7 +8097,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Aidan), + .party = TRAINER_PARTY(sParty_Aidan), }, [TRAINER_REED] = @@ -8110,7 +8109,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Reed), + .party = TRAINER_PARTY(sParty_Reed), }, [TRAINER_TISHA] = @@ -8122,7 +8121,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tisha), + .party = TRAINER_PARTY(sParty_Tisha), }, [TRAINER_TORI_AND_TIA] = @@ -8134,7 +8133,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_ToriAndTia), + .party = TRAINER_PARTY(sParty_ToriAndTia), }, [TRAINER_KIM_AND_IRIS] = @@ -8146,7 +8145,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_KimAndIris), + .party = TRAINER_PARTY(sParty_KimAndIris), }, [TRAINER_TYRA_AND_IVY] = @@ -8158,7 +8157,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_TyraAndIvy), + .party = TRAINER_PARTY(sParty_TyraAndIvy), }, [TRAINER_MEL_AND_PAUL] = @@ -8170,7 +8169,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_CUSTOM_MOVES(sParty_MelAndPaul), + .party = TRAINER_PARTY(sParty_MelAndPaul), }, [TRAINER_JOHN_AND_JAY_1] = @@ -8182,7 +8181,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay1), + .party = TRAINER_PARTY(sParty_JohnAndJay1), }, [TRAINER_JOHN_AND_JAY_2] = @@ -8194,7 +8193,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay2), + .party = TRAINER_PARTY(sParty_JohnAndJay2), }, [TRAINER_JOHN_AND_JAY_3] = @@ -8206,7 +8205,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay3), + .party = TRAINER_PARTY(sParty_JohnAndJay3), }, [TRAINER_JOHN_AND_JAY_4] = @@ -8218,7 +8217,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay4), + .party = TRAINER_PARTY(sParty_JohnAndJay4), }, [TRAINER_JOHN_AND_JAY_5] = @@ -8230,7 +8229,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay5), + .party = TRAINER_PARTY(sParty_JohnAndJay5), }, [TRAINER_RELI_AND_IAN] = @@ -8242,7 +8241,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_ReliAndIan), + .party = TRAINER_PARTY(sParty_ReliAndIan), }, [TRAINER_LILA_AND_ROY_1] = @@ -8254,7 +8253,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy1), + .party = TRAINER_PARTY(sParty_LilaAndRoy1), }, [TRAINER_LILA_AND_ROY_2] = @@ -8266,7 +8265,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy2), + .party = TRAINER_PARTY(sParty_LilaAndRoy2), }, [TRAINER_LILA_AND_ROY_3] = @@ -8278,7 +8277,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy3), + .party = TRAINER_PARTY(sParty_LilaAndRoy3), }, [TRAINER_LILA_AND_ROY_4] = @@ -8290,7 +8289,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy4), + .party = TRAINER_PARTY(sParty_LilaAndRoy4), }, [TRAINER_LILA_AND_ROY_5] = @@ -8302,7 +8301,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy5), + .party = TRAINER_PARTY(sParty_LilaAndRoy5), }, [TRAINER_LISA_AND_RAY] = @@ -8314,7 +8313,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_LisaAndRay), + .party = TRAINER_PARTY(sParty_LisaAndRay), }, [TRAINER_CHRIS] = @@ -8326,7 +8325,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Chris), + .party = TRAINER_PARTY(sParty_Chris), }, [TRAINER_DAWSON] = @@ -8338,7 +8337,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Dawson), + .party = TRAINER_PARTY(sParty_Dawson), }, [TRAINER_SARAH] = @@ -8350,7 +8349,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Sarah), + .party = TRAINER_PARTY(sParty_Sarah), }, [TRAINER_DARIAN] = @@ -8362,7 +8361,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Darian), + .party = TRAINER_PARTY(sParty_Darian), }, [TRAINER_HAILEY] = @@ -8374,7 +8373,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Hailey), + .party = TRAINER_PARTY(sParty_Hailey), }, [TRAINER_CHANDLER] = @@ -8386,7 +8385,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Chandler), + .party = TRAINER_PARTY(sParty_Chandler), }, [TRAINER_KALEB] = @@ -8398,7 +8397,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Kaleb), + .party = TRAINER_PARTY(sParty_Kaleb), }, [TRAINER_JOSEPH] = @@ -8410,7 +8409,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Joseph), + .party = TRAINER_PARTY(sParty_Joseph), }, [TRAINER_ALYSSA] = @@ -8422,7 +8421,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Alyssa), + .party = TRAINER_PARTY(sParty_Alyssa), }, [TRAINER_MARCOS] = @@ -8434,7 +8433,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Marcos), + .party = TRAINER_PARTY(sParty_Marcos), }, [TRAINER_RHETT] = @@ -8446,7 +8445,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Rhett), + .party = TRAINER_PARTY(sParty_Rhett), }, [TRAINER_TYRON] = @@ -8458,7 +8457,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tyron), + .party = TRAINER_PARTY(sParty_Tyron), }, [TRAINER_CELINA] = @@ -8470,7 +8469,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Celina), + .party = TRAINER_PARTY(sParty_Celina), }, [TRAINER_BIANCA] = @@ -8482,7 +8481,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Bianca), + .party = TRAINER_PARTY(sParty_Bianca), }, [TRAINER_HAYDEN] = @@ -8494,7 +8493,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Hayden), + .party = TRAINER_PARTY(sParty_Hayden), }, [TRAINER_SOPHIE] = @@ -8506,7 +8505,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sophie), + .party = TRAINER_PARTY(sParty_Sophie), }, [TRAINER_COBY] = @@ -8518,7 +8517,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Coby), + .party = TRAINER_PARTY(sParty_Coby), }, [TRAINER_LAWRENCE] = @@ -8530,7 +8529,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lawrence), + .party = TRAINER_PARTY(sParty_Lawrence), }, [TRAINER_WYATT] = @@ -8542,7 +8541,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Wyatt), + .party = TRAINER_PARTY(sParty_Wyatt), }, [TRAINER_ANGELINA] = @@ -8554,7 +8553,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Angelina), + .party = TRAINER_PARTY(sParty_Angelina), }, [TRAINER_KAI] = @@ -8566,7 +8565,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kai), + .party = TRAINER_PARTY(sParty_Kai), }, [TRAINER_CHARLOTTE] = @@ -8578,7 +8577,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Charlotte), + .party = TRAINER_PARTY(sParty_Charlotte), }, [TRAINER_DEANDRE] = @@ -8590,7 +8589,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Deandre), + .party = TRAINER_PARTY(sParty_Deandre), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_1] = @@ -8602,7 +8601,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout1), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout1), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_2] = @@ -8614,7 +8613,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout2), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout2), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_3] = @@ -8626,7 +8625,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout3), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout3), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_4] = @@ -8638,7 +8637,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout4), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout4), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_5] = @@ -8650,7 +8649,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout5), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout5), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_6] = @@ -8662,7 +8661,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout6), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout6), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_7] = @@ -8674,7 +8673,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout7), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout7), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_8] = @@ -8686,7 +8685,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout8), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout8), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_9] = @@ -8698,7 +8697,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout9), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout9), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_10] = @@ -8710,7 +8709,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout10), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout10), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_11] = @@ -8722,7 +8721,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout11), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout11), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_12] = @@ -8734,7 +8733,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout12), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout12), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_13] = @@ -8746,7 +8745,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout13), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout13), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_14] = @@ -8758,7 +8757,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout14), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout14), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_15] = @@ -8770,7 +8769,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout15), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout15), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_16] = @@ -8782,7 +8781,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout16), + .party = TRAINER_PARTY(sParty_GruntMagmaHideout16), }, [TRAINER_TABITHA_MAGMA_HIDEOUT] = @@ -8794,7 +8793,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_TabithaMagmaHideout), + .party = TRAINER_PARTY(sParty_TabithaMagmaHideout), }, [TRAINER_DARCY] = @@ -8806,7 +8805,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Darcy), + .party = TRAINER_PARTY(sParty_Darcy), }, [TRAINER_MAXIE_MOSSDEEP] = @@ -8818,7 +8817,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MaxieMossdeep), + .party = TRAINER_PARTY(sParty_MaxieMossdeep), }, [TRAINER_PETE] = @@ -8830,7 +8829,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Pete), + .party = TRAINER_PARTY(sParty_Pete), }, [TRAINER_ISABELLE] = @@ -8842,7 +8841,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Isabelle), + .party = TRAINER_PARTY(sParty_Isabelle), }, [TRAINER_ANDRES_1] = @@ -8854,7 +8853,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres1), + .party = TRAINER_PARTY(sParty_Andres1), }, [TRAINER_JOSUE] = @@ -8866,7 +8865,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Josue), + .party = TRAINER_PARTY(sParty_Josue), }, [TRAINER_CAMRON] = @@ -8878,7 +8877,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Camron), + .party = TRAINER_PARTY(sParty_Camron), }, [TRAINER_CORY_1] = @@ -8890,7 +8889,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory1), + .party = TRAINER_PARTY(sParty_Cory1), }, [TRAINER_CAROLINA] = @@ -8902,7 +8901,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Carolina), + .party = TRAINER_PARTY(sParty_Carolina), }, [TRAINER_ELIJAH] = @@ -8914,7 +8913,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Elijah), + .party = TRAINER_PARTY(sParty_Elijah), }, [TRAINER_CELIA] = @@ -8926,7 +8925,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Celia), + .party = TRAINER_PARTY(sParty_Celia), }, [TRAINER_BRYAN] = @@ -8938,7 +8937,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Bryan), + .party = TRAINER_PARTY(sParty_Bryan), }, [TRAINER_BRANDEN] = @@ -8950,7 +8949,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Branden), + .party = TRAINER_PARTY(sParty_Branden), }, [TRAINER_BRYANT] = @@ -8962,7 +8961,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Bryant), + .party = TRAINER_PARTY(sParty_Bryant), }, [TRAINER_SHAYLA] = @@ -8974,7 +8973,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Shayla), + .party = TRAINER_PARTY(sParty_Shayla), }, [TRAINER_KYRA] = @@ -8986,7 +8985,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Kyra), + .party = TRAINER_PARTY(sParty_Kyra), }, [TRAINER_JAIDEN] = @@ -8998,7 +8997,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Jaiden), + .party = TRAINER_PARTY(sParty_Jaiden), }, [TRAINER_ALIX] = @@ -9010,7 +9009,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Alix), + .party = TRAINER_PARTY(sParty_Alix), }, [TRAINER_HELENE] = @@ -9022,7 +9021,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Helene), + .party = TRAINER_PARTY(sParty_Helene), }, [TRAINER_MARLENE] = @@ -9034,7 +9033,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Marlene), + .party = TRAINER_PARTY(sParty_Marlene), }, [TRAINER_DEVAN] = @@ -9046,7 +9045,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Devan), + .party = TRAINER_PARTY(sParty_Devan), }, [TRAINER_JOHNSON] = @@ -9058,7 +9057,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Johnson), + .party = TRAINER_PARTY(sParty_Johnson), }, [TRAINER_MELINA] = @@ -9070,7 +9069,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Melina), + .party = TRAINER_PARTY(sParty_Melina), }, [TRAINER_BRANDI] = @@ -9082,7 +9081,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Brandi), + .party = TRAINER_PARTY(sParty_Brandi), }, [TRAINER_AISHA] = @@ -9094,7 +9093,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Aisha), + .party = TRAINER_PARTY(sParty_Aisha), }, [TRAINER_MAKAYLA] = @@ -9106,7 +9105,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Makayla), + .party = TRAINER_PARTY(sParty_Makayla), }, [TRAINER_FABIAN] = @@ -9118,7 +9117,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Fabian), + .party = TRAINER_PARTY(sParty_Fabian), }, [TRAINER_DAYTON] = @@ -9130,7 +9129,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Dayton), + .party = TRAINER_PARTY(sParty_Dayton), }, [TRAINER_RACHEL] = @@ -9142,7 +9141,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Rachel), + .party = TRAINER_PARTY(sParty_Rachel), }, [TRAINER_LEONEL] = @@ -9154,7 +9153,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_CUSTOM_MOVES(sParty_Leonel), + .party = TRAINER_PARTY(sParty_Leonel), }, [TRAINER_CALLIE] = @@ -9166,7 +9165,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Callie), + .party = TRAINER_PARTY(sParty_Callie), }, [TRAINER_CALE] = @@ -9178,7 +9177,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cale), + .party = TRAINER_PARTY(sParty_Cale), }, [TRAINER_MYLES] = @@ -9190,7 +9189,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Myles), + .party = TRAINER_PARTY(sParty_Myles), }, [TRAINER_PAT] = @@ -9202,7 +9201,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Pat), + .party = TRAINER_PARTY(sParty_Pat), }, [TRAINER_CRISTIN_1] = @@ -9214,7 +9213,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin1), + .party = TRAINER_PARTY(sParty_Cristin1), }, [TRAINER_MAY_RUSTBORO_TREECKO] = @@ -9226,7 +9225,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRustboroTreecko), + .party = TRAINER_PARTY(sParty_MayRustboroTreecko), }, [TRAINER_MAY_RUSTBORO_TORCHIC] = @@ -9238,7 +9237,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRustboroTorchic), + .party = TRAINER_PARTY(sParty_MayRustboroTorchic), }, [TRAINER_ROXANNE_2] = @@ -9250,7 +9249,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Roxanne2), + .party = TRAINER_PARTY(sParty_Roxanne2), }, [TRAINER_ROXANNE_3] = @@ -9262,7 +9261,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Roxanne3), + .party = TRAINER_PARTY(sParty_Roxanne3), }, [TRAINER_ROXANNE_4] = @@ -9274,7 +9273,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Roxanne4), + .party = TRAINER_PARTY(sParty_Roxanne4), }, [TRAINER_ROXANNE_5] = @@ -9286,7 +9285,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Roxanne5), + .party = TRAINER_PARTY(sParty_Roxanne5), }, [TRAINER_BRAWLY_2] = @@ -9298,7 +9297,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Brawly2), + .party = TRAINER_PARTY(sParty_Brawly2), }, [TRAINER_BRAWLY_3] = @@ -9310,7 +9309,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Brawly3), + .party = TRAINER_PARTY(sParty_Brawly3), }, [TRAINER_BRAWLY_4] = @@ -9322,7 +9321,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Brawly4), + .party = TRAINER_PARTY(sParty_Brawly4), }, [TRAINER_BRAWLY_5] = @@ -9334,7 +9333,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Brawly5), + .party = TRAINER_PARTY(sParty_Brawly5), }, [TRAINER_WATTSON_2] = @@ -9346,7 +9345,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Wattson2), + .party = TRAINER_PARTY(sParty_Wattson2), }, [TRAINER_WATTSON_3] = @@ -9358,7 +9357,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Wattson3), + .party = TRAINER_PARTY(sParty_Wattson3), }, [TRAINER_WATTSON_4] = @@ -9370,7 +9369,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Wattson4), + .party = TRAINER_PARTY(sParty_Wattson4), }, [TRAINER_WATTSON_5] = @@ -9382,7 +9381,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Wattson5), + .party = TRAINER_PARTY(sParty_Wattson5), }, [TRAINER_FLANNERY_2] = @@ -9394,7 +9393,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Flannery2), + .party = TRAINER_PARTY(sParty_Flannery2), }, [TRAINER_FLANNERY_3] = @@ -9406,7 +9405,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Flannery3), + .party = TRAINER_PARTY(sParty_Flannery3), }, [TRAINER_FLANNERY_4] = @@ -9418,7 +9417,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Flannery4), + .party = TRAINER_PARTY(sParty_Flannery4), }, [TRAINER_FLANNERY_5] = @@ -9430,7 +9429,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Flannery5), + .party = TRAINER_PARTY(sParty_Flannery5), }, [TRAINER_NORMAN_2] = @@ -9442,7 +9441,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Norman2), + .party = TRAINER_PARTY(sParty_Norman2), }, [TRAINER_NORMAN_3] = @@ -9454,7 +9453,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Norman3), + .party = TRAINER_PARTY(sParty_Norman3), }, [TRAINER_NORMAN_4] = @@ -9466,7 +9465,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Norman4), + .party = TRAINER_PARTY(sParty_Norman4), }, [TRAINER_NORMAN_5] = @@ -9478,7 +9477,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Norman5), + .party = TRAINER_PARTY(sParty_Norman5), }, [TRAINER_WINONA_2] = @@ -9490,7 +9489,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, - .party = ITEM_CUSTOM_MOVES(sParty_Winona2), + .party = TRAINER_PARTY(sParty_Winona2), }, [TRAINER_WINONA_3] = @@ -9502,7 +9501,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, - .party = ITEM_CUSTOM_MOVES(sParty_Winona3), + .party = TRAINER_PARTY(sParty_Winona3), }, [TRAINER_WINONA_4] = @@ -9514,7 +9513,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, - .party = ITEM_CUSTOM_MOVES(sParty_Winona4), + .party = TRAINER_PARTY(sParty_Winona4), }, [TRAINER_WINONA_5] = @@ -9526,7 +9525,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, - .party = ITEM_CUSTOM_MOVES(sParty_Winona5), + .party = TRAINER_PARTY(sParty_Winona5), }, [TRAINER_TATE_AND_LIZA_2] = @@ -9538,7 +9537,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza2), + .party = TRAINER_PARTY(sParty_TateAndLiza2), }, [TRAINER_TATE_AND_LIZA_3] = @@ -9550,7 +9549,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza3), + .party = TRAINER_PARTY(sParty_TateAndLiza3), }, [TRAINER_TATE_AND_LIZA_4] = @@ -9562,7 +9561,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza4), + .party = TRAINER_PARTY(sParty_TateAndLiza4), }, [TRAINER_TATE_AND_LIZA_5] = @@ -9574,7 +9573,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza5), + .party = TRAINER_PARTY(sParty_TateAndLiza5), }, [TRAINER_JUAN_2] = @@ -9586,7 +9585,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Juan2), + .party = TRAINER_PARTY(sParty_Juan2), }, [TRAINER_JUAN_3] = @@ -9598,7 +9597,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Juan3), + .party = TRAINER_PARTY(sParty_Juan3), }, [TRAINER_JUAN_4] = @@ -9610,7 +9609,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Juan4), + .party = TRAINER_PARTY(sParty_Juan4), }, [TRAINER_JUAN_5] = @@ -9622,7 +9621,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Juan5), + .party = TRAINER_PARTY(sParty_Juan5), }, [TRAINER_ANGELO] = @@ -9634,7 +9633,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Angelo), + .party = TRAINER_PARTY(sParty_Angelo), }, [TRAINER_DARIUS] = @@ -9646,7 +9645,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Darius), + .party = TRAINER_PARTY(sParty_Darius), }, [TRAINER_STEVEN] = @@ -9658,7 +9657,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = ITEM_CUSTOM_MOVES(sParty_Steven), + .party = TRAINER_PARTY(sParty_Steven), }, [TRAINER_ANABEL] = @@ -9670,7 +9669,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Anabel), + .party = TRAINER_PARTY(sParty_Anabel), }, [TRAINER_TUCKER] = @@ -9682,7 +9681,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Tucker), + .party = TRAINER_PARTY(sParty_Tucker), }, [TRAINER_SPENSER] = @@ -9694,7 +9693,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Spenser), + .party = TRAINER_PARTY(sParty_Spenser), }, [TRAINER_GRETA] = @@ -9706,7 +9705,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Greta), + .party = TRAINER_PARTY(sParty_Greta), }, [TRAINER_NOLAND] = @@ -9718,7 +9717,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Noland), + .party = TRAINER_PARTY(sParty_Noland), }, [TRAINER_LUCY] = @@ -9730,7 +9729,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Lucy), + .party = TRAINER_PARTY(sParty_Lucy), }, [TRAINER_BRANDON] = @@ -9742,7 +9741,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Brandon), + .party = TRAINER_PARTY(sParty_Brandon), }, [TRAINER_ANDRES_2] = @@ -9754,7 +9753,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres2), + .party = TRAINER_PARTY(sParty_Andres2), }, [TRAINER_ANDRES_3] = @@ -9766,7 +9765,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres3), + .party = TRAINER_PARTY(sParty_Andres3), }, [TRAINER_ANDRES_4] = @@ -9778,7 +9777,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres4), + .party = TRAINER_PARTY(sParty_Andres4), }, [TRAINER_ANDRES_5] = @@ -9790,7 +9789,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres5), + .party = TRAINER_PARTY(sParty_Andres5), }, [TRAINER_CORY_2] = @@ -9802,7 +9801,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory2), + .party = TRAINER_PARTY(sParty_Cory2), }, [TRAINER_CORY_3] = @@ -9814,7 +9813,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory3), + .party = TRAINER_PARTY(sParty_Cory3), }, [TRAINER_CORY_4] = @@ -9826,7 +9825,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory4), + .party = TRAINER_PARTY(sParty_Cory4), }, [TRAINER_CORY_5] = @@ -9838,7 +9837,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory5), + .party = TRAINER_PARTY(sParty_Cory5), }, [TRAINER_PABLO_2] = @@ -9850,7 +9849,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo2), + .party = TRAINER_PARTY(sParty_Pablo2), }, [TRAINER_PABLO_3] = @@ -9862,7 +9861,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo3), + .party = TRAINER_PARTY(sParty_Pablo3), }, [TRAINER_PABLO_4] = @@ -9874,7 +9873,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo4), + .party = TRAINER_PARTY(sParty_Pablo4), }, [TRAINER_PABLO_5] = @@ -9886,7 +9885,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo5), + .party = TRAINER_PARTY(sParty_Pablo5), }, [TRAINER_KOJI_2] = @@ -9898,7 +9897,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji2), + .party = TRAINER_PARTY(sParty_Koji2), }, [TRAINER_KOJI_3] = @@ -9910,7 +9909,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji3), + .party = TRAINER_PARTY(sParty_Koji3), }, [TRAINER_KOJI_4] = @@ -9922,7 +9921,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji4), + .party = TRAINER_PARTY(sParty_Koji4), }, [TRAINER_KOJI_5] = @@ -9934,7 +9933,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji5), + .party = TRAINER_PARTY(sParty_Koji5), }, [TRAINER_CRISTIN_2] = @@ -9946,7 +9945,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin2), + .party = TRAINER_PARTY(sParty_Cristin2), }, [TRAINER_CRISTIN_3] = @@ -9958,7 +9957,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin3), + .party = TRAINER_PARTY(sParty_Cristin3), }, [TRAINER_CRISTIN_4] = @@ -9970,7 +9969,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin4), + .party = TRAINER_PARTY(sParty_Cristin4), }, [TRAINER_CRISTIN_5] = @@ -9982,7 +9981,7 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin5), + .party = TRAINER_PARTY(sParty_Cristin5), }, [TRAINER_FERNANDO_2] = @@ -9994,7 +9993,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando2), + .party = TRAINER_PARTY(sParty_Fernando2), }, [TRAINER_FERNANDO_3] = @@ -10006,7 +10005,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando3), + .party = TRAINER_PARTY(sParty_Fernando3), }, [TRAINER_FERNANDO_4] = @@ -10018,7 +10017,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando4), + .party = TRAINER_PARTY(sParty_Fernando4), }, [TRAINER_FERNANDO_5] = @@ -10030,7 +10029,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando5), + .party = TRAINER_PARTY(sParty_Fernando5), }, [TRAINER_SAWYER_2] = @@ -10042,7 +10041,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer2), + .party = TRAINER_PARTY(sParty_Sawyer2), }, [TRAINER_SAWYER_3] = @@ -10054,7 +10053,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer3), + .party = TRAINER_PARTY(sParty_Sawyer3), }, [TRAINER_SAWYER_4] = @@ -10066,7 +10065,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer4), + .party = TRAINER_PARTY(sParty_Sawyer4), }, [TRAINER_SAWYER_5] = @@ -10078,7 +10077,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer5), + .party = TRAINER_PARTY(sParty_Sawyer5), }, [TRAINER_GABRIELLE_2] = @@ -10090,7 +10089,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle2), + .party = TRAINER_PARTY(sParty_Gabrielle2), }, [TRAINER_GABRIELLE_3] = @@ -10102,7 +10101,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle3), + .party = TRAINER_PARTY(sParty_Gabrielle3), }, [TRAINER_GABRIELLE_4] = @@ -10114,7 +10113,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle4), + .party = TRAINER_PARTY(sParty_Gabrielle4), }, [TRAINER_GABRIELLE_5] = @@ -10126,7 +10125,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle5), + .party = TRAINER_PARTY(sParty_Gabrielle5), }, [TRAINER_THALIA_2] = @@ -10138,7 +10137,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia2), + .party = TRAINER_PARTY(sParty_Thalia2), }, [TRAINER_THALIA_3] = @@ -10150,7 +10149,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia3), + .party = TRAINER_PARTY(sParty_Thalia3), }, [TRAINER_THALIA_4] = @@ -10162,7 +10161,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia4), + .party = TRAINER_PARTY(sParty_Thalia4), }, [TRAINER_THALIA_5] = @@ -10174,7 +10173,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia5), + .party = TRAINER_PARTY(sParty_Thalia5), }, [TRAINER_MARIELA] = @@ -10186,7 +10185,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Mariela), + .party = TRAINER_PARTY(sParty_Mariela), }, [TRAINER_ALVARO] = @@ -10198,7 +10197,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Alvaro), + .party = TRAINER_PARTY(sParty_Alvaro), }, [TRAINER_EVERETT] = @@ -10210,7 +10209,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Everett), + .party = TRAINER_PARTY(sParty_Everett), }, [TRAINER_RED] = @@ -10222,7 +10221,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Red), + .party = TRAINER_PARTY(sParty_Red), }, [TRAINER_LEAF] = @@ -10234,7 +10233,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_DEFAULT_MOVES(sParty_Leaf), + .party = TRAINER_PARTY(sParty_Leaf), }, [TRAINER_BRENDAN_PLACEHOLDER] = @@ -10246,7 +10245,7 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLinkPlaceholder), + .party = TRAINER_PARTY(sParty_BrendanLinkPlaceholder), }, [TRAINER_MAY_PLACEHOLDER] = @@ -10258,6 +10257,6 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLinkPlaceholder), + .party = TRAINER_PARTY(sParty_MayLinkPlaceholder), }, }; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index fb8353c1e..cefdb90b8 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -986,7 +986,7 @@ static void Task_EvolutionScene(u8 taskId) { // Selected move to forget u16 move = GetMonData(mon, var + MON_DATA_MOVE1); - if (IsHMMove2(move)) + if (IsMoveHM(move)) { // Can't forget HMs BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_TABLE_START]); @@ -1369,7 +1369,7 @@ static void Task_TradeEvolutionScene(u8 taskId) { // Selected move to forget u16 move = GetMonData(mon, var + MON_DATA_MOVE1); - if (IsHMMove2(move)) + if (IsMoveHM(move)) { // Can't forget HMs BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_TABLE_START]); diff --git a/src/item.c b/src/item.c index 2c6937244..077d885d1 100644 --- a/src/item.c +++ b/src/item.c @@ -904,12 +904,6 @@ u8 ItemId_GetImportance(u16 itemId) return gItems[SanitizeItemId(itemId)].importance; } -// Unused -u8 ItemId_GetRegistrability(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].registrability; -} - u8 ItemId_GetPocket(u16 itemId) { return gItems[SanitizeItemId(itemId)].pocket; diff --git a/src/match_call.c b/src/match_call.c index d5ad38000..4d45b9b43 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1789,33 +1789,14 @@ static void PopulateSpeciesFromTrainerLocation(int matchCallId, u8 *destStr) static void PopulateSpeciesFromTrainerParty(int matchCallId, u8 *destStr) { u16 trainerId; - union TrainerMonPtr party; + const struct TrainerMon *party; u8 monId; const u8 *speciesName; trainerId = GetLastBeatenRematchTrainerId(sMatchCallTrainers[matchCallId].trainerId); party = gTrainers[trainerId].party; monId = Random() % gTrainers[trainerId].partySize; - - switch (gTrainers[trainerId].partyFlags) - { - case 0: - default: - speciesName = GetSpeciesName(party.NoItemDefaultMoves[monId].species); - break; - case F_TRAINER_PARTY_CUSTOM_MOVESET: - speciesName = GetSpeciesName(party.NoItemCustomMoves[monId].species); - break; - case F_TRAINER_PARTY_HELD_ITEM: - speciesName = GetSpeciesName(party.ItemDefaultMoves[monId].species); - break; - case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: - speciesName = GetSpeciesName(party.ItemCustomMoves[monId].species); - break; - case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: - speciesName = GetSpeciesName(party.EverythingCustomized[monId].species); - break; - } + speciesName = GetSpeciesName(party[monId].species); StringCopy(destStr, speciesName); } diff --git a/src/party_menu.c b/src/party_menu.c index fff50ab7b..2b7256628 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4993,20 +4993,7 @@ void ItemUseCB_PPUp(u8 taskId, TaskFunc task) u16 ItemIdToBattleMoveId(u16 item) { - u16 tmNumber = item - ITEM_TM01; - return sTMHMMoves[tmNumber]; -} - -bool8 IsMoveHm(u16 move) -{ - u8 i; - - for (i = 0; i < NUM_HIDDEN_MACHINES; i++) - { - if (sTMHMMoves[i + NUM_TECHNICAL_MACHINES] == move) - return TRUE; - } - return FALSE; + return (ItemId_GetPocket(item) == POCKET_TM_HM) ? gItems[item].secondaryId : MOVE_NONE; } bool8 MonKnowsMove(struct Pokemon *mon, u16 move) diff --git a/src/pokemon.c b/src/pokemon.c index 3ded30679..6c00e18e9 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1969,7 +1969,7 @@ const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = [SPECIES_CHARMANDER - 1] = ANIM_V_JUMPS_SMALL, [SPECIES_CHARMELEON - 1] = ANIM_BACK_AND_LUNGE, [SPECIES_CHARIZARD - 1] = ANIM_V_SHAKE, - [SPECIES_SQUIRTLE - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_SQUIRTLE - 1] = ANIM_V_JUMPS_BIG, [SPECIES_WARTORTLE - 1] = ANIM_SHRINK_GROW, [SPECIES_BLASTOISE - 1] = ANIM_V_SHAKE_TWICE, [SPECIES_CATERPIE - 1] = ANIM_SWING_CONCAVE, @@ -1977,13 +1977,13 @@ const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = [SPECIES_BUTTERFREE - 1] = ANIM_H_SLIDE_WOBBLE, [SPECIES_WEEDLE - 1] = ANIM_H_SLIDE_SLOW, [SPECIES_KAKUNA - 1] = ANIM_GLOW_ORANGE, - [SPECIES_BEEDRILL - 1] = ANIM_H_VIBRATE, + [SPECIES_BEEDRILL - 1] = ANIM_ZIGZAG_SLOW, [SPECIES_PIDGEY - 1] = ANIM_V_STRETCH, [SPECIES_PIDGEOTTO - 1] = ANIM_V_STRETCH, [SPECIES_PIDGEOT - 1] = ANIM_FRONT_FLIP, - [SPECIES_RATTATA - 1] = ANIM_RAPID_H_HOPS, - [SPECIES_RATICATE - 1] = ANIM_FIGURE_8, - [SPECIES_SPEAROW - 1] = ANIM_H_JUMPS, + [SPECIES_RATTATA - 1] = ANIM_H_JUMPS, + [SPECIES_RATICATE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, + [SPECIES_SPEAROW - 1] = ANIM_V_JUMPS_SMALL, [SPECIES_FEAROW - 1] = ANIM_FIGURE_8, [SPECIES_EKANS - 1] = ANIM_V_STRETCH, [SPECIES_ARBOK - 1] = ANIM_V_STRETCH, @@ -1998,16 +1998,16 @@ const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = [SPECIES_NIDORINO - 1] = ANIM_V_STRETCH, [SPECIES_NIDOKING - 1] = ANIM_H_SHAKE, [SPECIES_CLEFAIRY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CLEFABLE - 1] = ANIM_V_STRETCH, + [SPECIES_CLEFABLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_VULPIX - 1] = ANIM_V_STRETCH, [SPECIES_NINETALES - 1] = ANIM_GROW_VIBRATE, [SPECIES_JIGGLYPUFF - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, [SPECIES_WIGGLYTUFF - 1] = ANIM_H_JUMPS, [SPECIES_ZUBAT - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_GOLBAT - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_ODDISH - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ODDISH - 1] = ANIM_V_JUMPS_H_JUMPS, [SPECIES_GLOOM - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_VILEPLUME - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_VILEPLUME - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, [SPECIES_PARAS - 1] = ANIM_H_SLIDE_SLOW, [SPECIES_PARASECT - 1] = ANIM_H_SHAKE, [SPECIES_VENONAT - 1] = ANIM_V_JUMPS_H_JUMPS, @@ -2019,16 +2019,16 @@ const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = [SPECIES_PSYDUCK - 1] = ANIM_V_JUMPS_H_JUMPS, [SPECIES_GOLDUCK - 1] = ANIM_H_SHAKE_SLOW, [SPECIES_MANKEY - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_PRIMEAPE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, - [SPECIES_GROWLITHE - 1] = ANIM_BACK_AND_LUNGE, - [SPECIES_ARCANINE - 1] = ANIM_H_SHAKE, + [SPECIES_PRIMEAPE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, + [SPECIES_GROWLITHE - 1] = ANIM_V_STRETCH, + [SPECIES_ARCANINE - 1] = ANIM_V_SHAKE, [SPECIES_POLIWAG - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_POLIWHIRL - 1] = ANIM_H_JUMPS_V_STRETCH, [SPECIES_POLIWRATH - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_ABRA - 1] = ANIM_H_JUMPS, + [SPECIES_ABRA - 1] = ANIM_H_VIBRATE, [SPECIES_KADABRA - 1] = ANIM_GROW_VIBRATE, [SPECIES_ALAKAZAM - 1] = ANIM_GROW_VIBRATE, - [SPECIES_MACHOP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MACHOP - 1] = ANIM_V_STRETCH, [SPECIES_MACHOKE - 1] = ANIM_V_SHAKE, [SPECIES_MACHAMP - 1] = ANIM_H_JUMPS, [SPECIES_BELLSPROUT - 1] = ANIM_H_JUMPS, @@ -2037,12 +2037,12 @@ const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = [SPECIES_TENTACOOL - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_TENTACRUEL - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_GEODUDE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, - [SPECIES_GRAVELER - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, + [SPECIES_GRAVELER - 1] = ANIM_V_SHAKE, [SPECIES_GOLEM - 1] = ANIM_ROTATE_UP_SLAM_DOWN, - [SPECIES_PONYTA - 1] = ANIM_GLOW_ORANGE, + [SPECIES_PONYTA - 1] = ANIM_V_SHAKE, [SPECIES_RAPIDASH - 1] = ANIM_H_SHAKE, [SPECIES_SLOWPOKE - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_SLOWBRO - 1] = ANIM_GROW_VIBRATE, + [SPECIES_SLOWBRO - 1] = ANIM_H_STRETCH, [SPECIES_MAGNEMITE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, [SPECIES_MAGNETON - 1] = ANIM_FLASH_YELLOW, [SPECIES_FARFETCHD - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, @@ -3041,13 +3041,13 @@ const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] = { - [SPECIES_BLASTOISE - 1] = 50, + [SPECIES_BLASTOISE - 1] = 20, [SPECIES_WEEDLE - 1] = 10, [SPECIES_KAKUNA - 1] = 20, - [SPECIES_BEEDRILL - 1] = 35, [SPECIES_PIDGEOTTO - 1] = 25, [SPECIES_FEAROW - 1] = 2, [SPECIES_EKANS - 1] = 30, + [SPECIES_PIKACHU - 1] = 25, [SPECIES_NIDORAN_F - 1] = 28, [SPECIES_NIDOKING - 1] = 25, [SPECIES_PARAS - 1] = 10, @@ -3059,9 +3059,10 @@ static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] = [SPECIES_PERSIAN - 1] = 20, [SPECIES_MANKEY - 1] = 20, [SPECIES_GROWLITHE - 1] = 30, - [SPECIES_ARCANINE - 1] = 40, + [SPECIES_ARCANINE - 1] = 8, [SPECIES_POLIWHIRL - 1] = 5, [SPECIES_WEEPINBELL - 1] = 3, + [SPECIES_PONYTA - 1] = 10, [SPECIES_MUK - 1] = 45, [SPECIES_SHELLDER - 1] = 20, [SPECIES_HAUNTER - 1] = 23, @@ -7736,7 +7737,7 @@ const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u } } -bool32 IsHMMove2(u16 move) +bool8 IsMoveHM(u16 move) { int i = 0; while (sHMMoves[i] != HM_MOVES_END) diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 14d9e771a..79ade7cdd 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -2331,7 +2331,7 @@ static bool8 CanReplaceMove(void) { if (sMonSummaryScreen->firstMoveIndex == MAX_MON_MOVES || sMonSummaryScreen->newMove == MOVE_NONE - || IsMoveHm(sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex]) != TRUE) + || IsMoveHM(sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex]) != TRUE) return TRUE; else return FALSE; diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 9ea0b1180..38999e1c7 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -187,7 +187,7 @@ static bool8 LoadBattlerSpriteGfx(u8 battler) if (GetBattlerSide(battler) != B_SIDE_PLAYER) { if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battler]], battler); + BattleLoadMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battler]], battler); else BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE); } @@ -196,7 +196,7 @@ static bool8 LoadBattlerSpriteGfx(u8 battler) else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler. DecompressTrainerBackPic(TRAINER_BACK_PIC_WALLY, battler); else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); + BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); else BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE); diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c old mode 100755 new mode 100644 diff --git a/sym_common.txt b/sym_common.txt index 7eebcac74..170aee2f4 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -37,6 +37,7 @@ gReservedSpritePaletteCount: .include "link_rfu_2.o" .include "rtc.o" .include "battle_main.o" + .include "battle_controllers.o" .include "random.o" .include "load_save.o" .include "berry_blender.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index 914501a08..2d7a6e26e 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -149,3 +149,4 @@ .include "src/trainer_hill.o" .include "src/rayquaza_scene.o" .include "src/debug.o" + .include "src/battle_controller_player.o" diff --git a/test/ability_swarm.c b/test/ability_swarm.c deleted file mode 100644 index 7709e976e..000000000 --- a/test/ability_swarm.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "global.h" -#include "test_battle.h" - -SINGLE_BATTLE_TEST("Swarm boosts Bug-type moves in a pinch", s16 damage) -{ - u16 hp; - PARAMETRIZE { hp = 99; } - PARAMETRIZE { hp = 33; } - GIVEN { - ASSUME(gBattleMoves[MOVE_BUG_BITE].type == TYPE_BUG); - PLAYER(SPECIES_LEDYBA) { Ability(ABILITY_SWARM); MaxHP(99); HP(hp); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_BUG_BITE); } - } SCENE { - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); - } -} diff --git a/test/ability_bad_dreams.c b/test/battle/ability/bad_dreams.c similarity index 99% rename from test/ability_bad_dreams.c rename to test/battle/ability/bad_dreams.c index 9bf800534..42ac3f04a 100644 --- a/test/ability_bad_dreams.c +++ b/test/battle/ability/bad_dreams.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/ability_beads_of_ruin.c b/test/battle/ability/beads_of_ruin.c similarity index 98% rename from test/ability_beads_of_ruin.c rename to test/battle/ability/beads_of_ruin.c index 28b39a430..1c6f740e8 100644 --- a/test/ability_beads_of_ruin.c +++ b/test/battle/ability/beads_of_ruin.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/ability_blaze.c b/test/battle/ability/blaze.c similarity index 95% rename from test/ability_blaze.c rename to test/battle/ability/blaze.c index 1e12c6b29..12ccced93 100644 --- a/test/ability_blaze.c +++ b/test/battle/ability/blaze.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage) { diff --git a/test/ability_clear_body.c b/test/battle/ability/clear_body.c similarity index 98% rename from test/ability_clear_body.c rename to test/battle/ability/clear_body.c index 11789aaf6..7f167c9fe 100644 --- a/test/ability_clear_body.c +++ b/test/battle/ability/clear_body.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Clear Body prevents intimidate") { diff --git a/test/ability_cloud_nine.c b/test/battle/ability/cloud_nine.c similarity index 94% rename from test/ability_cloud_nine.c rename to test/battle/ability/cloud_nine.c index 02da15ee1..e8de0fd8a 100644 --- a/test/ability_cloud_nine.c +++ b/test/battle/ability/cloud_nine.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Cloud Nine prevents weather effects") { diff --git a/test/ability_compound_eyes.c b/test/battle/ability/compound_eyes.c similarity index 97% rename from test/ability_compound_eyes.c rename to test/battle/ability/compound_eyes.c index 6bdb15fa7..cc005943b 100644 --- a/test/ability_compound_eyes.c +++ b/test/battle/ability/compound_eyes.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") { diff --git a/test/ability_contrary.c b/test/battle/ability/contrary.c similarity index 98% rename from test/ability_contrary.c rename to test/battle/ability/contrary.c index 52347f379..4e4417e19 100644 --- a/test/ability_contrary.c +++ b/test/battle/ability/contrary.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Contrary raises Attack when Intimidated", s16 damage) HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { - EXPECT_MUL_EQ(results[1].damage, Q_4_12(2.125), results[0].damage); + EXPECT_MUL_EQ(results[1].damage, Q_4_12(2.25), results[0].damage); } } diff --git a/test/ability_cute_charm.c b/test/battle/ability/cute_charm.c similarity index 98% rename from test/ability_cute_charm.c rename to test/battle/ability/cute_charm.c index 5ec6ca7c4..9bef66b19 100644 --- a/test/ability_cute_charm.c +++ b/test/battle/ability/cute_charm.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Cute Charm inflicts infatuation on contact") { diff --git a/test/ability_damp.c b/test/battle/ability/damp.c similarity index 98% rename from test/ability_damp.c rename to test/battle/ability/damp.c index fc4580daa..46e378c5f 100644 --- a/test/ability_damp.c +++ b/test/battle/ability/damp.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from enemies") { diff --git a/test/primal_weather.c b/test/battle/ability/desolate_land.c similarity index 51% rename from test/primal_weather.c rename to test/battle/ability/desolate_land.c index 650a79921..ca52c9cd6 100644 --- a/test/primal_weather.c +++ b/test/battle/ability/desolate_land.c @@ -1,72 +1,12 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { - ASSUME(gBattleMoves[MOVE_EMBER].power != 0); - ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); ASSUME(gBattleMoves[MOVE_WATER_GUN].power != 0); ASSUME(gBattleMoves[MOVE_WATER_GUN].type == TYPE_WATER); } -SINGLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves") -{ - GIVEN { - PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB);} - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, MOVE_EMBER); } - TURN { MOVE(opponent, MOVE_EMBER); } - } SCENE { - MESSAGE("Foe Wobbuffet used Ember!"); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); - MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); - NOT HP_BAR(player); - MESSAGE("Foe Wobbuffet used Ember!"); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); - MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); - NOT HP_BAR(player); - } THEN { - EXPECT_EQ(player->hp, player->maxHP); - } -} - -DOUBLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves and prints the message only once with moves hitting multiple targets") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_ERUPTION].power != 0); - ASSUME(gBattleMoves[MOVE_ERUPTION].type == TYPE_FIRE); - ASSUME(gBattleMoves[MOVE_ERUPTION].target == MOVE_TARGET_BOTH); - PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB); {Speed(5);}} - PLAYER(SPECIES_WOBBUFFET) {Speed(5);} - OPPONENT(SPECIES_WOBBUFFET) {Speed(10);} - OPPONENT(SPECIES_WOBBUFFET) {Speed(8);} - } WHEN { - TURN { MOVE(opponentLeft, MOVE_ERUPTION); } - } SCENE { - MESSAGE("Foe Wobbuffet used Eruption!"); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ERUPTION, opponentLeft); - MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); - NOT MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); - } THEN { - EXPECT_EQ(playerLeft->hp, playerLeft->maxHP); - EXPECT_EQ(playerRight->hp, playerRight->maxHP); - } -} - -SINGLE_BATTLE_TEST("Primordial Sea does not block a move if pokemon is asleep and uses a Fire-type move") // Sleep/confusion/paralysis all happen before the check for primal weather -{ - GIVEN { - PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB);} - OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} - } WHEN { - TURN { MOVE(opponent, MOVE_EMBER); } - } SCENE { - NOT MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); - MESSAGE("Foe Wobbuffet is fast asleep."); - } -} - SINGLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves") { GIVEN { diff --git a/test/ability_download.c b/test/battle/ability/download.c similarity index 99% rename from test/ability_download.c rename to test/battle/ability/download.c index ee03f6911..5b59e37f0 100644 --- a/test/ability_download.c +++ b/test/battle/ability/download.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/ability_drizzle.c b/test/battle/ability/drizzle.c similarity index 96% rename from test/ability_drizzle.c rename to test/battle/ability/drizzle.c index fd0d42616..ce0fc9514 100644 --- a/test/ability_drizzle.c +++ b/test/battle/ability/drizzle.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Drizzle summons rain", s16 damage) { diff --git a/test/ability_dry_skin.c b/test/battle/ability/dry_skin.c similarity index 81% rename from test/ability_dry_skin.c rename to test/battle/ability/dry_skin.c index 028076d5a..db0b61f2d 100644 --- a/test/ability_dry_skin.c +++ b/test/battle/ability/dry_skin.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Dry Skin causes 1/8th Max HP damage in Sun") { @@ -36,15 +36,24 @@ SINGLE_BATTLE_TEST("Dry Skin increases damage taken from Fire-type moves by 25%" PARAMETRIZE { ability = ABILITY_DRY_SKIN; } GIVEN { ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_PARASECT) { Ability(ability); } + ASSUME(gBattleMoves[MOVE_EMBER].power == 40); + ASSUME(gSpeciesInfo[SPECIES_PARASECT].types[0] == TYPE_BUG); + ASSUME(gSpeciesInfo[SPECIES_PARASECT].types[1] == TYPE_GRASS); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] == TYPE_PSYCHIC); + PLAYER(SPECIES_WOBBUFFET) { SpAttack(71); } + OPPONENT(SPECIES_PARASECT) { Ability(ability); SpDefense(165); } } WHEN { TURN { MOVE(player, MOVE_EMBER); } } SCENE { MESSAGE("Wobbuffet used Ember!"); HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { - EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.25), results[1].damage); + // Due to numerics related to rounding on each applied multiplier, + // the ability effect doesn't manifest as a 25% damage increase, but as a ~31% damage increase in this case. + // Values obtained from https://calc.pokemonshowdown.com (Neutral nature and 0 IVs on both sides) + EXPECT_EQ(results[0].damage, 52); + EXPECT_EQ(results[1].damage, 68); } } diff --git a/test/ability_electromorphosis.c b/test/battle/ability/electromorphosis.c similarity index 98% rename from test/ability_electromorphosis.c rename to test/battle/ability/electromorphosis.c index 25d33aac0..9111fa328 100644 --- a/test/ability_electromorphosis.c +++ b/test/battle/ability/electromorphosis.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Electromorphosis sets up Charge when hit by any move") { diff --git a/test/ability_flame_body.c b/test/battle/ability/flame_body.c similarity index 97% rename from test/ability_flame_body.c rename to test/battle/ability/flame_body.c index 6d0823062..959b583f8 100644 --- a/test/ability_flame_body.c +++ b/test/battle/ability/flame_body.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Flame Body inflicts burn on contact") { diff --git a/test/ability_flower_gift.c b/test/battle/ability/flower_gift.c similarity index 99% rename from test/ability_flower_gift.c rename to test/battle/ability/flower_gift.c index 58d4bf2e1..e02f90dc6 100644 --- a/test/ability_flower_gift.c +++ b/test/battle/ability/flower_gift.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim in harsh sunlight") { diff --git a/test/battle/ability/fluffy.c b/test/battle/ability/fluffy.c new file mode 100644 index 000000000..6c76aeed5 --- /dev/null +++ b/test/battle/ability/fluffy.c @@ -0,0 +1,66 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TACKLE].makesContact); + ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); + ASSUME(gBattleMoves[MOVE_TACKLE].makesContact); + ASSUME(gBattleMoves[MOVE_FIRE_PUNCH].makesContact); + ASSUME(gBattleMoves[MOVE_FIRE_PUNCH].type == TYPE_FIRE); + ASSUME(P_GEN_7_POKEMON == TRUE); +} + +SINGLE_BATTLE_TEST("Fluffy halves damage taken from moves that make direct contact", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_KLUTZ; } + PARAMETRIZE { ability = ABILITY_FLUFFY; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_STUFFUL) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Tackle!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Fluffy doubles damage taken from fire type moves", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_KLUTZ; } + PARAMETRIZE { ability = ABILITY_FLUFFY; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_STUFFUL) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_EMBER); } + } SCENE { + MESSAGE("Wobbuffet used Ember!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Fluffy does not alter damage of fire-type moves that make direct contact", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_KLUTZ; } + PARAMETRIZE { ability = ABILITY_FLUFFY; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_STUFFUL) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_FIRE_PUNCH); } + } SCENE { + MESSAGE("Wobbuffet used Fire Punch!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} diff --git a/test/ability_forecast.c b/test/battle/ability/forecast.c similarity index 99% rename from test/ability_forecast.c rename to test/battle/ability/forecast.c index d2d36c1ab..66793ebfb 100644 --- a/test/ability_forecast.c +++ b/test/battle/ability/forecast.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Forecast transforms Castform in weather from an opponent's move") { diff --git a/test/ability_full_metal_body.c b/test/battle/ability/full_metal_body.c similarity index 98% rename from test/ability_full_metal_body.c rename to test/battle/ability/full_metal_body.c index c47ce9d4d..d00714d52 100644 --- a/test/ability_full_metal_body.c +++ b/test/battle/ability/full_metal_body.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Full Metal Body prevents intimidate") { diff --git a/test/ability_hunger_switch.c b/test/battle/ability/hunger_switch.c similarity index 96% rename from test/ability_hunger_switch.c rename to test/battle/ability/hunger_switch.c index 336c2c160..c0802d664 100644 --- a/test/ability_hunger_switch.c +++ b/test/battle/ability/hunger_switch.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Hunger Switch switches Morpeko's forms at the end of the turn") { diff --git a/test/ability_hydration.c b/test/battle/ability/hydration.c similarity index 95% rename from test/ability_hydration.c rename to test/battle/ability/hydration.c index 45689b212..2dca490c0 100644 --- a/test/ability_hydration.c +++ b/test/battle/ability/hydration.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Hydration cures non-volatile Status conditions if it is raining") { diff --git a/test/ability_hyper_cutter.c b/test/battle/ability/hyper_cutter.c similarity index 98% rename from test/ability_hyper_cutter.c rename to test/battle/ability/hyper_cutter.c index 67dac4c66..ac942039b 100644 --- a/test/ability_hyper_cutter.c +++ b/test/battle/ability/hyper_cutter.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Hyper Cutter prevents intimidate") { diff --git a/test/ability_ice_body.c b/test/battle/ability/ice_body.c similarity index 96% rename from test/ability_ice_body.c rename to test/battle/ability/ice_body.c index 0658ace81..aca84532a 100644 --- a/test/ability_ice_body.c +++ b/test/battle/ability/ice_body.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Ice Body prevents damage from hail") { diff --git a/test/ability_immunity.c b/test/battle/ability/immunity.c similarity index 98% rename from test/ability_immunity.c rename to test/battle/ability/immunity.c index fea2eb522..3c6c4afa6 100644 --- a/test/ability_immunity.c +++ b/test/battle/ability/immunity.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Immunity prevents Poison Sting poison") { diff --git a/test/ability_inner_focus.c b/test/battle/ability/inner_focus.c similarity index 98% rename from test/ability_inner_focus.c rename to test/battle/ability/inner_focus.c index 5b713475d..574c860a7 100644 --- a/test/ability_inner_focus.c +++ b/test/battle/ability/inner_focus.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Inner Focus prevents intimidate") { diff --git a/test/ability_insomnia.c b/test/battle/ability/insomnia.c similarity index 98% rename from test/ability_insomnia.c rename to test/battle/ability/insomnia.c index 2fcb6a97e..cb22be925 100644 --- a/test/ability_insomnia.c +++ b/test/battle/ability/insomnia.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Insomnia prevents sleep") { diff --git a/test/ability_intimidate.c b/test/battle/ability/intimidate.c similarity index 99% rename from test/ability_intimidate.c rename to test/battle/ability/intimidate.c index f9681493b..a0a23cc13 100644 --- a/test/ability_intimidate.c +++ b/test/battle/ability/intimidate.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/ability_leaf_guard.c b/test/battle/ability/leaf_guard.c similarity index 99% rename from test/ability_leaf_guard.c rename to test/battle/ability/leaf_guard.c index 92727175a..2c052b5a6 100644 --- a/test/ability_leaf_guard.c +++ b/test/battle/ability/leaf_guard.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Leaf Guard prevents non-volatile status conditions in sun") { diff --git a/test/ability_limber.c b/test/battle/ability/limber.c similarity index 94% rename from test/ability_limber.c rename to test/battle/ability/limber.c index ff701b663..87d4177ff 100644 --- a/test/ability_limber.c +++ b/test/battle/ability/limber.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Limber prevents paralysis") { diff --git a/test/ability_magic_bounce.c b/test/battle/ability/magic_bounce.c similarity index 99% rename from test/ability_magic_bounce.c rename to test/battle/ability/magic_bounce.c index 466677efa..80ff40f2e 100644 --- a/test/ability_magic_bounce.c +++ b/test/battle/ability/magic_bounce.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Magic Bounce bounces back status moves") diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c new file mode 100644 index 000000000..2b0a59044 --- /dev/null +++ b/test/battle/ability/mirror_armor.c @@ -0,0 +1,202 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(P_GEN_8_POKEMON == TRUE); +} + +SINGLE_BATTLE_TEST("Mirror Armor lowers a stat of the attacking pokemon") +{ + u16 move, statId; + + PARAMETRIZE { move = MOVE_LEER; statId = STAT_DEF; } + PARAMETRIZE { move = MOVE_GROWL; statId = STAT_ATK; } + PARAMETRIZE { move = MOVE_SWEET_SCENT; statId = STAT_EVASION; } + PARAMETRIZE { move = MOVE_SAND_ATTACK; statId = STAT_ACC; } + PARAMETRIZE { move = MOVE_CONFIDE; statId = STAT_SPATK; } + PARAMETRIZE { move = MOVE_FAKE_TEARS; statId = STAT_SPDEF; } + + GIVEN { + PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);} + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + switch (statId) + { + case STAT_DEF: + MESSAGE("Foe Wynaut's Defense fell!"); + break; + case STAT_ATK: + MESSAGE("Foe Wynaut's Attack fell!"); + break; + case STAT_EVASION: + MESSAGE("Foe Wynaut's evasiveness harshly fell!"); + break; + case STAT_ACC: + MESSAGE("Foe Wynaut's accuracy fell!"); + break; + case STAT_SPATK: + MESSAGE("Foe Wynaut's Sp. Atk fell!"); + break; + case STAT_SPDEF: + MESSAGE("Foe Wynaut's Sp. Def harshly fell!"); + break; + } + } THEN { + EXPECT_EQ(player->statStages[statId], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponent->statStages[statId], (statId == STAT_SPDEF || statId == STAT_EVASION) ? DEFAULT_STAT_STAGE - 2 : DEFAULT_STAT_STAGE - 1); + } +} + +SINGLE_BATTLE_TEST("Mirror Armor triggers even if the attacking Pokemon also has Mirror Armor ability") +{ + GIVEN { + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } + OPPONENT(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } + } WHEN { + TURN { MOVE(opponent, MOVE_LEER); } + } SCENE { + MESSAGE("Foe Corviknigh used Leer!"); + ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Corviknigh's Defense fell!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); + } +} + +SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon with the Clear Body ability") +{ + GIVEN { + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } + OPPONENT(SPECIES_WYNAUT) { Ability(ABILITY_CLEAR_BODY); } + } WHEN { + TURN { MOVE(opponent, MOVE_LEER); } + } SCENE { + MESSAGE("Foe Wynaut used Leer!"); + ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); + ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); + MESSAGE("Foe Wynaut's Clear Body prevents stat loss!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Mirror Armor lowers the Attack of Pokemon with Intimidate") +{ + GIVEN { + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } + OPPONENT(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN {} + } SCENE { + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Gyarados's Attack fell!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); + } +} + +// Unsure whether this should or should not fail, as Showdown has conflicting information. Needs testing in gen8 games. +SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon behind Substitute") +{ + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_SUBSTITUTE); } + TURN { MOVE(opponent, MOVE_LEER); } + } SCENE { + MESSAGE("Foe Wynaut used Substitute!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); + MESSAGE("Foe Wynaut used Leer!"); + ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Mirror Armor raises the stat of an attacking Pokemon with Contrary") +{ + GIVEN { + PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);} + OPPONENT(SPECIES_SHUCKLE) {Ability(ABILITY_CONTRARY);} + } WHEN { + TURN { MOVE(opponent, MOVE_LEER); } + } SCENE { + MESSAGE("Foe Shuckle used Leer!"); + ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Shuckle's Defense rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon if it is already at -6") +{ + GIVEN { + PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);} + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_SCREECH); } + TURN { MOVE(player, MOVE_SCREECH); } + TURN { MOVE(player, MOVE_SCREECH); } + TURN { MOVE(opponent, MOVE_LEER); } + } SCENE { + MESSAGE("Corviknigh used Screech!"); + MESSAGE("Corviknigh used Screech!"); + MESSAGE("Corviknigh used Screech!"); + MESSAGE("Foe Wynaut used Leer!"); + ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wynaut's Defense won't go lower!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponent->statStages[STAT_DEF], MIN_STAT_STAGE); + } +} + +// This behaviour needs to be verified in the actual games. Currently it's written to follow Showdown's logic. +DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court Change was used by the opponent after it set up Sticky Web") +{ + KNOWN_FAILING; + GIVEN { + ASSUME(gBattleMoves[MOVE_STICKY_WEB].effect == EFFECT_STICKY_WEB); + ASSUME(gBattleMoves[MOVE_COURT_CHANGE].effect == EFFECT_COURT_CHANGE); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); } + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_STICKY_WEB); } + TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); } + TURN { SWITCH(playerRight, 2);} + TURN { } + } SCENE { + MESSAGE("Wobbuffet used Sticky Web!"); + MESSAGE("Foe Wynaut used Court Change!"); + MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + MESSAGE("Go! Corviknigh!"); + MESSAGE("Corviknigh was caught in a Sticky Web!"); + ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Wobbuffet's Speed fell!"); + } +} diff --git a/test/ability_oblivious.c b/test/battle/ability/oblivious.c similarity index 98% rename from test/ability_oblivious.c rename to test/battle/ability/oblivious.c index 9d9aeeb29..51d27bb16 100644 --- a/test/ability_oblivious.c +++ b/test/battle/ability/oblivious.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Oblivious prevents Infatuation") { diff --git a/test/battle/ability/overcoat.c b/test/battle/ability/overcoat.c new file mode 100644 index 000000000..6673c0cee --- /dev/null +++ b/test/battle/ability/overcoat.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Overcoat blocks powder and spore moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].powderMove); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_PINECO) { Ability(ABILITY_OVERCOAT); } + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_OVERCOAT); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("It doesn't affect Foe Pineco…"); + } +} + +TO_DO_BATTLE_TEST("Overcoat blocks damage from hail"); +TO_DO_BATTLE_TEST("Overcoat blocks damage from sandstorm"); +TO_DO_BATTLE_TEST("Overcoat blocks Effect Spore's effect"); diff --git a/test/ability_overgrow.c b/test/battle/ability/overgrow.c similarity index 96% rename from test/ability_overgrow.c rename to test/battle/ability/overgrow.c index 82d8dd467..548dc9bb3 100644 --- a/test/ability_overgrow.c +++ b/test/battle/ability/overgrow.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Overgrow boosts Grass-type moves in a pinch", s16 damage) { diff --git a/test/ability_own_tempo.c b/test/battle/ability/own_tempo.c similarity index 99% rename from test/ability_own_tempo.c rename to test/battle/ability/own_tempo.c index 2440ac779..4c6a3167f 100644 --- a/test/ability_own_tempo.c +++ b/test/battle/ability/own_tempo.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Own Tempo prevents intimidate") { diff --git a/test/ability_pastel_veil.c b/test/battle/ability/pastel_veil.c similarity index 99% rename from test/ability_pastel_veil.c rename to test/battle/ability/pastel_veil.c index 363c018c1..74d764fc3 100644 --- a/test/ability_pastel_veil.c +++ b/test/battle/ability/pastel_veil.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Pastel Veil prevents Poison Sting poison") { diff --git a/test/ability_poison_point.c b/test/battle/ability/poison_point.c similarity index 97% rename from test/ability_poison_point.c rename to test/battle/ability/poison_point.c index 262871398..7d2fcd518 100644 --- a/test/ability_poison_point.c +++ b/test/battle/ability/poison_point.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Poison Point inflicts poison on contact") { diff --git a/test/battle/ability/primordial_sea.c b/test/battle/ability/primordial_sea.c new file mode 100644 index 000000000..37fbb1b23 --- /dev/null +++ b/test/battle/ability/primordial_sea.c @@ -0,0 +1,66 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_EMBER].power != 0); + ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); +} + +SINGLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves") +{ + GIVEN { + PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB);} + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_EMBER); } + TURN { MOVE(opponent, MOVE_EMBER); } + } SCENE { + MESSAGE("Foe Wobbuffet used Ember!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); + MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + NOT HP_BAR(player); + MESSAGE("Foe Wobbuffet used Ember!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); + MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + NOT HP_BAR(player); + } THEN { + EXPECT_EQ(player->hp, player->maxHP); + } +} + +DOUBLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves and prints the message only once with moves hitting multiple targets") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_ERUPTION].power != 0); + ASSUME(gBattleMoves[MOVE_ERUPTION].type == TYPE_FIRE); + ASSUME(gBattleMoves[MOVE_ERUPTION].target == MOVE_TARGET_BOTH); + PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB); {Speed(5);}} + PLAYER(SPECIES_WOBBUFFET) {Speed(5);} + OPPONENT(SPECIES_WOBBUFFET) {Speed(10);} + OPPONENT(SPECIES_WOBBUFFET) {Speed(8);} + } WHEN { + TURN { MOVE(opponentLeft, MOVE_ERUPTION); } + } SCENE { + MESSAGE("Foe Wobbuffet used Eruption!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ERUPTION, opponentLeft); + MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + NOT MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + } THEN { + EXPECT_EQ(playerLeft->hp, playerLeft->maxHP); + EXPECT_EQ(playerRight->hp, playerRight->maxHP); + } +} + +SINGLE_BATTLE_TEST("Primordial Sea does not block a move if pokemon is asleep and uses a Fire-type move") // Sleep/confusion/paralysis all happen before the check for primal weather +{ + GIVEN { + PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB);} + OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} + } WHEN { + TURN { MOVE(opponent, MOVE_EMBER); } + } SCENE { + NOT MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + MESSAGE("Foe Wobbuffet is fast asleep."); + } +} \ No newline at end of file diff --git a/test/ability_protosynthesis.c b/test/battle/ability/protosynthesis.c similarity index 99% rename from test/ability_protosynthesis.c rename to test/battle/ability/protosynthesis.c index 9f794e00a..0ed74d4f6 100644 --- a/test/ability_protosynthesis.c +++ b/test/battle/ability/protosynthesis.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/ability_quark_drive.c b/test/battle/ability/quark_drive.c similarity index 99% rename from test/ability_quark_drive.c rename to test/battle/ability/quark_drive.c index b004c760c..bce6795ca 100644 --- a/test/ability_quark_drive.c +++ b/test/battle/ability/quark_drive.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/ability_rain_dish.c b/test/battle/ability/rain_dish.c similarity index 94% rename from test/ability_rain_dish.c rename to test/battle/ability/rain_dish.c index 04009507c..dd647f0eb 100644 --- a/test/ability_rain_dish.c +++ b/test/battle/ability/rain_dish.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Rain Dish recovers 1/16th of Max HP in Rain") { diff --git a/test/ability_rattled.c b/test/battle/ability/rattled.c similarity index 99% rename from test/ability_rattled.c rename to test/battle/ability/rattled.c index 493e3cfca..e936ed7de 100644 --- a/test/ability_rattled.c +++ b/test/battle/ability/rattled.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/ability_sand_veil.c b/test/battle/ability/sand_veil.c similarity index 96% rename from test/ability_sand_veil.c rename to test/battle/ability/sand_veil.c index 50abad51c..c2f6440c3 100644 --- a/test/ability_sand_veil.c +++ b/test/battle/ability/sand_veil.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Sand Veil prevents damage from sandstorm") { diff --git a/test/ability_schooling.c b/test/battle/ability/schooling.c similarity index 99% rename from test/ability_schooling.c rename to test/battle/ability/schooling.c index 87f69ea31..448e37261 100644 --- a/test/ability_schooling.c +++ b/test/battle/ability/schooling.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is 25-percent or less at the end of the turn") { diff --git a/test/ability_scrappy.c b/test/battle/ability/scrappy.c similarity index 98% rename from test/ability_scrappy.c rename to test/battle/ability/scrappy.c index b4f83afcf..df4ededa4 100644 --- a/test/ability_scrappy.c +++ b/test/battle/ability/scrappy.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Scrappy prevents intimidate") { diff --git a/test/ability_snow_cloak.c b/test/battle/ability/snow_cloak.c similarity index 96% rename from test/ability_snow_cloak.c rename to test/battle/ability/snow_cloak.c index 8a95a8ea0..88fe6e509 100644 --- a/test/ability_snow_cloak.c +++ b/test/battle/ability/snow_cloak.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Snow Cloak prevents damage from hail") { diff --git a/test/ability_snow_warning.c b/test/battle/ability/snow_warning.c similarity index 96% rename from test/ability_snow_warning.c rename to test/battle/ability/snow_warning.c index 5e8b13d54..17f18814b 100644 --- a/test/ability_snow_warning.c +++ b/test/battle/ability/snow_warning.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" #if B_SNOW_WARNING < GEN_9 SINGLE_BATTLE_TEST("Snow Warning summons hail") diff --git a/test/ability_speed_boost.c b/test/battle/ability/speed_boost.c similarity index 96% rename from test/ability_speed_boost.c rename to test/battle/ability/speed_boost.c index 78aa876e6..0cc82e806 100644 --- a/test/ability_speed_boost.c +++ b/test/battle/ability/speed_boost.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Speed Boost gradually boosts Speed") { diff --git a/test/ability_stamina.c b/test/battle/ability/stamina.c similarity index 99% rename from test/ability_stamina.c rename to test/battle/ability/stamina.c index 70cf3cdc0..3470cce51 100644 --- a/test/ability_stamina.c +++ b/test/battle/ability/stamina.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" #define STAMINA_STAT_RAISE(target, msg) \ { \ diff --git a/test/ability_static.c b/test/battle/ability/static.c similarity index 97% rename from test/ability_static.c rename to test/battle/ability/static.c index 083540d5b..e0d91aa0d 100644 --- a/test/ability_static.c +++ b/test/battle/ability/static.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Static inflicts paralysis on contact") { diff --git a/test/ability_stench.c b/test/battle/ability/stench.c similarity index 97% rename from test/ability_stench.c rename to test/battle/ability/stench.c index 33964c355..4153e6b15 100644 --- a/test/ability_stench.c +++ b/test/battle/ability/stench.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") { diff --git a/test/ability_sturdy.c b/test/battle/ability/sturdy.c similarity index 98% rename from test/ability_sturdy.c rename to test/battle/ability/sturdy.c index 42cdab11f..7a7fdf39f 100644 --- a/test/ability_sturdy.c +++ b/test/battle/ability/sturdy.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Sturdy prevents OHKO moves") { diff --git a/test/battle/ability/swarm.c b/test/battle/ability/swarm.c new file mode 100644 index 000000000..b49bd225f --- /dev/null +++ b/test/battle/ability/swarm.c @@ -0,0 +1,28 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Swarm boosts Bug-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gBattleMoves[MOVE_BUG_BITE].type == TYPE_BUG); + ASSUME(gBattleMoves[MOVE_BUG_BITE].power == 60); + ASSUME(gSpeciesInfo[SPECIES_LEDYBA].types[0] == TYPE_BUG); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] == TYPE_PSYCHIC); + PLAYER(SPECIES_LEDYBA) { Ability(ABILITY_SWARM); MaxHP(99); HP(hp); Attack(45); } + OPPONENT(SPECIES_WOBBUFFET) { Defense(121); } + } WHEN { + TURN { MOVE(player, MOVE_BUG_BITE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + // Due to numerics related to rounding on each applied multiplier, + // the 50% move power increase doesn't manifest as a 50% damage increase, but as a 44% damage increase in this case. + // Values obtained from https://calc.pokemonshowdown.com (Neutral nature and 0 IVs on both sides) + EXPECT_EQ(results[0].damage, 50); + EXPECT_EQ(results[1].damage, 72); + } +} diff --git a/test/ability_sword_of_ruin.c b/test/battle/ability/sword_of_ruin.c similarity index 98% rename from test/ability_sword_of_ruin.c rename to test/battle/ability/sword_of_ruin.c index 6ec4f8fe8..2abc0c04f 100644 --- a/test/ability_sword_of_ruin.c +++ b/test/battle/ability/sword_of_ruin.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/ability_tablets_of_ruin.c b/test/battle/ability/tablets_of_ruin.c similarity index 98% rename from test/ability_tablets_of_ruin.c rename to test/battle/ability/tablets_of_ruin.c index 38dcfc856..ca12b6813 100644 --- a/test/ability_tablets_of_ruin.c +++ b/test/battle/ability/tablets_of_ruin.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/ability_torrent.c b/test/battle/ability/torrent.c similarity index 95% rename from test/ability_torrent.c rename to test/battle/ability/torrent.c index e5c701775..673e21b79 100644 --- a/test/ability_torrent.c +++ b/test/battle/ability/torrent.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Torrent boosts Water-type moves in a pinch", s16 damage) { diff --git a/test/ability_vessel_of_ruin.c b/test/battle/ability/vessel_of_ruin.c similarity index 98% rename from test/ability_vessel_of_ruin.c rename to test/battle/ability/vessel_of_ruin.c index 6c7b2664f..4f8408795 100644 --- a/test/ability_vessel_of_ruin.c +++ b/test/battle/ability/vessel_of_ruin.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/ability_volt_absorb.c b/test/battle/ability/volt_absorb.c similarity index 99% rename from test/ability_volt_absorb.c rename to test/battle/ability/volt_absorb.c index f9af7e17b..2f69a287b 100644 --- a/test/ability_volt_absorb.c +++ b/test/battle/ability/volt_absorb.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Volt Absorb heals 25% when hit by electric type moves") { diff --git a/test/ability_water_absorb.c b/test/battle/ability/water_absorb.c similarity index 99% rename from test/ability_water_absorb.c rename to test/battle/ability/water_absorb.c index 50547d13d..cda319603 100644 --- a/test/ability_water_absorb.c +++ b/test/battle/ability/water_absorb.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Water Absorb heals 25% when hit by water type moves") { diff --git a/test/ability_white_smoke.c b/test/battle/ability/white_smoke.c similarity index 98% rename from test/ability_white_smoke.c rename to test/battle/ability/white_smoke.c index 9689aee6c..7bedbca24 100644 --- a/test/ability_white_smoke.c +++ b/test/battle/ability/white_smoke.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("White Smoke prevents intimidate") { diff --git a/test/ability_wind_power.c b/test/battle/ability/wind_power.c similarity index 99% rename from test/ability_wind_power.c rename to test/battle/ability/wind_power.c index e9cb082a9..4616a69fb 100644 --- a/test/ability_wind_power.c +++ b/test/battle/ability/wind_power.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/ability_zen_mode.c b/test/battle/ability/zen_mode.c similarity index 99% rename from test/ability_zen_mode.c rename to test/battle/ability/zen_mode.c index e0e72471f..37bb4160f 100644 --- a/test/ability_zen_mode.c +++ b/test/battle/ability/zen_mode.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less at the end of the turn") { diff --git a/test/battle/damage_formula.c b/test/battle/damage_formula.c new file mode 100644 index 000000000..98aa197ca --- /dev/null +++ b/test/battle/damage_formula.c @@ -0,0 +1,78 @@ +#include "global.h" +#include "test/battle.h" + +// From https://bulbapedia.bulbagarden.net/wiki/Damage#Example + +SINGLE_BATTLE_TEST("Damage calculation matches Gen5+") +{ + s16 dmg; + s16 expectedDamage; + PARAMETRIZE { expectedDamage = 196; } + PARAMETRIZE { expectedDamage = 192; } + PARAMETRIZE { expectedDamage = 192; } + PARAMETRIZE { expectedDamage = 192; } + PARAMETRIZE { expectedDamage = 184; } + PARAMETRIZE { expectedDamage = 184; } + PARAMETRIZE { expectedDamage = 184; } + PARAMETRIZE { expectedDamage = 180; } + PARAMETRIZE { expectedDamage = 180; } + PARAMETRIZE { expectedDamage = 180; } + PARAMETRIZE { expectedDamage = 172; } + PARAMETRIZE { expectedDamage = 172; } + PARAMETRIZE { expectedDamage = 172; } + PARAMETRIZE { expectedDamage = 168; } + PARAMETRIZE { expectedDamage = 168; } + PARAMETRIZE { expectedDamage = 168; } + GIVEN { + PLAYER(SPECIES_GLACEON) { Level(75); Attack(123); } + OPPONENT(SPECIES_GARCHOMP) { Defense(163); } + } WHEN { + TURN { + MOVE(player, MOVE_ICE_FANG, WITH_RNG(RNG_DAMAGE_MODIFIER, i)); + } + } + SCENE{ + MESSAGE("Glaceon used Ice Fang!"); + HP_BAR(opponent, captureDamage: &dmg); + } + THEN{ + EXPECT_EQ(expectedDamage, dmg); + } +} + +SINGLE_BATTLE_TEST("Damage calculation matches Gen5+ (Muscle Band, crit)") +{ + s16 dmg; + s16 expectedDamage; + PARAMETRIZE { expectedDamage = 324; } + PARAMETRIZE { expectedDamage = 316; } + PARAMETRIZE { expectedDamage = 312; } + PARAMETRIZE { expectedDamage = 312; } + PARAMETRIZE { expectedDamage = 304; } + PARAMETRIZE { expectedDamage = 304; } + PARAMETRIZE { expectedDamage = 300; } + PARAMETRIZE { expectedDamage = 300; } + PARAMETRIZE { expectedDamage = 292; } + PARAMETRIZE { expectedDamage = 292; } + PARAMETRIZE { expectedDamage = 288; } + PARAMETRIZE { expectedDamage = 288; } + PARAMETRIZE { expectedDamage = 280; } + PARAMETRIZE { expectedDamage = 276; } + PARAMETRIZE { expectedDamage = 276; } + PARAMETRIZE { expectedDamage = 268; } + GIVEN { + PLAYER(SPECIES_GLACEON) { Level(75); Attack(123); Item(ITEM_MUSCLE_BAND); } + OPPONENT(SPECIES_GARCHOMP) { Defense(163); } + } WHEN { + TURN { + MOVE(player, MOVE_ICE_FANG, WITH_RNG(RNG_DAMAGE_MODIFIER, i), criticalHit: TRUE); + } + } + SCENE{ + MESSAGE("Glaceon used Ice Fang!"); + HP_BAR(opponent, captureDamage: &dmg); + } + THEN{ + EXPECT_EQ(expectedDamage, dmg); + } +} diff --git a/test/battle/form_change/battle_switch.c b/test/battle/form_change/battle_switch.c new file mode 100644 index 000000000..bd18e0ccf --- /dev/null +++ b/test/battle/form_change/battle_switch.c @@ -0,0 +1,23 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon switching out") +{ + GIVEN { + ASSUME(P_GEN_6_POKEMON == TRUE); + PLAYER(SPECIES_AEGISLASH); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + } SCENE { + ABILITY_POPUP(player, ABILITY_STANCE_CHANGE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Aegislash used Tackle!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_AEGISLASH); + } +} diff --git a/test/form_change.c b/test/battle/form_change/begin_battle.c similarity index 68% rename from test/form_change.c rename to test/battle/form_change/begin_battle.c index 43497101c..328db756d 100644 --- a/test/form_change.c +++ b/test/battle/form_change/begin_battle.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Xerneas changes into Active Form upon battle start") { @@ -79,41 +79,3 @@ SINGLE_BATTLE_TEST("Zamazenta's Iron Head becomes Behemoth Bash upon form change EXPECT_EQ(player->moves[0], MOVE_BEHEMOTH_BASH); } } - -SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon switching out") -{ - GIVEN { - ASSUME(P_GEN_6_POKEMON == TRUE); - PLAYER(SPECIES_AEGISLASH); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_TACKLE); } - TURN { SWITCH(player, 1); } - TURN { SWITCH(player, 0); } - } SCENE { - ABILITY_POPUP(player, ABILITY_STANCE_CHANGE); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); - MESSAGE("Aegislash used Tackle!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); - } THEN { - EXPECT_EQ(player->species, SPECIES_AEGISLASH); - } -} - -SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon fainting") -{ - GIVEN { - ASSUME(P_GEN_6_POKEMON == TRUE); - PLAYER(SPECIES_AEGISLASH) { HP(1); } - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, MOVE_GUST); SEND_OUT(player, 1); } - } SCENE { - MESSAGE("Foe Wobbuffet used Gust!"); - MESSAGE("Aegislash fainted!"); - } THEN { - EXPECT_EQ(GetMonData(&PLAYER_PARTY[0], MON_DATA_SPECIES), SPECIES_AEGISLASH); - } -} diff --git a/test/battle/form_change/faint.c b/test/battle/form_change/faint.c new file mode 100644 index 000000000..f4baa2894 --- /dev/null +++ b/test/battle/form_change/faint.c @@ -0,0 +1,19 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon fainting") +{ + GIVEN { + ASSUME(P_GEN_6_POKEMON == TRUE); + PLAYER(SPECIES_AEGISLASH) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_GUST); SEND_OUT(player, 1); } + } SCENE { + MESSAGE("Foe Wobbuffet used Gust!"); + MESSAGE("Aegislash fainted!"); + } THEN { + EXPECT_EQ(GetMonData(&PLAYER_PARTY[0], MON_DATA_SPECIES), SPECIES_AEGISLASH); + } +} diff --git a/test/mega_evolution.c b/test/battle/form_change/mega_evolution.c similarity index 99% rename from test/mega_evolution.c rename to test/battle/form_change/mega_evolution.c index 5597f5396..32cfb2c59 100644 --- a/test/mega_evolution.c +++ b/test/battle/form_change/mega_evolution.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Venusaur can Mega Evolve holding Venusaurite") { diff --git a/test/primal_reversion.c b/test/battle/form_change/primal_reversion.c similarity index 99% rename from test/primal_reversion.c rename to test/battle/form_change/primal_reversion.c index f888d17f7..3e271f67c 100644 --- a/test/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Primal reversion happens for Groudon only when holding Red Orb") { diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c new file mode 100644 index 000000000..f22d8b7b0 --- /dev/null +++ b/test/battle/form_change/ultra_burst.c @@ -0,0 +1,127 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Dusk Mane Necrozma can Ultra Burst holding Ultranecrozium Z") +{ + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, ultraBurst: TRUE); } + } SCENE { + MESSAGE("Bright light is about to burst out of Necrozma!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, player); + MESSAGE("Necrozma regained its true power through Ultra Burst!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_NECROZMA_ULTRA); + } +} + +DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - opponent faster") +{ + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); Speed(1); } + PLAYER(SPECIES_WOBBUFFET) { Speed(3); } + OPPONENT(SPECIES_NECROZMA_DAWN_WINGS) { Item(ITEM_ULTRANECROZIUM_Z); Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(4); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_CELEBRATE, ultraBurst: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, ultraBurst: TRUE); } + } SCENE { + MESSAGE("Bright light is about to burst out of Foe Necrozma!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, opponentLeft); + MESSAGE("Foe Necrozma regained its true power through Ultra Burst!"); + MESSAGE("Bright light is about to burst out of Necrozma!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, playerLeft); + MESSAGE("Necrozma regained its true power through Ultra Burst!"); + } +} + +DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - player faster") +{ + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); Speed(5); } + PLAYER(SPECIES_WOBBUFFET) { Speed(3); } + OPPONENT(SPECIES_NECROZMA_DAWN_WINGS) { Item(ITEM_ULTRANECROZIUM_Z); Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(4); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_CELEBRATE, ultraBurst: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, ultraBurst: TRUE); } + } SCENE { + MESSAGE("Bright light is about to burst out of Necrozma!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, playerLeft); + MESSAGE("Necrozma regained its true power through Ultra Burst!"); + MESSAGE("Bright light is about to burst out of Foe Necrozma!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, opponentLeft); + MESSAGE("Foe Necrozma regained its true power through Ultra Burst!"); + } +} + +SINGLE_BATTLE_TEST("Ultra Burst affects turn order") +{ + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + ASSUME(B_MEGA_EVO_TURN_ORDER); + PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); Speed(105); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(106); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, ultraBurst: TRUE); } + } SCENE { + MESSAGE("Necrozma used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } THEN { + ASSUME(player->speed == 263); + } +} + +DOUBLE_BATTLE_TEST("Ultra Burst happens after switching, but before Focus Punch-like Moves") +{ + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_FOCUS_PUNCH].effect == EFFECT_FOCUS_PUNCH); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); } + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(opponentRight, 2); MOVE(playerRight, MOVE_FOCUS_PUNCH, ultraBurst: TRUE, target: opponentLeft); MOVE(playerLeft, MOVE_FOCUS_PUNCH, target: opponentLeft); } + TURN {} + } SCENE { + MESSAGE("2 withdrew Wobbuffet!"); + MESSAGE("2 sent out Wobbuffet!"); + + MESSAGE("Bright light is about to burst out of Necrozma!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, playerRight); + MESSAGE("Necrozma regained its true power through Ultra Burst!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, playerRight); + MESSAGE("Necrozma is tightening its focus!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, playerLeft); + MESSAGE("Wobbuffet is tightening its focus!"); + } +} + +SINGLE_BATTLE_TEST("Ultra Burst and Mega Evolution can happen on the same turn") +{ + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); Speed(3); } + OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(2); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, ultraBurst: TRUE); MOVE(opponent, MOVE_CELEBRATE, megaEvolve: TRUE); } + } SCENE { + MESSAGE("Bright light is about to burst out of Necrozma!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, player); + MESSAGE("Necrozma regained its true power through Ultra Burst!"); + + MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 's Mega Ring!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_NECROZMA_ULTRA); + EXPECT_EQ(opponent->species, SPECIES_GARDEVOIR_MEGA); + } +} diff --git a/test/hold_effect_air_balloon.c b/test/battle/hold_effect/air_balloon.c similarity index 99% rename from test/hold_effect_air_balloon.c rename to test/battle/hold_effect/air_balloon.c index ba740948a..1ed8a89e4 100644 --- a/test/hold_effect_air_balloon.c +++ b/test/battle/hold_effect/air_balloon.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/hold_effect_berserk_gene.c b/test/battle/hold_effect/berserk_gene.c similarity index 98% rename from test/hold_effect_berserk_gene.c rename to test/battle/hold_effect/berserk_gene.c index 8a473e8da..6fd0f8a85 100644 --- a/test/hold_effect_berserk_gene.c +++ b/test/battle/hold_effect/berserk_gene.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { @@ -112,7 +112,7 @@ SINGLE_BATTLE_TEST("Berserk Gene does not confuse when Safeguard is active") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Berserk Gene, the Attack of Wobbuffet sharply rose!"); - MESSAGE("Wobbuffet's party is protected by SAFEGUARD!"); + MESSAGE("Wobbuffet's party is protected by Safeguard!"); NOT MESSAGE("Wobbuffet became confused!"); } } diff --git a/test/hold_effect_clear_amulet.c b/test/battle/hold_effect/clear_amulet.c similarity index 99% rename from test/hold_effect_clear_amulet.c rename to test/battle/hold_effect/clear_amulet.c index 83c887b2d..39e6c22a6 100644 --- a/test/hold_effect_clear_amulet.c +++ b/test/battle/hold_effect/clear_amulet.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/hold_effect_eject_button.c b/test/battle/hold_effect/eject_button.c similarity index 99% rename from test/hold_effect_eject_button.c rename to test/battle/hold_effect/eject_button.c index 7e6312656..4409f5d5b 100644 --- a/test/hold_effect_eject_button.c +++ b/test/battle/hold_effect/eject_button.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/hold_effect_gems.c b/test/battle/hold_effect/gems.c similarity index 99% rename from test/hold_effect_gems.c rename to test/battle/hold_effect/gems.c index 9a90b81f9..c98718313 100644 --- a/test/hold_effect_gems.c +++ b/test/battle/hold_effect/gems.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/hold_effect_leftovers.c b/test/battle/hold_effect/leftovers.c similarity index 98% rename from test/hold_effect_leftovers.c rename to test/battle/hold_effect/leftovers.c index 01b0655a5..7e51a3bd7 100644 --- a/test/hold_effect_leftovers.c +++ b/test/battle/hold_effect/leftovers.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/battle/hold_effect/metronome.c b/test/battle/hold_effect/metronome.c new file mode 100644 index 000000000..76cd27c6f --- /dev/null +++ b/test/battle/hold_effect/metronome.c @@ -0,0 +1,156 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + gItems[ITEM_METRONOME].holdEffect == HOLD_EFFECT_METRONOME; +} + +const uq4_12_t MetronomeMultipliers[] = { + UQ_4_12(1.0), + UQ_4_12(1.2), + UQ_4_12(1.4), + UQ_4_12(1.6), + UQ_4_12(1.8), + UQ_4_12(2.0), + UQ_4_12(2.0) +}; + +#define METRONOME_TURNS (ARRAY_COUNT(MetronomeMultipliers)) + +SINGLE_BATTLE_TEST("Metronome Item gradually boosts power of consecutively used moves by 20%, up to 100%") +{ + s16 damage[METRONOME_TURNS]; + u32 j; + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_METRONOME); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + for (j = 0; j < METRONOME_TURNS; ++j) { + TURN { MOVE(player, MOVE_TACKLE); } + } + } SCENE { + for (j = 0; j < METRONOME_TURNS; ++j) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &damage[j]); + } + } THEN { + for (j = 0; j < METRONOME_TURNS; ++j) { + EXPECT_MUL_EQ(damage[0], MetronomeMultipliers[j], damage[j]); + } + } +} + +SINGLE_BATTLE_TEST("Metronome Item's boost is reset if the attacker uses a different move") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_METRONOME); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_QUICK_ATTACK); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &damage[0]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + } +} + +SINGLE_BATTLE_TEST("Metronome Item's boost is reset if the move fails") +{ + s16 damage[2]; + KNOWN_FAILING; //https://github.com/rh-hideout/pokeemerald-expansion/issues/3251 + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_METRONOME); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &damage[0]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + } +} + +SINGLE_BATTLE_TEST("Metronome Item counts called moves instead of the calling move") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_METRONOME); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_METRONOME, WITH_RNG(RNG_METRONOME, MOVE_TACKLE)); } + TURN { MOVE(player, MOVE_METRONOME, WITH_RNG(RNG_METRONOME, MOVE_TACKLE)); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &damage[0]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_MUL_EQ(damage[0], UQ_4_12(1.2), damage[1]); + } +} + +SINGLE_BATTLE_TEST("Metronome Item counts charging turn of moves for its attacking turn", s16 damage) +{ + u32 item; + + KNOWN_FAILING; // https://github.com/rh-hideout/pokeemerald-expansion/issues/3250 + PARAMETRIZE {item = ITEM_NONE; } + PARAMETRIZE {item = ITEM_METRONOME; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SOLAR_BEAM].effect == EFFECT_SOLAR_BEAM); + PLAYER(SPECIES_WOBBUFFET) { Item(item); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SOLAR_BEAM); } + TURN { SKIP_TURN(player); } + } SCENE { + MESSAGE("Wobbuffet used Solar Beam!"); + MESSAGE("Wobbuffet took in sunlight!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("Congratulations, 1!"); + MESSAGE("Wobbuffet used Solar Beam!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(1.2), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Metronome Item doesn't increase damage per hit of multi-hit moves") +{ + s16 damage[3]; + GIVEN { + ASSUME(gBattleMoves[MOVE_FURY_ATTACK].effect == EFFECT_MULTI_HIT); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_METRONOME); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FURY_ATTACK); } + TURN { MOVE(player, MOVE_FURY_ATTACK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_ATTACK, player); + HP_BAR(opponent, captureDamage: &damage[0]); + HP_BAR(opponent, captureDamage: &damage[1]); + MESSAGE("Hit 5 time(s)!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_ATTACK, player); + HP_BAR(opponent, captureDamage: &damage[2]); + } THEN { + EXPECT_MUL_EQ(damage[0], UQ_4_12(1.2), damage[2]); // Got bonus once for the second turn + EXPECT_EQ(damage[0], damage[1]); // Do not get the bonus while still inside the first turn + } +} diff --git a/test/hold_effect_mirror_herb.c b/test/battle/hold_effect/mirror_herb.c similarity index 98% rename from test/hold_effect_mirror_herb.c rename to test/battle/hold_effect/mirror_herb.c index 22f564b85..1e9058b08 100644 --- a/test/hold_effect_mirror_herb.c +++ b/test/battle/hold_effect/mirror_herb.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/hold_effect_red_card.c b/test/battle/hold_effect/red_card.c similarity index 99% rename from test/hold_effect_red_card.c rename to test/battle/hold_effect/red_card.c index 0a8bb3460..aad7fea64 100644 --- a/test/hold_effect_red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/battle/hold_effect/safety_goggles.c b/test/battle/hold_effect/safety_goggles.c new file mode 100644 index 000000000..3deeeb810 --- /dev/null +++ b/test/battle/hold_effect/safety_goggles.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + gItems[ITEM_SAFETY_GOGGLES].holdEffect == HOLD_EFFECT_SAFETY_GOGGLES; +}; + +SINGLE_BATTLE_TEST("Safety Goggles block powder and spore moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].powderMove); + ASSUME(gItems[ITEM_SAFETY_GOGGLES].holdEffect == HOLD_EFFECT_SAFETY_GOGGLES); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ABRA) { Item(ITEM_SAFETY_GOGGLES); } + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("Foe Abra is not affected thanks to its SafetyGoggles!"); + } +} + +TO_DO_BATTLE_TEST("Safety Goggles blocks damage from hail"); +TO_DO_BATTLE_TEST("Safety Goggles blocks damage from sandstorm"); +TO_DO_BATTLE_TEST("Safety Goggles blocks Effect Spore's effect"); diff --git a/test/hold_effect_utility_umbrella.c b/test/battle/hold_effect/utility_umbrella.c similarity index 99% rename from test/hold_effect_utility_umbrella.c rename to test/battle/hold_effect/utility_umbrella.c index 6716ee72f..837bacc90 100644 --- a/test/hold_effect_utility_umbrella.c +++ b/test/battle/hold_effect/utility_umbrella.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" // Please add Utility Umbrella interactions with move, item and ability effects on their respective files. ASSUMPTIONS diff --git a/test/item_effect_cure_status.c b/test/battle/item_effect/cure_status.c similarity index 99% rename from test/item_effect_cure_status.c rename to test/battle/item_effect/cure_status.c index 1f7c9d7a2..c8b16dfdb 100644 --- a/test/item_effect_cure_status.c +++ b/test/battle/item_effect/cure_status.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Paralyze Heal heals a battler from being paralyzed") { diff --git a/test/item_effect_heal_and_cure_status.c b/test/battle/item_effect/heal_and_cure_status.c similarity index 98% rename from test/item_effect_heal_and_cure_status.c rename to test/battle/item_effect/heal_and_cure_status.c index 1f81ad922..de6a459a1 100644 --- a/test/item_effect_heal_and_cure_status.c +++ b/test/battle/item_effect/heal_and_cure_status.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures any primary status") { diff --git a/test/item_effect_increase_stat.c b/test/battle/item_effect/increase_stat.c similarity index 99% rename from test/item_effect_increase_stat.c rename to test/battle/item_effect/increase_stat.c index ab4113064..3aeb8d525 100644 --- a/test/item_effect_increase_stat.c +++ b/test/battle/item_effect/increase_stat.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("X Attack sharply raises battler's Attack stat", s16 damage) { diff --git a/test/item_effect_restore_hp.c b/test/battle/item_effect/restore_hp.c similarity index 98% rename from test/item_effect_restore_hp.c rename to test/battle/item_effect/restore_hp.c index a469b21ff..b9e4be034 100644 --- a/test/item_effect_restore_hp.c +++ b/test/battle/item_effect/restore_hp.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Items can restore a battler's HP by a fixed amount") { diff --git a/test/item_effect_restore_pp.c b/test/battle/item_effect/restore_pp.c similarity index 98% rename from test/item_effect_restore_pp.c rename to test/battle/item_effect/restore_pp.c index 7194efbbb..e998ef3d9 100644 --- a/test/item_effect_restore_pp.c +++ b/test/battle/item_effect/restore_pp.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Ether restores the PP of one of a battler's moves by 10 ") { diff --git a/test/item_effect_revive.c b/test/battle/item_effect/revive.c similarity index 98% rename from test/item_effect_revive.c rename to test/battle/item_effect/revive.c index c2a22f80a..2be2ac4a6 100644 --- a/test/item_effect_revive.c +++ b/test/battle/item_effect/revive.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Revive restores a fainted battler's HP to half") { diff --git a/test/item_effect_set_focus_energy.c b/test/battle/item_effect/set_focus_energy.c similarity index 96% rename from test/item_effect_set_focus_energy.c rename to test/battle/item_effect/set_focus_energy.c index 95648465e..da326bbe3 100644 --- a/test/item_effect_set_focus_energy.c +++ b/test/battle/item_effect/set_focus_energy.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stages") { diff --git a/test/item_effect_set_mist.c b/test/battle/item_effect/set_mist.c similarity index 96% rename from test/item_effect_set_mist.c rename to test/battle/item_effect/set_mist.c index e01775ec4..a369e70d9 100644 --- a/test/item_effect_set_mist.c +++ b/test/battle/item_effect/set_mist.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Guard Spec. sets Mist effect on the battlers side") { diff --git a/test/move.c b/test/battle/move.c similarity index 99% rename from test/move.c rename to test/battle/move.c index 06a0abc7c..03ed84f53 100644 --- a/test/move.c +++ b/test/battle/move.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Accuracy controls the proportion of misses") { diff --git a/test/move_effect_absorb.c b/test/battle/move_effect/absorb.c similarity index 97% rename from test/move_effect_absorb.c rename to test/battle/move_effect/absorb.c index 2ea49ef9e..d46dbd9c5 100644 --- a/test/move_effect_absorb.c +++ b/test/battle/move_effect/absorb.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_accuracy_down.c b/test/battle/move_effect/accuracy_down.c similarity index 96% rename from test/move_effect_accuracy_down.c rename to test/battle/move_effect/accuracy_down.c index a6a79d8db..a30430a28 100644 --- a/test/move_effect_accuracy_down.c +++ b/test/battle/move_effect/accuracy_down.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_after_you.c b/test/battle/move_effect/after_you.c similarity index 98% rename from test/move_effect_after_you.c rename to test/battle/move_effect/after_you.c index a488d7a8c..576267cb4 100644 --- a/test/move_effect_after_you.c +++ b/test/battle/move_effect/after_you.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_assist.c b/test/battle/move_effect/assist.c similarity index 96% rename from test/move_effect_assist.c rename to test/battle/move_effect/assist.c index 28ae78572..ed2f43dc1 100644 --- a/test/move_effect_assist.c +++ b/test/battle/move_effect/assist.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_attack_down.c b/test/battle/move_effect/attack_down.c similarity index 97% rename from test/move_effect_attack_down.c rename to test/battle/move_effect/attack_down.c index 0df14f701..2149624c8 100644 --- a/test/move_effect_attack_down.c +++ b/test/battle/move_effect/attack_down.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_attack_up.c b/test/battle/move_effect/attack_up.c similarity index 97% rename from test/move_effect_attack_up.c rename to test/battle/move_effect/attack_up.c index 4978d03f9..7cd8f953c 100644 --- a/test/move_effect_attack_up.c +++ b/test/battle/move_effect/attack_up.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_attack_up_user_ally.c b/test/battle/move_effect/attack_up_user_ally.c similarity index 99% rename from test/move_effect_attack_up_user_ally.c rename to test/battle/move_effect/attack_up_user_ally.c index 3d2ac6bb8..6691b49ed 100644 --- a/test/move_effect_attack_up_user_ally.c +++ b/test/battle/move_effect/attack_up_user_ally.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_axe_kick.c b/test/battle/move_effect/axe_kick.c similarity index 98% rename from test/move_effect_axe_kick.c rename to test/battle/move_effect/axe_kick.c index cf04e601e..e8674579f 100644 --- a/test/move_effect_axe_kick.c +++ b/test/battle/move_effect/axe_kick.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_barb_barrage.c b/test/battle/move_effect/barb_barrage.c similarity index 98% rename from test/move_effect_barb_barrage.c rename to test/battle/move_effect/barb_barrage.c index ad9f1ec2e..89062b3de 100644 --- a/test/move_effect_barb_barrage.c +++ b/test/battle/move_effect/barb_barrage.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_beak_blast.c b/test/battle/move_effect/beak_blast.c similarity index 99% rename from test/move_effect_beak_blast.c rename to test/battle/move_effect/beak_blast.c index 5a8352021..8ecf19611 100644 --- a/test/move_effect_beak_blast.c +++ b/test/battle/move_effect/beak_blast.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_bide.c b/test/battle/move_effect/bide.c similarity index 97% rename from test/move_effect_bide.c rename to test/battle/move_effect/bide.c index 0b0e18408..4dfdc3430 100644 --- a/test/move_effect_bide.c +++ b/test/battle/move_effect/bide.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_burn_hit.c b/test/battle/move_effect/burn_hit.c similarity index 97% rename from test/move_effect_burn_hit.c rename to test/battle/move_effect/burn_hit.c index 88fef17cb..3f257dfcb 100644 --- a/test/move_effect_burn_hit.c +++ b/test/battle/move_effect/burn_hit.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_burn_up.c b/test/battle/move_effect/burn_up.c similarity index 98% rename from test/move_effect_burn_up.c rename to test/battle/move_effect/burn_up.c index a53b1afa8..d24e47992 100644 --- a/test/move_effect_burn_up.c +++ b/test/battle/move_effect/burn_up.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_collision_course.c b/test/battle/move_effect/collision_course.c similarity index 98% rename from test/move_effect_collision_course.c rename to test/battle/move_effect/collision_course.c index bcf3cdd72..734095038 100644 --- a/test/move_effect_collision_course.c +++ b/test/battle/move_effect/collision_course.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_corrosive_gas.c b/test/battle/move_effect/corrosive_gas.c similarity index 99% rename from test/move_effect_corrosive_gas.c rename to test/battle/move_effect/corrosive_gas.c index 097646cee..e4b6a958e 100644 --- a/test/move_effect_corrosive_gas.c +++ b/test/battle/move_effect/corrosive_gas.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c new file mode 100644 index 000000000..4aa2e9d36 --- /dev/null +++ b/test/battle/move_effect/court_change.c @@ -0,0 +1,153 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_COURT_CHANGE].effect == EFFECT_COURT_CHANGE); +} + +DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") +{ + GIVEN { + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_STICKY_WEB); MOVE(opponentRight, MOVE_STEALTH_ROCK); } + TURN { MOVE(opponentLeft, MOVE_SPIKES); MOVE(opponentRight, MOVE_TOXIC_SPIKES); } + TURN { MOVE(playerLeft, MOVE_COURT_CHANGE); } + TURN { SWITCH(playerLeft, 2); SWITCH(opponentLeft, 2); } + } SCENE { + MESSAGE("Foe Wobbuffet used Sticky Web!"); + MESSAGE("Foe Wobbuffet used Stealth Rock!"); + MESSAGE("Foe Wobbuffet used Spikes!"); + MESSAGE("Foe Wobbuffet used Toxic Spikes!"); + MESSAGE("Wynaut used Court Change!"); + MESSAGE("Wynaut swapped the battle effects affecting each side!"); + MESSAGE("Go! Wynaut!"); + NONE_OF { + MESSAGE("Wynaut is hurt by spikes!"); + MESSAGE("Pointed stones dug into Wynaut!"); + MESSAGE("Wynaut was poisoned!"); + MESSAGE("Wynaut was caught in a Sticky Web!"); + } + MESSAGE("2 sent out Wobbuffet!"); + MESSAGE("Foe Wobbuffet is hurt by spikes!"); + MESSAGE("Pointed stones dug into Foe Wobbuffet!"); + MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("Foe Wobbuffet was caught in a Sticky Web!"); + } +} + +DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_STICKY_WEB); MOVE(playerRight, MOVE_STEALTH_ROCK); } + TURN { MOVE(playerLeft, MOVE_SPIKES); MOVE(playerRight, MOVE_TOXIC_SPIKES); } + TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); } + TURN { SWITCH(opponentLeft, 2); SWITCH(playerLeft, 2); } + } SCENE { + MESSAGE("Wobbuffet used Sticky Web!"); + MESSAGE("Wobbuffet used Stealth Rock!"); + MESSAGE("Wobbuffet used Spikes!"); + MESSAGE("Wobbuffet used Toxic Spikes!"); + MESSAGE("Foe Wynaut used Court Change!"); + MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + MESSAGE("Go! Wobbuffet!"); + MESSAGE("Wobbuffet is hurt by spikes!"); + MESSAGE("Pointed stones dug into Wobbuffet!"); + MESSAGE("Wobbuffet was poisoned!"); + MESSAGE("Wobbuffet was caught in a Sticky Web!"); + MESSAGE("2 sent out Wynaut!"); + NONE_OF { + MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("Pointed stones dug into Foe Wynaut!"); + MESSAGE("Foe Wynaut was poisoned!"); + MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + } + } +} + +DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky Chant, Reflect, Light Screen, Tailwind") +{ + GIVEN { + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } + TURN { MOVE(opponentLeft, MOVE_LUCKY_CHANT); MOVE(opponentRight, MOVE_REFLECT); } + TURN { MOVE(opponentLeft, MOVE_LIGHT_SCREEN); MOVE(opponentRight, MOVE_TAILWIND); } + TURN { MOVE(playerLeft, MOVE_COURT_CHANGE); } + TURN { } + TURN { } + TURN { } + TURN { } + } SCENE { + MESSAGE("Foe Wobbuffet used Mist!"); + MESSAGE("Foe Wobbuffet used Safeguard!"); + MESSAGE("Foe Wobbuffet used Lucky Chant!"); + MESSAGE("Foe Wobbuffet used Reflect!"); + MESSAGE("Foe Wobbuffet used Light Screen!"); + MESSAGE("Foe Wobbuffet used Tailwind!"); + MESSAGE("Wynaut used Court Change!"); + MESSAGE("Wynaut swapped the battle effects affecting each side!"); + // The effects now end for the player side. + MESSAGE("Ally's Mist wore off!"); + MESSAGE("Ally's party is no longer protected by Safeguard!"); + MESSAGE("Ally's Reflect wore off!"); + MESSAGE("Your team's Lucky Chant wore off!"); + MESSAGE("Your team's tailwind petered out!"); + MESSAGE("Ally's Light Screen wore off!"); + } +} + +DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Lucky Chant, Reflect, Light Screen, Tailwind") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); } + TURN { MOVE(playerLeft, MOVE_LUCKY_CHANT); MOVE(playerRight, MOVE_REFLECT); } + TURN { MOVE(playerLeft, MOVE_LIGHT_SCREEN); MOVE(playerRight, MOVE_TAILWIND); } + TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); } + TURN { } + TURN { } + TURN { } + TURN { } + } SCENE { + MESSAGE("Wobbuffet used Mist!"); + MESSAGE("Wobbuffet used Safeguard!"); + MESSAGE("Wobbuffet used Lucky Chant!"); + MESSAGE("Wobbuffet used Reflect!"); + MESSAGE("Wobbuffet used Light Screen!"); + MESSAGE("Wobbuffet used Tailwind!"); + MESSAGE("Foe Wynaut used Court Change!"); + MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + // The effects now end for the player side. + MESSAGE("Foe's Mist wore off!"); + MESSAGE("Foe's party is no longer protected by Safeguard!"); + MESSAGE("Foe's Reflect wore off!"); + MESSAGE("The opposing team's Lucky Chant wore off!"); + MESSAGE("The opposing team's tailwind petered out!"); + MESSAGE("Foe's Light Screen wore off!"); + } +} diff --git a/test/move_effect_defense_down.c b/test/battle/move_effect/defense_down.c similarity index 97% rename from test/move_effect_defense_down.c rename to test/battle/move_effect/defense_down.c index 9ecd1c25f..8a8c69ec3 100644 --- a/test/move_effect_defense_down.c +++ b/test/battle/move_effect/defense_down.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_defense_up.c b/test/battle/move_effect/defense_up.c similarity index 97% rename from test/move_effect_defense_up.c rename to test/battle/move_effect/defense_up.c index 492ce7bc9..b4c7cb4db 100644 --- a/test/move_effect_defense_up.c +++ b/test/battle/move_effect/defense_up.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_defog.c b/test/battle/move_effect/defog.c similarity index 99% rename from test/move_effect_defog.c rename to test/battle/move_effect/defog.c index b55d5eab6..1cd78fb50 100644 --- a/test/move_effect_defog.c +++ b/test/battle/move_effect/defog.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { @@ -125,7 +125,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard STATUS_ICON(opponentRight, badPoison: TRUE); } else { - MESSAGE("Foe Wobbuffet's party is protected by SAFEGUARD!"); + MESSAGE("Foe Wobbuffet's party is protected by Safeguard!"); NOT STATUS_ICON(opponentRight, badPoison: TRUE); } } diff --git a/test/move_effect_dire_claw.c b/test/battle/move_effect/dire_claw.c similarity index 99% rename from test/move_effect_dire_claw.c rename to test/battle/move_effect/dire_claw.c index 712b6ea25..421ba201d 100644 --- a/test/move_effect_dire_claw.c +++ b/test/battle/move_effect/dire_claw.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_double_shock.c b/test/battle/move_effect/double_shock.c similarity index 98% rename from test/move_effect_double_shock.c rename to test/battle/move_effect/double_shock.c index c3651c403..89f758681 100644 --- a/test/move_effect_double_shock.c +++ b/test/battle/move_effect/double_shock.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_dream_eater.c b/test/battle/move_effect/dream_eater.c similarity index 98% rename from test/move_effect_dream_eater.c rename to test/battle/move_effect/dream_eater.c index fa17b94a6..047fe7898 100644 --- a/test/move_effect_dream_eater.c +++ b/test/battle/move_effect/dream_eater.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_encore.c b/test/battle/move_effect/encore.c similarity index 98% rename from test/move_effect_encore.c rename to test/battle/move_effect/encore.c index f8a178512..eff6c33b2 100644 --- a/test/move_effect_encore.c +++ b/test/battle/move_effect/encore.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_evasion_up.c b/test/battle/move_effect/evasion_up.c similarity index 96% rename from test/move_effect_evasion_up.c rename to test/battle/move_effect/evasion_up.c index 4a4e99db7..ecb6429cd 100644 --- a/test/move_effect_evasion_up.c +++ b/test/battle/move_effect/evasion_up.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_explosion.c b/test/battle/move_effect/explosion.c similarity index 99% rename from test/move_effect_explosion.c rename to test/battle/move_effect/explosion.c index 41e74044b..ef6dba6c0 100644 --- a/test/move_effect_explosion.c +++ b/test/battle/move_effect/explosion.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_focus_punch.c b/test/battle/move_effect/focus_punch.c similarity index 99% rename from test/move_effect_focus_punch.c rename to test/battle/move_effect/focus_punch.c index 2bd1e52e5..e97deef43 100644 --- a/test/move_effect_focus_punch.c +++ b/test/battle/move_effect/focus_punch.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_freeze_hit.c b/test/battle/move_effect/freeze_hit.c similarity index 97% rename from test/move_effect_freeze_hit.c rename to test/battle/move_effect/freeze_hit.c index bb0878d0d..5d99311ce 100644 --- a/test/move_effect_freeze_hit.c +++ b/test/battle/move_effect/freeze_hit.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_haze.c b/test/battle/move_effect/haze.c similarity index 97% rename from test/move_effect_haze.c rename to test/battle/move_effect/haze.c index bd43c6947..f1e4456aa 100644 --- a/test/move_effect_haze.c +++ b/test/battle/move_effect/haze.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_healing_wish.c b/test/battle/move_effect/healing_wish.c similarity index 99% rename from test/move_effect_healing_wish.c rename to test/battle/move_effect/healing_wish.c index 00ee76561..fd25b8489 100644 --- a/test/move_effect_healing_wish.c +++ b/test/battle/move_effect/healing_wish.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_hex.c b/test/battle/move_effect/hex.c similarity index 97% rename from test/move_effect_hex.c rename to test/battle/move_effect/hex.c index 2847aeb17..e0a924906 100644 --- a/test/move_effect_hex.c +++ b/test/battle/move_effect/hex.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_hit_escape.c b/test/battle/move_effect/hit_escape.c similarity index 99% rename from test/move_effect_hit_escape.c rename to test/battle/move_effect/hit_escape.c index fb5ff2dd5..f2d513095 100644 --- a/test/move_effect_hit_escape.c +++ b/test/battle/move_effect/hit_escape.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_hit_set_entry_hazardss.c b/test/battle/move_effect/hit_set_entry_hazardss.c similarity index 99% rename from test/move_effect_hit_set_entry_hazardss.c rename to test/battle/move_effect/hit_set_entry_hazardss.c index 23f0f0b28..caf75ed49 100644 --- a/test/move_effect_hit_set_entry_hazardss.c +++ b/test/battle/move_effect/hit_set_entry_hazardss.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_hit_switch_target.c b/test/battle/move_effect/hit_switch_target.c similarity index 98% rename from test/move_effect_hit_switch_target.c rename to test/battle/move_effect/hit_switch_target.c index 5af3062a4..683b005fd 100644 --- a/test/move_effect_hit_switch_target.c +++ b/test/battle/move_effect/hit_switch_target.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_hydro_steam.c b/test/battle/move_effect/hydro_steam.c similarity index 98% rename from test/move_effect_hydro_steam.c rename to test/battle/move_effect/hydro_steam.c index 487449159..f86da07ac 100644 --- a/test/move_effect_hydro_steam.c +++ b/test/battle/move_effect/hydro_steam.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_infernal_parade.c b/test/battle/move_effect/infernal_parade.c similarity index 98% rename from test/move_effect_infernal_parade.c rename to test/battle/move_effect/infernal_parade.c index 5b951eca1..38cfc9733 100644 --- a/test/move_effect_infernal_parade.c +++ b/test/battle/move_effect/infernal_parade.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_make_it_rain.c b/test/battle/move_effect/make_it_rain.c similarity index 97% rename from test/move_effect_make_it_rain.c rename to test/battle/move_effect/make_it_rain.c index ae8149b19..42046c145 100644 --- a/test/move_effect_make_it_rain.c +++ b/test/battle/move_effect/make_it_rain.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_metronome.c b/test/battle/move_effect/metronome.c similarity index 98% rename from test/move_effect_metronome.c rename to test/battle/move_effect/metronome.c index 5b2fb0bab..390c834be 100644 --- a/test/move_effect_metronome.c +++ b/test/battle/move_effect/metronome.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_mind_blown.c b/test/battle/move_effect/mind_blown.c similarity index 99% rename from test/move_effect_mind_blown.c rename to test/battle/move_effect/mind_blown.c index 19179f990..485f2abd6 100644 --- a/test/move_effect_mind_blown.c +++ b/test/battle/move_effect/mind_blown.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_mirror_move.c b/test/battle/move_effect/mirror_move.c similarity index 99% rename from test/move_effect_mirror_move.c rename to test/battle/move_effect/mirror_move.c index ec7772124..96d5280c5 100644 --- a/test/move_effect_mirror_move.c +++ b/test/battle/move_effect/mirror_move.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_mortal_spin.c b/test/battle/move_effect/mortal_spin.c similarity index 96% rename from test/move_effect_mortal_spin.c rename to test/battle/move_effect/mortal_spin.c index c3dd04527..0ac8403e2 100644 --- a/test/move_effect_mortal_spin.c +++ b/test/battle/move_effect/mortal_spin.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_multi_hit.c b/test/battle/move_effect/multi_hit.c similarity index 99% rename from test/move_effect_multi_hit.c rename to test/battle/move_effect/multi_hit.c index d3a265ebb..67515c7d5 100644 --- a/test/move_effect_multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_paralyze_hit.c b/test/battle/move_effect/paralyze_hit.c similarity index 97% rename from test/move_effect_paralyze_hit.c rename to test/battle/move_effect/paralyze_hit.c index 8e7d259f7..4efe6746c 100644 --- a/test/move_effect_paralyze_hit.c +++ b/test/battle/move_effect/paralyze_hit.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_poison_hit.c b/test/battle/move_effect/poison_hit.c similarity index 97% rename from test/move_effect_poison_hit.c rename to test/battle/move_effect/poison_hit.c index b1a154810..91d700466 100644 --- a/test/move_effect_poison_hit.c +++ b/test/battle/move_effect/poison_hit.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_population_bomb.c b/test/battle/move_effect/population_bomb.c similarity index 98% rename from test/move_effect_population_bomb.c rename to test/battle/move_effect/population_bomb.c index 1305f456c..e4fad6976 100644 --- a/test/move_effect_population_bomb.c +++ b/test/battle/move_effect/population_bomb.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Population Bomb can hit ten times") { diff --git a/test/move_effect_rampage.c b/test/battle/move_effect/rampage.c similarity index 99% rename from test/move_effect_rampage.c rename to test/battle/move_effect/rampage.c index aa4a002fb..a1a271b37 100644 --- a/test/move_effect_rampage.c +++ b/test/battle/move_effect/rampage.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c new file mode 100644 index 000000000..f7d5cf242 --- /dev/null +++ b/test/battle/move_effect/recoil_if_miss.c @@ -0,0 +1,100 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_JUMP_KICK].effect == EFFECT_RECOIL_IF_MISS); +} + +SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on miss") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_JUMP_KICK, hit: FALSE); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + MESSAGE("Wobbuffet used Jump Kick!"); + MESSAGE("Wobbuffet's attack missed!"); + MESSAGE("Wobbuffet kept going and crashed!"); + HP_BAR(player, damage: maxHP / 2); + } +} + +SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on protect") +{ + GIVEN { + ASSUME(!gBattleMoves[MOVE_JUMP_KICK].ignoresProtect); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_JUMP_KICK, hit: FALSE); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_JUMP_KICK, player); + HP_BAR(player, damage: maxHP / 2); + } +} + +SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") +{ + GIVEN { + ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_HEALING_WISH); MOVE(player, MOVE_JUMP_KICK, hit: FALSE); SEND_OUT(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEALING_WISH, opponent); + NOT HP_BAR(player, damage: maxHP / 2); + } +} + +SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pokemon can faint from either of these") +{ + s16 hp, maxHp = 256; + bool32 faintOnSpiky = FALSE, faintOnJumpKick = FALSE; + + PARAMETRIZE { hp = maxHp; } + PARAMETRIZE { hp = maxHp / 2; faintOnJumpKick = TRUE; } // Faints after Jump Kick's recoil + PARAMETRIZE { hp = maxHp / 8; faintOnSpiky = TRUE; } // Faints after Spiky Shield's recoil + + GIVEN { + ASSUME(gBattleMoves[MOVE_SPIKY_SHIELD].effect == EFFECT_PROTECT); + PLAYER(SPECIES_WOBBUFFET) { HP(hp); MaxHP(maxHp); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (!faintOnJumpKick && !faintOnSpiky) { + TURN { MOVE(opponent, MOVE_SPIKY_SHIELD); MOVE(player, MOVE_JUMP_KICK, hit: FALSE); } + } else { + TURN { MOVE(opponent, MOVE_SPIKY_SHIELD); MOVE(player, MOVE_JUMP_KICK, hit: FALSE); SEND_OUT(player, 1); } + } + TURN { ; } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKY_SHIELD, opponent); + MESSAGE("Wobbuffet used Jump Kick!"); + MESSAGE("Foe Wobbuffet protected itself!"); + HP_BAR(player, damage: maxHp / 8); + MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Spiky Shield!"); + if (faintOnSpiky){ + MESSAGE("Wobbuffet fainted!"); + MESSAGE("Go! Wynaut!"); + NONE_OF { + MESSAGE("Wobbuffet kept going and crashed!"); + HP_BAR(player); + } + } else { + MESSAGE("Wobbuffet kept going and crashed!"); + HP_BAR(player); + if (faintOnJumpKick) { + MESSAGE("Wobbuffet fainted!"); + MESSAGE("Go! Wynaut!"); + } + } + } +} diff --git a/test/move_effect_reflect.c b/test/battle/move_effect/reflect.c similarity index 99% rename from test/move_effect_reflect.c rename to test/battle/move_effect/reflect.c index 4ea875f35..dd8738f72 100644 --- a/test/move_effect_reflect.c +++ b/test/battle/move_effect/reflect.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_revival_blessing.c b/test/battle/move_effect/revival_blessing.c similarity index 99% rename from test/move_effect_revival_blessing.c rename to test/battle/move_effect/revival_blessing.c index 3cb4d4ca4..a5dd32c19 100644 --- a/test/move_effect_revival_blessing.c +++ b/test/battle/move_effect/revival_blessing.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" // Note: Since these tests are recorded battle, they don't test the right battle controller // behaviors. These have been tested in-game, in double, in multi, and in link battles. AI will always diff --git a/test/move_effect_roar.c b/test/battle/move_effect/roar.c similarity index 98% rename from test/move_effect_roar.c rename to test/battle/move_effect/roar.c index 99256b298..20f934808 100644 --- a/test/move_effect_roar.c +++ b/test/battle/move_effect/roar.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_shell_trap.c b/test/battle/move_effect/shell_trap.c similarity index 99% rename from test/move_effect_shell_trap.c rename to test/battle/move_effect/shell_trap.c index 2498e12f2..7fb80210e 100644 --- a/test/move_effect_shell_trap.c +++ b/test/battle/move_effect/shell_trap.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_sleep.c b/test/battle/move_effect/sleep.c similarity index 97% rename from test/move_effect_sleep.c rename to test/battle/move_effect/sleep.c index c34e1248e..d2cac0af9 100644 --- a/test/move_effect_sleep.c +++ b/test/battle/move_effect/sleep.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_special_attack_down.c b/test/battle/move_effect/special_attack_down.c similarity index 97% rename from test/move_effect_special_attack_down.c rename to test/battle/move_effect/special_attack_down.c index 0511692d4..6e7a84f0a 100644 --- a/test/move_effect_special_attack_down.c +++ b/test/battle/move_effect/special_attack_down.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_special_attack_up_3.c b/test/battle/move_effect/special_attack_up_3.c similarity index 97% rename from test/move_effect_special_attack_up_3.c rename to test/battle/move_effect/special_attack_up_3.c index ad53bedb9..340c59360 100644 --- a/test/move_effect_special_attack_up_3.c +++ b/test/battle/move_effect/special_attack_up_3.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_spikes.c b/test/battle/move_effect/spikes.c similarity index 99% rename from test/move_effect_spikes.c rename to test/battle/move_effect/spikes.c index 0c84a5fb1..bfc0f39b5 100644 --- a/test/move_effect_spikes.c +++ b/test/battle/move_effect/spikes.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_spin_out.c b/test/battle/move_effect/spin_out.c similarity index 95% rename from test/move_effect_spin_out.c rename to test/battle/move_effect/spin_out.c index 060f3545e..7966882c6 100644 --- a/test/move_effect_spin_out.c +++ b/test/battle/move_effect/spin_out.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c new file mode 100644 index 000000000..e12cc8090 --- /dev/null +++ b/test/battle/move_effect/sticky_web.c @@ -0,0 +1,237 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_STICKY_WEB].effect == EFFECT_STICKY_WEB); +} + +SINGLE_BATTLE_TEST("Sticky Web lowers Speed by 1 on switch-in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); } + TURN { SWITCH(opponent, 1); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); + MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("2 sent out Wynaut!"); + MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wynaut's Speed fell!"); + } +} + +SINGLE_BATTLE_TEST("Sticky Web can only be set up 1 time") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); } + TURN { MOVE(player, MOVE_STICKY_WEB); } + } SCENE { + MESSAGE("Wobbuffet used Sticky Web!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); + MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + + MESSAGE("Wobbuffet used Sticky Web!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); + MESSAGE("But it failed!"); + } +} + + +DOUBLE_BATTLE_TEST("Sticky Web lowers Speed by 1 in a double battle after Explosion fainting both mons") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET) {Speed(5);} + PLAYER(SPECIES_WOBBUFFET) {HP(1500); Speed(10);} + PLAYER(SPECIES_WOBBUFFET) {Speed(10);} + OPPONENT(SPECIES_WOBBUFFET) {HP(1); Speed(1);} + OPPONENT(SPECIES_WOBBUFFET) {HP(1); Speed(1);} + OPPONENT(SPECIES_WYNAUT) {Speed(10);} + OPPONENT(SPECIES_WYNAUT) {Speed(10);} + } WHEN { + TURN { MOVE(playerRight, MOVE_STICKY_WEB); MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(opponentRight, 3); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, playerRight); + MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); + MESSAGE("2 sent out Wynaut!"); + MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("2 sent out Wynaut!"); + MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Wynaut's Speed fell!"); + } +} + +SINGLE_BATTLE_TEST("Sticky Web raises Speed by 1 for a Pokemon with Contrary") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SHUCKLE) { Ability(ABILITY_CONTRARY); } + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); } + TURN { SWITCH(opponent, 1); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); + MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("2 sent out Shuckle!"); + MESSAGE("Foe Shuckle was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Shuckle's Speed rose!"); + } +} + +#define BATTLER_OPPONENT (opponentSetUpper == 0 ? opponentLeft : opponentRight) +#define BATTLER_PLAYER (playerSetUpper == 0 ? playerLeft : playerRight) + +DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - the battler which set up Sticky Web has its Speed lowered instead") +{ + u8 playerSetUpper, opponentSetUpper; // 0 left, 1 right + + PARAMETRIZE {playerSetUpper = 0; opponentSetUpper = 0; } + PARAMETRIZE {playerSetUpper = 0; opponentSetUpper = 1; } + PARAMETRIZE {playerSetUpper = 1; opponentSetUpper = 0; } + PARAMETRIZE {playerSetUpper = 1; opponentSetUpper = 1; } + + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_SQUIRTLE); + PLAYER(SPECIES_CHARMANDER); + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); } // Iron Ball, so that flying type Corviknight is affected by Sticky Web. + OPPONENT(SPECIES_CATERPIE); + OPPONENT(SPECIES_WEEDLE); + } WHEN { + TURN { MOVE(BATTLER_OPPONENT, MOVE_STICKY_WEB); } + TURN { MOVE(BATTLER_PLAYER, MOVE_STICKY_WEB); } + TURN { SWITCH(playerRight, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, BATTLER_OPPONENT); + MESSAGE("A sticky web spreads out on the ground around your team!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, BATTLER_PLAYER); + MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + + MESSAGE("Go! Corviknigh!"); + MESSAGE("Corviknigh was caught in a Sticky Web!"); + ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, BATTLER_OPPONENT); + if (opponentSetUpper == 0) { + MESSAGE("Foe Caterpie's Speed fell!"); + } else { + MESSAGE("Foe Weedle's Speed fell!"); + } + } +} + +#undef BATTLER_OPPONENT +#undef BATTLER_PLAYER + +DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no one has their Speed lowered if the set upper switched") +{ + u16 speedPlayer, speedOpponent; + + // We need to make sure Sticky Web user saves for both sides, so it doesn't matter who sets it first. + PARAMETRIZE { speedPlayer = 5; speedOpponent = 10; } + PARAMETRIZE { speedPlayer = 10; speedOpponent = 5; } + + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_SQUIRTLE) { Speed(speedPlayer); } + PLAYER(SPECIES_CHARMANDER) { Speed(speedPlayer); } + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); Speed(speedOpponent); } // Iron Ball, so that flying type Corviknight is affected by Sticky Web. + OPPONENT(SPECIES_CATERPIE) { Speed(speedOpponent); } + OPPONENT(SPECIES_WEEDLE) { Speed(speedOpponent); } + OPPONENT(SPECIES_PIDGEY) { Speed(speedOpponent); } // Flying type,so not affected by Sticky Web. + } WHEN { + TURN { MOVE(opponentLeft, MOVE_STICKY_WEB); MOVE(playerRight, MOVE_STICKY_WEB); } + TURN { SWITCH(opponentLeft, 2); } + TURN { SWITCH(playerRight, 2); } + } SCENE { + if (speedPlayer > speedOpponent) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, playerRight); + MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentLeft); + MESSAGE("A sticky web spreads out on the ground around your team!"); + } else { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentLeft); + MESSAGE("A sticky web spreads out on the ground around your team!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, playerRight); + MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + } + + MESSAGE("Go! Corviknigh!"); + MESSAGE("Corviknigh was caught in a Sticky Web!"); + ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + EXPECT_EQ(playerRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponentLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + } +} + +DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no one has their Speed lowered if the set upper fainted") +{ + bool8 hasReplacement; + + // We need to make sure Sticky Web user saves for both sides, so it doesn't matter who sets it first. + PARAMETRIZE {hasReplacement = TRUE;} + PARAMETRIZE {hasReplacement = FALSE;} + + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_MEMENTO].effect == EFFECT_MEMENTO); + PLAYER(SPECIES_SQUIRTLE) {Speed(5); } + PLAYER(SPECIES_CHARMANDER) {Speed(5); } + PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); Speed(5); } // Iron Ball, so that flying type Corviknight is affected by Sticky Web. + OPPONENT(SPECIES_CATERPIE) {Speed(7); } + OPPONENT(SPECIES_WEEDLE) {Speed(7); } + if (hasReplacement) { + OPPONENT(SPECIES_PIDGEY) {Speed(7); } + } + + } WHEN { + TURN { MOVE(opponentLeft, MOVE_STICKY_WEB); } + if (hasReplacement) { + TURN { MOVE(opponentLeft, MOVE_MEMENTO, target:playerLeft); SEND_OUT(opponentLeft, 2); } + } else { + TURN { MOVE(opponentLeft, MOVE_MEMENTO, target:playerLeft);} + } + TURN { SWITCH(playerRight, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentLeft); + MESSAGE("A sticky web spreads out on the ground around your team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_MEMENTO, opponentLeft); + MESSAGE("Foe Caterpie fainted!"); + if (hasReplacement) { + MESSAGE("2 sent out Pidgey!"); + } + + MESSAGE("Go! Corviknigh!"); + MESSAGE("Corviknigh was caught in a Sticky Web!"); + ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } THEN { + if (hasReplacement) { + EXPECT_EQ(opponentLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + } + EXPECT_EQ(playerLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + EXPECT_EQ(playerRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + } +} diff --git a/test/move_effect_stockpile.c b/test/battle/move_effect/stockpile.c similarity index 99% rename from test/move_effect_stockpile.c rename to test/battle/move_effect/stockpile.c index b16408d49..0e540bb5d 100644 --- a/test/move_effect_stockpile.c +++ b/test/battle/move_effect/stockpile.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" // These tests cover all 3 effects: Stockpile, Spit up and Swallow. ASSUMPTIONS diff --git a/test/move_effect_tailwind.c b/test/battle/move_effect/tailwind.c similarity index 98% rename from test/move_effect_tailwind.c rename to test/battle/move_effect/tailwind.c index 7dfffdbe0..2e9ee5ade 100644 --- a/test/move_effect_tailwind.c +++ b/test/battle/move_effect/tailwind.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_take_heart.c b/test/battle/move_effect/take_heart.c similarity index 98% rename from test/move_effect_take_heart.c rename to test/battle/move_effect/take_heart.c index 82745957f..c2dfc90a8 100644 --- a/test/move_effect_take_heart.c +++ b/test/battle/move_effect/take_heart.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_teatime.c b/test/battle/move_effect/teatime.c similarity index 99% rename from test/move_effect_teatime.c rename to test/battle/move_effect/teatime.c index 561a5d987..7995937fa 100644 --- a/test/move_effect_teatime.c +++ b/test/battle/move_effect/teatime.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/battle/move_effect/teleport.c b/test/battle/move_effect/teleport.c new file mode 100644 index 000000000..7544ae8a4 --- /dev/null +++ b/test/battle/move_effect/teleport.c @@ -0,0 +1,61 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TELEPORT].effect == EFFECT_TELEPORT); +} + +SINGLE_BATTLE_TEST("Teleport fails when there is no pokemon to switch in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TELEPORT); } + } SCENE { + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Teleport fails when there no alive pokemon left") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { HP(0); } + } WHEN { + TURN { MOVE(opponent, MOVE_TELEPORT); } + } SCENE { + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Teleport forces the pokemon to switch out") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_TELEPORT); SEND_OUT(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TELEPORT, opponent); + MESSAGE("2 sent out Wynaut!"); + } +} + +SINGLE_BATTLE_TEST("Teleport does not fail if the user is trapped") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_FIRE_SPIN); MOVE(opponent, MOVE_TELEPORT); SEND_OUT(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_SPIN, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TELEPORT, opponent); + MESSAGE("2 sent out Wynaut!"); + } +} diff --git a/test/move_effect_torment.c b/test/battle/move_effect/torment.c similarity index 98% rename from test/move_effect_torment.c rename to test/battle/move_effect/torment.c index 43f05e29f..dbef1d983 100644 --- a/test/move_effect_torment.c +++ b/test/battle/move_effect/torment.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_toxic.c b/test/battle/move_effect/toxic.c similarity index 98% rename from test/move_effect_toxic.c rename to test/battle/move_effect/toxic.c index f71d2a972..78d978b26 100644 --- a/test/move_effect_toxic.c +++ b/test/battle/move_effect/toxic.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c similarity index 99% rename from test/move_effect_toxic_spikes.c rename to test/battle/move_effect/toxic_spikes.c index 44780da21..3be2d1627 100644 --- a/test/move_effect_toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_tri_attack.c b/test/battle/move_effect/tri_attack.c similarity index 99% rename from test/move_effect_tri_attack.c rename to test/battle/move_effect/tri_attack.c index 91b465067..aec711aab 100644 --- a/test/move_effect_tri_attack.c +++ b/test/battle/move_effect/tri_attack.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_triple_arrows.c b/test/battle/move_effect/triple_arrows.c similarity index 99% rename from test/move_effect_triple_arrows.c rename to test/battle/move_effect/triple_arrows.c index 0e45521e4..eb8e1c666 100644 --- a/test/move_effect_triple_arrows.c +++ b/test/battle/move_effect/triple_arrows.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_triple_kick.c b/test/battle/move_effect/triple_kick.c similarity index 97% rename from test/move_effect_triple_kick.c rename to test/battle/move_effect/triple_kick.c index 4e47d6cc6..fef571cb4 100644 --- a/test/move_effect_triple_kick.c +++ b/test/battle/move_effect/triple_kick.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/move_effect_venoshock.c b/test/battle/move_effect/venoshock.c similarity index 97% rename from test/move_effect_venoshock.c rename to test/battle/move_effect/venoshock.c index 134982a60..b2b8fcda2 100644 --- a/test/move_effect_venoshock.c +++ b/test/battle/move_effect/venoshock.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { diff --git a/test/battle/move_flags/damages_airborne_double_damage.c b/test/battle/move_flags/damages_airborne_double_damage.c new file mode 100644 index 000000000..5906e3b6b --- /dev/null +++ b/test/battle/move_flags/damages_airborne_double_damage.c @@ -0,0 +1,23 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Being airborne causes the target to take double damage from certain moves", s16 damage) +{ + bool32 useDive; + PARAMETRIZE { useDive = FALSE; } + PARAMETRIZE { useDive = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TWISTER].damagesAirborneDoubleDamage); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + } WHEN { + if (useDive) + TURN { MOVE(opponent, MOVE_FLY); MOVE(player, MOVE_TWISTER); } + else + TURN { MOVE(player, MOVE_TWISTER); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.0), results[1].damage); + } +} diff --git a/test/battle/move_flags/damages_underground.c b/test/battle/move_flags/damages_underground.c new file mode 100644 index 000000000..54af8b829 --- /dev/null +++ b/test/battle/move_flags/damages_underground.c @@ -0,0 +1,23 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Being underground causes the target to take double damage from certain moves", s16 damage) +{ + bool32 useDig; + PARAMETRIZE { useDig = FALSE; } + PARAMETRIZE { useDig = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_EARTHQUAKE].damagesUnderground); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + } WHEN { + if (useDig) + TURN { MOVE(opponent, MOVE_DIG); MOVE(player, MOVE_EARTHQUAKE); } + else + TURN { MOVE(player, MOVE_EARTHQUAKE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.0), results[1].damage); + } +} diff --git a/test/battle/move_flags/damages_underwater.c b/test/battle/move_flags/damages_underwater.c new file mode 100644 index 000000000..e8f45e8de --- /dev/null +++ b/test/battle/move_flags/damages_underwater.c @@ -0,0 +1,23 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Being underwater causes the target to take double damage from certain moves", s16 damage) +{ + bool32 useDive; + PARAMETRIZE { useDive = FALSE; } + PARAMETRIZE { useDive = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SURF].damagesUnderwater); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + } WHEN { + if (useDive) + TURN { MOVE(opponent, MOVE_DIVE); MOVE(player, MOVE_SURF); } + else + TURN { MOVE(player, MOVE_SURF); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.0), results[1].damage); + } +} diff --git a/test/battle/move_flags/minimize_double_damage.c b/test/battle/move_flags/minimize_double_damage.c new file mode 100644 index 000000000..6b631c9a3 --- /dev/null +++ b/test/battle/move_flags/minimize_double_damage.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("MinimizeDoubleDamage flag makes moves cause double damage to Minimized targets", s16 damage) +{ + bool32 useMinimize; + PARAMETRIZE { useMinimize = FALSE; } + PARAMETRIZE { useMinimize = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_MINIMIZE].effect == EFFECT_MINIMIZE); + ASSUME(gBattleMoves[MOVE_STEAMROLLER].minimizeDoubleDamage); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + } WHEN { + if (useMinimize) + TURN { MOVE(opponent, MOVE_MINIMIZE); MOVE(player, MOVE_STEAMROLLER); } + else + TURN { MOVE(player, MOVE_STEAMROLLER); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.0), results[1].damage); + } +} + +// Remember to add ASSUME(B_MINIMIZE_DMG_ACC >= GEN_6) +TO_DO_BATTLE_TEST("MinimizeDoubleDamage flag allows moves to skip accuracy checks towards Minimized targets") diff --git a/test/move_flag_strike_count.c b/test/battle/move_flags/strike_count.c similarity index 98% rename from test/move_flag_strike_count.c rename to test/battle/move_flags/strike_count.c index 0c71d6731..d134e58c8 100644 --- a/test/move_flag_strike_count.c +++ b/test/battle/move_flags/strike_count.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Two strike count turns a move into a 2-hit move") { diff --git a/test/battle/status1/bad_poison.c b/test/battle/status1/bad_poison.c new file mode 100644 index 000000000..7a430086b --- /dev/null +++ b/test/battle/status1/bad_poison.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Bad poison deals 1/16th cumulative damage per turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_TOXIC_POISON); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + for (i = 0; i < 4; i++) + TURN {} + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + for (i = 0; i < 4; i++) + HP_BAR(player, damage: maxHP / 16 * (i + 1)); + } +} + +SINGLE_BATTLE_TEST("Bad poison cumulative damage resets on switch") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_TOXIC_POISON); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + TURN {} + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + TURN {} + TURN {} + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + for (i = 0; i < 2; i++) + HP_BAR(player, damage: maxHP / 16 * (i + 1)); + for (i = 0; i < 2; i++) + HP_BAR(player, damage: maxHP / 16 * (i + 1)); + } +} diff --git a/test/battle/status1/burn.c b/test/battle/status1/burn.c new file mode 100644 index 000000000..84439ec9e --- /dev/null +++ b/test/battle/status1/burn.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Burn deals 1/16th damage per turn") +{ + GIVEN { + ASSUME(B_BURN_DAMAGE >= GEN_LATEST); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + for (i = 0; i < 4; i++) + TURN {} + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + for (i = 0; i < 4; i++) + HP_BAR(player, damage: maxHP / 16); + } +} + +SINGLE_BATTLE_TEST("Burn reduces Attack by 50%", s16 damage) +{ + bool32 burned; + PARAMETRIZE { burned = FALSE; } + PARAMETRIZE { burned = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { if (burned) Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} diff --git a/test/battle/status1/freeze.c b/test/battle/status1/freeze.c new file mode 100644 index 000000000..28a31efef --- /dev/null +++ b/test/battle/status1/freeze.c @@ -0,0 +1,45 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Freeze has a 20% chance of being thawed") +{ + PASSES_RANDOMLY(20, 100, RNG_FROZEN); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + STATUS_ICON(player, none: TRUE); + } +} + +SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Foe Wobbuffet used Ember!"); + MESSAGE("Wobbuffet was defrosted!"); + STATUS_ICON(player, none: TRUE); + } +} + +SINGLE_BATTLE_TEST("Freeze is thawed by user's Flame Wheel") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_FLAME_WHEEL].thawsUser); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FLAME_WHEEL); } + } SCENE { + MESSAGE("Wobbuffet was defrosted by Flame Wheel!"); + STATUS_ICON(player, none: TRUE); + MESSAGE("Wobbuffet used Flame Wheel!"); + } +} diff --git a/test/status_frostbite.c b/test/battle/status1/frostbite.c similarity index 99% rename from test/status_frostbite.c rename to test/battle/status1/frostbite.c index d2bfa6bba..2b61c4d65 100644 --- a/test/status_frostbite.c +++ b/test/battle/status1/frostbite.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Frostbite reduces the special attack by 50 percent") { diff --git a/test/battle/status1/paralysis.c b/test/battle/status1/paralysis.c new file mode 100644 index 000000000..b6edaf263 --- /dev/null +++ b/test/battle/status1/paralysis.c @@ -0,0 +1,44 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Paralysis reduces Speed by 50%") +{ + u16 playerSpeed; + bool32 playerFirst; + PARAMETRIZE { playerSpeed = 98; playerFirst = FALSE; } + PARAMETRIZE { playerSpeed = 102; playerFirst = TRUE; } + GIVEN { + ASSUME(B_PARALYSIS_SPEED >= GEN_7); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); Speed(playerSpeed); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + if (playerFirst) { + ONE_OF { + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } + MESSAGE("Foe Wobbuffet used Celebrate!"); + } else { + MESSAGE("Foe Wobbuffet used Celebrate!"); + ONE_OF { + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") +{ + PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } +} diff --git a/test/battle/status1/poison.c b/test/battle/status1/poison.c new file mode 100644 index 000000000..771d0d2ec --- /dev/null +++ b/test/battle/status1/poison.c @@ -0,0 +1,17 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Poison deals 1/8th damage per turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + for (i = 0; i < 4; i++) + TURN {} + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + for (i = 0; i < 4; i++) + HP_BAR(player, damage: maxHP / 8); + } +} diff --git a/test/battle/status1/sleep.c b/test/battle/status1/sleep.c new file mode 100644 index 000000000..8ef6137d3 --- /dev/null +++ b/test/battle/status1/sleep.c @@ -0,0 +1,23 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Sleep prevents the battler from using a move") +{ + u32 turns; + PARAMETRIZE { turns = 1; } + PARAMETRIZE { turns = 2; } + PARAMETRIZE { turns = 3; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP_TURN(turns)); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + for (i = 0; i < turns; i++) + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + for (i = 0; i < turns - 1; i++) + MESSAGE("Wobbuffet is fast asleep."); + MESSAGE("Wobbuffet woke up!"); + STATUS_ICON(player, none: TRUE); + MESSAGE("Wobbuffet used Celebrate!"); + } +} diff --git a/test/terrain_electric.c b/test/battle/terrain/electric.c similarity index 99% rename from test/terrain_electric.c rename to test/battle/terrain/electric.c index 78f490c42..cebb0cb75 100644 --- a/test/terrain_electric.c +++ b/test/battle/terrain/electric.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Electric Terrain protects grounded battlers from falling asleep") { diff --git a/test/terrain_grassy.c b/test/battle/terrain/grassy.c similarity index 99% rename from test/terrain_grassy.c rename to test/battle/terrain/grassy.c index 21d64f61e..893a30528 100644 --- a/test/terrain_grassy.c +++ b/test/battle/terrain/grassy.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") { diff --git a/test/terrain_misty.c b/test/battle/terrain/misty.c similarity index 99% rename from test/terrain_misty.c rename to test/battle/terrain/misty.c index f60122075..dd6489af6 100644 --- a/test/terrain_misty.c +++ b/test/battle/terrain/misty.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Misty Terrain protects grounded battlers from non-volatile status conditions") { diff --git a/test/terrain_psychic.c b/test/battle/terrain/psychic.c similarity index 99% rename from test/terrain_psychic.c rename to test/battle/terrain/psychic.c index f9f95a47d..c810af340 100644 --- a/test/terrain_psychic.c +++ b/test/battle/terrain/psychic.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" SINGLE_BATTLE_TEST("Psychic Terrain protects grounded battlers from priority moves") { diff --git a/test/trainer_control.c b/test/battle/trainer_control.c similarity index 90% rename from test/trainer_control.c rename to test/battle/trainer_control.c index 2a21dcdf6..cdb06adc2 100644 --- a/test/trainer_control.c +++ b/test/battle/trainer_control.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test.h" +#include "test/test.h" #include "battle.h" #include "battle_main.h" #include "data.h" @@ -11,7 +11,7 @@ #include "constants/battle.h" -static const struct TrainerMonCustomized sTestParty1[] = +static const struct TrainerMon sTestParty1[] = { { .species = SPECIES_WOBBUFFET, @@ -35,28 +35,10 @@ static const struct TrainerMonCustomized sTestParty1[] = }, }; -static const struct TrainerMonNoItemDefaultMoves sTestParty2[] = -{ - { - .species = SPECIES_WOBBUFFET, - .lvl = 5, - }, - { - .species = SPECIES_WOBBUFFET, - .lvl = 6, - } -}; - static const struct Trainer sTestTrainer1 = { .trainerName = _("Test1"), - .party = EVERYTHING_CUSTOMIZED(sTestParty1), -}; - -static const struct Trainer sTestTrainer2 = -{ - .trainerName = _("Test2"), - .party = NO_ITEM_DEFAULT_MOVES(sTestParty2), + .party = TRAINER_PARTY(sTestParty1), }; TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon") @@ -134,7 +116,7 @@ TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon") TEST("CreateNPCTrainerPartyForTrainer generates different personalities for different mons") { struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); - CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer2, TRUE, BATTLE_TYPE_TRAINER); + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer1, TRUE, BATTLE_TYPE_TRAINER); EXPECT(testParty[0].box.personality != testParty[1].box.personality); Free(testParty); } diff --git a/test/battle/type/grass.c b/test/battle/type/grass.c new file mode 100644 index 000000000..6bb016c58 --- /dev/null +++ b/test/battle/type/grass.c @@ -0,0 +1,17 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Grass-type Pokémon block powder and spore moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].powderMove); + ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ODDISH); + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("It doesn't affect Foe Oddish…"); + } +} diff --git a/test/weather_rain.c b/test/battle/weather/rain.c similarity index 98% rename from test/weather_rain.c rename to test/battle/weather/rain.c index b99681495..00ac26304 100644 --- a/test/weather_rain.c +++ b/test/battle/weather/rain.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" // Please add Rain interactions with move, item and ability effects on their respective files. ASSUMPTIONS diff --git a/test/weather_snow.c b/test/battle/weather/snow.c similarity index 97% rename from test/weather_snow.c rename to test/battle/weather/snow.c index 93deb1432..21b7a5565 100644 --- a/test/weather_snow.c +++ b/test/battle/weather/snow.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" ASSUMPTIONS { @@ -81,7 +81,6 @@ SINGLE_BATTLE_TEST("Snow halves the power of Solar Beam", s16 damage) SINGLE_BATTLE_TEST("Snow halves the power of Solar Blade", s16 damage) { u16 move; - KNOWN_FAILING; // fails bc the bp of solar blade gets rounded up which leads to slightly incorrect calcs down the line PARAMETRIZE{ move = MOVE_CELEBRATE; } PARAMETRIZE{ move = MOVE_SNOWSCAPE; } GIVEN { diff --git a/test/weather_sunlight.c b/test/battle/weather/sunlight.c similarity index 98% rename from test/weather_sunlight.c rename to test/battle/weather/sunlight.c index beba0e9b6..9d471332a 100644 --- a/test/weather_sunlight.c +++ b/test/battle/weather/sunlight.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test_battle.h" +#include "test/battle.h" // Please add Sunlight interactions with move, item and ability effects on their respective files. ASSUMPTIONS diff --git a/test/fpmath.c b/test/fpmath.c index 3f583d063..063d938e0 100644 --- a/test/fpmath.c +++ b/test/fpmath.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test.h" +#include "test/test.h" TEST("uq4_12_add adds 4.12 numbers") { EXPECT_EQ(uq4_12_add(UQ_4_12(3.5), UQ_4_12(2.5)), UQ_4_12(6.0)); diff --git a/test/move_effect_recoil_if_miss.c b/test/move_effect_recoil_if_miss.c deleted file mode 100644 index 471c8a262..000000000 --- a/test/move_effect_recoil_if_miss.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "global.h" -#include "test_battle.h" - -ASSUMPTIONS -{ - ASSUME(gBattleMoves[MOVE_JUMP_KICK].effect == EFFECT_RECOIL_IF_MISS); -} - -SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on miss") -{ - s16 recoil; - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_JUMP_KICK, hit: FALSE); } - } SCENE { - s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); - MESSAGE("Wobbuffet used Jump Kick!"); - MESSAGE("Wobbuffet's attack missed!"); - MESSAGE("Wobbuffet kept going and crashed!"); - HP_BAR(player, damage: maxHP / 2); - } -} - -SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on protect") -{ - s16 recoil; - GIVEN { - ASSUME(!gBattleMoves[MOVE_JUMP_KICK].ignoresProtect); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_JUMP_KICK, hit: FALSE); } - } SCENE { - s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); - ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_JUMP_KICK, player); - HP_BAR(player, damage: maxHP / 2); - } -} - -SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") -{ - GIVEN { - ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WYNAUT); - } WHEN { - TURN { MOVE(opponent, MOVE_HEALING_WISH); MOVE(player, MOVE_JUMP_KICK, hit: FALSE); SEND_OUT(opponent, 1); } - } SCENE { - s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); - ANIMATION(ANIM_TYPE_MOVE, MOVE_HEALING_WISH, opponent); - NOT HP_BAR(player, damage: maxHP / 2); - } -} diff --git a/test/powder_moves.c b/test/powder_moves.c deleted file mode 100644 index fea64f821..000000000 --- a/test/powder_moves.c +++ /dev/null @@ -1,47 +0,0 @@ -#include "global.h" -#include "test_battle.h" - -SINGLE_BATTLE_TEST("Powder Moves are blocked by Grass Types") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_STUN_SPORE].powderMove); - ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); - PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_ODDISH); - } WHEN { - TURN { MOVE(player, MOVE_STUN_SPORE); } - } SCENE { - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("It doesn't affect Foe Oddish…"); - } -} - -SINGLE_BATTLE_TEST("Powder Moves are blocked by Ability Overcoat") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_STUN_SPORE].powderMove); - PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_PINECO) { Ability(ABILITY_OVERCOAT); } - } WHEN { - TURN { MOVE(player, MOVE_STUN_SPORE); } - } SCENE { - ABILITY_POPUP(opponent, ABILITY_OVERCOAT); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("It doesn't affect Foe Pineco…"); - } -} - -SINGLE_BATTLE_TEST("Powder Moves are blocked by Item Safety Goggles") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_STUN_SPORE].powderMove); - ASSUME(gItems[ITEM_SAFETY_GOGGLES].holdEffect == HOLD_EFFECT_SAFETY_GOGGLES); - PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_ABRA) { Item(ITEM_SAFETY_GOGGLES); } - } WHEN { - TURN { MOVE(player, MOVE_STUN_SPORE); } - } SCENE { - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("Foe Abra is not affected thanks to its SafetyGoggles!"); - } -} diff --git a/test/random.c b/test/random.c index 9e88035e0..5ca4b814d 100644 --- a/test/random.c +++ b/test/random.c @@ -1,5 +1,5 @@ #include "global.h" -#include "test.h" +#include "test/test.h" #include "random.h" // We expect each element to have an indexSum of 3.5 * 1024. diff --git a/test/sprite.c b/test/sprite.c index f488929d5..51d4873be 100644 --- a/test/sprite.c +++ b/test/sprite.c @@ -1,9 +1,9 @@ #include "global.h" -#include "test.h" #include "main.h" #include "malloc.h" #include "random.h" #include "sprite.h" +#include "test/test.h" #define OAM_MATRIX_COUNT 32 diff --git a/test/status1.c b/test/status1.c deleted file mode 100644 index 3c19d01c1..000000000 --- a/test/status1.c +++ /dev/null @@ -1,193 +0,0 @@ -#include "global.h" -#include "test_battle.h" - -SINGLE_BATTLE_TEST("Sleep prevents the battler from using a move") -{ - u32 turns; - PARAMETRIZE { turns = 1; } - PARAMETRIZE { turns = 2; } - PARAMETRIZE { turns = 3; } - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP_TURN(turns)); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - for (i = 0; i < turns; i++) - TURN { MOVE(player, MOVE_CELEBRATE); } - } SCENE { - for (i = 0; i < turns - 1; i++) - MESSAGE("Wobbuffet is fast asleep."); - MESSAGE("Wobbuffet woke up!"); - STATUS_ICON(player, none: TRUE); - MESSAGE("Wobbuffet used Celebrate!"); - } -} - -SINGLE_BATTLE_TEST("Poison deals 1/8th damage per turn") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - for (i = 0; i < 4; i++) - TURN {} - } SCENE { - s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); - for (i = 0; i < 4; i++) - HP_BAR(player, damage: maxHP / 8); - } -} - -SINGLE_BATTLE_TEST("Burn deals 1/16th damage per turn") -{ - GIVEN { - ASSUME(B_BURN_DAMAGE >= GEN_LATEST); - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - for (i = 0; i < 4; i++) - TURN {} - } SCENE { - s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); - for (i = 0; i < 4; i++) - HP_BAR(player, damage: maxHP / 16); - } -} - -SINGLE_BATTLE_TEST("Burn reduces Attack by 50%", s16 damage) -{ - bool32 burned; - PARAMETRIZE { burned = FALSE; } - PARAMETRIZE { burned = TRUE; } - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { if (burned) Status1(STATUS1_BURN); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_TACKLE); } - } SCENE { - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); - } -} - -SINGLE_BATTLE_TEST("Freeze has a 20% chance of being thawed") -{ - PASSES_RANDOMLY(20, 100, RNG_FROZEN); - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE); } - } SCENE { - STATUS_ICON(player, none: TRUE); - } -} - -SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } - } SCENE { - MESSAGE("Foe Wobbuffet used Ember!"); - MESSAGE("Wobbuffet was defrosted!"); - STATUS_ICON(player, none: TRUE); - } -} - -SINGLE_BATTLE_TEST("Freeze is thawed by user's Flame Wheel") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_FLAME_WHEEL].thawsUser); - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_FLAME_WHEEL); } - } SCENE { - MESSAGE("Wobbuffet was defrosted by Flame Wheel!"); - STATUS_ICON(player, none: TRUE); - MESSAGE("Wobbuffet used Flame Wheel!"); - } -} - -SINGLE_BATTLE_TEST("Paralysis reduces Speed by 50%") -{ - u16 playerSpeed; - bool32 playerFirst; - PARAMETRIZE { playerSpeed = 98; playerFirst = FALSE; } - PARAMETRIZE { playerSpeed = 102; playerFirst = TRUE; } - GIVEN { - ASSUME(B_PARALYSIS_SPEED >= GEN_7); - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); Speed(playerSpeed); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } - } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } - } SCENE { - if (playerFirst) { - ONE_OF { - MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); - } - MESSAGE("Foe Wobbuffet used Celebrate!"); - } else { - MESSAGE("Foe Wobbuffet used Celebrate!"); - ONE_OF { - MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); - } - } - } -} - -SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") -{ - PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE); } - } SCENE { - MESSAGE("Wobbuffet is paralyzed! It can't move!"); - } -} - -SINGLE_BATTLE_TEST("Bad poison deals 1/16th cumulative damage per turn") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_TOXIC_POISON); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - for (i = 0; i < 4; i++) - TURN {} - } SCENE { - s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); - for (i = 0; i < 4; i++) - HP_BAR(player, damage: maxHP / 16 * (i + 1)); - } -} - -SINGLE_BATTLE_TEST("Bad poison cumulative damage resets on switch") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_TOXIC_POISON); } - PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN {} - TURN {} - TURN { SWITCH(player, 1); } - TURN { SWITCH(player, 0); } - TURN {} - TURN {} - } SCENE { - s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); - for (i = 0; i < 2; i++) - HP_BAR(player, damage: maxHP / 16 * (i + 1)); - for (i = 0; i < 2; i++) - HP_BAR(player, damage: maxHP / 16 * (i + 1)); - } -} diff --git a/test/test_runner.c b/test/test_runner.c index d91ad02d1..637ff0ed8 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -2,11 +2,12 @@ #include "global.h" #include "characters.h" #include "gpu_regs.h" +#include "load_save.h" #include "main.h" #include "malloc.h" #include "random.h" -#include "test.h" #include "test_runner.h" +#include "test/test.h" #define TIMEOUT_SECONDS 55 @@ -114,6 +115,10 @@ void CB2_TestRunner(void) return; } + MoveSaveBlocks_ResetHeap(); + ClearSav1(); + ClearSav2(); + gIntrTable[7] = Intr_Timer2; // The current test restarted the ROM (e.g. by jumping to NULL). diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 4de144c38..0ab62f8f0 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -7,7 +7,7 @@ #include "main.h" #include "malloc.h" #include "random.h" -#include "test_battle.h" +#include "test/battle.h" #include "window.h" #if defined(__INTELLISENSE__) @@ -1483,6 +1483,9 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) if (ctx.explicitMegaEvolve && ctx.megaEvolve) moveSlot |= RET_MEGA_EVOLUTION; + if (ctx.explicitUltraBurst && ctx.ultraBurst) + moveSlot |= RET_ULTRA_BURST; + if (ctx.explicitTarget) { target = ctx.target - gBattleMons;