diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index c4404a039a..e838ba1f88 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 a24757fc71..d0653094cd 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 e25695c0b4..51998d7306 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 f107a09d44..3787bbe5d6 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 275cc40a8c..25898a7d8f 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 0000000000..0b3c25266a --- /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 f6f02c48d3..7a9faa5a13 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 cef036f8b2..62772a5c1e 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 056aaa6739..eb5d4c772e 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 0000000000..e3eb6384d4 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 0000000000..58115f5a57 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 0000000000..0a73148e15 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 faac0f6769..54007c804e 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 8be2bc188c..1d755a9056 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 2e11a05107..a9c2b08c8c 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 a3f92da04b..079f1d8db3 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 9c10659875..25a3c3bc05 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 e998b9a61d..3ba7033b87 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 1cde0f9696..589cf397fd 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 dcd764be9c..8a3f86f2cf 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 62d6ba6add..67481bce50 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 970fd8b070..01ac8dd2b8 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 5fea57a2e2..7f4af95673 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 f7ba7165e2..a87da90e0f 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 cd8b84dfdf..7468d8f80e 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 fbf4e288c4..6b91d3f73e 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 8c4d72e5cd..b8ef761d35 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 e8c79eea1d..e72eec2b44 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 1f2d997e88..029980de2a 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 5a3cf00f68..bc4313f935 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 4a4636880f..e7656154da 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 48318a667a..d6f9ce87bb 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 beba096b75..353aa67e04 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 ef41032566..8dbc18d1e8 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 a2b46d1d67..0e13771869 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 489fc31829..5a2859418c 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 4d4c5754b7..90b898ad28 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 be5c10b960..631d11348d 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 0f7dbbf81f..c96502c048 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 de98a823ad..81b1541f28 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 a7b00d4911..eb5e2be195 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 ebc1e7d14f..c2da059385 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 460bbee053..86d51181f0 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 f09109f578..08922ac511 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 e8564de69b..08a5913a76 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 97b7d632fd..bc9564a899 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 349aab6023..c69f945a5a 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 9e86f7e224..a019899a8f 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 774d217a0b..4ddc4ef0dc 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 4f79de9e17..5eed973595 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 44322880c9..0bbc07a982 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 f7de540512..d89386990e 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 1bc44a4edb..a26d52b3c1 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 c52471aeae..9e727e6520 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 0d6fd70afe..3ecc3a5a56 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 911e2ea974..5bca402767 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 d463996452..2d018ed0dc 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 de1ad1131d..3ec4f421c7 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 e6518d1169..9fcc9ad865 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 07c46cf118..056eca0ab8 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 ce0b27151b..d5a073b54b 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 7093ac2501..e1daa350c5 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 01cc73700f..31cf9e47c9 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 60b05d6e15..d5a073b54b 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 18449134d5..481ce9c78c 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 291fcb5c4d..4337e257a4 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 fd9b9ed17f..45fc28a0e6 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 4346651e82..ae275b897d 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 8842864596..cb99b49fa2 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 c10bcedd1c..f32932d95c 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 2c467dfe44..641299c3f2 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 3757537687..4cada4d91b 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 d811d0a9c2..91e26aa9e2 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 46d54fb13f..56ae859980 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 b86aa129e1..b78923ce5b 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 5a9204c464..0fbffefe20 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 349cc160f9..2464e11c3f 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 71820c1868..63c7d94cbd 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 f76e06d7ba..5e2e7657ff 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 5e8a25164c..fb247611fa 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 5b5d14eb67..d50434578e 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 21d1de9475..e959d5ce5a 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 571ec554dc..3da7b169cd 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 a4c787bee1..20cdae5328 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 54b1e97cad..c3f458c9ba 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 566535be85..31db2d70a1 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 b8e03cefbd..8d1e0e5a3b 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 029f399fd3..9149708503 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 896cf9eae5..4f7ad45366 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 37100445a9..24b1202e62 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 00c0f15dd4..fb7f5b63ee 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 5056210df1..3b474c0f08 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 e43bc8141f..ed4f461cda 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 5253b97540..ce9fee4a9a 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 37a01a6812..c1bb29ef10 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 d8dc00c53a..fa13eba833 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 e52d480169..ba158f8641 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 6d53b683ff..b0da328c65 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 14c4df3fcb..4e49d6cc61 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 8ef9ad3150..6a516dc3df 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 7498bf4b2e..df9c4848a0 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 9bdc7826d0..b1643339d7 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 9578cd4a12..98291f4044 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 d34fe9f805..9fe9007929 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 3d259e398f..acd5a4ff81 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 0d552ffc3b..621362d93b 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 e6ce73d7f1..b557f4e96c 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 3f483ff97b..867c4730ca 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 04f46bcf05..5ab63eb079 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 a97bd9a36e..128c3cf07e 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 afa79ac13c..1be08203b2 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 8a81f10a47..a172713deb 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 cf427e1002..12b90b0fc3 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 c7ffc70716..e8422e5842 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 21c6d51eb8..03e51ffe1e 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 586e57308b..b857828880 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 0eb85a1c1b..3da6fa90de 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 24275aa643..2160612295 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 e61731138b..941f900e1d 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 05f52b1751..65e2ab74c9 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 913ca5413c..73dbd1e67e 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 1882af2a97..38df60102e 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 cbf305ed46..372cd2cfec 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 9ac78de2ad..aa060407c6 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 1371d970cc..c6d3c9b95d 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 fd0183219f..8feaf5c8fc 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 870ace9df7..4dfa1df75e 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 09740c03ac..06cd54cf82 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 d4499a5dde..3cce41266e 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 e288beefa1..a1522f972a 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 e7054b295b..13c4240315 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 d815491978..4dd2f477bf 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 12f20e0b95..f724cc3579 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 0a2760e37b..d476cbccab 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 3f83c687ff..829e189e06 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 b6a10ff4f6..b92c5a5012 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 a563c83a1d..556bd42b45 100644 Binary files a/graphics/pokemon/articuno/galarian/icon.png and b/graphics/pokemon/articuno/galarian/icon.png differ diff --git a/graphics/pokemon/audino/anim_front.png b/graphics/pokemon/audino/anim_front.png index c01afc4ee2..cbdbde0422 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 736ade441a..050a7069a9 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 36ac0f287f..63fc819727 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 394b57fe95..7bf36501f5 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 e36621ddaf..72c7628546 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 c2f26aa78f..8747ca0ca0 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 3fb5ece8fc..a43877822f 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 a7df000475..f8318b73b3 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 0b944d684a..bce06dfe3a 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 01364604b5..2dd6c74f9b 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 6f1f55f738..787bc2d605 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 3ef7df011d..5b2b3f3477 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 f53549f5db..9419873b71 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 8c2e76040e..43d4825ee8 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 70dc40912c..e40b726e31 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 342562045b..263c9cddf2 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 de1f8ba730..36dc5a9924 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 e52f6cd81b..bc9c23cf73 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 5df131afd6..eaeaf0c8e7 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 1edcc21d8b..edc24c66c3 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 dcc08227f7..3c6b62c47a 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 57e30c9d7e..2463e13fd6 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 d0ba71ee8f..d015c2868b 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 a333691b72..fd6e286720 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 1830f043f4..7fcf0b9d7c 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 dcd532457e..0227496d03 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 dc02a997cd..abe4e4a2ac 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 95d879f806..2c0747b630 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 ae19dcc647..8a7618396c 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 9f79b832c6..966f01fa58 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 8df7dd2604..62a0cee04f 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 a470abc446..35bfff01a3 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 c4992cb173..919b9d6fd1 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 f4e0867239..9f2c4f3b17 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 d8b85a1308..b4febab31b 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 08a4148049..e29e04a896 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 7b89433475..761e9ec5fc 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 0d2a22823a..a1805b0a83 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 4adbf753da..e10a270d31 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 e794b9d5a7..23226d1e18 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 f052c64357..439a7c803a 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 88c58b84ef..1269d220b4 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 bb9cf14fce..c0aed5b3dc 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 f26e4cc255..fb85ca6c0c 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 f7cf0fea06..579a83d550 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 91b5bca4ba..2981cdbdc3 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 ea607355ed..d77fc41854 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 2ccb745ec4..cd6e6cda1b 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 bf0b5ec9d9..5ad173c5d3 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 b6fb2e3d63..d8faa1575d 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 76233ed905..f16202e149 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 ed1ab8a1e2..a69c4e51a8 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 404f3f83f9..3a36e62a3c 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 33e641c188..138321042e 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 2e00c89033..f44b735872 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 a1889b606d..060726f6b5 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 e97d4d0173..7e803a70f0 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 d7a3efa96e..136ca5ec02 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 b7161f04d0..84b1f7b8cc 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 3927c4e844..b8b8eacbe3 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 e00dc91446..e3ef11dce4 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 fedf53d7f6..f6c91c86cd 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 ad4d79a5c0..74cc606036 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 1f310bd958..963c10fd95 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 3243621620..9a1788b7e1 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 5dcebed760..c04b1878fc 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 01f97d3854..7d03a33c12 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 4d67e46e00..f61201cbbd 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 6e70bdba78..4050e2fc91 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 e881b8c4b3..2c76e7aa49 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 44a88a0c49..e8437e4403 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 8ec87862e7..d605b0b24a 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 c2e9b6cee4..e46c11c0d2 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 e7835a9adc..443ea1b766 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 138ff9c1e5..15704ab54a 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 09a48b67ec..b6309f008c 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 3357a68a88..8385882c2b 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 3a2a60032c..cb766b2a0b 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 89668940d3..366527e0c8 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 2a9f28ad1e..503e7ea256 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 673b0499ea..5158de96b7 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 c1836a1582..dd6d93b8e1 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 e8846cb8f0..a670226c2f 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 1130bf6765..5ceb073fbc 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 83968a522d..ea91d1167c 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 a7e553ed73..5c5fe6372c 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 cc37471102..23c3187813 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 7ae5445b65..ec312d5446 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 042015c6c1..bff68b5347 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 5a4065caca..5898572175 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 63477f9ed2..51fa2d761a 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 e702978781..c534783cc1 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 5c2adc90aa..d75b023734 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 80628c5fae..ece475973c 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 2690e0eb17..8110a7291d 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 21417542a0..679b13cfc0 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 346d48196f..95bbf1c458 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 a2799f1875..bb1f9cdc31 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 a5ba90e182..7b5d21f783 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 18275be68c..02b52f3db7 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 14de7f145f..5b1c1eb9b5 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 94bfea384f..0aa5d66e73 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 0f3514e954..30fe7b0735 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 f96fba00f2..5abfe44abf 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 08c1997369..b8bd089396 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 ff27dbbdc5..07c6360f4d 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 046a0b5a49..7e20774230 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 b427a2bafd..c01c4bf7e5 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 e731b5745e..c3eba0ef66 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 1b5d945f5b..cad0d2c424 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 b08af4bc61..b41d5ae14c 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 601be6debc..a77758cb7e 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 49d733541f..e630f39b95 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 0ce868eff7..03dc7d6ffa 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 fc7e5d4b1a..b3cf1cf792 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 c7c98ae396..81bbd243cc 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 80d818498f..34da0fbcc7 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 4c92f8082b..69e19ff5b2 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 58fc91d190..73f4dcc8b3 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 23812b3272..285a068152 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 011f5ffcf5..5df34f26cd 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 51fba613b5..c0d5ec5e27 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 b576908dba..1e01bc5ebb 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 0f7af594c8..9eb09c7f28 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 88caa4a976..b1f44db7f3 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 777a134fc1..4254bb91dd 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 1f0f993c4b..344ab587e1 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 8790104495..0744736800 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 f436a7df00..53e14e8861 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 82b8ee194c..c68beb1401 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 d496278f7e..6bfd1cafc7 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 20273fcd3a..d68affca95 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 a806daf1be..cd2a5401b5 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 a9c3344a87..a31220dcf9 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 4dd9d7666a..80df38b9ad 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 92a782fa21..2d8ba7ee18 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 a864d6cc35..828c631835 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 03bc685354..0b2f087f29 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 11b7c31e97..7cfc167a51 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 02de0b6085..bbca137960 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 275ec9bce1..947bc46aeb 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 70c8eb1669..61a5457a57 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 ce1c3571b8..c2aa449d95 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 c8db4e5224..51bf4b0442 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 b00c2d4eef..7dd5f48691 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 0c8d2a8eb8..03a99944a1 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 72c2ec4f72..df7eb9d33c 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 c08ed75544..d592b4aa1a 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 83a250b08d..da33e8ee07 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 0b55949ccb..6ac7575ede 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 bc4dc9874f..29a199463d 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 67787ff7fe..92fafe5f05 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 821857369d..e9d219a389 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 ec7c5d1bf2..300257498f 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 055842d3f8..8eaa3f83c5 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 590d2d7394..32aeed0b52 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 61c437bf20..4447621e55 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 c31b54860f..00d049a5c6 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 f9573204f9..1c8e447f57 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 523aa383f0..a6ffcc1606 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 60f0d0c60e..3cdc6e3272 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 f5d587af7e..85debb53e3 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 438ae63cd5..d221810789 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 07fb0509df..3ab471ea61 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 73cf623a8b..bbca57feac 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 9c8677a66a..7738836b9c 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 2df2358d9e..f18ccb7055 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 30895158bd..696f091f4b 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 20887cb4bc..5d6bb799d9 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 ccd0d0ed90..1630239050 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 1abbb8ebce..e628ddb4af 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 349741e2da..128653b687 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 2e6b7a7063..2b7cc3b850 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 1e2cad333d..3f16d65a12 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 0e393f5ae3..f60f2d7925 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 564fa7f7d4..38cebb1d47 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 19a90bdbf7..494ef54471 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 0001e534f0..bb9c68d906 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 698a81c756..ec25c45f36 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 9f77e8feaf..9725be4fac 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 2fa678027c..2b212f8b74 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 991249f0f9..3b4e35d613 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 94768a4e62..4421e6bf2c 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 f543025db1..96fbf7300e 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 5d5236cd4b..a68e2c0395 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 ab84ea0099..bb638bf60c 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 32264265b0..0c9ae12cce 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 6ccefcb1c0..1a4d4678f7 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 fd1ef0d863..afc8230857 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 62034e92a0..72e3270dac 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 3f544a7027..5d0969d8fe 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 6eee06da7f..5b5c31deb9 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 9f01850d2e..6e4f890557 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 106f7e7c1b..7769b4775c 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 dc1645080e..331ebe7e58 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 e523c02e94..6439045eb0 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 dbd8af0a17..bcd7fed092 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 7bd20293d5..d885a9c8ee 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 0433882274..33a9879200 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 d4e9228f13..d0a835fe09 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 671f9c6f4b..81d136ba37 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 36099d42e7..c33a38fbe3 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 0157a181f8..e1747ccc62 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 64797b64d1..e79a080fd4 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 5891aa1434..36192211a5 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 8e0a907f85..f0fb5a29e1 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 88c96b1e38..d1f4345177 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 aa0e66a9d0..7d641afab6 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 0ee514b8a5..b6ad2aac96 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 6c4a0b214a..60ac4ed423 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 d44970f735..21c5eabc53 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 5e896998d9..4469388d66 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 3ddfb464f6..ef9f5a1548 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 b4caff4d2c..a53780d2e7 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 ac686d6895..c28777e71c 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 64bf2a4f1a..e93c3cb39a 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 c56c6da96f..b76657cb28 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 ce9d7056d1..6e81eca1b8 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 0141b57dbc..d2383d1275 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 573236cb3d..c6bd0f23b5 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 9065450f51..c1eb0e0d8b 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 94253e3250..3ad87665a1 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 bd6d544281..1aab02095d 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 73939253f4..eab11dc995 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 aca0c0e98c..8160f3cac6 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 99d285034d..60f8c55b40 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 76bf98f547..1caf753e7e 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 3a5ff2866d..0b489c9684 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 1ab0f89907..e6b312384c 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 800de48f78..2834b278e1 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 ee683652e3..fe7cc4ca47 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 37bb71b4d9..f41009173d 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 94cb032644..854c36851a 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 24595a7d3f..7a62638980 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 ce0226c3c7..6c52063bf7 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 30444980c8..847bc7815a 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 e26c26834c..30f715ceb1 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 2b1a4580bd..c6a736851a 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 0b461ad8f6..87e70c9a2f 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 9a36259a25..965edba8f0 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 5615646182..9e9efadea9 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 9f60ee638b..dac2fa87c1 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 e9c622be0e..1edf27cd44 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 5dd0f4152b..ad74135366 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 b0db5b4ecb..5c83b554ac 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 7a516761aa..6fdfe06bb1 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 4ca04ff1dd..b1d3bcf6b9 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 d1915e4d5d..c7ebf7cc83 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 28ac3648c7..eec03b4f9c 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 db32d4324c..45a645d2d4 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 dce3f7832a..a5c9dfcac2 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 e0e1eb74d1..010d6496af 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 dc726514ee..eb2f9206e9 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 ded552567e..2126c56dce 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 347c5e8215..5415e18ed1 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 e1419bd1b9..cad7a49bc5 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 d365db8308..9a006c855c 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 934438a047..40ce4eb574 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 eda3059dfd..7432ebfda1 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 ab21e518c4..0eddbd1cfd 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 79bfdebac9..6ae1cba07c 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 c72de3517e..c0a7a8bfe3 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 ba180ab6d1..bbeaa1bf6e 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 4a4868c637..a7b9fa5bcf 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 2228e7dab0..20acd609c6 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 beac83f206..5913964547 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 31cc9ae2cf..5819f4dd94 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 e2c14955ed..5df400429c 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 6ce42e42bb..4e6ab68581 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 9a6ec0319f..380f4d3513 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 f8de83cc60..db9466c88d 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 741fc66b78..13917931e8 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 15e1237cc7..0b0cd8c5a6 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 aa10f57c7e..1cf511302f 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 adefc6f994..6bacd750e5 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 a3df512d04..0b3c939606 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 17d8509222..1bcbc97845 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 d7219205b0..f6adb92739 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 a8471b873f..4e6879f524 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 fb7c9a77b0..e206e91822 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 68d27a1965..056ec698bf 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 f6d41a3835..991130d1b9 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 a5c6367b9f..189a8528a0 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 89b17aa2d3..03a6870dbd 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 4daad97802..ba57ada02e 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 b8aa5f37ef..a89d846aa0 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 4413b2323a..51a0b595e8 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 b13d0c6264..013385d78d 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 9d25dd28fc..a0409bff68 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 c54da0871c..f5112ef2cd 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 bf808af507..d857bf65d7 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 db30e2faa0..e00a350ba4 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 d6bc62d895..def997ad20 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 5920cf81a5..af2da8cc74 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 7bf2f1f117..6edb2554a3 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 6560196388..cb328ce9a9 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 4a70c1d369..1b8a276a71 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 2f1c5d34c2..a4eb21a52d 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 6948edeb03..a74fcb9f38 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 7687ea5f4c..bada994ffc 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 aea3bc9ec6..6a231d36b7 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 92fe1abafb..40342dad58 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 29bf9d45bb..4c550c5753 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 48b83f3130..3363cf0c10 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 ccfcd187b1..b868a42287 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 242352f053..5787db59f6 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 0ab423cdcb..dab1b12e78 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 81a77b9ff3..97d36a186c 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 f27aa6d927..f02582cd8f 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 4941cbfe13..9e91a91923 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 ac2d66f749..43177b7d1e 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 b6d39c3bc5..ef617d1ca9 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 0ce2aa23ab..3f86a222fb 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 66f1303528..6c85eb4055 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 b7b688e143..af53690bd6 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 cdfb1f993e..829de5c20e 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 54ea19bf51..695c42cf74 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 c060f7373b..bce084388f 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 bd91f892bb..8c038d83c8 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 c22a71cbb2..87c4bf0243 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 09661934af..781259a2ca 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 0ffaa5d6ef..556761a0db 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 b2852bf90b..72a14d0787 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 ce28c6326d..5724f0e224 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 9f4d31b86e..1ddf5f020b 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 8f49eeee99..cc85ef4c9b 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 2d7eaad618..89dfa4f0ce 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 c5adc4fdaf..26ae9967dc 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 72ae83d923..96cdd9d798 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 9774aa1736..1385881535 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 9d201e7189..143a34e72c 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 35d801bba7..d2e8709651 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 1a444890d4..916ac5c188 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 baf2ae909a..1e15ffd296 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 3a38a686fc..a1ec2764d0 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 55fb119ccc..7e5892cc34 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 02729b4b65..fbe4cc0eb6 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 41702ef911..9bdbdf1758 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 8d3507c18e..917f6173b3 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 bdecd6bb80..7cd114961e 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 71bc7e5939..0afcedc718 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 c3abeb8743..af63d81cd2 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 ccc79af264..b3b460e692 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 8de7373aba..f8fa9fd4b5 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 a46741616e..790ff60b43 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 f1b8f232a9..96ef4da046 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 5d223f9f31..aeb636b0b3 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 d6701b228d..dc865a0443 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 31ca827efb..0fb6941a92 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 89583145be..408a46a85f 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 5e7b00e7b5..f1a8c6e3ec 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 ef4123f7c3..b2979101ca 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 22dbd6432d..ab4c13b8f2 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 29a131038a..f1a1c218df 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 edc2550c2d..c1c2cba84f 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 4a9ea59688..6057034a9a 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 7778e31b34..bf44f4e08d 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 62bf749e0f..807b65150c 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 c94bbb7afb..fef48f1031 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 261534bda1..3d28832e07 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 07069c9516..e3f32d5046 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 34190cd07d..951e5a4a2e 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 de27ebb235..0eb32cca5a 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 c09015a97b..d28b81b6b6 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 e44e4c21b5..b12899e3ea 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 ea5e29d4b5..448077f270 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 74bf767a85..0b3f8de2e7 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 329f6cce92..f8ee0569fc 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 0fcd30452d..296ab53640 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 aa84bc4be9..823b4fd8b6 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 36be31061a..2a4f9ddaf0 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 037125f4ad..8c9830913f 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 950ddd8d06..3cf3283b6c 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 1df32a67bf..b6b64f0375 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 06b0d61ebe..0d22d7f1d5 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 fb93e834f3..e8c1ce511b 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 cfb0fd3dc9..4cfea0dd4a 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 0eb1721c63..49b6fcc4b4 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 f018da2ad3..a9a6ce7fb1 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 b8449589dc..23575eb625 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 e3f408bfa8..3a300defef 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 992481ce57..23e1a2ab93 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 582fc4868b..2d086a65fe 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 bc9287ca54..84c7edb09a 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 42f1f1998d..c37d569849 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 ff938f9b8c..448ba7e427 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 6e2438b754..94bed55fd3 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 04010d15cf..a4ade532d7 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 29e71d9ec8..29cd1f4503 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 d75ef5f666..8ff103bcf8 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 0b5eba586b..ae0f231846 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 17a69e3a46..5236117311 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 4e3f5fc151..8797e491a1 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 3ed62143de..f178578036 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 d45fee6ad3..3350209b84 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 b11d759304..8ead2059c2 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 33fbe01669..df3b0a682e 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 0cbc961a06..0d867ae9de 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 45e2a153af..f5c262a41f 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 30c0530d72..0c49ddaa77 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 23baf21143..d7b267f520 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 cda13aff96..bcdcad88ea 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 cbc2eb5172..28d3cdf088 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 f6a84302f4..8bfc498178 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 a40fe3a561..c1635aa6eb 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 72ad572fb6..9e57565222 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 1914da3ebc..5e25a942da 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 f7d14a07e3..2b3f8f3da5 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 37c1b2361c..27ed10be5c 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 eb13505e72..741c69af05 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 eebad7c15f..941709daff 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 6602e1914d..7fa8675a37 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 58278d0ec9..e137393f1c 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 4ca043a05d..c89df78551 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 522d5a2c73..a317c8ccfd 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 2a7b753ea3..f09c2ea4dc 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 5cc61af46c..a1de7deff5 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 6f75b28a60..5098945635 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 1d4c95591c..773d7db830 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 bc5912064d..f09b978ea3 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 e02ccf6700..b563d4f2ad 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 7f7cea95b1..0be588c43a 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 f6ade48b7b..004fa43bdf 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 0b09eda9b0..39fb8fddd0 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 8b675ef2b4..7d0b10c8c2 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 0b9cc445bf..2e4f6461c5 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 ecb3094787..94115f536a 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 d57abeee93..7297974226 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 7901d09842..88db35713d 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 908670af41..2ea12745ab 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 b6bc74f9ad..4562c6a52d 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 da070ec71b..a13a33a2ae 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 b3a7e55079..e977f88e25 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 bae823c91b..f3c4d93af1 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 02b4a3c673..997071396f 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 7ee9312aa3..6078f20b83 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 76283721e2..b31e4382ba 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 7ea69819ba..7d86019f55 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 3a66182451..a768d71318 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 ab6e3ec9d4..2bf2f1b297 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 c41ce592d1..3792e79f28 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 843650e46a..666cce1234 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 22c9fa50c1..d0a21c0a2f 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 2585fe29ab..d203356cd0 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 03636b72c2..01ccb1292e 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 95f9c10995..09cd099922 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 c0abc2c579..c093ee531d 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 0b5ca88dfb..6445269959 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 2dc09c98fd..e0f804a78c 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 a6a144210a..498086742e 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 28ecb60d2f..548c212878 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 53ccf86a61..fdb83b6dd4 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 26511c8ec1..d2f3e99381 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 6f4e960f3d..0b43a9fe11 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 e2c02e1ae5..14da9a37fa 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 b75df8ce8f..ae34130ee0 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 79b70d9295..e20f53b67c 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 f326190e0a..2ee6e0c527 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 f1bd0699fc..3dbba1a7a1 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 9e54489596..8c423d14b9 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 38a3542b9d..c71aefd3ac 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 e345651b8c..ccfba4b24c 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 bad27cd1ff..947052f81d 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 e587ac46c9..80ccd4f998 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 bed9911fbb..674b93a9c1 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 7822158837..b39e99b0c7 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 de7039aced..8130cb25e7 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 23a0aef198..2925b254c9 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 24382d74ba..c992e69d20 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 64fac10bf0..bcf5707d32 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 0c9c112c4b..fa076e9df2 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 1d388f83e9..1181df89b9 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 aa9a2fe756..07b0c4d180 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 0668bf9344..c4234913be 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 58a634f5ad..f6b84f3468 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 6331247df2..a9867f0bd8 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 ae474ad614..7e7c7aabb7 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 7f7b40ff93..aa6c0c3afb 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 2739870ce9..e5d0f97921 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 c663434ff5..b5984ab4ac 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 25121ae4e9..39d8f90cbf 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 af883beb0b..cb9a177a0d 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 2bd44603e2..ef48adeebd 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 09e8e4efce..a38f39de6a 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 9a58be4205..f2a0998e88 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 c7bd8abacd..36a4373816 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 90c4ee5044..317bd4071c 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 e1bdc439b5..26e060dc34 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 5f23a5d45e..a99506bf34 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 34c40ea8b3..1b575078a3 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 f7a8edcde2..202a2a1788 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 558892d456..b4f98c8d80 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 e5db3ce02f..3c7bf8e1fb 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 0e0e4694ce..1eff24bb31 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 b86a59ff4b..8fef662bbf 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 dd4d48c7fd..f93a8adc4f 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 130379cdcf..da48a53fb1 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 5d9387b432..bda88f3de1 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 295d560f6c..a226588bfe 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 91239a271e..a051ebc2b3 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 6977063a77..6146f18a31 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 72b66eb1b6..5420f771fd 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 ac957a9bf9..1582c0a06a 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 525d0af825..1274c130f3 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 6f6d8fb495..e5eac3925a 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 cf93c30cb0..dd991d0d0f 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 5df0b76237..2f8d04859b 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 85528cb6f4..8a71558f5f 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 c0dc771aef..1d07a436aa 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 a9da17759e..f998dea501 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 cb0511e0c6..dc20418ee5 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 6355badf05..c821637279 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 33f9b2ad5a..68c3fe7800 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 b71d8603d0..c5305dffbb 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 1dbc7ff45c..c713a40754 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 3cdf843a76..0e88b2bb68 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 fa0053da65..507a8fa1a9 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 f8718211a9..efef89bbab 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 799558171e..7e49f9ada5 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 864c009748..0868dd485a 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 58a9bb6748..edaa3ad18e 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 bdd7bb3bf2..8d646cc109 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 97e783fac5..a2133d2092 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 ac34f32f48..c37b6303ce 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 6bfe098b31..e8ddbbebad 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 0a5ed8ba47..4e06a768b6 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 8bebbcccdc..b3460057ef 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 039303e2a8..6aecba6949 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 660fb8a7b5..5550dcb742 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 f01218978f..c1481186fe 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 3348a18fc6..95642bb7b9 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 8142d1a4db..4b3f1a6c0e 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 1981025f53..f67fe05106 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 22b6b65a19..e204107570 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 0cf21324c6..e7939c5c76 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 d506abf4ff..9d0e42c016 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 debc68c5a8..eaddbb54a6 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 bcd47f6ed6..23b231d1ab 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 26ac52a653..27261fd31b 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 3c027b6641..9ed62c8595 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 4099d199bc..66c4fea7d5 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 c175e21ac1..feb7b51fa4 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 677a7c03a6..08b46ccce5 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 ffb363d645..eead3fcaac 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 e718a1cb21..f6073ae883 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 d548bfdead..31bd4a056e 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 2c27e2ab91..1bc4c7a154 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 13c899e835..e9a94afb56 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 d50508c58f..543bcf822c 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 373b453d76..f02ce10e28 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 206679900f..3bab742240 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 123192b813..3489ea9c35 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 a35ddb567b..c5fa46316c 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 61a43193d9..25fffae7f0 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 698e322f7b..d8897e2dbf 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 528d55247e..77011932ef 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 14d69aab7b..5981dee2ff 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 da4955c5ba..781d23721e 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 0dd5954b77..d22fed2344 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 4aa45f8949..59d600e5ed 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 382a122d0f..77ff044b99 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 6255a6b587..7689062fe3 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 b12f5da994..e114284819 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 01c69c5812..313605dc38 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 3927d51751..2a409cb8d0 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 55129fa47b..0119b370c4 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 5beb1643f5..bc74c0c979 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 0a4daf8920..40a15521a2 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 834d6d4db2..1eff24bb31 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 eeda85d9a1..8fef662bbf 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 45cb297fe3..b2216c6e2f 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 014a79107e..fa91e0c487 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 7527c440ad..1512b03920 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 437ead5107..051482fb11 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 3727bb9ecb..99ef63bd7e 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 5c3059bcf7..6025a5c254 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 a7a0ccc582..46e975814b 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 55c9c081ee..46cee4f0c8 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 64a18114f2..7eb3aae42b 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 fec0d07713..fee45d14a3 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 0122516416..cf2b1c4343 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 eb04ba495d..6a0cf7f70e 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 2ef9ae11f8..abbef6aac9 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 f07961c896..e06c863fb6 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 08a938180c..9d4c3367c2 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 01248bc664..7296b0ddea 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 c964005cf5..3a47c01e7d 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 5b59e4be00..b096c87cfb 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 ca4ca7e1ac..5a8df5c8bf 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 eee85a4252..087dc3ff7a 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 731057b0b1..23a4fac6bc 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 52b4759c13..567a58c2b2 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 e0ca25aea3..4516b41739 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 54a6f8b2a2..f4eb658a6b 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 55d2fe8a7a..938f781a56 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 aac4553ebc..448fcac157 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 8a2f1f9ddd..92574be275 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 dc50214bb2..3eb2e2c96f 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 2b66afc4ae..e7385ed6c5 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 705ea4af1b..5451b34a22 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 792c0c0291..abea3122f4 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 5e7ee181ea..3c9b0e3e6e 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 26d9b8b3a8..d404445b8f 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 4996747934..6f8c1beae8 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 6e41d3714d..6f3884ad36 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 8345bafaf7..800e244f5a 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 5aa8c54d2a..30c10eea3f 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 527b26b260..967e2818f4 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 2ede326800..b0822bc01c 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 bcd520eb07..15ad69a160 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 7792edd9f4..9b2c3b9deb 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 d34448d84d..ed27e0c3d1 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 54db617b6d..ecc9977f60 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 d094cd0b84..b3e1a7e962 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 dc56e7dd8b..73f8b0082c 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 52cdb6d30d..b47d8f4a7c 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 578bd2a8c8..bb22f1b6c1 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 bc17b23924..a1f470a0a9 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 39a26b92b9..1b742d4d7b 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 7c68827826..dc7be92f8b 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 5373532bdd..08208af4b8 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 c3df434db7..b13af4f10c 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 26c0cdd124..b1acce4c95 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 72b78d2b35..4336d86976 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 7c3215fabe..43235804fc 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 01d4bc1df3..86d20c029e 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 803bf47920..51e6686d29 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 457deed2ac..1e568d3764 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 83861b2905..d624e246cb 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 b85873593c..6f14a09ddf 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 8cf48c7eb3..3b38ebfa2a 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 ed9bb84f79..9b69765109 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 43a9661b0a..06e67465f1 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 897e0706cc..cee271077b 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 24c9b7dc44..ad36ed9553 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 86cb5e1cca..a61bb4de17 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 6eb0e5017c..97b86d00be 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 46df6bf2ad..7a8ae68c08 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 e2e61c3def..653e4bbae0 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 44032d2a3d..697609916a 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 96a83dd79e..b4a5386660 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 1643bfba42..1b2b00e218 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 5f2705f018..c127c07345 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 8351a2d3cc..a563156e4d 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 4c452f7ebc..8ac7c93f06 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 0e0ca29ad8..dfca5087fe 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 850b65679d..267cc4cb64 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 8656baa9af..dd3087bc01 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 126e47beae..78d215a428 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 eeca99d272..52f63a6b97 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 a86a7d1129..1010130c1b 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 2cd7290035..5aa7b028c7 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 f6ee5fae63..d291dc0e60 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 e10fd6a8ef..8711d30251 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 e1b9bc38a3..c7acc2311d 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 a7c291e0a0..7d6f7f4842 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 71d4e22f29..60d41e2584 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 7e1cf81026..32f5548b70 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 8ab775192f..df533f5938 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 84cce895cd..60797c604f 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 c8f998dcdb..4a07a4d87f 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 aa979e1781..e63f5d7614 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 d7a003e518..072719d726 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 d44fe1089f..8ae6d8f214 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 098f0f93a7..7feb51f580 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 1e28846027..723d0a4ead 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 4c871004c0..8bf0106564 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 f6c8cbed76..c467275429 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 98d7d5b60d..68aacbe37c 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 07fa248b14..925cb34975 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 b0c99a957b..5aad0360ba 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 13ddf7733b..e8b750bd5b 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 b51749f521..50978b424c 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 6f2f54db4c..a526545c9b 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 dd20437d64..11100f7b1e 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 a7ac6fc1b1..2dda2cd262 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 49bd4eec12..d848b15903 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 e891c121b0..036efc2428 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 6c0f29e86b..a9c5d7d072 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 37e32c7848..a6f077bd3a 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 43c311727d..b183d51537 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 7b60073d71..c60a6e80db 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 b7482f45a3..f08426d733 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 9ad529f902..fb3f8ab319 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 40a1b4e575..e7087c8dc4 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 290fd4609c..55e8288684 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 154df24007..36269d18b5 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 8d2ded26de..65bd1ee7d8 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 d2d9c46e41..a4f0255185 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 f792004aa5..4c5275b5ca 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 f0153293dd..bb16f1aa1c 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 700920c5d8..7baa4a45cc 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 89bfa3a578..ccec2bda8f 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 5c17099d29..f48d4e31b9 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 58f005be2d..e634841b32 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 df063037db..c18dd41cf0 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 f81cff2610..15213fa11e 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 d6bd133792..3aa9908936 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 f93622ed3b..2ab4b4d779 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 1efd13040f..2bfa0c1f23 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 82b666f6e7..6677d4137a 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 26184efbc5..68c10aab17 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 5d177a9caf..9f8eca0faf 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 be7866e7ab..e8d8660fed 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 dd95d31b46..a047bcc4e6 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 800ee60971..cb7d9c7b51 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 0726953db0..7eeb59bd06 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 872c7bf337..c4f244008c 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 0f591058a2..87f110df95 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 a2b7e7c429..880ec9548c 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 08fd25b8e9..fa79db7848 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 31b250fc5f..50fa290c39 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 3a91190d50..3be21fb771 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 c18dab54e4..43eae1911a 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 2623bacad7..4f76af315b 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 b68fe21080..7325584618 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 0a87ddf7be..667f0a6d45 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 1644213ba1..81d8b44285 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 3b652d364d..dcc03a1c5b 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 3ca4369bee..73b2ebafae 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 8d76216f1b..fe31f43c4f 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 4ee5652e83..116850706e 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 d15e66ffaa..2604f517d2 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 09eb48154f..8c7b13ecf1 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 9bf9e611b9..ff0eab1f98 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 cefbecd681..3ddc37f385 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 851a6c24bd..2eaf8358b5 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 9ebe2dc705..b530cd30b5 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 306c364af4..de1d6b8daf 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 fe907a5868..670c99a0e2 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 a84ac1882d..f236df74e6 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 c0b2f7b654..161c4bfb1b 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 08b6f534b9..b3fa9621b3 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 9649fcee2d..ee17f90cdb 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 17dd679547..fcfd88dcee 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 dd4c7bf78a..88713ea3ae 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 8e5f55c258..bc39a2ecd6 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 2f98eb7012..a0e102316b 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 a367939521..a47a62f1a7 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 daf4e1c4d1..2bde92b01b 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 dcd77b2539..620a022631 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 0c16f43f30..bf0d8a9a5a 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 76ed262f0d..a3bbaf380e 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 e9d47cb955..8c11e46256 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 27d7fe9eae..b6ef59fd4a 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 4e2358e8b7..b099da31d0 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 9c474c5491..5fed28bc85 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 c74a4e1086..b7c51781bc 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 cbf722057a..3e71a143ed 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 fc7d276848..0cd320c895 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 11a41d92b3..8ee8e13cd4 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 b8be74ead5..a8395c4438 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 9b6f592a4d..7feb3479dc 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 5c70601263..aa3a5489ea 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 196f8fb59c..ec2567514a 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 87e277ac43..5db3800755 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 5e07030887..f3f8ae713e 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 6d2ad2ce39..5cbba5a5c7 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 90a822eee6..de6a039026 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 881ecdd6c8..b192fe64db 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 7a547d9264..9bcc9ea28b 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 7a1e9738db..5904d6e419 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 927ff72200..441e12750a 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 e7b274f331..66c9703460 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 43f66360b5..8c3fb41498 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 b942acd6c5..c4d7eb1175 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 ede23cf38c..a929542a83 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 2df3bc621f..f0bfdcce39 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 2dea3113e3..117946c45d 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 8ae51bcee6..1e4dd296f5 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 a559e340e9..1f93600abd 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 0c3ff9a0d6..64c93323a5 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 e919d96c99..da2701ab0f 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 6e2acce52e..9ee042e87c 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 60f7610191..8dc7970086 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 f0cc12f754..b2da036ff1 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 83bf19775d..4f7dfd5429 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 5c19fd4a60..3e7e58a93d 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 9ec7aef414..23b3bfc077 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 96673286b3..65589b4a35 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 7369ad8556..20b4586766 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 dabf742e99..81e82230ab 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 81f91a5c1f..b211c33cb8 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 c7ef6703fb..d98c0f4c5a 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 ac39adb478..9b7124f7b4 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 3edb7cfda2..de7f101ea5 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 00c123b4c4..a44cf7c05e 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 6ac4a936ef..79303059c8 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 b79822363c..e17e411a6c 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 a530921148..de618bc23e 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 6bd5b44edf..4e37e08138 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 c7593e9bbc..2b539caeea 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 1c36307575..04fbe3d3de 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 102b95035e..4b8a20d4c7 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 a0d4895db3..be02d9f088 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 76579f496c..c4edbffb77 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 8bb9edb837..0483a20123 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 c0a3f90db7..07971e3c49 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 da180d70df..c47a0e86b3 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 df96289d5a..a20c30c77e 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 e0c8425533..6e8ab451b5 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 fdad65c075..f200a3997a 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 a79ebcc7b5..9f439b6081 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 c07c0369db..b83f0d786b 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 c1284527e2..f92294faff 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 3b4b09063a..de0fa6599e 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 49f1694ca0..8787922a29 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 70c320f5f7..6cf90ad665 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 ff33ead96f..f7aa3c2db5 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 67744b6110..b81c2a9764 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 188a3d1846..b82b575e99 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 3b7000c8bd..2b038e3296 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 f52d114bac..1a5f969971 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 233ace81dc..bec411d1e2 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 d24ae825c2..6aba658f6c 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 ea8728d699..2e762a1183 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 29e9e74095..e484e96953 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 be09a9dc1a..0e259715a4 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 26e709660c..6f17dd4ebc 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 f3b5446947..3303792f5f 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 f336271a4f..67f9a51f2f 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 9d02388fd5..286840851a 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 ebaf96ac47..f7f0efb6ca 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 6f3bf1c69d..d39510467b 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 664866b3bb..b412275361 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 03f0389849..af1332ed57 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 19d95ae655..32a960d160 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 1a8dbcf5c8..8dd5d89a0d 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 5871665df9..528ef6fbe8 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 721fbd0a09..e6f4c03f34 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 c0e5a13c38..a175e8a439 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 bfb410eca2..32f8504bec 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 b2a9b9a3c5..4b05ec51d7 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 253d76ec84..51fe324882 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 e45f0ffee8..9d2426c922 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 f074b39f7c..9b86813975 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 d9572f11a1..9e7e9a73ce 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 df4e3a7f48..d563426c4f 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 b912978b2b..d03df57381 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 e3cb32ea1c..eea86135ef 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 628dfdbaae..ba3844f56d 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 a68b81d74c..2b1055d00e 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 7466704aaf..0822a4940c 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 c0c826c35e..98bfdc8b45 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 49b0f06daa..c9eba6622d 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 3e7a4b5d64..6b371184e3 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 7c7be3dfb2..8c12ed4ef8 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 d674dc8763..f98708773f 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 eae8b8e89f..4ad5cb643d 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 00203a3923..c2cfc55517 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 52d9ccf997..e1d47e9b16 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 6f6bb3bcf4..8b57986c90 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 ceb8e1684c..2602bf2d5e 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 6d66df35ca..0400114f39 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 d9714b7bad..50af6341d2 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 88a5a742bc..8ab08d5fdd 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 de30250225..47240bf6ac 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 a335ebb254..d42596a3fd 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 411cafc615..73d663e826 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 b90cc8e7cd..a4e223a122 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 192fc0409d..78275bb278 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 2518aca816..56b0d7a9f8 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 9fdcf04acf..531b5bf78e 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 048e118a79..d10763584b 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 78263a17a6..8260295cfe 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 68ac8d6087..327ab59c3d 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 5f24eaf3d6..1ebf065d88 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 b4dd2b0f1c..705e8265d1 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 9274e4ff6e..4490ae1847 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 1e1b774cb2..79c8b611bc 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 c143344eb3..af822e3f0f 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 9caf6c3b4d..63a96f8cf3 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 34873747f1..ee2de391e7 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 546ccea261..bda1dfaa6f 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 8f351ae28a..7d9b997497 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 55b065b914..e796f88842 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 d9aebe6124..b40b3edff8 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 0dadea5aac..febc2ab3dc 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 946ced50ca..f5be79e192 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 0006a7dca5..afe12d63b8 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 f9556290dd..ebc6e44a22 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 fdefe4a81e..3f096e4a49 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 646fc3ac8f..2099224d89 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 97affc58de..37ee080495 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 f47f52681b..fe862d33f8 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 bbf3898811..f93e3816be 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 1ac0ca0c9d..58f72088d6 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 253eb05973..80a42871aa 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 128e1a0886..7d1069bfdb 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 194f5d2523..3216854349 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 1085a8d6bf..56271cfd88 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 7228a81f9b..eb1e29d614 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 bc8d71ac24..33ea4fb843 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 b10236973a..ba91dea29a 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 f0a928967a..b5a4ffcfee 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 98fc436fd0..c723ca667b 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 e43f42c6d4..5b4fd157e8 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 f6e92ceed2..7fb5721766 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 e0a58bcd5a..a9d84f1c9a 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 37e57fd693..74446ed5df 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 0e70c4e2e5..32e68ddf46 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 f1fca9d20c..dc44067ea8 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 c227db1410..e4ae46937f 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 45e22841b9..bcc8ebdbac 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 6c619ae62b..bc96d2720c 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 c2b5524f0e..c58ba1a19a 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 1d58fc7d41..979dc7eb56 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 af7e4c95c3..2e2cf4fc37 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 f4a0c5cb2b..534856b3af 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 b3a84718a6..88008d298b 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 01cd8a5aac..f7c997cca6 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 d69fa530e9..cf10d24473 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 5f1cd3fcd9..492e0031af 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 fd5ad606f6..eecb45ba7a 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 0ded88416e..19f3e87712 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 824b27c644..83261f8580 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 4d81c70eef..3dfb91195f 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 ef4198b577..dda18023ec 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 dfff562656..038e7d37bc 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 712516238e..d2454334b5 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 469e1d76e9..c0a7557ca0 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 8a1d432f75..d00a529496 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 9154bfe38a..b6cfed49af 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 2aab81411d..c6aa124808 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 7a0929c16f..c8a0885b4c 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 b00659cb79..ee926f5178 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 330a65b8e7..543d241bb9 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 ed198bf50f..e954cb0642 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 b372d9120c..8e37b04677 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 d75ba5a037..6ba8ec1b12 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 8e166305c6..477f26c193 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 fe28a409ab..1c6eee5885 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 7efb0d075e..36d3aed4d4 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 4b5ac7e332..20ede92072 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 d8a100a507..41165aaa83 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 9e9a321839..42e4660fa3 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 c7996c3987..09d83cb95e 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 a5a552c450..280c733fc5 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 f75ea948ba..8d39cfc8ac 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 12b6a19e9d..e483028a08 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 6e652396e1..6aa68d771b 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 0c96ebea93..d6f921cf0f 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 83ff2d8698..b7f6c6076e 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 80e69ff695..d2b7217454 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 774378ce17..f25d1f115c 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 346593f2c0..6a740b732d 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 fc50b939ca..320f570aa9 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 c6933d1a3b..b91e961573 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 2d1efae583..c38e0b206a 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 064e007054..7733f72648 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 f8d7ba1bdd..0185f51f8f 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 10d9c46cf6..ab7b36a64e 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 50be416695..9adccdaffc 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 2b3af1097a..c488a0aff7 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 6f76854c31..8f319457b6 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 d48096e170..e65557f333 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 8017e15177..d0f170ea84 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 30be0614f7..835d9d88a2 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 91be10db5d..b2b03733f0 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 16c19d5873..d9ee550f8c 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 7517c29290..49e3d09b20 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 d59ffd9502..97fda151db 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 4764ad1b1d..f2904a2658 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 2f46d230c5..96071bf8fb 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 7be50f8ac9..4bc3a84cfc 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 dc3a0b5aa4..299ce23a81 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 c637668d64..013cec0b26 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 c15f302961..a85959ee7b 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 a920aca4bc..46a3844235 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 1ae6bbc37d..d68ae5b09a 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 049fd50a6e..347b5498ee 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 d8e11bc251..acfc23ef01 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 3e9d53af5f..ac2bd83928 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 827f2c9266..1e455d093f 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 3c536f7a39..18f9763e21 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 3b908ff8ff..f9698a43b7 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 141a6749e8..25e862d788 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 bb4cc7e3e4..df7a63b612 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 a821985939..41ccb5aee2 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 b03533f26c..ed0dcf279d 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 9d59a86c01..8ea667654d 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 5a53462ca9..7ec290a053 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 aba394cd54..f994a70e9d 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 a023ceeb48..4836770537 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 6b0455cc9f..7ae898ab16 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 0517b47685..af69ce4e0a 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 0d8a7b0b41..d559e2bc8b 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 dac9e0e14f..84041f3b5d 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 cb98a6b1f9..65b3cd7f1a 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 8d6ecd7352..3a065f5e22 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 4a47b28cc0..a137baef06 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 e80b544b4c..6dde7e200a 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 c4a232dc4b..ac914d1237 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 b6995dac8f..639f9b64b6 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 35355eca80..aae700b18e 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 7f08b60b1a..154c55b6df 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 73d1444b39..71b063891a 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 c50887319f..e498c4d77e 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 d702cd687e..03156dfa4c 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 f5fa4d9251..dccfa74425 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 828ebf6337..bd5e0696cf 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 a72906edc6..9ec243132d 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 a637cdb964..245a44e545 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 4c096d4573..d189fdc676 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 4cd2f92560..6351df0bba 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 5e85f3d1c9..0ed740e9b2 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 9c693f27a0..b9c5088ab8 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 5df0f4c419..7711720130 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 8f370ced96..ce6baa5719 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 41ebce29ab..afc5dbe419 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 401779397d..54a1e36020 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 4d05c52ae0..a2c7126294 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 286870fbb4..1f56b8487d 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 c45ffb1666..f4ab74539f 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 b167e996f4..a643a10816 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 abdde9f57e..aacc8f847e 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 6e8d140961..8931caa9f8 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 2327bcce2c..babec3a36e 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 34437b819e..4264436550 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 99a913aca5..5796f153d1 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 593dee12b9..727876e2a5 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 0014cb6042..0ca84ef2cd 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 8cfd5bcd2a..70ab93ded3 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 d5847f5631..f76513663b 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 954f12904b..e0d73d729a 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 3558ebe7da..3934a150f2 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 df38c61513..2798cbdbe6 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 2470244f66..74eba5613f 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 a1589aeccf..b34d3d7209 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 bb547b5b19..29989df439 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 d76767cfa5..cfb2b90fd2 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 ae4b104a73..4dba701951 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 7a6821e80d..d81336905c 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 d898374250..80460903ab 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 c5cf7dea7c..f223bbb02c 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 95f7a21df7..303f139f59 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 d716288752..6d105a435f 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 390a1f24bf..65ef049e10 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 8eb0dec800..ca3daf80bc 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 b3b61e0ddf..8bc726f790 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 2ee1aa15ad..505ddb7e29 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 7ad94d9cac..b7cff5cf2e 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 b70f65c69b..bfa21f01de 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 96c7a5dd47..10a3286d04 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 7dc77464f4..9a5dc75078 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 d6dd17c79a..d9092fa13a 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 cfdc2674de..af720879c8 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 3cbdeabbc3..0a49818d48 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 d17cc7b92b..29bc90518b 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 6242d27347..e0593d53a8 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 fb923c1b8e..da608c63ca 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 e008d31daf..4c77ca1e2c 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 2f7371e836..c51927615c 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 800983e46f..3e439f2368 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 26689b8f63..8fd2fd9d61 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 fea6ff01f3..7b616aba38 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 75eede89a7..1df582b89c 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 122ad9ead6..5615673c38 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 344a05c9b4..e1c34afec4 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 27ba164c40..a8b45314b0 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 c93897c50f..0a7fa97d37 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 063cf09ad6..9e0b568b2c 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 b3d13912a2..2cf035d038 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 0be3a77230..daf5f91b48 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 180217d82f..dbe35aa66e 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 efb051779c..e3aa0efab1 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 b3744af5f3..91c28e259e 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 c6906c5f10..b4e3432f00 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 fb95b93fc3..3327087d9c 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 7a59e4ea2f..d96bd7613d 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 7b72be8c8d..8a7987d1ea 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 5bd9d468b2..4e0ad8314f 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 8e4f4bbd14..cc4bfbd292 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 bbca423e62..8759e91711 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 4e44d84c44..d4d429e0d9 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 81c273f1cc..db0ba42d0f 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 7ef8c62643..60922154a0 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 ef0d090d88..bf3c1bd9b3 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 86eee28b92..e889a80d44 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 c24129584e..bb872e1ae5 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 29a0b916b9..216602d647 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 8de1c2403d..020c549ecb 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 2e4230e47e..9fcfda9f9b 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 7da4da8a0a..425cfe3689 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 4fc3303c6f..16df748110 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 83c5a5e481..ca9aeda076 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 19d4ad9aa7..26b082b61b 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 b226eeca0a..ed83aad7cd 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 5232461d1d..b808e3ab37 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 13d9d75da8..7ab444c0bb 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 b1ea93f4e5..6d250b3081 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 c6791620ca..300166ad2d 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 ff0becb9f9..5cd189702d 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 a741a6d244..57f6c40c90 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 e55bcc179e..3ae0514565 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 ff330fffd2..37fbd4b597 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 5a040c4155..1fe645853a 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 22b7464c0b..004cf339b4 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 1ed77e4cfd..053ce38eaf 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 8ce5c7c845..30f8e8be5a 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 27e7a2bed7..cf39cdcf64 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 d6e912f090..6416369e96 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 3c2802c4ee..0a8a2c2d03 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 ab98dec988..4e08f51dd7 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 581806f3b5..d94a329aa6 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 b0c6667c86..f6ee8d602d 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 01d6563749..7c40aad479 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 e7d76e1c06..17173331d8 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 4eac977a9b..0c12a83007 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 f78bc4a78f..4dec4fa021 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 6f4d96e9d2..5ab3f90797 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 36b8d0ce56..3bfdb77e58 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 cdce48df42..bd070398da 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 3c97a00f98..9fbca55710 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 d1c557a599..258272d1c9 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 13431c7edd..2833c80e68 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 897026d175..42df872787 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 922e41fb18..f591acb210 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 385f5fcf91..108950c24d 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 08aee6e0ff..d4f0111d9e 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 320494a3e8..f78886dc54 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 ca251eda7c..4619fd07cb 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 1ecdfaf8c8..ad74779509 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 195ba2a3b2..871d3dc8d1 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 a22105e3e6..6fef2bef73 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 7c167fddf3..d738475e9c 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 bda12ef6f6..8dc47b9460 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 47c2793145..6bd273d8df 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 6b89dd7c7b..5c7a73a851 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 df89149f42..dc4bd43926 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 c7bc27cadb..029123b536 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 e45979f239..2096f22335 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 4e2c40e41d..e78ff9e706 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 a3e025f8f0..4ea3df19dd 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 6e4d57eff0..45a60bf7db 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 21abfcf27e..a5c03bb4c0 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 a69a8d21ce..c607508da9 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 1d0d44c74e..f0c824094d 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 f588b64e00..78f7fd2696 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 68d6c76111..ef55df0be0 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 918f30c2fd..82a42fb53d 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 91ff072e55..3dd39c3ee6 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 970c6af701..5a6bb2de01 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 55a4995ef2..9c12200f8c 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 538007a90d..7f4b8a2793 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 52aeb8a4f4..d9973d7b50 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 3d1103c045..61dbd3eb7a 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 d612f2abb3..529b7348fa 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 6e6877c846..218596a3c0 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 8819bb9692..84795bfd57 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 60ac4571bf..8cd1437613 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 3da1c7e05f..6097f20082 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 d2fbb70b9c..7d0b82499e 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 9df11e9e8e..43f9475309 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 4c88008c5a..9956c18679 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 5b2fef8e89..06fc1286e7 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 74b3ee7f4d..02b1af6ca0 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 8c7454eff4..561b6766a7 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 32e16ffede..8e83b810a7 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 9d0372729e..a44cd577d6 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 11626702ed..bab48255ed 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 e9ac8f7b50..94feeee730 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 445e684fc4..17813ae7fe 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 02f4476b18..2bd79fbb12 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 7aa3bfc659..f02a4fe7c0 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 d839f3d5f0..8bd05ce481 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 4fb426c040..306924acd6 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 ced952fe3e..1e31ed6147 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 2d257c878e..4300b2afbc 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 d7f35c064a..cd2341c2a7 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 b617fda00e..4443cc1433 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 ff97a7cdc8..ea34c16c36 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 5dc2ffbf2a..0f869b9c47 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 98e140ce3a..15ea0d9427 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 3cc3df3d36..76c5db96bc 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 c0d2d6f9f4..58cadab62b 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 46643f2fdf..8f5deee302 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 ccf3235896..1f0a60ec3a 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 f56d6f8f62..4e056a68a5 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 bdf8de08a0..56d83195b2 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 eb9e49d22a..53938fdeb2 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 d82ce84e0c..f830eb904b 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 72173ea5cf..8b8c6cb687 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 e2bf43c126..6935e996ce 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 187ba5c73b..2da65a2969 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 b9354b7e60..3acaf53292 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 58aa0bce1c..ef6d9fee57 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 cdae389e54..9de86e0c9b 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 29cb34edd6..f15fa6f2b5 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 fa2a83f4fa..79729f83bb 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 d875d454bd..f49964f02e 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 cd10af03e2..241a4efe97 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 fab4ebe33c..ba79a178b0 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 f216ae9bb4..530488b9b2 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 8facf782bf..6e1b7a10b1 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 cbb0752688..7e6cdc4d6d 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 ec05d87710..45c742c60b 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 67c2150761..cdec615540 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 a4d91ef046..ea6d8c10ed 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 a7850d7e7e..4cb8355bbb 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 577691d03a..2ff2b958eb 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 0b6e9c4612..03beb854ef 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 da1ef8ba77..654f706e0b 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 f7b36a0438..1cc3baf002 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 0f6b18425a..08ef79bb74 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 e3724e83db..19f0080b9d 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 47f7628f19..0000576c93 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 e02f1f06ef..97c8fa2148 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 c339231d95..4e9c83539f 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 29d26e65d5..3e5218fc0f 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 431e67fb0e..0f21856886 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 137655bffc..0f76b5c459 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 3e78bfb63a..877f297c09 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 cff0296b61..79c345af42 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 c57726bce2..b549431e52 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 8be09c5da5..766dc2d32e 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 315f327bd3..ae2a2291d7 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 cc8c63fa2e..99ac442d77 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 13b09deed6..762c5cd2e7 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 f79331c253..f70121ac4f 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 456f43e437..2ea9efd8b5 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 653dd9503c..4ce12e84d8 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 eb03117d92..5dbe0c93d5 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 2a1dfd70cc..7268afd5cd 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 37ead9ed84..2c5f696e63 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 2fd05fee86..97ac284581 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 413b989ac2..9c3ddea2af 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 26e9b61e0c..ed2206f84d 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 e2f92824c9..5a52aa7317 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 2247c85e51..56cbe32aba 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 c7d591c6a1..658003aea2 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 941f490933..4cd29d317b 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 cc0bee56b4..33bf9a297e 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 ca8b11e644..bb51350564 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 5988e298b6..0d022d8027 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 63e34da2e2..5e952f1569 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 81ac5b3811..7c88847585 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 2f938d6ba5..ce13049a75 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 4d536460e3..cc20e9d1cb 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 acc9e11ff4..8d594c2fa7 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 bb52cebc09..b3e39fc610 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 d8f489ef27..ecf9a2fa31 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 b827be85f1..103cdd8608 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 7dde382923..d1fbfc7426 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 791cc235ea..f8997ec19f 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 290e6a1016..31c64920be 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 f77e954468..6497773ae2 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 03d2fcd65b..9749b828da 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 497067f1da..a4511c6eac 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 c502d813b5..38f23ec49b 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 06a1bd6de6..0bc7b3547b 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 50ac18c8a2..14d004ad55 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 adf4441a62..1a6c1aa9cf 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 69ebd16c61..ab93fb8842 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 6e0e5f9886..7e3fbf0fe3 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 6d28367031..ce2932e71b 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 aaac4131ed..1c557ec17f 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 21d1c26f75..e5541263ad 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 afbc8289a0..87ba440c21 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 ea237e93da..b7499076f6 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 20eb755624..0c8a907e7f 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 7963da53f5..667d772e90 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 0d55115c59..aefd8b022a 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 254b0de78a..6699ad47f3 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 b75e394844..c8149843fc 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 9ba1d22242..d4c1c8a838 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 8a57a9e368..0a68cc5334 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 68d6cff3ba..61f08f1e7d 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 b4769c44d3..7fbf9f44a8 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 01be7de736..f2882dd048 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 e18f05f96c..c0c30a69d2 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 e33d3cce4f..1ccb5486b5 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 1049e8cff0..6aba330364 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 57391b401f..12437ca3ef 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 2f97afd845..a1e1f96af4 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 4175b5d0ec..494800e118 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 5b775c26c8..35d84e49bd 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 60416d1ab1..bb5f59fd8b 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 8b346daa1b..7250f7b809 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 ee03ce0f78..f4d99ae216 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 677f1d4c7b..5602732b43 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 29ed04862c..10189cd52b 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 a5f34ad256..258030f4f4 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 4a90f63195..2cc69b77f9 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 2ab93c0740..e04d5d4836 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 8747ca4557..e0c7b4631a 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 f88757d59d..5bef712436 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 c897039ca7..9f14452a2d 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 8511142bba..4dea6a47ed 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 28fe47e447..2e6c6565e8 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 09c8451aea..4de84f0304 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 28f35c1473..652bb97573 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 1c8dd71ebb..cadc74768e 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 eb1df98263..1d25c71ede 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 f87f5873ea..8be23d48d3 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 0d54a2a045..71912b382f 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 871515e76b..cc4f6cafd2 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 5a8c265fe2..cb8d66666c 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 2b8ec0748f..3425fd37bd 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 30149ae983..b5c3463648 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 f99ad7777d..2e3a5736f0 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 b991819727..6a97527d0d 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 e09d4c9fff..6023baa5d1 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 fc060ee36c..2796df8df8 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 adf34db0a2..d2b6b4cca2 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 ef7e2e2a04..c6c61239e0 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 4b7b6e25ed..fbe467fb6c 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 3e94f84d7f..24e768d353 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 c618191702..29ef5dd7b6 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 a902b57167..1b6e29bf23 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 24ce090f03..48da3c3408 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 29868c04b3..b4f341d7c5 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 c6490b9f18..90ee7d0409 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 913974878b..036b9b3719 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 7967e05d97..20b840401c 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 05c4f397b6..71dbd1a46c 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 f89c896832..b6f6c55264 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 d1cc705b16..a080a77f09 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 8e51a52868..f73999e0d1 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 062de5bbe0..893f651b03 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 dc03adef1f..631ab8f094 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 cf48223162..743e11e056 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 8c79f916b5..e94f519799 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 8ccb19b479..bf3696a2a1 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 3222647048..afdf38c6a9 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 6a68e0acd4..d17f1dc635 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 a3b8ef3a8e..7ff67638d3 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 02ea3ad918..a5058205ec 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 85cbb86d42..8ae4313374 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 821fe52128..7f5356abfe 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 5908770b1a..f6b98c949d 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 914f620c7d..4b4c47e885 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 88b043558f..7b9f905cf2 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 7d4b471d5a..d8ca5daa5a 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 b08105e308..c913230827 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 3bbeb67226..20887b0aae 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 0698723bb3..d770f9910c 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 8d0c231691..0403e37ada 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 fa54dce1d2..7a8fe82244 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 1dab6bec2d..60348197e4 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 0a5c93d312..640441c223 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 805d96efb9..3cd8f12105 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 8c8a28c8d9..2d4cdb6074 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 2ff89045de..535e998b1a 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 7274f6250e..8a8b66f913 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 620971b69a..10b8e11c7a 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 b46614b960..19c543b8b5 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 6c70c85787..59c8220e3c 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 3765f8c52e..5fa36dce22 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 99daf54d8a..5d7450fabb 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 4a751836ac..3d40c97448 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 d6fd85ba22..85e78ec687 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 af8009a986..cfb4c06647 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 63569d6477..b8af93ae6e 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 4b03fad873..6b5559823c 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 8d931b20d3..4b8c0aab20 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 22ff1b8331..1c553ef2f6 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 fc0d371862..3f0531e117 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 af616882cb..486ba64af9 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 9d884866f5..025e630d40 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 f6c4215031..e1b35043bb 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 d0ffef7d4a..7a45ee78dd 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 859947ae1e..c9230b3686 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 67230e7204..fc400281d2 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 1db70af68d..b80791d1ff 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 557f31b906..aca8179e69 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 127b841478..8731bc0a9e 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 d324fbed66..ed89f64e4a 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 234741d74e..f688174419 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 de4dc940d6..5bfe6a9858 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 b53d4f9376..fc73934b20 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 5155142177..dd42d13b68 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 8519a4ccc8..5414fda626 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 012b943878..93e673ad63 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 a1d3676e9a..b9934eee73 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 beab65fbc8..a90d766bb7 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 6d211ba18a..701457ff3b 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 f5992b1972..9d93a03cf8 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 58b9da75cc..345f6359cc 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 4a1288465c..ce1293dad8 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 2ca64c655e..9777f648df 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 a6466e6347..76f8e83ca9 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 0bc6dc449a..dcb98671b9 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 e5313ddaed..fca8eeffeb 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 afd2815e30..435869073d 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 c10eefa254..283dac52d1 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 531bb5b7b9..014ac7244a 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 b0b0e0fbf5..c25dd02a67 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 6daaf349af..d4ad43c9c8 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 4b2d203f5e..603f1e0295 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 2e8db428de..ef33e760a5 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 a2b404ff56..e72507df9b 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 4b7b62f9a9..9a31622111 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 ae0bf37707..c98b265f37 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 c1be595cee..4db3ea3a07 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 cd790ab712..da44901b8b 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 4a6107aae7..bc83adca5c 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 314a0da42f..a01611b2f4 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 fdcc7af078..fd9ac27e94 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 7643da7b4b..6bf9dd059e 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 40934c36db..7b7dc44fb2 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 f7c37dc030..5fdd5183d6 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 f4fae57e39..e9815f4894 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 61676c01b4..8eb2c5da1c 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 6c2edeed98..1113feb24b 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 cc901739d9..69e99db6a2 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 652a08ebcd..cfd9e37b41 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 7af392b2bc..3ea2a868c3 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 6293711c4e..76acb2c823 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 37cb053275..866348de4b 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 b6ddb3d97e..7e53e86b2d 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 5ac013d4a0..e7fb5674d3 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 8514a02eaa..384e5aa3e2 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 0cb17213f1..41a6fba6d9 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 c6f11d6c63..c824de1cd4 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 d44da9adcf..cf9cc1317c 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 684f52761d..b19c8fceb3 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 059778897d..2455232c25 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 7cac134eaf..bce83460ec 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 ee50483e18..5ab49d5576 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 e0f228ed18..6fdec15ccf 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 636fc04835..afe746eb69 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 685379f2be..692470be7a 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 188d17827a..d375b55d42 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 d59b3a0370..acb021da48 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 d685fd5b8c..5dfeab7d78 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 f05c199e5d..0dd1d82188 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 dc6954175c..26889e2d1d 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 e736616483..1eaf806721 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 10cc39db43..fa70c6b6b5 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 511566d9d0..59587eedba 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 63dde56e2e..dababcd31e 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 d48d1aa743..7cf58872b8 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 a003473249..a3b532860b 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 3929aa1a8e..1e1fef9e7c 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 df88210769..d2785c36da 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 528bb4794c..97ebff0de7 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 5069fab47a..17fb4f96bd 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 b446435740..e4d9b1e43d 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 3faef99bb9..1c7d9610fe 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 6982cc35a0..53b386c49d 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 6abf2ed7bc..42b7f9cc7f 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 4f9bc1fad9..379bd27f91 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 17126853a4..4e115005f8 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 3e851c5efc..84eafdae02 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 6b1c52d604..9f174a5979 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 0d64e3aa22..d4b80eb6b4 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 22a12d4f54..ff750a7cb6 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 af728214fc..acf5ae7c20 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 7040b58c89..a7ad396e73 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 c3d8809937..05c6ee6db4 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 4a8a7db601..5292f0b549 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 1333494701..f49558023e 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 0aba58a228..4c6c84229a 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 d3e02e56fc..bd48e34c8f 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 686144387d..b3be041eac 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 a810d9add9..c04a8b3e7d 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 3010087345..fa14922c63 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 fe451800f9..fa30531970 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 608cdf120f..76a04a67fc 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 64961fba8c..c70198db7b 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 68d6754d34..aad09e4968 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 6640f3cbc7..d5ebef9a6e 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 59657b7f1e..7649fae75d 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 896c1858ad..cd84b979c4 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 8bdd97c5e6..8147ad3289 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 bf33e8df69..900c80de0e 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 bbaaa33d99..674c6b6667 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 aec286d7b3..2deab236ab 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 32276bfac6..e910d8e297 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 98e3e50d2a..83d35b036f 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 ab857b0b6f..dfee663567 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 6cc24a8265..d908b50511 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 a83bb8bdfb..f796174f24 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 0b5fb53da6..67cfc7f407 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 6fe0192438..9e772faa41 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 91b73f07da..2ba5066c81 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 860b6b6418..598dad2d05 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 43157c337d..98e9b6e117 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 24f486df6d..90f55dfdf7 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 9750191180..fad59cf11f 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 3067e7e0e0..ad5f379da5 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 661ef00c7f..fec01e631d 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 11460701d0..3271cbe177 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 9edf830688..0e0b54d6c0 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 857bbeaba6..97eb281ed2 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 98c21ec46b..ce0113ab22 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 d63715cbb0..b0b6caf92e 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 72620db842..bd97d354db 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 834cf2ecbc..d6c059b3f5 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 5fd6d871d1..454d599481 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 ea35006b60..557789a6b6 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 85157ea9a6..9d1a9181d3 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 960acf04a6..89c587683a 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 ceb8f02923..f2942a2cb3 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 c36a22eac5..2e99bdc5e1 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 46535bcda8..486dcdebd1 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 793072c8b5..4d1330b65a 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 4b79f81791..1ce9b5a57e 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 7ef0fc8fd5..f309898b27 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 410a031e7b..03bc10b0f4 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 6e6af15db3..e59ff75f0a 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 9331fa236d..53fcc1e18f 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 2546c8f6fe..47c3031a1b 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 b9fc9d9d3b..4d86748a12 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 8782472e84..9aa8666d11 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 fdbf9b67af..d1ee4ba2cb 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 a6f6d22661..6ea99b523f 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 0fa0dc4465..a0f00c0a6c 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 2cc640caa4..0f469cbf5a 100644 Binary files a/graphics/pokemon/moltres/galarian/icon.png and b/graphics/pokemon/moltres/galarian/icon.png differ diff --git a/graphics/pokemon/monferno/anim_front.png b/graphics/pokemon/monferno/anim_front.png index 41f3547dc0..7d4167c6b5 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 4290da6ed9..502e061c2b 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 f8184539ba..2c0e0e8134 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 ce7dae4dab..73c2c96425 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 e5ed1bf7a4..221ebe5457 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 31fc0f739f..c646a8fe9f 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 a6ef7e1b82..980ead4179 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 f33d7b797c..54112d6b60 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 26abcd981a..722b1acd93 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 6874b86fb6..acf1de9564 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 d1aebd52e0..93284f87bf 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 d978edf418..240970e835 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 d66b3232d2..94b69b3223 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 2ad5674d64..b6503b42fd 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 3712abeac5..ce5d70ea1f 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 48655beb0c..28b4aa04c6 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 03a017e7b2..6e308c514e 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 782035bf90..c2c7c06ee4 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 3582b8d77e..7b106384cd 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 1ff25321b9..e5db5406d9 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 e36e9a183d..3c86f31cca 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 77685f5634..f13b60b4da 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 27bacc3a77..0068d83211 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 5986aa446c..a8aa29e32d 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 bd5f4891ad..0447096ecb 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 f64717a76b..dbc9857e04 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 3c9410db9b..3f00039b60 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 9710d2288c..7d3a6f6e49 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 04a73cc190..0eeb5e794d 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 7e3d763fe8..2ad2575612 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 25ba67a46e..3146346ead 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 011a70804f..243561d491 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 d1f5217128..ef2c2e7674 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 c3064446f7..d598fd7283 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 22c34cdceb..1a197e4695 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 9dd40ec5dc..1174fb3838 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 af000021f8..9ed2883f11 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 c2f1d53797..a7da2abd8f 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 c5bbc1150c..c7d84bd9b3 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 916114685d..c5a2d581dc 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 abc7a6052e..5866a2d556 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 e2e1a0cbdb..2cb23806a6 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 26869b23a9..cde9aeeaed 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 e658a72f1e..f75dd3b0cb 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 b07b576535..0cbb3a80eb 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 fbb0ab2e3a..ccd5aac7ca 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 a588677d05..cc63efb3d6 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 8fecf12d77..23204c5d18 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 fead4bed1f..be5542c967 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 cfb53a18de..3ff857f3d0 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 640f4383dd..f2c7789640 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 fc121c643d..9974c437f7 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 780813bbac..1d4283fddc 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 226988eeec..eafe60271b 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 1a29023a03..9aba8f113c 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 b0777d878f..b7095d9c70 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 2615b43a62..a085144749 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 093f5c13e5..6291e963e1 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 84b8d0f6c6..e78c26819f 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 e4d7cdea6f..201c7fcc70 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 0a8f23915b..58c6901a7b 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 7271e6d9c6..243b801a00 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 3d42bb57ba..0d1d7a6f64 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 3901338e37..fbc98e54c5 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 08199f12a2..3af2e0347d 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 4f35d52180..a097c3a49e 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 eb6b3a1370..95e0c30e58 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 402fd06428..2f8c516aae 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 6f2e8898b3..b90fb5570f 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 7c10b617d0..722554334a 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 dd3539ce42..6dea62a971 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 0fc9a65094..0b72bd73da 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 aef34cda61..5564859ed5 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 711acdb79f..3261195bac 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 843ad1eaf8..da856f827d 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 f5a23ddaca..2759f85b5e 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 1d96a737d9..c17843af53 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 c8fbc09a7f..496336a59c 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 bab15d82f2..e49d1f4514 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 ee67585e03..d259eff81a 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 8aece1ef78..94847a3c93 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 3ee49e0aee..1b1a13d47e 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 dc2f92d815..8901b895e7 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 a668ac118c..b6d01ea679 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 4c4ca0cc25..aaa9beee95 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 3246bb9fbc..a4dfc76325 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 512060f007..379bb93e44 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 5a733d9fb0..6e8f855d59 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 110bd12d70..261fbc0982 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 251d56791e..99d215b569 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 23b118047a..4247b280f0 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 c20553d0e7..149d868a53 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 6dd26f2879..22ae9d2c93 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 8bfa8fe271..71ac99d5a7 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 06ef7fc492..3cc6d2db5d 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 f1031e7208..247f7ad87c 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 109cb23dba..15044635d0 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 021c157753..0153dceb73 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 dc02c553bc..7a30db18a2 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 d53bbbe836..bca98030c0 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 c4ed360b04..30b7b2b6e4 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 3d8f9fa57a..1e4e23a039 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 66fa21d1c7..3900e31bbf 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 2aa500da71..764d6ecc0f 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 c068bb0aa5..fcc5190a31 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 4432bd1840..139eee7e0b 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 ee3641d7ab..90e10f24a7 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 3f0244eb58..e8a51e7e56 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 aeeaddeb51..154069bb08 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 cd99373b86..e1cbd1b284 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 bf536c78b8..2bff316f64 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 bf83f42e7b..4bb333c106 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 9228a62154..cf43715c8f 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 593ba9fd2b..6703a7ca95 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 1800ce0cfb..524fc6db2b 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 ada3a2b3eb..57b8ac19a3 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 519b6398d5..c7fb15849e 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 843914a55e..47edf20f27 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 564c0f3d22..f7e1aec68d 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 543024873b..dabf208f14 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 247e399d5a..4cf5c9d665 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 71db276f7c..8b82826b84 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 5ddfa0bebb..63e8d68512 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 30c3a26452..7458d45c1f 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 f62a3b4a40..a524e2b16c 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 6a823cca81..d65b3e5a17 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 d3440c67fd..e84e16522e 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 e816ccf7bb..42d693d72b 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 7a62ec01e4..2cf70e6bf1 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 e3cb54d959..1b72c44396 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 3a361f8f59..4a9e34afd3 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 ef195d5de7..cd0322d4f1 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 b7f54b0724..b0ba3510c1 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 ecb749e40a..da7abe984b 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 9d05053b6f..0fa7b81290 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 6985abd014..4d2c29ca33 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 818aede52a..9e8ddbed61 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 6dce8ad1e3..dbdf864a9c 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 a2493fcca0..b41b689eb9 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 a11934772b..80936904c0 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 8dd9e05c88..9e783e0b2b 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 9184bcc8d9..f9bf07e55d 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 e4950d7dd0..79670b0601 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 e607202ee0..fa6f3121ab 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 d39d9f0ca4..661013b728 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 34753e2f71..8af3f81c89 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 6591dc8c9e..ca3fd09cfb 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 f89c560ea5..d9973de3c0 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 4e463f0dee..73c70a6949 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 53196658c4..f38ba8a23c 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 49b93b4c0f..1c3bbd210c 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 05d4a96f2c..3147470d64 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 cd70b70388..772e8c864a 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 6ce357d5bc..c80721be1c 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 9a50b753b3..d22845d345 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 55ff0914bf..3131f2c205 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 9762b21ccd..27fba830e7 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 34efc42ba3..6490991b15 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 9ff2ec6fac..c035d93d8d 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 ce8c3bede5..1434d92897 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 dc0c02b7e2..b19f8338fd 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 b7ae11d245..86f389bb87 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 1d53054679..144466d0be 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 4d1fb491bb..3cf38acb1a 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 068d4f6e6d..1ffb29051e 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 ae6c0222dd..84233aa357 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 ac92d316d3..9428ad780e 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 342c2a2fd8..ac874976e7 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 d4c0044d9d..9eb2397d1f 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 6aa99dce70..90de0b4089 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 eec69b308b..e5fce534b4 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 1d11a0f83d..0510243a90 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 5f98cee728..d5017e1ba8 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 b52ae35589..ca1e09dace 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 ff5d42fc2b..b22fccb148 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 ca19353cf4..34c882480f 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 08c060f7a1..731359747e 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 d5b733479a..9a99b14b80 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 3feef164b5..963b1485a1 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 bc8802b1af..3a5d5a8069 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 0d82fc25c7..9aec34687b 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 ef2a4d63f7..a2ea6ecd90 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 c49499b9dd..e27f88bb02 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 d3a1c59b46..94ebe658c2 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 7d168e462e..6daf24ccb6 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 082347e520..68bf54bc48 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 47fb552554..677b142131 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 6c259fd09a..0d6c4c6d61 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 46cae01bde..7fc6d3b724 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 717e9b131c..1bc44f8f23 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 747cb8edc6..703944b41c 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 320c012d18..d99325b030 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 69a5cf6105..7fb23beef3 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 40ab5c40f9..1a116b98ab 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 f66afda091..2544418b30 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 7607e1ee4a..fe93bd3172 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 39e4aafafd..cdf20d0f7f 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 fef220dd2b..83bfb2dc44 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 a72048df52..75348250d5 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 c805f3204f..72e34fad13 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 90ff463731..9dc29f554b 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 caae1e99e8..7c004cd110 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 073415db2d..02c30235ba 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 ba2fdc3fec..0fe2913277 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 1afe91ff5d..f397532664 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 c1e6837196..af9325d379 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 6e9c931ee9..11aa904fa3 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 31f3939726..480c6bf5db 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 9929d6982a..35420cd10a 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 f6eef6dc19..baaa2b3a8f 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 8d290f64d9..266e0f6621 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 4a11272c9b..f3a5b536e2 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 6afd28aca1..9cc3c9d6b7 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 4ef2109593..fdbed272c4 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 4ca4d8210c..4ab3a02a4e 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 842cce89de..a2b680ab03 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 d70eb2077e..a8d31b659d 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 f33717ba31..559ec09352 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 8ff5e6c13f..2a9f7c5887 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 34369db650..183b1254b3 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 a614a8a374..69f8ce299d 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 034a265fa7..19eacf1fd0 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 ba951b145e..948738f100 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 8d43310e4b..32cb6e1f11 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 c387bd5b86..43afea2f11 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 5b47a0d5d2..d97921941b 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 6610f19da2..49fc12c0bc 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 739e474e03..43aaed915c 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 6f6c10c5d6..7e0de36956 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 6c8b9ef6f0..30dbaad1b2 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 8281977d45..1af35cfe23 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 76890a127b..77cd7c2ba9 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 8fc81a972a..e5510fe080 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 e5b56c3ec5..c3aba700fc 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 da639746de..4081f468a2 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 37d1fed4b2..48ea08bf68 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 e5dde5bb15..bf1c539f88 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 7b3f42f93e..134a788b53 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 17e0dae24f..ff6e494b5b 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 2c830fb0d6..78f10f1578 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 9c706c221c..78f8ad2898 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 af75b2b513..89538a8612 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 c911e36cb3..27780be98a 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 64ed04d267..c18078cfd6 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 f288634133..9f0166b3d3 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 ca9532541c..64135c13fa 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 8f402fd447..057bc45b8a 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 0f8e1ee9ae..961611d28a 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 eebce0a0da..6965900761 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 b2149ed68d..524daf09fa 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 3dec3e4bcc..91f26897e2 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 3ae7694553..02b6dd7b87 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 6db6f66df1..030eea3c14 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 973b1d1408..a16e45512f 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 f13c8e9d14..291e148f1a 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 3c52661e41..b02c23d17e 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 f7f9d30a1b..331388aa68 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 f8bf43624a..a6ecd98935 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 e2973a288d..354d7d37d8 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 3f2de289f3..e2704f189d 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 538abd92b8..e90dde8c41 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 d03a69ce3f..fd509029b6 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 0e66a8b70f..8f984d7965 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 ac2a4bed02..ac89146116 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 badd03cd06..f57585d8f4 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 6ba222b447..2b495dba80 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 ba6d5b6d4a..57caf09bd3 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 d2d18cf1a7..1ed77ba1db 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 98da2cafb9..e4a7255bc6 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 5eeb8a1c23..83ee49d745 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 9ed841cf01..35b92aca3d 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 ce81a914a8..b63fbb9ce5 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 b216d812b8..063355f281 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 7015d806ad..65f062815b 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 fc3f513ba2..95042adc0d 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 37b9d6b82c..dce46b073d 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 fc41804ec6..c40360146d 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 0b3c3d7b0f..ffc6a38a48 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 40d9a43b63..b0e5aac1cf 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 762909494f..d85f353b2f 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 aa84ec0de1..c0b0e62229 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 09bad1cd36..3fddb21d15 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 9a526f806a..065f2ac3c0 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 1d5cf71805..e3dbb03ce8 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 74ad4ac812..b0c6138b14 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 a7b4d27dfd..d4c4f7280e 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 ac25d75a66..741a92a08c 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 46d11fec3e..0fcd67b82d 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 67004c7133..5051a0445c 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 991318594d..0e39599c9f 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 4b549c0029..9e0f2ed479 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 e1f44100ad..ab89bed15b 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 3b92345e72..cbfca28177 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 b379f1fd22..53afd3c7d5 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 c052448056..05615b431f 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 d68d213e0d..22fba612d4 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 b32f2e0984..abb69bd7e3 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 b999c11da7..64f3ae87ec 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 9f27e92ba3..fe45584312 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 23a535079e..5ef1f35211 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 9991cc38d9..3db1d91a5b 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 22bf847efe..d049c9cd61 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 d2af3d8c90..59e2afebe5 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 99c81ff106..b778aec8ad 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 3362dc38be..46b6da0d17 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 d4bf054bc2..9a87ccafdb 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 e91254f8cb..6e934038d8 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 84f9b41a4e..923ab7ef8c 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 7274f5f1fe..3e66227b49 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 5e72054c22..c35b74d2d9 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 9d79f1db30..bd6c331033 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 870792e2dc..2fd12a3268 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 53d6356f7f..d0cf9aecea 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 f494bd5e86..566ebfecb8 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 6b90165083..292284f64f 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 0a6d62f9cb..0c9493f1f5 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 16d5181ba6..6ec9f0d121 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 4589a98876..8f2bf4f77e 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 28fad4e3e4..e8597f6b6a 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 ec17476b62..3baec01514 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 7bb279f8f0..e203b8e0ff 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 17a80b2e18..d642cf12b2 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 44e61d033d..85cec29524 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 fd3e1c0780..e5880490d1 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 4e48a7b274..dedb65a08b 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 015a685081..ef74715fdc 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 d1ae31aed8..1e9e677301 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 4c18033e79..b4180798f8 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 0e66817f42..002f28843d 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 9cd1081b4d..1a7f562910 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 d224fe6c9b..bcca97230a 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 43d030bde0..4e1ac3b901 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 00513cabe9..561b367a76 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 4bed36444c..855d8aa43e 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 c14ae4fb40..1f87ab0ff2 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 7e2179a0b2..56e9584cf3 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 5151358e52..8f51e6fa70 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 680d2be4aa..bbdbf0452d 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 dfebbfd966..e4db713ce0 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 416f2cb757..68ccbd7eae 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 88ec2f765d..61690764bb 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 10a16be3cd..fa1e57e75f 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 7c883493f3..c6e09e2d9c 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 5417f482ce..84a03b7e03 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 96d4ff503c..ce3db50096 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 e699be5985..466fc91054 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 73ba5c163d..b86bd2a0f9 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 f1f689db15..eebaecaa28 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 07a2e5a0da..674df91b8d 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 1eae72417e..f17ed1e3fd 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 22c86876eb..dd44327f64 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 e2cdb0936a..d36397ea6d 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 014c60ab50..45a1063b3a 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 b806ed8e1e..4da26f34fd 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 b7a2217504..de161303d7 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 7e6095a55d..ff02e8d950 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 7ce0132406..aa640f6c0b 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 c28d95a370..6712078e3b 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 9e0a0a1976..2e3e04451d 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 9880403392..9a1027dc34 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 a6aff68c59..6afe02dee0 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 8274a11ecf..14eb6e1398 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 41dd53e7ec..ee8ea0fde7 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 3fde9cf13a..b88513904b 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 132fc1364e..0c961901ec 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 5347898d56..26154c2ace 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 c0de3bcca4..3d12f6a116 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 030698c14e..5e6c2b9ff4 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 e470f106af..6936dfe88d 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 0e5c3e0e37..624df91793 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 78cf7631b1..1651d9e0e6 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 756269fac3..19d8f25f0d 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 53d0121efc..80df666319 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 7980abbadd..abb01054a4 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 22261d63be..20c88523f6 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 40b0b849be..d005cf7e1d 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 99d5927650..5466c93f49 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 23ddf1fa7e..59d4b43535 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 b4d8b75a81..8cf42c3a02 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 bc4c0424d6..6a6abcfb73 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 6594ba18bb..d29868af5a 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 5177b62f93..385105d291 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 99286b1aba..070a852664 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 582b875bab..15d47d3149 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 ac7b547410..0e5f893b5d 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 bb69671308..cd566de083 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 fdf95be286..1fcb125675 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 99c8a15b28..3c912158e3 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 5ee5dc37f7..834cafb289 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 2a58834a60..3e1c9e6635 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 de3f07c2e4..34d8eda272 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 811f88d291..58330ba983 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 5db4665c29..df065bf1f0 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 7ec1a597c9..78070b1a85 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 e9816e59ea..abd13ec131 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 a55c358abd..9adbea5028 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 e879ee424b..0d72a91bd6 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 74c3b847bb..7ea9895e56 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 ba70a67870..509c47662d 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 f0154de8f4..4acd9d0404 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 df0cb39482..749a46a485 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 11f8feac13..4fe3760774 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 002285f5a3..3131c485df 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 3812d02ddb..dbf7f8bef3 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 b88cfb8ae4..1786b16b85 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 b02c703c29..2bf8c9eba1 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 96b6128bb8..bf3ef687ef 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 99355cae6f..3ad8eb28f2 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 08a74455b1..865c09c220 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 c75ce409db..b13e1e9bb9 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 b6f1016ec4..dd52fb08f3 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 e3aef3a76a..a941ba1642 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 361dd43ab6..9e8c699bbc 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 ca7c693dfe..c8d1a3de88 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 782947eca7..30d865e81a 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 8c69af29f7..d36de4ac5d 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 e0d5ee48e9..fcba5ae25a 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 6c25d4b8b2..c1c78f9a1e 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 5e86178c3e..bae5c56e1f 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 52db7f6434..e5bcba0869 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 63ec5cbcd0..51eb1dbc31 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 a16317e4fe..2cb0f61445 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 20ed2ab870..4d578a1d0d 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 2105b1cb7a..7e28e59c4c 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 23d478cac5..85a4a94d46 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 7aeec93ae8..3f2c787a61 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 9db3635c4c..9c96ee2fc1 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 dd73e21eca..59f367fae2 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 e99b151da3..3b994684b4 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 ae081d1900..59d39eae45 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 b622002114..d88744bcd7 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 7f4fbfa9f5..bf3b3f3a89 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 52c1d6069b..125b269d1b 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 411d5b23a9..1f4df37a7f 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 93c4d86a16..e71eafcb17 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 f132cb9174..88bfa4ff08 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 d9dd76c77e..8b2eb502e5 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 518461352d..10010ad632 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 6864ebbdab..acf975f9ff 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 01b7d4bf72..a12bf98fd2 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 f13d39cc3c..cd8cb275c7 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 ab1cdada81..034689977e 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 e9858af035..daf58f3c39 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 128726f525..906f92e205 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 6ab7ab4f7f..d7d7d9793a 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 80ab6c459c..f0bbac2064 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 f1c77cc5bf..eacf29de6b 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 fc2d7c6fec..a00f840667 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 a930759a60..8d810fca79 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 bc303074c8..6784a0d159 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 65797134ff..dfa96100e0 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 d8c8a07c48..b36109e5a9 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 22b2d66353..3d07661e3f 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 e5978ce372..3c6bcf330d 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 22226ce766..9104fa724d 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 76b45b715b..ba18f68de8 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 3cc7f79556..77a4dd1497 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 e21b70ea08..10117f1234 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 f31df221fe..decc2fbaf0 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 d8f8b71e95..b3822a3b4f 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 3fbd51b3dd..1315d12141 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 c4dbe76d4f..091e0dd92a 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 0d2b8e90ab..1a2978852e 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 877e0ea667..fe6f24e825 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 1b5178d3e2..1199fbb592 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 b421d36eba..5df839ab5d 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 8ebe4f02c5..6094a91106 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 ab336a5cf3..86937d8d1f 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 93fcd368bc..485e0d0f76 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 3a395f3358..38f0900490 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 cb245e6cbe..fb4108eaab 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 19e0726ba6..0248ac3226 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 8af833b08c..b065237866 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 726dc19104..8f69c2a6c5 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 00378e7667..6fa3cb9c29 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 e9c4eafbf5..1c4c4e30b9 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 92a1a520a7..68f7f8660b 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 bb3147f3a1..1579cd3865 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 f0690d42bd..404fdf63a2 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 bff2116b41..aea9383a63 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 571f289d1c..c8b7316c4e 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 49ec1f4619..be3b629368 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 fc7d2d3598..019aa481e7 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 5d6188dd37..cda64c1b67 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 ef4b450650..b476f3ba17 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 84c343d1eb..5d96fda88d 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 f79738f1e9..d3490af717 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 a25696ec6e..3044cadeb1 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 1939d1026c..550ddfc738 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 cedfc25d9c..f13609906f 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 b76d1d7efd..c3982e342d 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 15f6547760..d0e54071c9 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 96959e52d5..8efbf37672 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 fc8db9bf34..265e2442f2 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 a79da79edc..b60016c423 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 e071fd87cb..55953244ec 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 16876f03b7..433666f6e1 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 6de5d6b5c1..4e1e1edc87 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 ddc7f2c917..e8d7170bed 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 c736b944c2..cde168e6c2 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 bda306c62a..d43f55877b 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 f3f20461bc..9110ff9f9f 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 68e2da1ccb..827f9c28b8 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 bb02d98c7c..6a0fd17f61 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 37ac215c28..0e3f3618d2 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 d9d0eb386a..ed4d1ead0a 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 121ec46a02..2bc7ca4f99 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 8ec708d70f..9374e7b054 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 1bf563abe7..977f43a6f8 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 1444a66a93..2564c88cf6 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 5c2405eb1e..0f68e45135 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 3952ebd844..bec9a92549 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 d6ac1be830..231749c979 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 151ab403d3..e0c6309c75 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 6bcd2a5f94..f4d414e691 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 62187a5426..db4edf2fc3 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 646801fd1d..ee43614bfb 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 e7d04a5996..546936e1c2 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 2a8099c0fc..65e62201c5 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 399dc4605f..fdcbe6718f 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 8de1512d69..333c6cb876 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 a14bc0b3bf..9b3a9b3250 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 2ed17bcb4e..54c2af1077 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 67d761c941..bfde35f579 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 533e2e5920..1680947040 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 7d78dbebd1..c582ed4f93 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 f2dac80db8..1e09ba38b6 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 638a077b4b..f3d4dc140e 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 ee42ab5cd0..a1cc049bdb 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 1382c8fde5..cd573e51f8 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 6bdc2ad331..42c6f96595 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 a56d109fff..1a6aca2c36 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 a2d45c33be..fe0c6179e1 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 4ee0966b05..dbba31d65d 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 3415e1437f..c64d695360 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 77cd15f4ae..fc7644cc1d 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 08f5f232ea..88cea6049b 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 17ace08013..b43561b116 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 36116e703c..0813bc9f98 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 ff473ca5e1..5ede9a6669 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 86e888dbb7..63da4f4e71 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 dd22fd6d79..a6cb1c375d 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 edfdc95e16..5e80875bb0 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 8578e5f694..46167f5ab6 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 f789e668cc..9ee0741031 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 e6e65d0645..35e589d285 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 a60a171bef..f9486e93fa 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 2f2ebd9368..fa28352ddc 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 f0e0996201..97c43db22c 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 0360e3129d..bbf5eef957 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 83ca879b43..b73633ea62 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 0a32832baf..96a0c150c4 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 7bc1cc2923..607a9ee99c 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 795a8764f8..d97aa2a90d 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 b8a8ab0482..22ea9418e7 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 c42b8f60fb..d22122fb6a 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 7921166d6f..eceb9886ee 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 7cae6d5eb8..c297cf7298 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 9f621fdff5..7b530a0862 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 fcacf0a59b..3eec2474bd 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 8c396d3ca9..ab62da17fe 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 2067080587..85c5df5b12 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 719360c9b2..7ec8aa19ef 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 2eb0806c79..c5e6b302b6 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 aee797574d..90049e1022 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 bec0586d84..5fc6d97409 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 aadea4456a..8cbc7f76f3 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 b1a69d5452..534d4403dd 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 6d96dd9508..2ba3e82439 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 3263324117..9ed55dab02 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 fe71c89aa4..2a82356826 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 e00cd4d91d..c5b66dc26f 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 025949e0dd..1189ea61f0 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 8cc2c3f36d..03cac09525 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 5b746f76d8..9009f3e1d6 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 9ace538cb2..d150e42984 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 ca3d0f448f..9d066bf0b1 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 daa5061b08..0e4af9f53e 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 73cb8a2561..fde3828d24 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 446961805f..992f635c8b 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 863bf3366f..e161746499 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 9b61296700..2bba195d2e 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 2846658a2d..b4264953f3 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 b93932619f..358bb1c131 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 8fde25b3b3..b39711b765 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 161987fe9d..c95eeda1c9 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 8041b38bb4..027ef6de19 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 4ab29ca679..2e08d775d5 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 119c48f1fc..30cd018c4c 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 1087b533cd..26f4d0b2cd 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 17a7860fc7..0521176e36 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 b72059c906..1328be070c 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 f367e3390b..9446c095d3 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 e86466f426..9435bd8c05 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 b4e348fead..fc83558bf2 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 ef30949f87..fcb1a333a2 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 40c2f29b67..1056e166c8 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 82cc793709..32e8fc79d6 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 dcf778592b..d6c43e33a1 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 89dcff0193..05e7e6d814 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 67ac5207da..fac3947ef0 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 d4f23834ea..efe51adfe0 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 b38668ead7..364385b87a 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 3c5d85d92e..9dbf0921b4 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 e3b396dea7..3a46aa5995 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 38fdf9d124..5068374f0c 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 a27d1085b6..cf261cd4aa 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 4f1e78bd44..647afc7844 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 847b52f1de..893d63a2b4 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 fa0f5aaeb5..4709fd7cc2 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 9072ec87c1..465d405bee 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 e37ed4ecdb..82ae306265 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 9950f398de..e66df248f5 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 85143871a4..4471c5c2b7 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 3bac8c84f5..541477651a 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 f21c362977..e88300f030 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 a97340a4c4..346e80da0d 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 ac8cae6a47..897127dffd 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 5c21e6f551..97fb734c18 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 7e28ea0520..9aeaa40a47 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 63fba01f52..d3a746fce7 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 44179f9021..7d53c48c7c 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 8395a6bd60..48c814ff23 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 5cbfe44a9e..ec58b85d15 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 ca1ca31dcb..6a402e9ea1 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 6776b91af7..f548e886cd 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 7da2fb83e4..f9d12dd631 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 c8f6582174..0ba3278030 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 c32bd8e919..031c9b5092 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 ab72a1d00b..a655e54d13 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 39e6b3cd8f..846c84b5df 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 a33100d298..2dc08fe42b 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 6dd990aa9d..43e59272e2 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 91b5269a68..bd55d112aa 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 1aed611069..4e0a46784f 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 43f4020d3a..f813d71d1a 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 637b2b6124..aba33b7de5 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 6b54c55e9f..de88b363b4 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 29090a83d8..0f63c92c7d 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 78230a0aeb..510d61a97c 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 e72fa39bf7..503036a11e 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 1a2b86f3ae..d06679fdb8 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 b5cbc1b845..2baed2a42f 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 05d554c7e1..f5ca6d5f94 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 2c38f3ed8c..619f3b978c 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 5e4042ca06..2352877955 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 15755681cc..ba967932f4 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 71f391f7a4..44fd5bb191 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 1e12d377de..db53519b72 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 0e0d355f15..e1528d2114 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 f809975c7e..8fb93f1fcd 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 b158c77627..2df79c25f9 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 48174fbbaf..8eddb4d0f8 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 a161178d12..39b46dd9d1 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 81a79e9fac..b6ed6ea56d 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 9923d1ab74..c48874a723 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 2ed3ba7655..2ef6ae9ad7 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 e1e4784d51..927aeb1eb0 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 26e6bae97a..652ad68976 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 6c97ec5d21..6f305ff7f7 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 646ed188c5..d9601c955d 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 e45f9daecf..87984629fc 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 8649faa98a..e637c05a54 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 eb9457083d..7426fffe70 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 100a6c81a4..55d90c1f47 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 cb6199a656..f7bc5ef78d 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 ce35016f55..3335de2129 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 6d091318ba..cb9dec97c1 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 ce64945393..0f51546855 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 51d3e24e2d..966060fd48 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 d0e95e80db..eefa9a738c 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 abb22c0f8c..7dc436d0da 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 514e703d5c..e3c83ae043 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 33fa535a6d..ea1033f3e0 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 f1ac49cc39..558943da5a 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 0240634905..4226ba3920 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 fb35b1d97d..5705ded48b 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 e25ff07520..e0821bbdc4 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 9d5c8800db..645f8ec216 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 fb85c06bad..873e2c86fe 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 6729470f2c..f1fb2f68f4 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 8d6bb8bf36..21189bed8a 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 a515965288..7f0c1ab4ed 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 760fa559b5..1d82716d08 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 1420b42b39..cb585a363d 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 79e4e7a23a..2120db4b0f 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 6ea6e82e88..7e0d17f89b 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 a37c3fe542..5b35d4e0ac 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 51a58bba4d..c5b29d0cb4 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 b94aa59165..54315f57c4 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 9b6f1276df..4c627eb7c9 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 e90c1db949..52caa25adc 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 0b024862c2..7da4204c97 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 d9cbedf0f3..abdc48a59c 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 5255f89efa..255068d204 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 57548839ab..27dc323419 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 bc8855f433..e7fc809164 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 357fd0c864..1b0ddece35 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 0879b47dd5..9e541ebc14 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 01b5a12448..c0f8e719f0 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 e1dfc9396c..32085285f7 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 572f94e876..f1861ff68e 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 a291ee4642..a6b839cdd0 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 bed56d44cf..fbc2e4dca8 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 2a37933012..c66baae5a9 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 b37dc277f5..6b73102c93 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 582875ded1..3e05e62035 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 14b0abaa34..88d6cf1a83 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 978b0d3f2c..697224685e 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 e99a7d524f..b71e8d2539 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 7f2a366a3c..285681b2ab 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 3288121c2e..6b2ab16c85 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 948516e321..b24353c96a 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 94678b54dc..4d2b4a4575 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 206b656c17..826f0bccec 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 ae4d12a992..acd3ce77c4 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 477035fb43..e129fdff3b 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 0bb1747e5c..d9740c0077 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 8e24edb9b5..4d49973bd1 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 bfc02e126a..ee1e0e6ef3 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 0d56086848..fb619a556e 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 73253c87a9..4a69676fe3 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 5f0c1a6920..8b709c6e4e 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 7f1dff38f5..d355887126 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 3f639a4834..af8f0fe845 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 43d02deca9..37165145ac 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 fea1a0dc01..0445174299 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 437206c1a2..5fe6f50e86 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 b07163f93a..402c21c4a1 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 eba9b8ae4c..b830d71652 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 8324523bf8..98d0bd14ce 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 911c884d32..add53e7230 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 2d38f1e222..18b4973a45 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 ffc09684d4..fa28b4d00a 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 ab1297c0f0..f8ab4de36f 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 80dd320d9d..9c386a8c9b 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 026a319ce0..9a62395ccd 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 15575b374b..3721da87eb 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 f472c5cdd5..39a6d94f01 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 57c82c71fc..c9d2b13b08 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 9c013c280c..b6e4d0eeba 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 252551d54b..c210246ea0 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 60496ff09a..72da2a55e2 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 c79ab812b1..a1c918cc21 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 92cc6750fe..bd9cae88b9 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 0213ef4e8e..505cde5144 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 3592976463..b39320894c 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 d9a427a1e2..67159da6bc 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 acc1e7d720..4238b0e6a3 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 d76b490bb5..893d974a25 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 2f9eaca6e1..7a6cd028b1 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 251d3901db..e423ad1529 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 3ea5024c84..6a7cec46f4 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 f078fabb5c..ef948108df 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 33eb57ad95..d402de3f54 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 6b87255928..8e2fc9b3dd 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 da844cde09..a3bef621ce 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 2ca3b0de72..f0b22e1661 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 d5bb8d725f..9877e60b2c 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 6ac2109cbd..f666d58b36 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 27e7c16193..19bb8081de 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 6e2f5a8b50..56c5c124a3 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 304a93050b..b74b9d6a52 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 07a8af2d6b..e8547622b5 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 49f1773b8d..c35b19f2d7 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 50a5b4e83e..5207e93d79 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 8c28f2b413..69327e0184 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 b870fb51f7..c37996f3fa 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 0179a4ac2c..5f96ac66f1 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 5ade3d74af..e7520c9bcf 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 9c752b9d00..b1130a2bc5 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 0a01ea2585..165a9e794a 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 5f29c29855..d105bb02e8 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 62458d34b1..a8ea53f013 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 f1ec514b15..2c47b77089 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 dcdd7072ba..5b45394456 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 8564bd7188..6e456b4da3 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 e71e80a80e..d0048c91d2 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 8eda920f04..157c5d2f44 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 9f44b1ba5b..beaad33da1 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 6c86e3b923..705ed4468d 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 f56dae9489..322b4cc76e 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 3632db272c..3cf118e295 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 7c9022e7ce..b760b6d647 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 ef1bee1ca5..d3c7974322 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 1570afb8c4..69a9bfbc82 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 dcb069882b..acb59a7553 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 7989d50a1b..15a1d8d150 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 ea482afb2b..0a58cafab5 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 1c7c436852..9ba5ca3ec5 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 e65b2e6696..8342c4220d 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 db229bd776..0a9870609f 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 df5108e699..521c667646 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 77f746be9d..0e40632d4b 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 61227e4ad7..8c873485fe 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 a89fe3f810..8ce2c94679 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 12449b2062..5e6e4deb65 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 2395e2c198..b6bc7f8d81 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 78bcbc589d..8346394357 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 fae3743a09..fb84be176f 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 75f4e4df3d..6158ad5076 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 fce1b970bf..c014ca89ae 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 b2282cee8b..8be6934217 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 ff20b8f515..7ae46ab43d 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 d0d0b5df7b..e009b09625 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 dd6ad4274b..fd73e5110f 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 cae7f946f3..ad79ba34d8 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 7ebb577854..e0ce71ad7f 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 b0c4bda1a1..6964b29532 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 5aa4a28e5a..cb404c89ea 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 9a649110a1..4620e6cfdc 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 9352eb08df..e8d567fe5c 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 a5db43400a..5f8db161de 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 1056f2d1a8..7ac47068d5 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 589c49c31d..e80a99ec22 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 06bbcfce14..defadde9ed 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 e10528e22c..4715b18e61 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 1c91256b2d..44f680d84b 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 d5886a7c78..206cf665f0 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 a92a444a40..19fe60a4de 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 87dfcfd35f..8e773c0a41 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 b60d5835a6..968ec96762 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 9a0d8ad4aa..588b9a6d24 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 ae80fedc35..9c40a17293 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 14c9fc9668..77ae6e0f22 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 04fb294944..80531a6315 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 78c401f821..faf01d9d5e 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 ef55e5b1a9..18bff2dc8d 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 70e2521868..8fadb85678 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 53913444d7..256f3911ab 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 a9eede155b..1051ada0d9 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 fc71ba36c1..be14fab164 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 bb5074cf0e..92ebb8124c 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 8fd6d79a48..de35247ae8 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 d3bea2fd51..769ce41b72 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 e73df3e2df..f3193ded2e 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 cf5c50f4bb..c87160e882 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 1f9b326299..921888d6c9 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 2c9970065e..729a18bf15 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 27908a9963..d2772f347a 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 b852861ed7..2463e0b8da 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 b28e9bb17f..5b30a9ca27 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 c2032493d2..013841bff9 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 3713349605..3eefcba5f0 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 4c7ae8bab1..777da6846c 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 8b6845a8e7..942b841d5f 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 4f4b84be38..83c95cc1b7 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 54c393a0d8..71030f3997 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 872995742f..ce54002b81 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 031a9981fa..aafbc2bf0d 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 c39ed2d4e7..50bfb82f2f 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 b9b5570bc7..ec83fa963e 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 ca7ad41e1b..a555fdf52c 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 b2be939da1..5c769947ac 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 fd966ffa62..9745c2eb0f 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 fe06f90ca7..4e52a9315d 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 cc4e3f23e3..cce700e6da 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 46d96847e3..43c738b523 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 a71fe43ba2..818802b1f5 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 affc20a06d..f1f6961ee7 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 12d0716511..c477fb8ddf 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 f00eea3f06..20e234a6cf 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 c85c936ab7..26eedc6178 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 557249cb3e..f00f87b7f3 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 814f79ab10..e545791f77 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 7d2693a249..bda6ad89ee 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 c7c02ceb18..c31891c50a 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 847f10fb54..63b1ef0799 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 783a4276ff..bb657bb5eb 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 c34bc0045a..e96ba22ca8 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 3da736c472..f7b06a1f49 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 9615381a9d..52b3f560b0 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 7f75feb370..39bd6ebfa4 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 e6bd2126d7..59f0779b4c 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 c6eb292930..1b64137bdd 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 b5712f8dff..02f7f9b4fc 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 f172a60718..14ebf39b99 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 7580b1f9ab..2b57a2e43c 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 cb31659deb..20fef6994e 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 2fa0fa3140..45a78d583f 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 5665f4ad44..a840f7cf86 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 634305e092..3eb8577699 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 1c62d466d8..717e4004a5 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 463913226f..5af45bc2ec 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 ec7ad8fdd8..9df2e39b5d 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 0c6e6e560f..db505ac63a 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 e3f004d923..e80745d218 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 dd0e2dc4ec..622e77f212 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 4ee7c5cb5e..0cec14c7da 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 ab86e44820..bdb6f8cb07 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 ffa498c7bd..564dc5626c 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 69faa8be39..61a6659d82 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 590ccc2b81..4e12c01e9c 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 3df2f77b28..e5f6355bbc 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 d3788c0441..df7f6bd6f4 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 93f5f2a057..69261acb3f 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 c5dfc7fa32..ca583faab6 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 c371524b7c..5ca65ca789 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 740b5c2c0f..fcd74bbd19 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 31f12b859e..f98c83b471 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 c546fdcf4b..b18e937ea6 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 645f6e84de..73470d55ad 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 78b7e99cc2..93a7038799 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 eb013a3b3e..b251ad1070 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 4340bf0d29..e92e3fd3f1 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 feeb4d57d7..774f70a888 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 47278f283e..fc4f9e9ced 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 04d832b83c..788734b150 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 14c2c916f1..ad3f1fa28e 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 7bee705686..3847409a40 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 ab750d2edf..be1a6b52b9 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 57149a02b8..2059850de6 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 be51d3443d..b4c5ed3004 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 1bb5b0fffe..407e89132e 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 878043437b..1f8e690b4a 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 bfd3f50571..4849df7cd9 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 57eff5d228..e2e6da880a 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 cf9e146600..1e150f96ca 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 6daf46186c..13ab925f16 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 604712945d..ec6c378767 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 9ec0ab2fea..fe4d4ee062 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 6a9b132bf3..b146d5ad45 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 4d792471ce..7658e0ec22 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 7db8533275..447aeaf02b 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 322f316cc3..b96aa74770 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 267e718b9e..d99b04374b 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 bc4caa45f9..f000479fd0 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 65f641b80c..0d7c78776c 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 e6ada5d15c..1a16e76c25 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 f08489969d..1bd089be6d 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 05e0b7372c..e87cf107b2 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 e021218dba..16a5d87115 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 d18aa8d2ba..5f35c5f833 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 85f662150b..1063cd33b5 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 0b8257542d..8bf484e9a5 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 442b292e95..d093da09a3 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 13a9bb4d68..4e32b20fd9 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 d2ff47e6a0..a1eff2627a 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 7f0370f3fe..8528484be3 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 626c59fa00..37cdaff8e6 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 125d61a246..9ead99cdfa 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 a49e69226e..71b2b1daa8 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 6ca0558a22..aa0202eef3 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 aa4de5eb57..2ccf7d60d5 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 8077a9f49d..f902aff3b7 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 15f417f02d..d0ba96a404 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 68930f1d88..4f133436a5 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 3a2330096e..a923825bfa 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 7e2be562d7..eea4a651c3 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 fbe51df34c..a5ecea87f7 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 201710c473..f7eb75e3de 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 76284d3af1..cd26187844 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 998e6cfa30..71f1b97fc4 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 7deddc9c4b..e5bc082fcd 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 2dfd9eb097..2d0e50dc30 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 258b1b4d4d..675dfa020e 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 04d7870705..7080e4db16 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 cec4cf0248..574aa1cc7b 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 6f533999f9..327d3cf6ff 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 238330e1f8..fea79288d2 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 44d1a66f2e..1fe2d1b172 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 9f4bc90a42..488f5fa58d 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 83ade2247c..b266274f57 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 8bc02bed79..cbc7c3e52f 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 280bb08a7d..8cea79358a 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 b927b722ac..b0b1860cec 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 aa8a461bda..b01f0d33e2 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 80d3d1766b..786d20e1fc 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 a6cad05e49..109a356dd7 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 4856768d67..e9131805ac 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 a92f5a20be..349c723761 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 07ab77c5d1..cca9b2daca 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 d318e74356..a3da78e436 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 3da7e09c67..5de471d4f3 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 adee6bdc7d..d426e0ecbc 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 542da1bc35..01bd662407 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 36acaeb6ee..b1989e50c8 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 b9d8ae4ba1..105ad18cbd 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 779e8730a0..d5dc5644e1 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 d1bd119d09..11f3495710 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 2e69314234..04c4ac3007 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 31acd889ce..29ccc2fec7 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 c91578d6ba..e3d8123b55 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 5d2efb666c..dd81b3259e 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 b853144aed..41fdaff6a3 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 5e4e3d264b..daf034d6a5 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 ab62cd2b15..a3063146b2 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 a2912b2a1e..b62587c38d 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 44bfe52976..5c98e7e063 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 f12a25f551..e8ee63af68 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 2e1465f9e7..6207b7290b 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 eb5c2d658f..df67b41f80 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 930e9b9a47..867137cfcb 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 dce21e214c..2b7d82f53a 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 d20191b302..fde4643720 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 c6ac720eb1..3a51361f77 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 ab240f83d2..3bcd026031 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 10f8b2ab00..334c87efa7 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 99d2f62cd4..a8ce49059d 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 22dc17d2ab..1e61019c32 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 e127937fc1..3ed705609b 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 646e25cf31..4641d96508 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 2608ac0edf..552c32d260 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 f0cac24302..b51466e309 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 7438dd3ea2..7f13c97ae8 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 d4719e4b32..ea66ff8a29 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 d8db63b146..9072ce8651 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 0703826aac..f441195623 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 ec9b524ad7..80e6f6c4f1 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 7a47b6dd48..4e1b8dbfa1 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 745865f2cc..84e5fc8eb5 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 d2baa9abf4..066867525d 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 f3f86a7161..ca26164b28 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 1dfbe191ad..2d72a92d18 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 f744675477..c5e156acbd 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 6e31deb8ef..7fcb7cabde 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 ddc039c4da..5cbf8d7270 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 0eff4a8255..4aa4816701 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 7042478d37..16369b59f4 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 ae939692cb..a9fd54ba38 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 0a9393e4d1..e00748e138 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 baa2323794..8e808ecf6b 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 fa4b6477b6..c3e0474968 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 8e2956dc0c..0c39b74f9b 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 69b9c5709f..4431421623 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 765ac92c35..b3747005a1 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 8a6fc3a125..05cc2cd18f 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 a5b4da5ae2..a327aa37ed 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 941224b5a9..22f83b3bcb 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 06f1563105..f857bfbfd1 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 212f587d87..ec2d0dbe54 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 d969be36b1..b5c0a3d876 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 04644c6bfd..fab71c971e 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 df1849c894..8229cba526 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 2b954fc2f0..240f7679ae 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 8acdb8785b..e90499035d 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 3c4034f8e3..64d14d8dc8 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 b634277e04..74c7e1c79b 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 72d83fdaa0..8dbad96404 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 8743bf3f73..b81590db13 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 f659a21eec..8e564674d1 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 2f81f81a48..46fbed1c25 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 6b3b9e87db..829367c68c 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 1cf49c9f9d..76e5325262 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 68d3b89764..4c4a809ada 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 252872d2e5..065d82a47f 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 99238cf542..bedc986348 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 c6501736fb..b398754ca1 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 ec784d2f69..47654aba5b 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 7bbf379510..b909730231 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 b004811705..6699bbbb5b 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 b007751f60..b9bccf4c50 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 8773c2108e..7b8721a7db 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 dda58bedd5..7491a13fbb 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 37bafa6c85..1b3f19b09a 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 29f4bb9d38..db6b0cf8ae 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 b8eb9c6ea4..a761cdd95a 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 bcf9547045..1baaf759f3 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 d371238d88..6addb828e8 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 6b0c06353d..96c436e8c8 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 2f34ebe11c..cb05b906de 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 ceb17355cd..beeea4ae10 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 0bc5cf7457..1c96856592 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 c462579c73..30be252f9d 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 114bec7b7a..3c45017b18 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 65f88d7aad..028bd4cadd 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 ae78088242..ec5e708bfc 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 6314807c17..ab00f8ad21 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 73f19d2802..686e70d4bc 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 f668565b81..992e34e21b 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 0e1e19437a..bd4fd96bfd 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 2563d3f3b2..04a748fa0d 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 49382e50a7..5640fd5e02 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 db5ebdfdca..6973196bb3 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 c1cac23516..cd9056ab29 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 1b0f5c0a98..e2906d253a 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 f7b451bb57..619ebb75b7 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 c5c50312e9..b85a45a715 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 cf0ac7e6c2..b83ef195f4 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 06f64a1f64..46ac175bcd 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 ed6a8122e7..81bcb385e7 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 65834fbc70..9d8b23af4d 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 4a1bb7aa53..da0c6c5f56 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 e2d08d23ca..5f6fb9db8e 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 058adf1b7c..ee9c7c7a83 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 a3eac9955c..37dd0a97fb 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 e463969afe..c9b8d0fb43 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 a49128470a..47cac4516b 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 fe73d302cc..17163be738 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 03bf1b5d0c..b1e5c5abbc 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 24c6bcafef..b32cdb3250 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 0ec47e704c..7260da757f 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 42f16007b5..14a88d0627 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 c3e207aa24..01aa0329c7 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 45d23a7f57..e275a3a966 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 ae40ea0628..7a7afb8de8 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 960f60f3dd..18c930e696 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 fa7f9459e3..08d5a0d0a0 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 6577826812..2270f83738 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 ebf7d9004f..8a2f8bb6ca 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 0e80d551a1..3d9ae3ee3c 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 38b50b84df..a9bb509307 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 cee32e5327..0b861d277e 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 3be20b1366..9ea2bd6f7e 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 5e13542d8c..6ba4d5764f 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 df15f8db30..17016ac1ca 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 bc73cf26db..c85571503c 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 1d7392031a..44f17718bf 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 20e30043e4..556ab78ce8 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 ed0a5278c4..f840953b85 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 a506e206f0..9023b73664 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 7e10c04247..cea47fd5be 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 af2917fc98..8d99bd088c 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 dfedcc8b58..3d315ebf26 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 cb51824347..d073949e54 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 de7241f089..41e2157200 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 b0dadd1957..f973a3d852 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 64f472a821..d34a16f059 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 170e9f643a..3d42e4eb22 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 285d71bd51..aabb0663e1 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 190a2c4713..a75ab916c2 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 18ad8f8253..a21d5a9c3e 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 5ed41d5194..b5be9e10ba 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 ba3e678664..8b5221943f 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 de9cef0029..3ccca08e80 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 38e5549d02..8923810aa1 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 18b98510d8..3080f7347c 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 51b410b979..e1f528a2b8 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 16a390e2aa..a14f736962 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 8fa2657d8d..e221d873ef 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 35b3b4e097..954e6b8020 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 e2689cf350..8a84704072 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 567adef8dd..3a8e048b25 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 95001242b5..8fea60bf09 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 ff59818c7b..41fce53c48 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 2199181987..c47c551391 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 216c971615..cbb462be2e 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 e8311b69f1..28f64a50ff 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 02d3d9f7d4..f7ea0239b7 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 cdead5434b..09d7297142 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 ff1fcdac1a..4753ea3cb8 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 2e3850f819..5f6292d528 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 66987daf45..e5d255ee02 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 b16b247db7..6ccecc5c85 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 6ed0a18a49..90fa81b18e 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 22abc9a905..5196c8de77 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 8ffcd35510..a837f0dcd0 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 c23e5aee14..b91c11e619 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 94e6395327..164a9a7d91 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 ced406c171..c2dc106e7f 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 e120edf845..40f9ad9cba 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 34b9d1e792..67c3e64755 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 7c598553f2..151f588b29 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 3bee7fa0be..27bad5955c 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 5f4bfdce07..cf86f166a8 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 6377953d21..c53e2a0848 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 9f219239b8..aafa830fd0 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 9a3eff9cd5..d648e3e04a 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 71e457ef31..fa61967d96 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 92234d0a0c..56c25c37b1 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 5f3aaa6986..75da213e0d 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 bfa77a5a2a..87ff5d5261 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 da5e27e7d4..90b1898a16 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 f682027703..5e8a47d2e4 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 237a56d263..385b31ce64 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 7310506560..deff2ef883 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 90c41e5b1f..e224c3741b 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 57aec12940..b32f1dd456 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 e5c2a3d0b6..f00ff70ae1 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 7c8661f8b3..ff3d450160 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 c91b7db3db..5da7c6cb83 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 a6fccf64ee..ec8e1057c2 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 d6751ffe01..9fef14fcea 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 82c1e51676..35e0d10255 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 ba2a75308a..abaa335c8c 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 7586f4f6e5..ebc7afaa7c 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 c636fb86cf..8c6c935166 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 1515c97e3f..5f5ad457af 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 27a2ef9e30..638aa724aa 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 8cd13f515a..a6b9408ee5 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 5062634ead..cfef55fef4 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 2d7ed01dae..b633b6f4b6 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 10afd1c67e..a8eaef0d0f 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 7bbad038d1..553104e514 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 ef9c409828..4e2238e77f 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 1aac75ff4b..173dbf31fe 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 bb4686a740..deb3725300 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 97113dc06d..e0e3519121 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 5a414bd5ca..866b8ee55e 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 1bf9dc71a6..d63b50f299 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 94700b0f79..7a8f2cff4d 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 f21019e3ca..ca062889d2 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 b77e9aadf8..9ba0298e1d 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 43f520ddfe..2ddd23e8f1 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 0aa3c338c6..ff5be8baf7 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 f7f01cae2a..425069bf0c 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 1480c0cb63..fd75dec7d2 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 dd29f04de4..21e5ee93bd 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 802b633be2..f4c3ee9cac 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 15b85bde53..533118f356 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 cce89b39a3..7d8e5b8908 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 d184bec245..5dfb32bb60 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 112a8e79a6..99ff947dfa 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 b7b2dc14cf..269c3762c1 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 1c4147ca8c..8fe8b49ca1 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 34c9f74289..bf3e2aabb9 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 d649638a21..28beb285cd 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 e62332c3fe..3a6cdae3a9 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 152dbc179b..4ee61c5d19 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 c3023d7a0d..7fab9a646d 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 dfc02180b2..06fb8e032c 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 ac5bc1dc01..5302ef41be 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 83b11cb86b..457fcdd9e7 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 40bb49bc72..6e2313e901 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 b52804ed2c..b9d27d02ee 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 f55738302b..5b8b385348 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 9ffa11f993..03ebae21c9 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 1a2336848d..67b9959e77 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 a22ef17ffa..67146a43f1 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 b32ea4fdd0..01f1afda78 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 b05f45013c..3aed33d089 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 f206f3986d..3621585962 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 5f9ceb40d0..43cda25e59 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 18d0edf6c5..a1d309446d 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 e537884c76..c71d849936 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 73fb47e2e4..e89b96057c 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 f5cd022182..d0cfcc35be 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 25f829b1f2..bcf68c4ba7 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 a6f0317573..4fca83e978 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 565d24fce8..eae833dcf1 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 0127fdbb56..d6c1c1a50d 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 03d40abd23..b0b7bd93ef 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 d10057db90..e0544c089d 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 33efc0d6a5..01e70a38fe 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 1f166b45b2..71ce2181cc 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 5511741021..8ea7993625 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 d197997953..86090c1c39 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 2310291e52..fd46e21110 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 4d9eb6ac5a..be28b3b4c3 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 74dc2fe52e..7e5acd4ad0 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 614fafc451..fe7d7739cf 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 ddf9b97e88..b95140c11b 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 9a118adf88..b635eae4e3 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 9f5193db34..adbbc01e9d 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 9b1e6ddee7..6b16934cb0 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 56acf11674..af2f7e37f8 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 5d95a1c5fb..21a33f9c6d 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 1b39eef4ba..9d3ee03213 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 eae08ad0e7..a200fe516d 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 56dac62eda..6388e505b9 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 2aeb2475bd..6010acc3b7 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 52fa8d909b..74016e36f5 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 63a2a234eb..12052e98d6 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 cb756ddb83..2a35e4ec33 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 e6a13d2285..4af9402a14 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 e60bef8566..e1e8fe0a14 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 c8d08b61dc..0f9e1d1351 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 0e0287de4b..f3ea2e305d 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 38ab0f7ccd..0f138a6841 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 62ba1518a7..f49562751b 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 97f5b0f626..53119cae2a 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 5562fabf68..bf02a4e498 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 03b4bc5647..57f0f7e453 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 aefc8e87cf..4c352ac2f3 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 bf8fadc0c5..6096470d21 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 f16af0d0fa..77b6b6eb9e 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 4253d16870..b8c692642b 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 82218db3e7..887ecbcf36 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 a98c5ba19c..04dde11d55 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 014bab5ed5..9a087634e1 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 2ace978eb2..ec0a57ab7b 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 f659ee87be..8d1588b69a 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 9798863f17..7d01eb2577 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 0f47279c33..485fda6461 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 ba74d21afd..355cc0f848 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 c2c7c0db7e..26b0e2dc87 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 b8ca2cfbc1..6b16c8bb41 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 1bd13da964..c47a88e1b1 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 8f2f11964d..fe13256455 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 d190e4cef9..c98cdf5647 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 3d9e5bce80..c30db799f4 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 88ee0a9af3..6b4d867666 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 4f22472074..6846775996 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 16d3c7f613..53a6242fc7 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 686b1e83f3..f6c16767ff 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 b1d97250eb..ac1acc09ba 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 b7150af418..060a627e5e 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 4afac268bb..0a17971686 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 0d848af392..3062fb2051 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 104e77f4d5..d63521d791 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 27931063f3..8bc872b29a 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 87c68f5b22..b64d3917ca 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 bd751ca000..92fd4020bb 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 ee946f6a00..e4ecb384a2 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 0110c34103..c66352bb08 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 ccb2a9652e..79c7dd6bfe 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 43ad29ebe3..dc8c82a3d8 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 2731a8989f..c90bb3280a 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 49945f2d1d..de69698e2e 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 51b64d9959..adcf644f6b 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 13c0345313..11ae9535e7 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 3caa2c05e1..b11b3a8a73 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 40888dd02b..09646263ac 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 8b54945c6f..098910d89c 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 5093b4573f..1ee861a0b2 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 74b06276d8..d605398f6f 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 7bf33d701c..43d9a2e234 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 7666a5fe34..d093212b97 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 427f6518cd..c7644c6163 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 9e5a199449..ef750b0d73 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 d781c0acc6..a9c87f98f6 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 8e9587c1a2..8a5a437dc5 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 6fa8d9b2c9..77a8048895 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 0e9dff7543..8580fac150 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 5613f1432e..a7aa25e495 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 fff05a337b..5eb1f87b13 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 79578a35ed..69c224a3d1 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 dd53ddb481..0b9df6baf4 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 e59d22ea41..c390fb6e1f 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 62bbb5b213..8885af1428 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 809719bf2c..2cf411fd1b 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 fd3fb1fb39..e5ca905e05 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 772240c15e..796ad48be3 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 b55ab8e4a2..4a2c88dc7d 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 0671213497..675498484c 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 7f80040d47..1fd2a6b7b3 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 3d3382e8fb..b72d445ce5 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 3663a1dccc..2978778a4f 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 f39dd65d95..205d154164 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 ca9366e4e8..7e35c55c01 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 e958c8a110..1e33cd0942 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 16151f24ae..707b820f2f 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 a94982fbe4..a33fb009cc 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 29a6931030..45ced1e810 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 9888b1aa19..2820cb3f08 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 53e16307b1..d214a22e55 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 ae50d80eb6..b3c9a478c2 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 327af5e5e3..fb69fffaf8 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 8b00c87d48..3dad81357f 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 09ab9095f9..ac1b60b15b 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 5c538bc95e..00f1ba932d 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 f9923402f4..9e5bffce51 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 8221d6ac4c..905dfe083c 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 ac5e61647c..e838094e55 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 43e505aaf8..ef8580eceb 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 bdb214b2cc..aef6378170 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 d99ad7f044..6632a08fa9 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 c65199fe76..cc63a8202a 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 063f29de67..fb65978be1 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 6c49cea679..91f3c82e31 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 475ba800e1..26cce62f0a 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 4387eec5d9..daf3ec638b 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 bfe1e9f6a2..fa2cbf349d 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 01fab9808d..06f46eae0b 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 56e3ffc9e0..0a259f87d7 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 0b37e83567..9184733722 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 b038fe21eb..d73bfbe62b 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 175421d0ec..43bd20452d 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 00b5aec4bb..d5addebbf7 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 068d99f313..4c445402e2 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 b7ad16378d..cc4df48ea4 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 2e7d721cb8..4c7a5e724d 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 faa882ad18..4f9c0addfb 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 b14ea4b617..a776de8405 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 6ea20cdb49..351c02a8fe 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 4eada23217..de1e8576ab 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 ce00b66399..4476a445b3 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 202f824126..657e0b6764 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 eedb0c59d1..cf09975e12 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 e77483c672..a926d4a84c 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 06cd324135..1d4a29ee21 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 b663e2dd9b..51804d365c 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 28f6af3f36..1d8d85681f 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 631bd42e8f..59fb0af217 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 b9beb442e8..7136f24cc7 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 4b244ebd2e..4370a52b43 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 248edb4723..474e53ff9d 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 0f18a6e6ff..25314d5cde 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 7ae50eaf21..c5a07e1ddc 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 d16ef83dcb..4d36d30e8d 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 79fd5c12d9..52be47e349 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 0df694e10d..194a205f37 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 bd00dfea07..7d9d722e02 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 043ae5ffcd..c1b96cf04b 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 4308e1b6d0..5c1c47832b 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 00a7c8b1cf..391df5cb07 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 c49c778888..2d9f031ffd 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 613adbd3e4..eb4951bc0a 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 a87e94fc8a..ed458dd473 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 d1d02e5fb7..b5c51e1df3 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 cb686d1697..caa9efff74 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 38ffe6af86..e3a39e36d4 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 a886a37db3..f8af30a087 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 ec56f96768..58dfa077b4 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 02a135fb39..db28f434fc 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 04693bc3ff..b111e64f3c 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 3d38addfd3..a929b95c5c 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 b0de1e7512..a987b70e3e 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 baa6f52ea9..6d352f9f83 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 be61b2721a..01bd0842f1 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 ccacf134b8..be400956b8 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 71142b64bd..b8dadd7ba3 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 67a3c1dab0..cefc91e916 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 079b05290d..ef2e41c182 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 f7c5ce9f3a..e5c9b481ae 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 7d03b88f34..d83d717d0c 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 ca55ef97e5..2c1325f641 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 f446856e04..1cec32288c 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 ddfcbf381c..66ee6c43b5 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 0f3d8d5d1f..8a252b3056 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 94c8be2d8a..bf4e40c15f 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 41ab83177a..6c4f6faf1b 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 1f0b52e1e6..a01ab6211d 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 f7e41d1d05..4d9458f3f2 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 6af0fb8de3..1268b09e0b 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 fbe3cb1564..68e861aff8 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 5ab4e4c592..17f9229a2f 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 55307fcdf9..8ec29b8435 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 6060e7b77c..3ef6a453ab 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 f0cd843a44..b9383adb48 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 64a5cf8da0..d4ab3b87ae 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 59ad49e138..a8bed93d0a 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 edc22ee6e3..47937015df 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 13f001cc13..2994d59602 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 290d12c52a..508d47898f 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 0c8d349915..622db80f66 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 7713199d00..a02b323d12 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 6f4464421a..88643c991c 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 0c8e53ecd3..b9935ebac7 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 42e30b0463..bfcf3c32e8 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 78b9253b36..f8b91dd91b 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 510a02660c..a1a81bad6d 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 ac19b0d42f..0c50a0a79d 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 a158456eae..bc960850ff 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 00893d105e..91c81958e3 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 e1ab98b0c7..b9f9868fa6 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 900508c4bf..b7572451ca 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 0b1bd52fb6..794447446b 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 e2937748a4..2c8747db02 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 5f603654bc..8a13213b83 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 bcc8632a4f..98ea8ba156 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 9de5d6ded9..8a1bce851b 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 3a173138be..403da76e43 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 7f2cb164e4..d99eae919a 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 29c39b6897..e70eba0fd7 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 387800da4a..20e6d7e45e 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 97284d6fe4..35d991bb84 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 81d1b045b0..db96b06574 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 af71780414..3b54f98518 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 25660ac073..16904bcd12 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 d8e25df82d..d2248820ea 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 987c59d5a6..6e3edd64e0 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 a99782f803..34faa8983b 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 31e5910748..38139cc962 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 73726f9852..8303f3223e 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 74a3bc2e82..c3109da17e 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 618c610e6a..dc15e0f047 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 e231d3d1f8..4c4251bf4d 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 67f3e2dd80..8808784d2c 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 6d7b74b3b0..71fb0f1088 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 5691e21e2a..808676c2e5 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 608e6ae944..966887b257 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 69e2f6bde4..4f1c3da976 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 8684ba70eb..c4b4e2112c 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 a786dafa69..d439048eb0 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 eb47db444c..ba0aac2204 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 67e475e518..5a00d8cbde 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 283388fcfd..4789708887 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 86cb491986..aac42824c7 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 1542838dbb..5f9183f1bd 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 00a825dba5..cff9665678 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 397dda6d83..bb2fc2905b 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 e94261f727..7f5b7abecd 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 b7cf2c2389..e39ea54a35 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 7ac936b2f7..d1e5757fb9 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 452277bc0c..d26fc325f1 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 172f5a11f8..c410c8d4b4 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 bf37aad90e..50c64d5201 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 f26c690819..630aee14fa 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 a8794358a7..8ad26dfda7 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 b8e9697e24..8eae10cb13 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 55cc157bee..3983f96b94 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 c8c19573f8..0902ea1ff8 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 802cd325da..b7e876b1cb 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 e7ebf98939..4a1c5344c6 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 8453ed480e..9f75ee3e27 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 1d9b0e8dc9..2db4d8a1d3 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 37028623b9..b6eb714831 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 9471451ea9..007c6a90a7 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 309e14e896..95ea6f9437 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 eb2786fde0..897ce63308 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 1759120b7f..ed53a181dd 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 75f7edc8b7..7a34223b85 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 fb8353c1ee..cefdb90b8a 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 2c69372446..077d885d1e 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 d5ad380007..4d45b9b436 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 fff50ab7be..2b72566282 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 3ded306791..6c00e18e9e 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 14d9e771ab..79ade7cdd8 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 9ea0b11805..38999e1c79 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 7eebcac74e..170aee2f42 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 914501a088..2d7a6e26ed 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 7709e976ea..0000000000 --- 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 9bf8005348..42ac3f04a6 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 28b39a430c..1c6f740e8b 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 1e12c6b294..12ccced937 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 11789aaf60..7f167c9fe7 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 02da15ee15..e8de0fd8a4 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 6bdb15fa78..cc005943bb 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 52347f3790..4e4417e19b 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 5ec6ca7c4d..9bef66b19a 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 fc4580daad..46e378c5fd 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 650a799215..ca52c9cd6c 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 ee03f69118..5b59e37f00 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 fd0d42616c..ce0fc9514b 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 028076d5a3..db0b61f2d3 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 25d33aac0c..9111fa328c 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 6d0823062e..959b583f80 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 58d4bf2e1f..e02f90dc6c 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 0000000000..6c76aeed55 --- /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 d2d36c1abb..66793ebfb2 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 c47ce9d4dc..d00714d524 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 336c2c1606..c0802d6643 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 45689b2121..2dca490c02 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 67dac4c66e..ac942039bb 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 0658ace813..aca84532a4 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 fea2eb5225..3c6c4afa6f 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 5b713475dc..574c860a74 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 2fcb6a97e8..cb22be9252 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 f9681493bd..a0a23cc132 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 92727175a5..2c052b5a67 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 ff701b663a..87d4177ffd 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 466677efac..80ff40f2e1 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 0000000000..2b0a59044c --- /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 9d9aeeb296..51d27bb169 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 0000000000..6673c0ceeb --- /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 82d8dd467e..548dc9bb33 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 2440ac7798..4c6a3167f6 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 363c018c10..74d764fc30 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 2628713982..7d2fcd518b 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 0000000000..37fbb1b236 --- /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 9f794e00a7..0ed74d4f65 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 b004c760c4..bce6795cae 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 04009507ce..dd647f0eb9 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 493e3cfca1..e936ed7de8 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 50abad51c4..c2f6440c32 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 87f69ea314..448e37261d 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 b4f83afcf8..df4ededa4e 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 8a95a8ea0c..88fe6e5098 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 5e8b13d548..17f18814b8 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 78aa876e63..0cc82e8064 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 70cf3cdc08..3470cce518 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 083540d5b1..e0d91aa0d5 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 33964c355c..4153e6b155 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 42cdab11fe..7a7fdf39f4 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 0000000000..b49bd225f8 --- /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 6ec4f8fe85..2abc0c04f7 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 38dcfc8560..ca12b68131 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 e5c701775d..673e21b79f 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 6c7b2664f2..4f8408795a 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 f9af7e17bb..2f69a287ba 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 50547d13da..cda3196034 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 9689aee6c2..7bedbca242 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 e9cb082a99..4616a69fb7 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 e0e72471f9..37bb4160f9 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 0000000000..98aa197ca1 --- /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 0000000000..bd18e0ccfc --- /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 43497101cf..328db756df 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 0000000000..f4baa2894e --- /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 5597f53966..32cfb2c59d 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 f888d17f7e..3e271f67c2 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 0000000000..f22d8b7b04 --- /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 ba740948a8..1ed8a89e4a 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 8a473e8dac..6fd0f8a855 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 83c887b2d4..39e6c22a69 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 7e63126564..4409f5d5b6 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 9a90b81f9d..c98718313d 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 01b0655a5e..7e51a3bd75 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 0000000000..76cd27c6f1 --- /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 22f564b850..1e9058b08e 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 0a8bb3460c..aad7fea64a 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 0000000000..3deeeb810f --- /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 6716ee72fd..837bacc901 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 1f7c9d7a23..c8b16dfdb1 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 1f81ad9229..de6a459a18 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 ab41130641..3aeb8d525c 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 a469b21ff4..b9e4be0345 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 7194efbbb5..e998ef3d98 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 c2a22f80a1..2be2ac4a61 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 95648465e6..da326bbe36 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 e01775ec48..a369e70d92 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 06a0abc7cf..03ed84f53c 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 2ea49ef9e2..d46dbd9c5c 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 a6a79d8db6..a30430a28f 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 a488d7a8c5..576267cb4d 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 28ae78572c..ed2f43dc13 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 0df14f701a..2149624c84 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 4978d03f96..7cd8f953c7 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 3d2ac6bb80..6691b49ed8 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 cf04e601e2..e8674579f4 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 ad9f1ec2ee..89062b3de6 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 5a8352021c..8ecf196118 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 0b0e184087..4dfdc3430e 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 88fef17cb8..3f257dfcb3 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 a53b1afa86..d24e47992c 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 bcf3cdd724..734095038b 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 097646cee1..e4b6a958e7 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 0000000000..4aa2e9d365 --- /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 9ecd1c25f2..8a8c69ec3c 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 492ce7bc93..b4c7cb4dbb 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 b55d5eab6f..1cd78fb505 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 712b6ea258..421ba201d0 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 c3651c4034..89f7586815 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 fa17b94a62..047fe78982 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 f8a178512a..eff6c33b20 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 4a4e99db72..ecb6429cd3 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 41e74044ba..ef6dba6c0b 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 2bd1e52e52..e97deef439 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 bb0878d0d9..5d99311cee 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 bd43c6947d..f1e4456aac 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 00ee765612..fd25b84898 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 2847aeb179..e0a924906f 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 fb5ff2dd54..f2d5130957 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 23f0f0b28f..caf75ed491 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 5af3062a4f..683b005fd6 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 4874491594..f86da07ac5 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 5b951eca1c..38cfc9733a 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 ae8149b198..42046c1457 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 5b2fb0babe..390c834be2 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 19179f9907..485f2abd66 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 ec77721241..96d5280c53 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 c3dd045275..0ac8403e28 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 d3a265ebb8..67515c7d54 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 8e7d259f78..4efe6746ce 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 b1a1548105..91d7004669 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 1305f456c4..e4fad6976c 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 aa4a002fb1..a1a271b370 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 0000000000..f7d5cf2423 --- /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 4ea875f35a..dd8738f72b 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 3cb4d4ca49..a5dd32c197 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 99256b2986..20f9348082 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 2498e12f23..7fb80210eb 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 c34e1248ee..d2cac0af9b 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 0511692d46..6e7a84f0a4 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 ad53bedb9e..340c59360b 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 0c84a5fb1e..bfc0f39b5a 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 060f3545ec..7966882c6a 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 0000000000..e12cc80905 --- /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 b16408d499..0e540bb5d3 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 7dfffdbe0f..2e9ee5adef 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 82745957ff..c2dfc90a8b 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 561a5d9876..7995937fa5 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 0000000000..7544ae8a4e --- /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 43f05e29fb..dbef1d983d 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 f71d2a9726..78d978b268 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 44780da210..3be2d1627f 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 91b4650678..aec711aaba 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 0e45521e49..eb8e1c666f 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 4e47d6cc6e..fef571cb4c 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 134982a600..b2b8fcda28 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 0000000000..5906e3b6b4 --- /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 0000000000..54af8b8298 --- /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 0000000000..e8f45e8dee --- /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 0000000000..6b631c9a36 --- /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 0c71d67313..d134e58c80 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 0000000000..7a430086bd --- /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 0000000000..84439ec9ef --- /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 0000000000..28a31efef6 --- /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 d2bfa6bbaf..2b61c4d652 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 0000000000..b6edaf2635 --- /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 0000000000..771d0d2eca --- /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 0000000000..8ef6137d35 --- /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 78f490c425..cebb0cb750 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 21d64f61e4..893a305287 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 f60122075c..dd6489af6b 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 f9f95a47db..c810af3401 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 2a21dcdf61..cdb06adc25 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 0000000000..6bb016c580 --- /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 b996814951..00ac263044 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 93deb14327..21b7a5565e 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 beba0e9b6b..9d471332ad 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 3f583d063c..063d938e09 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 471c8a2629..0000000000 --- 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 fea64f8215..0000000000 --- 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 9e88035e03..5ca4b814df 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 f488929d51..51d4873bef 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 3c19d01c1c..0000000000 --- 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 d91ad02d12..637ff0ed83 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 4de144c38a..0ab62f8f07 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;