From ae482ed1f4648fb5f09e0c4c382ff401ce2cec96 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 12 Dec 2022 21:08:46 -0300 Subject: [PATCH 001/129] Implemented Ceaseless Edge's effect --- data/battle_scripts_1.s | 35 +++++++++++++++++++++++++ include/constants/battle_move_effects.h | 3 ++- src/data/battle_moves.h | 2 +- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 94a220608..d1d1e670f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -416,6 +416,18 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectDoubleShock @ EFFECT_DOUBLE_SHOCK .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE + .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE + +BattleScript_EffectCeaselessEdge:: + call BattleScript_EffectHit_Ret + trysetspikes BattleScript_ButItFailedAtkStringPpReduce + attackstring + ppreduce + attackanimation + waitanimation + printstring STRINGID_SPIKESSCATTERED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd BattleScript_AffectionBasedEndurance:: playanimation BS_TARGET, B_ANIM_AFFECTION_HANGED_ON @@ -3029,6 +3041,29 @@ BattleScript_MoveEnd:: moveendall end +BattleScript_EffectHit_Ret:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET + return + BattleScript_EffectNaturalGift: attackcanceler attackstring diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 5af1017a9..1ac102c35 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -397,7 +397,8 @@ #define EFFECT_DOUBLE_SHOCK 391 #define EFFECT_SPECIAL_ATTACK_UP_HIT 392 #define EFFECT_VICTORY_DANCE 393 +#define EFFECT_CEASELESS_EDGE 394 -#define NUM_BATTLE_MOVE_EFFECTS 394 +#define NUM_BATTLE_MOVE_EFFECTS 395 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index ef4d15039..225da6ff7 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13598,7 +13598,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_CEASELESS_EDGE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_CEASELESS_EDGE, + .effect = EFFECT_CEASELESS_EDGE, .power = 65, .type = TYPE_DARK, .accuracy = 90, From 3ce486976640d517f34188be08124bce9461d33a Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 12 Dec 2022 21:41:13 -0300 Subject: [PATCH 002/129] Implemented Shell Trap's effect --- data/battle_scripts_1.s | 18 ++++++++++++++++++ include/battle_scripts.h | 1 + include/constants/battle_move_effects.h | 3 ++- include/constants/battle_string_ids.h | 4 +++- src/battle_main.c | 13 ++++++++----- src/battle_message.c | 4 ++++ src/battle_script_commands.c | 7 ++++--- src/data/battle_moves.h | 2 +- 8 files changed, 41 insertions(+), 11 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d1d1e670f..f2a0223cf 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,6 +417,24 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE + .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + +BattleScript_EffectShellTrap: + jumpifnodamage BattleScript_EffectShellTrap_Failed + goto BattleScript_EffectHit + +BattleScript_EffectShellTrap_Failed: + printstring STRINGID_ATTACKERSHELLTRAPDIDNTWORK + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_ShellTrapSetUp:: + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL + printstring STRINGID_ATTACKERSETASHELLTRAP + waitmessage B_WAIT_TIME_LONG + end2 BattleScript_EffectCeaselessEdge:: call BattleScript_EffectHit_Ret diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 75afdbf63..89ad9302b 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -433,6 +433,7 @@ extern const u8 BattleScript_MultiHitPrintStrings[]; extern const u8 BattleScript_BurnUpRemoveType[]; extern const u8 BattleScript_TargetAbilityStatRaiseRet[]; extern const u8 BattleScript_DoubleShockRemoveType[]; +extern const u8 BattleScript_ShellTrapSetUp[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 1ac102c35..c16084c30 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -398,7 +398,8 @@ #define EFFECT_SPECIAL_ATTACK_UP_HIT 392 #define EFFECT_VICTORY_DANCE 393 #define EFFECT_CEASELESS_EDGE 394 +#define EFFECT_SHELL_TRAP 395 -#define NUM_BATTLE_MOVE_EFFECTS 395 +#define NUM_BATTLE_MOVE_EFFECTS 396 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 8dd94cca4..64ddcbebd 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -632,8 +632,10 @@ #define STRINGID_TARGETTOUGHEDITOUT 630 #define STRINGID_ATTACKERLOSTELECTRICTYPE 631 #define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 632 +#define STRINGID_ATTACKERSETASHELLTRAP 633 +#define STRINGID_ATTACKERSHELLTRAPDIDNTWORK 634 -#define BATTLESTRINGS_COUNT 633 +#define BATTLESTRINGS_COUNT 635 // 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/src/battle_main.c b/src/battle_main.c index d138cf231..8ba87133e 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -101,7 +101,7 @@ static void SetActionsAndBattlersTurnOrder(void); static void UpdateBattlerPartyOrdersOnSwitch(void); static bool8 AllAtActionConfirmed(void); static void TryChangeTurnOrder(void); -static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); +static void CheckChosenMoveForEffectsBeforeTurnStarts(void); static void CheckMegaEvolutionBeforeTurn(void); static void CheckQuickClaw_CustapBerryActivation(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); @@ -4878,7 +4878,7 @@ static void CheckMegaEvolutionBeforeTurn(void) } #if B_MEGA_EVO_TURN_ORDER <= GEN_6 - gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; #else gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved @@ -4903,11 +4903,11 @@ static void TryChangeTurnOrder(void) } } } - gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; } -static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) +static void CheckChosenMoveForEffectsBeforeTurnStarts(void) { u32 i; @@ -4921,7 +4921,7 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) && !(gDisableStructs[gBattlerAttacker].truantCounter) && !(gProtectStructs[gActiveBattler].noValidMoves)) { - switch(gChosenMoveByBattler[gActiveBattler]) + switch (gChosenMoveByBattler[gActiveBattler]) { case MOVE_FOCUS_PUNCH: BattleScriptExecute(BattleScript_FocusPunchSetUp); @@ -4929,6 +4929,9 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) case MOVE_BEAK_BLAST: BattleScriptExecute(BattleScript_BeakBlastSetUp); return; + case MOVE_SHELL_TRAP: + BattleScriptExecute(BattleScript_ShellTrapSetUp); + return; } } } diff --git a/src/battle_message.c b/src/battle_message.c index 031261a28..60578897e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -761,9 +761,13 @@ static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melte static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!"); static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!"); static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); +static const u8 sText_AttackerSetAShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set\na shell trap!"); +static const u8 sText_AttackerShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap\ndidn't work!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_ATTACKERSHELLTRAPDIDNTWORK - BATTLESTRINGS_TABLE_START] = sText_AttackerShellTrapDidntWork, + [STRINGID_ATTACKERSETASHELLTRAP - BATTLESTRINGS_TABLE_START] = sText_AttackerSetAShellTrap, [STRINGID_ATTACKERSWITCHEDSTATWITHTARGET - BATTLESTRINGS_TABLE_START] = sText_AttackerSwitchedStatWithTarget, [STRINGID_TARGETTOUGHEDITOUT - BATTLESTRINGS_TABLE_START] = sText_TargetToughedItOut, [STRINGID_ATTACKERMELTEDTHEICE - BATTLESTRINGS_TABLE_START] = sText_AttackerMeltedTheIce, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9c780c28e..3d85d1379 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10031,7 +10031,7 @@ static void Cmd_various(void) gBattleMons[gActiveBattler].item = gLastUsedItem; break; case VARIOUS_SET_BEAK_BLAST: - gProtectStructs[gBattlerAttacker].beakBlastCharge = TRUE; + gProtectStructs[gActiveBattler].beakBlastCharge = TRUE; break; case VARIOUS_SWAP_SIDE_STATUSES: CourtChangeSwapSideStatuses(); @@ -11926,8 +11926,9 @@ static void Cmd_trysetencore(void) } if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE - || gLastMoves[gBattlerTarget] == MOVE_ENCORE - || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) + || gLastMoves[gBattlerTarget] == MOVE_ENCORE + || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE + || gLastMoves[gBattlerTarget] == MOVE_SHELL_TRAP) { i = MAX_MON_MOVES; } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 225da6ff7..6badf0ee5 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -11616,7 +11616,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SHELL_TRAP] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELL_TRAP, + .effect = EFFECT_SHELL_TRAP, .power = 150, .type = TYPE_FIRE, .accuracy = 100, From 2cb9400ef0b6b732da416d10a12065ffd38191e4 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Tue, 13 Dec 2022 02:19:41 -0300 Subject: [PATCH 003/129] Implemented Dire Claw's effect --- data/battle_scripts_1.s | 5 +++++ include/constants/battle.h | 3 ++- include/constants/battle_move_effects.h | 3 ++- src/battle_script_commands.c | 16 ++++++++++++++++ src/data/battle_moves.h | 4 ++-- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index f2a0223cf..b3313abbe 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -418,6 +418,11 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW + +BattleScript_EffectDireClaw:: + setmoveeffect MOVE_EFFECT_DIRE_CLAW + goto BattleScript_EffectHit BattleScript_EffectShellTrap: jumpifnodamage BattleScript_EffectShellTrap_Failed diff --git a/include/constants/battle.h b/include/constants/battle.h index be44c21cb..fa9d4bd18 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -371,8 +371,9 @@ #define MOVE_EFFECT_RELIC_SONG 69 #define MOVE_EFFECT_TRAP_BOTH 70 #define MOVE_EFFECT_DOUBLE_SHOCK 71 +#define MOVE_EFFECT_DIRE_CLAW 72 -#define NUM_MOVE_EFFECTS 72 +#define NUM_MOVE_EFFECTS 73 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index c16084c30..fa3184855 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -399,7 +399,8 @@ #define EFFECT_VICTORY_DANCE 393 #define EFFECT_CEASELESS_EDGE 394 #define EFFECT_SHELL_TRAP 395 +#define EFFECT_DIRE_CLAW 396 -#define NUM_BATTLE_MOVE_EFFECTS 396 +#define NUM_BATTLE_MOVE_EFFECTS 397 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3d85d1379..e5d7935fd 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3647,6 +3647,22 @@ void SetMoveEffect(bool32 primary, u32 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_DoubleShockRemoveType; break; + case MOVE_EFFECT_DIRE_CLAW: + if (gBattleMons[gEffectBattler].status1) + { + gBattlescriptCurrInstr++; + } + else + { + DIRE_CLAW_STATUS_PICK: + gBattleScripting.moveEffect = Random() % 6; + if (gBattleScripting.moveEffect == MOVE_EFFECT_NONE + || gBattleScripting.moveEffect == MOVE_EFFECT_BURN + || gBattleScripting.moveEffect == MOVE_EFFECT_FREEZE) + goto DIRE_CLAW_STATUS_PICK; + SetMoveEffect(FALSE, 0); + } + break; } } } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 6badf0ee5..6481b7d45 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13279,11 +13279,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #else .power = 60, #endif - .effect = EFFECT_PLACEHOLDER, // EFFECT_DIRE_CLAW, + .effect = EFFECT_DIRE_CLAW, .type = TYPE_POISON, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, From 1229fa752a3b711e802f401e4a5e09d3160b9bfd Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 14 Dec 2022 09:14:40 -0300 Subject: [PATCH 004/129] Fixed Triple Axe's target, added its effect and fixed Ceaseless Edge's --- data/battle_scripts_1.s | 12 ++++++++---- include/constants/battle_move_effects.h | 3 ++- src/data/battle_moves.h | 4 ++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index b3313abbe..622463830 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -419,6 +419,14 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW + .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE + +BattleScript_EffectStoneAxe:: + call BattleScript_EffectHit_Ret + setstealthrock BattleScript_ButItFailed + printstring STRINGID_POINTEDSTONESFLOAT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW @@ -444,10 +452,6 @@ BattleScript_ShellTrapSetUp:: BattleScript_EffectCeaselessEdge:: call BattleScript_EffectHit_Ret trysetspikes BattleScript_ButItFailedAtkStringPpReduce - attackstring - ppreduce - attackanimation - waitanimation printstring STRINGID_SPIKESSCATTERED waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index fa3184855..16aac5284 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -400,7 +400,8 @@ #define EFFECT_CEASELESS_EDGE 394 #define EFFECT_SHELL_TRAP 395 #define EFFECT_DIRE_CLAW 396 +#define EFFECT_STONE_AXE 397 -#define NUM_BATTLE_MOVE_EFFECTS 397 +#define NUM_BATTLE_MOVE_EFFECTS 398 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 6481b7d45..22b695fc4 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13326,13 +13326,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_STONE_AXE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_STONE_AXE, + .effect = EFFECT_STONE_AXE, .power = 65, .type = TYPE_ROCK, .accuracy = 90, .pp = 15, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, From 4bb86c5d961a68da83f5798a0dd06be4a8507c97 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 14 Dec 2022 09:33:09 -0300 Subject: [PATCH 005/129] Implemented Barb Barrage's effect --- data/battle_scripts_1.s | 2 ++ include/constants/battle_move_effects.h | 3 ++- src/battle_util.c | 4 ++++ src/data/battle_moves.h | 10 +++++++--- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 622463830..ec604ebc6 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -420,6 +420,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE + .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE BattleScript_EffectStoneAxe:: call BattleScript_EffectHit_Ret @@ -3265,6 +3266,7 @@ BattleScript_CantMakeAsleep:: orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd +BattleScript_EffectBarbBarrage: BattleScript_EffectPoisonHit: setmoveeffect MOVE_EFFECT_POISON goto BattleScript_EffectHit diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 16aac5284..f51ae08c1 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -401,7 +401,8 @@ #define EFFECT_SHELL_TRAP 395 #define EFFECT_DIRE_CLAW 396 #define EFFECT_STONE_AXE 397 +#define EFFECT_BARB_BARRAGE 398 -#define NUM_BATTLE_MOVE_EFFECTS 398 +#define NUM_BATTLE_MOVE_EFFECTS 399 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/battle_util.c b/src/battle_util.c index 00e3b869b..08eea7f41 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8483,6 +8483,10 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower = CalcBeatUpPower(); #endif break; + case EFFECT_BARB_BARRAGE: + if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) + basePower *= 2; + break; } // Move-specific base power changes diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 22b695fc4..227f77daf 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13490,12 +13490,16 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_BARB_BARRAGE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_BARB_BARRAGE, + .effect = EFFECT_BARB_BARRAGE, .power = 60, .type = TYPE_POISON, .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .pp = 10, + #else + .pp = 15, + #endif + .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, From 9972cce0ec3ad30c7acf2c853aec3fc996a93833 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 21 Dec 2022 20:05:10 -0300 Subject: [PATCH 006/129] Updated MOVE_EFFECT_DIRE_CLAW --- src/battle_script_commands.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e5d7935fd..bb0d20199 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3656,7 +3656,7 @@ void SetMoveEffect(bool32 primary, u32 certain) { DIRE_CLAW_STATUS_PICK: gBattleScripting.moveEffect = Random() % 6; - if (gBattleScripting.moveEffect == MOVE_EFFECT_NONE + if (gBattleScripting.moveEffect == 0 || gBattleScripting.moveEffect == MOVE_EFFECT_BURN || gBattleScripting.moveEffect == MOVE_EFFECT_FREEZE) goto DIRE_CLAW_STATUS_PICK; From 0159065deaf90c3d8296c1ecca6b2912fdc6a8b9 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 28 Dec 2022 07:51:11 -0300 Subject: [PATCH 007/129] Removed Shell Trap It's time to let it go for my own mental sanity. Besides, it's a Gen. 7 move. I shouldn't have added it here. --- data/battle_scripts_1.s | 18 ------------------ include/battle_scripts.h | 1 - include/constants/battle_move_effects.h | 9 ++++----- include/constants/battle_string_ids.h | 4 +--- src/battle_main.c | 13 +++++-------- src/battle_message.c | 4 ---- src/battle_script_commands.c | 5 ++--- src/data/battle_moves.h | 2 +- 8 files changed, 13 insertions(+), 43 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ec604ebc6..49d06a033 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,7 +417,6 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE - .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE @@ -433,23 +432,6 @@ BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit -BattleScript_EffectShellTrap: - jumpifnodamage BattleScript_EffectShellTrap_Failed - goto BattleScript_EffectHit - -BattleScript_EffectShellTrap_Failed: - printstring STRINGID_ATTACKERSHELLTRAPDIDNTWORK - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_ShellTrapSetUp:: - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 - playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL - printstring STRINGID_ATTACKERSETASHELLTRAP - waitmessage B_WAIT_TIME_LONG - end2 - BattleScript_EffectCeaselessEdge:: call BattleScript_EffectHit_Ret trysetspikes BattleScript_ButItFailedAtkStringPpReduce diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 89ad9302b..75afdbf63 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -433,7 +433,6 @@ extern const u8 BattleScript_MultiHitPrintStrings[]; extern const u8 BattleScript_BurnUpRemoveType[]; extern const u8 BattleScript_TargetAbilityStatRaiseRet[]; extern const u8 BattleScript_DoubleShockRemoveType[]; -extern const u8 BattleScript_ShellTrapSetUp[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index f51ae08c1..423fa9a58 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -398,11 +398,10 @@ #define EFFECT_SPECIAL_ATTACK_UP_HIT 392 #define EFFECT_VICTORY_DANCE 393 #define EFFECT_CEASELESS_EDGE 394 -#define EFFECT_SHELL_TRAP 395 -#define EFFECT_DIRE_CLAW 396 -#define EFFECT_STONE_AXE 397 -#define EFFECT_BARB_BARRAGE 398 +#define EFFECT_DIRE_CLAW 395 +#define EFFECT_STONE_AXE 396 +#define EFFECT_BARB_BARRAGE 397 -#define NUM_BATTLE_MOVE_EFFECTS 399 +#define NUM_BATTLE_MOVE_EFFECTS 398 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 64ddcbebd..8dd94cca4 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -632,10 +632,8 @@ #define STRINGID_TARGETTOUGHEDITOUT 630 #define STRINGID_ATTACKERLOSTELECTRICTYPE 631 #define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 632 -#define STRINGID_ATTACKERSETASHELLTRAP 633 -#define STRINGID_ATTACKERSHELLTRAPDIDNTWORK 634 -#define BATTLESTRINGS_COUNT 635 +#define BATTLESTRINGS_COUNT 633 // 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/src/battle_main.c b/src/battle_main.c index 8ba87133e..d138cf231 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -101,7 +101,7 @@ static void SetActionsAndBattlersTurnOrder(void); static void UpdateBattlerPartyOrdersOnSwitch(void); static bool8 AllAtActionConfirmed(void); static void TryChangeTurnOrder(void); -static void CheckChosenMoveForEffectsBeforeTurnStarts(void); +static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); static void CheckMegaEvolutionBeforeTurn(void); static void CheckQuickClaw_CustapBerryActivation(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); @@ -4878,7 +4878,7 @@ static void CheckMegaEvolutionBeforeTurn(void) } #if B_MEGA_EVO_TURN_ORDER <= GEN_6 - gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; #else gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved @@ -4903,11 +4903,11 @@ static void TryChangeTurnOrder(void) } } } - gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; } -static void CheckChosenMoveForEffectsBeforeTurnStarts(void) +static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) { u32 i; @@ -4921,7 +4921,7 @@ static void CheckChosenMoveForEffectsBeforeTurnStarts(void) && !(gDisableStructs[gBattlerAttacker].truantCounter) && !(gProtectStructs[gActiveBattler].noValidMoves)) { - switch (gChosenMoveByBattler[gActiveBattler]) + switch(gChosenMoveByBattler[gActiveBattler]) { case MOVE_FOCUS_PUNCH: BattleScriptExecute(BattleScript_FocusPunchSetUp); @@ -4929,9 +4929,6 @@ static void CheckChosenMoveForEffectsBeforeTurnStarts(void) case MOVE_BEAK_BLAST: BattleScriptExecute(BattleScript_BeakBlastSetUp); return; - case MOVE_SHELL_TRAP: - BattleScriptExecute(BattleScript_ShellTrapSetUp); - return; } } } diff --git a/src/battle_message.c b/src/battle_message.c index 60578897e..031261a28 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -761,13 +761,9 @@ static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melte static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!"); static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!"); static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); -static const u8 sText_AttackerSetAShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set\na shell trap!"); -static const u8 sText_AttackerShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap\ndidn't work!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { - [STRINGID_ATTACKERSHELLTRAPDIDNTWORK - BATTLESTRINGS_TABLE_START] = sText_AttackerShellTrapDidntWork, - [STRINGID_ATTACKERSETASHELLTRAP - BATTLESTRINGS_TABLE_START] = sText_AttackerSetAShellTrap, [STRINGID_ATTACKERSWITCHEDSTATWITHTARGET - BATTLESTRINGS_TABLE_START] = sText_AttackerSwitchedStatWithTarget, [STRINGID_TARGETTOUGHEDITOUT - BATTLESTRINGS_TABLE_START] = sText_TargetToughedItOut, [STRINGID_ATTACKERMELTEDTHEICE - BATTLESTRINGS_TABLE_START] = sText_AttackerMeltedTheIce, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bb0d20199..6e0f4c05d 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10047,7 +10047,7 @@ static void Cmd_various(void) gBattleMons[gActiveBattler].item = gLastUsedItem; break; case VARIOUS_SET_BEAK_BLAST: - gProtectStructs[gActiveBattler].beakBlastCharge = TRUE; + gProtectStructs[gBattlerAttacker].beakBlastCharge = TRUE; break; case VARIOUS_SWAP_SIDE_STATUSES: CourtChangeSwapSideStatuses(); @@ -11943,8 +11943,7 @@ static void Cmd_trysetencore(void) if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE || gLastMoves[gBattlerTarget] == MOVE_ENCORE - || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE - || gLastMoves[gBattlerTarget] == MOVE_SHELL_TRAP) + || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) { i = MAX_MON_MOVES; } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 227f77daf..40663a421 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -11616,7 +11616,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SHELL_TRAP] = { - .effect = EFFECT_SHELL_TRAP, + .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELL_TRAP, .power = 150, .type = TYPE_FIRE, .accuracy = 100, From f5c165ff0ccc0801ff0a9b93619103cc81940f91 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 28 Dec 2022 08:18:15 -0300 Subject: [PATCH 008/129] Updated Dire Claw's effect again Thanks to MGriffin for providing a much nicer code for it. --- src/battle_script_commands.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6e0f4c05d..df995ef60 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3654,13 +3654,9 @@ void SetMoveEffect(bool32 primary, u32 certain) } else { - DIRE_CLAW_STATUS_PICK: - gBattleScripting.moveEffect = Random() % 6; - if (gBattleScripting.moveEffect == 0 - || gBattleScripting.moveEffect == MOVE_EFFECT_BURN - || gBattleScripting.moveEffect == MOVE_EFFECT_FREEZE) - goto DIRE_CLAW_STATUS_PICK; - SetMoveEffect(FALSE, 0); + static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; + gBattleScripting.moveEffect = sDireClawEffects[Random() % 3]; + SetMoveEffect(TRUE, 0); } break; } @@ -11942,8 +11938,8 @@ static void Cmd_trysetencore(void) } if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE - || gLastMoves[gBattlerTarget] == MOVE_ENCORE - || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) + || gLastMoves[gBattlerTarget] == MOVE_ENCORE + || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) { i = MAX_MON_MOVES; } From 9a6bdfb74f50d9133860944c8824382d907aba4c Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 4 Jan 2023 12:13:34 -0300 Subject: [PATCH 009/129] Added AI conditionals for the new move effects in this batch --- src/battle_ai_main.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 92866a7c2..5ec8e91aa 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1486,6 +1486,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } break; case EFFECT_SPIKES: + case EFFECT_CEASELESS_EDGE: if (gSideTimers[GetBattlerSide(battlerDef)].spikesAmount >= 3) score -= 10; else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) @@ -1493,6 +1494,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 10; // only one mon needs to set up the last layer of Spikes break; case EFFECT_STEALTH_ROCK: + case EFFECT_STONE_AXE: if (gSideTimers[GetBattlerSide(battlerDef)].stealthRockAmount > 0 || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) //Only one mon needs to set up Stealth Rocks score -= 10; @@ -3472,6 +3474,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_TOXIC: case EFFECT_POISON: + case EFFECT_BARB_BARRAGE: IncreasePoisonScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_LIGHT_SCREEN: @@ -3865,7 +3868,9 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_SPIKES: + case EFFECT_CEASELESS_EDGE: case EFFECT_STEALTH_ROCK: + case EFFECT_STONE_AXE: case EFFECT_STICKY_WEB: case EFFECT_TOXIC_SPIKES: if (AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE || CountUsablePartyMons(battlerDef) == 0) @@ -4596,6 +4601,10 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; }*/ break; + case EFFECT_DIRE_CLAW: + if (gBattleMons[battlerDef].status1 & STATUS1_NONE) + score += 3; + break; case EFFECT_FEINT: if (gBattleMoves[predictedMove].effect == EFFECT_PROTECT) score += 3; @@ -4900,6 +4909,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_HAIL: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: + case EFFECT_STONE_AXE: score += 2; break; default: From 2414283bb76739b5f24e0926a08e9366744a196d Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 4 Jan 2023 12:32:17 -0300 Subject: [PATCH 010/129] Removed BattleScript_EffectHit_Ret --- data/battle_scripts_1.s | 71 +++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d606809ed..d64336638 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -423,22 +423,62 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE BattleScript_EffectStoneAxe:: - call BattleScript_EffectHit_Ret + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET setstealthrock BattleScript_ButItFailed printstring STRINGID_POINTEDSTONESFLOAT waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + moveendall + end BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit BattleScript_EffectCeaselessEdge:: - call BattleScript_EffectHit_Ret + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET trysetspikes BattleScript_ButItFailedAtkStringPpReduce printstring STRINGID_SPIKESSCATTERED waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + moveendall + end BattleScript_EffectTeatime:: attackcanceler @@ -3151,29 +3191,6 @@ BattleScript_MoveEnd:: moveendall end -BattleScript_EffectHit_Ret:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - seteffectwithchance - tryfaintmon BS_TARGET - return - BattleScript_EffectNaturalGift: attackcanceler attackstring From 7e398ce80e1858833d33110e469becd5c7c334f9 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 4 Jan 2023 12:45:49 -0300 Subject: [PATCH 011/129] Corrected the AI conditionals --- src/battle_ai_main.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 5ec8e91aa..2f9690250 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1486,7 +1486,6 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } break; case EFFECT_SPIKES: - case EFFECT_CEASELESS_EDGE: if (gSideTimers[GetBattlerSide(battlerDef)].spikesAmount >= 3) score -= 10; else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) @@ -1494,7 +1493,6 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 10; // only one mon needs to set up the last layer of Spikes break; case EFFECT_STEALTH_ROCK: - case EFFECT_STONE_AXE: if (gSideTimers[GetBattlerSide(battlerDef)].stealthRockAmount > 0 || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) //Only one mon needs to set up Stealth Rocks score -= 10; @@ -4601,10 +4599,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; }*/ break; - case EFFECT_DIRE_CLAW: - if (gBattleMons[battlerDef].status1 & STATUS1_NONE) - score += 3; - break; case EFFECT_FEINT: if (gBattleMoves[predictedMove].effect == EFFECT_PROTECT) score += 3; From 72566e63230497ebf8533d8b254ea33ba7f9216a Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 5 Jan 2023 03:01:18 -0300 Subject: [PATCH 012/129] Turned Stone Axe's and Ceaseless Edge's effects into MOVE_EFFECTs --- data/battle_scripts_1.s | 24 ++++++++++++++++-------- include/battle_scripts.h | 2 ++ include/constants/battle.h | 4 +++- src/battle_script_commands.c | 20 ++++++++++++++++++++ 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d64336638..238c0e21b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -441,14 +441,18 @@ BattleScript_EffectStoneAxe:: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - seteffectwithchance tryfaintmon BS_TARGET - setstealthrock BattleScript_ButItFailed - printstring STRINGID_POINTEDSTONESFLOAT - waitmessage B_WAIT_TIME_LONG + setmoveeffect MOVE_EFFECT_STEALTH_ROCK + seteffectprimary moveendall end +BattleScript_StealthRockActivates:: + setstealthrock BattleScript_MoveEnd + printstring STRINGID_POINTEDSTONESFLOAT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit @@ -472,14 +476,18 @@ BattleScript_EffectCeaselessEdge:: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - seteffectwithchance tryfaintmon BS_TARGET - trysetspikes BattleScript_ButItFailedAtkStringPpReduce - printstring STRINGID_SPIKESSCATTERED - waitmessage B_WAIT_TIME_LONG + setmoveeffect MOVE_EFFECT_SPIKES + seteffectprimary moveendall end +BattleScript_SpikesActivate:: + trysetspikes BattleScript_MoveEnd + printstring STRINGID_SPIKESSCATTERED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectTeatime:: attackcanceler attackstring diff --git a/include/battle_scripts.h b/include/battle_scripts.h index d79566a44..55caf9022 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -448,6 +448,8 @@ extern const u8 BattleScript_SupremeOverlordActivates[]; extern const u8 BattleScript_CostarActivates[]; extern const u8 BattleScript_ToxicDebrisActivates[]; extern const u8 BattleScript_EarthEaterActivates[]; +extern const u8 BattleScript_StealthRockActivates[]; +extern const u8 BattleScript_SpikesActivate[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle.h b/include/constants/battle.h index fa9d4bd18..e7e65951b 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -372,8 +372,10 @@ #define MOVE_EFFECT_TRAP_BOTH 70 #define MOVE_EFFECT_DOUBLE_SHOCK 71 #define MOVE_EFFECT_DIRE_CLAW 72 +#define MOVE_EFFECT_STEALTH_ROCK 73 +#define MOVE_EFFECT_SPIKES 74 -#define NUM_MOVE_EFFECTS 73 +#define NUM_MOVE_EFFECTS 75 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fcf09641f..9a8a2cabf 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2789,6 +2789,7 @@ void SetMoveEffect(bool32 primary, u32 certain) bool32 mirrorArmorReflected = (GetBattlerAbility(gBattlerTarget) == ABILITY_MIRROR_ARMOR); u32 flags = 0; u16 battlerAbility; + bool8 activateAfterFaint = FALSE; if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT && gBattleMons[gBattlerTarget].hp != 0 @@ -2806,6 +2807,10 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattleStruct->moveEffect2 = gBattleScripting.moveEffect; gBattlescriptCurrInstr++; return; + case MOVE_EFFECT_STEALTH_ROCK: + case MOVE_EFFECT_SPIKES: + activateAfterFaint = TRUE; + break; } if (gBattleScripting.moveEffect & MOVE_EFFECT_AFFECTS_USER) @@ -2838,6 +2843,7 @@ void SetMoveEffect(bool32 primary, u32 certain) INCREMENT_RESET_RETURN if (gBattleMons[gEffectBattler].hp == 0 + && !activateAfterFaint && gBattleScripting.moveEffect != MOVE_EFFECT_PAYDAY && gBattleScripting.moveEffect != MOVE_EFFECT_STEAL_ITEM && gBattleScripting.moveEffect != MOVE_EFFECT_BUG_BITE) @@ -3659,6 +3665,20 @@ void SetMoveEffect(bool32 primary, u32 certain) SetMoveEffect(TRUE, 0); } break; + case MOVE_EFFECT_STEALTH_ROCK: + if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_STEALTH_ROCK)) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_StealthRockActivates; + } + break; + case MOVE_EFFECT_SPIKES: + if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SPIKES)) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_SpikesActivate; + } + break; } } } From f39f48fc5102c10eeed978e9832f501c607e64d5 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 5 Jan 2023 03:07:28 -0300 Subject: [PATCH 013/129] Made MOVE_EFFECT_DIRE_CLAW a tiny bit prettier --- src/battle_script_commands.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9a8a2cabf..74e5f31ef 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3654,11 +3654,7 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattlescriptCurrInstr = BattleScript_DoubleShockRemoveType; break; case MOVE_EFFECT_DIRE_CLAW: - if (gBattleMons[gEffectBattler].status1) - { - gBattlescriptCurrInstr++; - } - else + if (!gBattleMons[gEffectBattler].status1) { static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; gBattleScripting.moveEffect = sDireClawEffects[Random() % 3]; From d699d55ba319e68b06af0bcbb23c12c182c16ec4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 12 Feb 2023 01:19:03 -0300 Subject: [PATCH 014/129] Reformatted gNatureStatTable --- src/pokemon.c | 53 +++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index e8d334a6a..b4844d740 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1355,33 +1355,32 @@ const struct SpindaSpot gSpindaSpotGraphics[] = #include "data/pokemon/item_effects.h" const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] = -{ - // Atk Def Spd Sp.Atk Sp.Def - [NATURE_HARDY] = { 0, 0, 0, 0, 0}, - [NATURE_LONELY] = { +1, -1, 0, 0, 0}, - [NATURE_BRAVE] = { +1, 0, -1, 0, 0}, - [NATURE_ADAMANT] = { +1, 0, 0, -1, 0}, - [NATURE_NAUGHTY] = { +1, 0, 0, 0, -1}, - [NATURE_BOLD] = { -1, +1, 0, 0, 0}, - [NATURE_DOCILE] = { 0, 0, 0, 0, 0}, - [NATURE_RELAXED] = { 0, +1, -1, 0, 0}, - [NATURE_IMPISH] = { 0, +1, 0, -1, 0}, - [NATURE_LAX] = { 0, +1, 0, 0, -1}, - [NATURE_TIMID] = { -1, 0, +1, 0, 0}, - [NATURE_HASTY] = { 0, -1, +1, 0, 0}, - [NATURE_SERIOUS] = { 0, 0, 0, 0, 0}, - [NATURE_JOLLY] = { 0, 0, +1, -1, 0}, - [NATURE_NAIVE] = { 0, 0, +1, 0, -1}, - [NATURE_MODEST] = { -1, 0, 0, +1, 0}, - [NATURE_MILD] = { 0, -1, 0, +1, 0}, - [NATURE_QUIET] = { 0, 0, -1, +1, 0}, - [NATURE_BASHFUL] = { 0, 0, 0, 0, 0}, - [NATURE_RASH] = { 0, 0, 0, +1, -1}, - [NATURE_CALM] = { -1, 0, 0, 0, +1}, - [NATURE_GENTLE] = { 0, -1, 0, 0, +1}, - [NATURE_SASSY] = { 0, 0, -1, 0, +1}, - [NATURE_CAREFUL] = { 0, 0, 0, -1, +1}, - [NATURE_QUIRKY] = { 0, 0, 0, 0, 0}, +{ // Attack Defense Speed Sp.Atk Sp.Def + [NATURE_HARDY] = { 0, 0, 0, 0, 0 }, + [NATURE_LONELY] = { +1, -1, 0, 0, 0 }, + [NATURE_BRAVE] = { +1, 0, -1, 0, 0 }, + [NATURE_ADAMANT] = { +1, 0, 0, -1, 0 }, + [NATURE_NAUGHTY] = { +1, 0, 0, 0, -1 }, + [NATURE_BOLD] = { -1, +1, 0, 0, 0 }, + [NATURE_DOCILE] = { 0, 0, 0, 0, 0 }, + [NATURE_RELAXED] = { 0, +1, -1, 0, 0 }, + [NATURE_IMPISH] = { 0, +1, 0, -1, 0 }, + [NATURE_LAX] = { 0, +1, 0, 0, -1 }, + [NATURE_TIMID] = { -1, 0, +1, 0, 0 }, + [NATURE_HASTY] = { 0, -1, +1, 0, 0 }, + [NATURE_SERIOUS] = { 0, 0, 0, 0, 0 }, + [NATURE_JOLLY] = { 0, 0, +1, -1, 0 }, + [NATURE_NAIVE] = { 0, 0, +1, 0, -1 }, + [NATURE_MODEST] = { -1, 0, 0, +1, 0 }, + [NATURE_MILD] = { 0, -1, 0, +1, 0 }, + [NATURE_QUIET] = { 0, 0, -1, +1, 0 }, + [NATURE_BASHFUL] = { 0, 0, 0, 0, 0 }, + [NATURE_RASH] = { 0, 0, 0, +1, -1 }, + [NATURE_CALM] = { -1, 0, 0, 0, +1 }, + [NATURE_GENTLE] = { 0, -1, 0, 0, +1 }, + [NATURE_SASSY] = { 0, 0, -1, 0, +1 }, + [NATURE_CAREFUL] = { 0, 0, 0, -1, +1 }, + [NATURE_QUIRKY] = { 0, 0, 0, 0, 0 }, }; #include "data/pokemon/tmhm_learnsets.h" From 0df56b808d3f766f22cd65a0061067df9966e46a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 14 Feb 2023 11:40:15 -0500 Subject: [PATCH 015/129] Remove duplicate metatile label sections --- include/constants/metatile_labels.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 71aac2308..9569dad78 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -47,12 +47,6 @@ #define METATILE_Building_PC_Off 0x004 #define METATILE_Building_PC_On 0x005 -// gTileset_PokemonCenter -#define METATILE_PokemonCenter_Door_CableClub 0x264 - -// gTileset_Shop -#define METATILE_Shop_Door_Elevator 0x285 - // gTileset_Petalburg #define METATILE_Petalburg_Door_Littleroot 0x248 #define METATILE_Petalburg_Door_BirchsLab 0x249 @@ -122,6 +116,7 @@ #define METATILE_BrendansMaysHouse_BookOnTable 0x293 // gTileset_Shop +#define METATILE_Shop_Door_Elevator 0x285 #define METATILE_Shop_Laptop1_Normal 0x29D #define METATILE_Shop_Laptop2_Normal 0x2A5 #define METATILE_Shop_Laptop1_Flash 0x258 @@ -294,6 +289,7 @@ #define METATILE_EverGrande_Door_PokemonLeague 0x21D // gTileset_PokemonCenter +#define METATILE_PokemonCenter_Door_CableClub 0x264 #define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280 #define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282 #define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284 From b656565af0ce22d3ad724728b1361a1681bcaf9d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 14 Feb 2023 11:42:13 -0500 Subject: [PATCH 016/129] Standardize RS mossdeep gym metatile labels --- data/maps/MossdeepCity_Gym/scripts.inc | 48 +++++++++++++------------- include/constants/metatile_labels.h | 16 ++++----- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/data/maps/MossdeepCity_Gym/scripts.inc b/data/maps/MossdeepCity_Gym/scripts.inc index b47011d68..8892097de 100644 --- a/data/maps/MossdeepCity_Gym/scripts.inc +++ b/data/maps/MossdeepCity_Gym/scripts.inc @@ -26,26 +26,26 @@ MossdeepCity_Gym_EventScript_CheckSwitch4:: @ All the below set metatile scripts are leftover from RS and are functionally unused MossdeepCity_Gym_EventScript_SetSwitch1Metatiles:: - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch2 end MossdeepCity_Gym_EventScript_SetSwitch2Metatiles:: - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch3 end MossdeepCity_Gym_EventScript_SetSwitch3Metatiles:: - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Left, FALSE + setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch4 end MossdeepCity_Gym_EventScript_SetSwitch4Metatiles:: - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, FALSE - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Up, FALSE + setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Down, TRUE end MossdeepCity_Gym_EventScript_TateAndLiza:: @@ -116,8 +116,8 @@ MossdeepCity_Gym_EventScript_Switch1:: setflag FLAG_MOSSDEEP_GYM_SWITCH_1 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -131,8 +131,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch1:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_1 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Left, FALSE + setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -142,8 +142,8 @@ MossdeepCity_Gym_EventScript_Switch2:: setflag FLAG_MOSSDEEP_GYM_SWITCH_2 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -151,8 +151,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch2:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_2 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Down, FALSE - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Down, FALSE + setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -162,8 +162,8 @@ MossdeepCity_Gym_EventScript_Switch3:: setflag FLAG_MOSSDEEP_GYM_SWITCH_3 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Left, FALSE + setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -171,8 +171,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch3:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_3 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -182,8 +182,8 @@ MossdeepCity_Gym_EventScript_Switch4:: setflag FLAG_MOSSDEEP_GYM_SWITCH_4 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, FALSE - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Up, FALSE + setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -191,8 +191,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch4:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_4 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 9569dad78..76e3d8fde 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -95,15 +95,15 @@ #define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C #define METATILE_PetalburgGym_Door 0x224 -// gTileset_MossdeepGym from R/S -#define METATILE_RS_MossdeepGym_RedArrow_Right 0x204 -#define METATILE_RS_MossdeepGym_RedArrow_Left 0x20C -#define METATILE_RS_MossdeepGym_RedArrow_Up 0x20D -#define METATILE_RS_MossdeepGym_RedArrow_Down 0x205 -#define METATILE_RS_MossdeepGym_Switch_Up 0x238 -#define METATILE_RS_MossdeepGym_Switch_Down 0x239 +// gTileset_RSMossdeepGym +#define METATILE_RSMossdeepGym_RedArrow_Right 0x204 +#define METATILE_RSMossdeepGym_RedArrow_Left 0x20C +#define METATILE_RSMossdeepGym_RedArrow_Up 0x20D +#define METATILE_RSMossdeepGym_RedArrow_Down 0x205 +#define METATILE_RSMossdeepGym_Switch_Up 0x238 +#define METATILE_RSMossdeepGym_Switch_Down 0x239 -// gTileset_MossdeepGym from Emerald +// gTileset_MossdeepGym #define METATILE_MossdeepGym_YellowArrow_Right 0x250 // gTileset_BrendansMaysHouse From d3d680c1dd72f770075a19c3c82ae549ae5876ae Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 14 Feb 2023 11:43:26 -0500 Subject: [PATCH 017/129] Sort metatile labels alphabetically --- include/constants/metatile_labels.h | 1478 +++++++++++++-------------- 1 file changed, 739 insertions(+), 739 deletions(-) diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 76e3d8fde..c2c018761 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -1,790 +1,790 @@ #ifndef GUARD_METATILE_LABELS_H #define GUARD_METATILE_LABELS_H -// gTileset_General -#define METATILE_General_Grass 0x001 -#define METATILE_General_TallGrass 0x00D -#define METATILE_General_LongGrass 0x015 -#define METATILE_General_TallGrass_TreeUp 0x025 -#define METATILE_General_Grass_TreeUp 0x00E -#define METATILE_General_TallGrass_TreeLeft 0x1C6 -#define METATILE_General_TallGrass_TreeRight 0x1C7 -#define METATILE_General_Grass_TreeLeft 0x1CE -#define METATILE_General_Grass_TreeRight 0x1CF -#define METATILE_General_MuddySlope_Frame0 0x0E8 -#define METATILE_General_MuddySlope_Frame1 0x0E9 -#define METATILE_General_MuddySlope_Frame2 0x0EA -#define METATILE_General_MuddySlope_Frame3 0x0EB -#define METATILE_General_SandPit_Center 0x121 -#define METATILE_General_Door 0x021 -#define METATILE_General_Door_PokeMart 0x041 -#define METATILE_General_Door_PokeCenter 0x061 -#define METATILE_General_Door_Gym 0x1CD -#define METATILE_General_Door_Contest 0x1DB -#define METATILE_General_CaveEntrance_Top 0x09F -#define METATILE_General_CaveEntrance_Bottom 0x0A7 -#define METATILE_General_RockWall_GrassBase 0x079 -#define METATILE_General_RockWall_RockBase 0x07C -#define METATILE_General_RockWall_SandBase 0x091 -#define METATILE_General_CalmWater 0x170 -#define METATILE_General_RoughWater 0x14E -#define METATILE_General_RoughDeepWater 0x14F -#define METATILE_General_ReflectiveWater 0x0A1 -#define METATILE_General_SecretBase_TreeLeft 0x026 -#define METATILE_General_SecretBase_TreeRight 0x027 -#define METATILE_General_SecretBase_VineLeft 0x036 -#define METATILE_General_SecretBase_VineRight 0x037 -#define METATILE_General_RedCaveIndent 0x1A0 -#define METATILE_General_RedCaveOpen 0x1A1 -#define METATILE_General_YellowCaveIndent 0x1A8 -#define METATILE_General_YellowCaveOpen 0x1A9 -#define METATILE_General_BlueCaveIndent 0x1B0 -#define METATILE_General_BlueCaveOpen 0x1B1 - -// gTileset_Building -#define METATILE_Building_TV_Off 0x002 -#define METATILE_Building_TV_On 0x003 -#define METATILE_Building_PC_Off 0x004 -#define METATILE_Building_PC_On 0x005 - -// gTileset_Petalburg -#define METATILE_Petalburg_Door_Littleroot 0x248 -#define METATILE_Petalburg_Door_BirchsLab 0x249 -#define METATILE_Petalburg_Door_Oldale 0x287 - -// gTileset_Rustboro -#define METATILE_Rustboro_Door_Gray 0x21F -#define METATILE_Rustboro_Door_Tan 0x22F - -// gTileset_MauvilleGym -#define METATILE_MauvilleGym_RaisedSwitch 0x205 -#define METATILE_MauvilleGym_PressedSwitch 0x206 -#define METATILE_MauvilleGym_FloorTile 0x21A -#define METATILE_MauvilleGym_GreenBeamH1_On 0x220 -#define METATILE_MauvilleGym_GreenBeamH2_On 0x221 -#define METATILE_MauvilleGym_GreenBeamH3_On 0x228 -#define METATILE_MauvilleGym_GreenBeamH4_On 0x229 -#define METATILE_MauvilleGym_GreenBeamH1_Off 0x230 -#define METATILE_MauvilleGym_GreenBeamH2_Off 0x231 -#define METATILE_MauvilleGym_GreenBeamH3_Off 0x238 -#define METATILE_MauvilleGym_GreenBeamH4_Off 0x239 -#define METATILE_MauvilleGym_RedBeamH1_On 0x222 -#define METATILE_MauvilleGym_RedBeamH2_On 0x223 -#define METATILE_MauvilleGym_RedBeamH3_On 0x22A -#define METATILE_MauvilleGym_RedBeamH4_On 0x22B -#define METATILE_MauvilleGym_RedBeamH1_Off 0x232 -#define METATILE_MauvilleGym_RedBeamH2_Off 0x233 -#define METATILE_MauvilleGym_RedBeamH3_Off 0x23A -#define METATILE_MauvilleGym_RedBeamH4_Off 0x23B -#define METATILE_MauvilleGym_GreenBeamV1_On 0x240 -#define METATILE_MauvilleGym_GreenBeamV2_On 0x248 -#define METATILE_MauvilleGym_RedBeamV1_On 0x241 -#define METATILE_MauvilleGym_RedBeamV2_On 0x249 -#define METATILE_MauvilleGym_PoleTop_On 0x250 -#define METATILE_MauvilleGym_PoleTop_Off 0x251 -#define METATILE_MauvilleGym_PoleBottom_On 0x242 -#define METATILE_MauvilleGym_PoleBottom_Off 0x243 - -// gTileset_PetalburgGym -#define METATILE_PetalburgGym_RoomEntrance_Left 0x210 -#define METATILE_PetalburgGym_RoomEntrance_Right 0x211 -#define METATILE_PetalburgGym_SlidingDoor_Frame0 0x218 -#define METATILE_PetalburgGym_SlidingDoor_Frame1 0x219 -#define METATILE_PetalburgGym_SlidingDoor_Frame2 0x21A -#define METATILE_PetalburgGym_SlidingDoor_Frame3 0x21B -#define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C -#define METATILE_PetalburgGym_Door 0x224 - -// gTileset_RSMossdeepGym -#define METATILE_RSMossdeepGym_RedArrow_Right 0x204 -#define METATILE_RSMossdeepGym_RedArrow_Left 0x20C -#define METATILE_RSMossdeepGym_RedArrow_Up 0x20D -#define METATILE_RSMossdeepGym_RedArrow_Down 0x205 -#define METATILE_RSMossdeepGym_Switch_Up 0x238 -#define METATILE_RSMossdeepGym_Switch_Down 0x239 - -// gTileset_MossdeepGym -#define METATILE_MossdeepGym_YellowArrow_Right 0x250 - -// gTileset_BrendansMaysHouse -#define METATILE_BrendansMaysHouse_BrendanPC_Off 0x25A -#define METATILE_BrendansMaysHouse_BrendanPC_On 0x27F -#define METATILE_BrendansMaysHouse_MayPC_Off 0x259 -#define METATILE_BrendansMaysHouse_MayPC_On 0x27E -#define METATILE_BrendansMaysHouse_MovingBox_Closed 0x268 -#define METATILE_BrendansMaysHouse_MovingBox_Open 0x270 -#define METATILE_BrendansMaysHouse_BookOnTable 0x293 - -// gTileset_Shop -#define METATILE_Shop_Door_Elevator 0x285 -#define METATILE_Shop_Laptop1_Normal 0x29D -#define METATILE_Shop_Laptop2_Normal 0x2A5 -#define METATILE_Shop_Laptop1_Flash 0x258 -#define METATILE_Shop_Laptop2_Flash 0x260 - -// gTileset_BattleFrontier -#define METATILE_BattleFrontier_Door_Elevator 0x20E -#define METATILE_BattleFrontier_Door_MultiCorridor 0x2AD -#define METATILE_BattleFrontier_CorridorOpenDoor_Top 0x207 -#define METATILE_BattleFrontier_CorridorOpenDoor_Bottom 0x20F -#define METATILE_BattleFrontier_Elevator_Top0 0x329 -#define METATILE_BattleFrontier_Elevator_Top1 0x32A -#define METATILE_BattleFrontier_Elevator_Top2 0x32B -#define METATILE_BattleFrontier_Elevator_Mid0 0x331 -#define METATILE_BattleFrontier_Elevator_Mid1 0x332 -#define METATILE_BattleFrontier_Elevator_Mid2 0x333 -#define METATILE_BattleFrontier_Elevator_Bottom0 0x339 -#define METATILE_BattleFrontier_Elevator_Bottom1 0x33A -#define METATILE_BattleFrontier_Elevator_Bottom2 0x33B - -// gTileset_BattleFrontierOutsideWest -#define METATILE_BattleFrontierOutsideWest_Door_BattleFactory 0x263 -#define METATILE_BattleFrontierOutsideWest_Door_BattleDome 0x28A -#define METATILE_BattleFrontierOutsideWest_Door_Sliding 0x396 -#define METATILE_BattleFrontierOutsideWest_Door 0x3FC - -// gTileset_BattleFrontierOutsideEast -#define METATILE_BattleFrontierOutsideEast_Door_BattleArena 0x291 -#define METATILE_BattleFrontierOutsideEast_Door_BattleTower 0x329 -#define METATILE_BattleFrontierOutsideEast_Door_Sliding 0x396 -#define METATILE_BattleFrontierOutsideEast_Door 0x3FC - -// gTileset_BattleDome -#define METATILE_BattleDome_Door_Lobby 0x209 -#define METATILE_BattleDome_Door_PreBattleRoom 0x20A -#define METATILE_BattleDome_Door_Corridor 0x25E - // gTileset_BattleArena #define METATILE_BattleArena_Door 0x21B +// gTileset_BattleDome +#define METATILE_BattleDome_Door_Corridor 0x25E +#define METATILE_BattleDome_Door_Lobby 0x209 +#define METATILE_BattleDome_Door_PreBattleRoom 0x20A + +// gTileset_BattleFrontierOutsideEast +#define METATILE_BattleFrontierOutsideEast_Door 0x3FC +#define METATILE_BattleFrontierOutsideEast_Door_BattleArena 0x291 +#define METATILE_BattleFrontierOutsideEast_Door_BattleTower 0x329 +#define METATILE_BattleFrontierOutsideEast_Door_Sliding 0x396 + +// gTileset_BattleFrontierOutsideWest +#define METATILE_BattleFrontierOutsideWest_Door 0x3FC +#define METATILE_BattleFrontierOutsideWest_Door_BattleDome 0x28A +#define METATILE_BattleFrontierOutsideWest_Door_BattleFactory 0x263 +#define METATILE_BattleFrontierOutsideWest_Door_Sliding 0x396 + +// gTileset_BattleFrontier +#define METATILE_BattleFrontier_CorridorOpenDoor_Bottom 0x20F +#define METATILE_BattleFrontier_CorridorOpenDoor_Top 0x207 +#define METATILE_BattleFrontier_Door_Elevator 0x20E +#define METATILE_BattleFrontier_Door_MultiCorridor 0x2AD +#define METATILE_BattleFrontier_Elevator_Bottom0 0x339 +#define METATILE_BattleFrontier_Elevator_Bottom1 0x33A +#define METATILE_BattleFrontier_Elevator_Bottom2 0x33B +#define METATILE_BattleFrontier_Elevator_Mid0 0x331 +#define METATILE_BattleFrontier_Elevator_Mid1 0x332 +#define METATILE_BattleFrontier_Elevator_Mid2 0x333 +#define METATILE_BattleFrontier_Elevator_Top0 0x329 +#define METATILE_BattleFrontier_Elevator_Top1 0x32A +#define METATILE_BattleFrontier_Elevator_Top2 0x32B + // gTileset_BattlePalace #define METATILE_BattlePalace_Door 0x219 +// gTileset_BattlePike +#define METATILE_BattlePike_CurtainFrames_Start 0x201 +#define METATILE_BattlePike_Curtain_Stage0_Tile0 0x24A +#define METATILE_BattlePike_Curtain_Stage0_Tile1 0x251 +#define METATILE_BattlePike_Curtain_Stage0_Tile2 0x252 +#define METATILE_BattlePike_Curtain_Stage0_Tile3 0x253 +#define METATILE_BattlePike_Curtain_Stage0_Tile4 0x259 +#define METATILE_BattlePike_Curtain_Stage0_Tile5 0x25A +#define METATILE_BattlePike_Curtain_Stage0_Tile6 0x25B +#define METATILE_BattlePike_Curtain_Stage1_Tile0 0x22A +#define METATILE_BattlePike_Curtain_Stage1_Tile1 0x231 +#define METATILE_BattlePike_Curtain_Stage1_Tile2 0x232 +#define METATILE_BattlePike_Curtain_Stage1_Tile3 0x233 +#define METATILE_BattlePike_Curtain_Stage1_Tile4 0x239 +#define METATILE_BattlePike_Curtain_Stage1_Tile5 0x23A +#define METATILE_BattlePike_Curtain_Stage1_Tile6 0x23B +#define METATILE_BattlePike_Curtain_Stage2_Tile0 0x20A +#define METATILE_BattlePike_Curtain_Stage2_Tile1 0x211 +#define METATILE_BattlePike_Curtain_Stage2_Tile2 0x212 +#define METATILE_BattlePike_Curtain_Stage2_Tile3 0x213 +#define METATILE_BattlePike_Curtain_Stage2_Tile4 0x219 +#define METATILE_BattlePike_Curtain_Stage2_Tile5 0x21A +#define METATILE_BattlePike_Curtain_Stage2_Tile6 0x21B +#define METATILE_BattlePike_Curtain_Stage3_Tile0 0x2AB +#define METATILE_BattlePike_Curtain_Stage3_Tile1 0x2B2 +#define METATILE_BattlePike_Curtain_Stage3_Tile2 0x2B3 +#define METATILE_BattlePike_Curtain_Stage3_Tile3 0x2B4 +#define METATILE_BattlePike_Curtain_Stage3_Tile4 0x2BA +#define METATILE_BattlePike_Curtain_Stage3_Tile5 0x2BB +#define METATILE_BattlePike_Curtain_Stage3_Tile6 0x2BC + +// gTileset_BattlePyramid +#define METATILE_BattlePyramid_Exit 0x28E +#define METATILE_BattlePyramid_Floor 0x28D + +// gTileset_BattleTent +#define METATILE_BattleTent_Door 0x26B + +// gTileset_BikeShop +#define METATILE_BikeShop_Barrier_Blue_Bottom 0x2CF +#define METATILE_BikeShop_Barrier_Blue_BottomMid 0x2C7 +#define METATILE_BikeShop_Barrier_Blue_Top 0x2B7 +#define METATILE_BikeShop_Barrier_Blue_TopMid 0x2BF +#define METATILE_BikeShop_Barrier_Green_Bottom 0x2CE +#define METATILE_BikeShop_Barrier_Green_BottomMid 0x2C6 +#define METATILE_BikeShop_Barrier_Green_Top 0x2B6 +#define METATILE_BikeShop_Barrier_Green_TopMid 0x2BE +#define METATILE_BikeShop_Barrier_Hidden_Bottom 0x271 +#define METATILE_BikeShop_Barrier_Hidden_Top 0x269 +#define METATILE_BikeShop_Button_Blue 0x236 +#define METATILE_BikeShop_Button_Green 0x22E +#define METATILE_BikeShop_Button_Pressed 0x24F +#define METATILE_BikeShop_Floor_Shadow_Top 0x26D +#define METATILE_BikeShop_Generator_Off_Tile0 0x2F0 +#define METATILE_BikeShop_Generator_Off_Tile1 0x2F1 +#define METATILE_BikeShop_Generator_Off_Tile2 0x2F2 +#define METATILE_BikeShop_Generator_Off_Tile3 0x2F3 +#define METATILE_BikeShop_Generator_Off_Tile4 0x2F4 +#define METATILE_BikeShop_Generator_Off_Tile5 0x2F5 +#define METATILE_BikeShop_Generator_Off_Tile6 0x2F6 +#define METATILE_BikeShop_Generator_Off_Tile7 0x2F7 +#define METATILE_BikeShop_Wall_Edge_Top 0x281 + +// gTileset_BrendansMaysHouse +#define METATILE_BrendansMaysHouse_BookOnTable 0x293 +#define METATILE_BrendansMaysHouse_BrendanPC_Off 0x25A +#define METATILE_BrendansMaysHouse_BrendanPC_On 0x27F +#define METATILE_BrendansMaysHouse_MayPC_Off 0x259 +#define METATILE_BrendansMaysHouse_MayPC_On 0x27E +#define METATILE_BrendansMaysHouse_MovingBox_Closed 0x268 +#define METATILE_BrendansMaysHouse_MovingBox_Open 0x270 + +// gTileset_Building +#define METATILE_Building_PC_Off 0x004 +#define METATILE_Building_PC_On 0x005 +#define METATILE_Building_TV_Off 0x002 +#define METATILE_Building_TV_On 0x003 + // gTileset_Cave -#define METATILE_Cave_EntranceCover 0x229 -#define METATILE_Cave_CrackedFloor_Hole 0x206 -#define METATILE_Cave_CrackedFloor 0x22F -#define METATILE_Cave_SealedChamberEntrance_TopLeft 0x22A -#define METATILE_Cave_SealedChamberEntrance_TopMid 0x22B -#define METATILE_Cave_SealedChamberEntrance_TopRight 0x22C -#define METATILE_Cave_SealedChamberEntrance_BottomLeft 0x232 -#define METATILE_Cave_SealedChamberEntrance_BottomMid 0x233 -#define METATILE_Cave_SealedChamberEntrance_BottomRight 0x234 -#define METATILE_Cave_SealedChamberBraille_Mid 0x235 -#define METATILE_Cave_ShoalCave_DirtPile_Large 0x358 -#define METATILE_Cave_ShoalCave_DirtPile_Small 0x35A -#define METATILE_Cave_ShoalCave_BlueStone_Large 0x359 -#define METATILE_Cave_ShoalCave_BlueStone_Small 0x35B +#define METATILE_Cave_CrackedFloor 0x22F +#define METATILE_Cave_CrackedFloor_Hole 0x206 +#define METATILE_Cave_EntranceCover 0x229 +#define METATILE_Cave_SealedChamberBraille_Mid 0x235 +#define METATILE_Cave_SealedChamberEntrance_BottomLeft 0x232 +#define METATILE_Cave_SealedChamberEntrance_BottomMid 0x233 +#define METATILE_Cave_SealedChamberEntrance_BottomRight 0x234 +#define METATILE_Cave_SealedChamberEntrance_TopLeft 0x22A +#define METATILE_Cave_SealedChamberEntrance_TopMid 0x22B +#define METATILE_Cave_SealedChamberEntrance_TopRight 0x22C +#define METATILE_Cave_ShoalCave_BlueStone_Large 0x359 +#define METATILE_Cave_ShoalCave_BlueStone_Small 0x35B +#define METATILE_Cave_ShoalCave_DirtPile_Large 0x358 +#define METATILE_Cave_ShoalCave_DirtPile_Small 0x35A -// gTileset_Pacifidlog -#define METATILE_Pacifidlog_Door 0x21A -#define METATILE_Pacifidlog_FloatingLogs_HorizontalLeft 0x250 -#define METATILE_Pacifidlog_FloatingLogs_HorizontalRight 0x251 -#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalLeft 0x252 -#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalRight 0x253 -#define METATILE_Pacifidlog_SubmergedLogs_HorizontalLeft 0x254 -#define METATILE_Pacifidlog_SubmergedLogs_HorizontalRight 0x255 -#define METATILE_Pacifidlog_FloatingLogs_VerticalTop 0x258 -#define METATILE_Pacifidlog_FloatingLogs_VerticalBottom 0x260 -#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalTop 0x259 -#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalBottom 0x261 -#define METATILE_Pacifidlog_SubmergedLogs_VerticalTop 0x25A -#define METATILE_Pacifidlog_SubmergedLogs_VerticalBottom 0x262 -#define METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole 0x237 -#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Top 0x2AA -#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Bottom 0x2B2 - -// gTileset_Fortree -#define METATILE_Fortree_LongGrass_Root 0x208 -#define METATILE_Fortree_BridgeOverGrass_Raised 0x24E -#define METATILE_Fortree_BridgeOverGrass_Lowered 0x24F -#define METATILE_Fortree_BridgeOverTrees_Raised 0x256 -#define METATILE_Fortree_BridgeOverTrees_Lowered 0x257 -#define METATILE_Fortree_SecretBase_Shrub 0x271 -#define METATILE_Fortree_SecretBase_ShrubOpen 0x278 -#define METATILE_Fortree_SecretBase_LongGrass_TopLeft 0x279 -#define METATILE_Fortree_SecretBase_LongGrass_TopMid 0x27A -#define METATILE_Fortree_SecretBase_LongGrass_TopRight 0x27B -#define METATILE_Fortree_SecretBase_LongGrass_BottomLeft 0x281 -#define METATILE_Fortree_SecretBase_LongGrass_BottomMid 0x282 -#define METATILE_Fortree_SecretBase_LongGrass_BottomRight 0x283 -#define METATILE_Fortree_WoodBridge1_Top 0x297 -#define METATILE_Fortree_WoodBridge1_Bottom 0x29F - -// gTileset_Sootopolis -#define METATILE_Sootopolis_Door 0x21E -#define METATILE_Sootopolis_Door_PeakedRoof 0x21C -#define METATILE_Sootopolis_Door_Closed 0x248 -#define METATILE_Sootopolis_GymDoor_Closed 0x250 -#define METATILE_Sootopolis_RoughWater 0x290 - -// gTileset_SootopolisGym -#define METATILE_SootopolisGym_Ice_Cracked 0x20E -#define METATILE_SootopolisGym_Ice_Broken 0x206 -#define METATILE_SootopolisGym_Stairs 0x207 - -// gTileset_Fallarbor -#define METATILE_Fallarbor_AshGrass 0x20A -#define METATILE_Fallarbor_BrownCaveIndent 0x208 -#define METATILE_Fallarbor_BrownCaveOpen 0x210 -#define METATILE_Fallarbor_NormalGrass 0x212 -#define METATILE_Fallarbor_AshField 0x218 -#define METATILE_Fallarbor_BrownCaveEntrance_Top 0x259 -#define METATILE_Fallarbor_BrownCaveEntrance_Bottom 0x261 -#define METATILE_Fallarbor_RedCaveEntrance_Top 0x347 -#define METATILE_Fallarbor_RedCaveEntrance_Bottom 0x34F -#define METATILE_Fallarbor_BrownRockWall 0x265 -#define METATILE_Fallarbor_RedRockWall 0x269 -#define METATILE_Fallarbor_Door_LightRoof 0x2A5 -#define METATILE_Fallarbor_Door_DarkRoof 0x2F7 -#define METATILE_Fallarbor_Door_BattleTent 0x36C - -// gTileset_Lavaridge -#define METATILE_Lavaridge_NormalGrass 0x206 -#define METATILE_Lavaridge_AshGrass 0x207 -#define METATILE_Lavaridge_LavaField 0x271 -#define METATILE_Lavaridge_RockWall 0x274 -#define METATILE_Lavaridge_CaveEntrance_Top 0x256 -#define METATILE_Lavaridge_CaveEntrance_Bottom 0x25E - -// gTileset_Mauville -#define METATILE_Mauville_Door 0x2AC -#define METATILE_Mauville_Door_CyclingRoad 0x289 -#define METATILE_Mauville_Door_Verdanturf 0x3A1 -#define METATILE_Mauville_Door_BattleTent 0x3D4 -#define METATILE_Mauville_DeepSand_Center 0x251 -#define METATILE_Mauville_DeepSand_BottomMid 0x259 -#define METATILE_Mauville_MirageTower_Tile0 0x3D8 -#define METATILE_Mauville_MirageTower_Tile1 0x3D9 -#define METATILE_Mauville_MirageTower_Tile2 0x3DA -#define METATILE_Mauville_MirageTower_Tile3 0x3E0 -#define METATILE_Mauville_MirageTower_Tile4 0x3E1 -#define METATILE_Mauville_MirageTower_Tile5 0x3E2 -#define METATILE_Mauville_MirageTower_Tile6 0x3E8 -#define METATILE_Mauville_MirageTower_Tile7 0x3E9 -#define METATILE_Mauville_MirageTower_Tile8 0x3EA -#define METATILE_Mauville_MirageTower_Tile9 0x3F0 -#define METATILE_Mauville_MirageTower_TileA 0x3F1 -#define METATILE_Mauville_MirageTower_TileB 0x3F2 -#define METATILE_Mauville_MirageTower_TileC 0x3DB -#define METATILE_Mauville_MirageTower_TileD 0x3DC -#define METATILE_Mauville_MirageTower_TileE 0x3DD -#define METATILE_Mauville_MirageTower_TileF 0x3E3 -#define METATILE_Mauville_MirageTower_Tile10 0x3E4 -#define METATILE_Mauville_MirageTower_Tile11 0x3E5 +// gTileset_Contest +#define METATILE_Contest_CounterFlap_Bottom 0x2D9 +#define METATILE_Contest_CounterFlap_Top 0x2D1 +#define METATILE_Contest_FloorShadow 0x261 +#define METATILE_Contest_WallShadow 0x221 // gTileset_Dewford #define METATILE_Dewford_Door 0x225 #define METATILE_Dewford_Door_BattleTower 0x25D -// gTileset_Slateport -#define METATILE_Slateport_Door 0x2DC -#define METATILE_Slateport_Door_BattleTent 0x393 +// gTileset_EliteFour +#define METATILE_EliteFour_EntryDoor_ClosedBottom 0x20E +#define METATILE_EliteFour_EntryDoor_ClosedTop 0x206 +#define METATILE_EliteFour_LeftSpotlightOff 0x2DD +#define METATILE_EliteFour_OpenDoorChampion_Frame 0x346 +#define METATILE_EliteFour_OpenDoorChampion_Opening 0x347 +#define METATILE_EliteFour_OpenDoor_Frame 0x344 +#define METATILE_EliteFour_OpenDoor_Opening 0x345 +#define METATILE_EliteFour_RightSpotlightOff 0x2DE + +// gTileset_EverGrande +#define METATILE_EverGrande_Door_PokemonLeague 0x21D + +// gTileset_Facility +#define METATILE_Facility_DataPad 0x3E4 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile0 0x314 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile1 0x315 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile2 0x316 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile3 0x31C +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile4 0x31D +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile5 0x31E +#define METATILE_Facility_NewMauvilleDoor_Open_Tile0 0x2C3 +#define METATILE_Facility_NewMauvilleDoor_Open_Tile1 0x2C4 +#define METATILE_Facility_NewMauvilleDoor_Open_Tile2 0x2C5 +#define METATILE_Facility_NewMauvilleDoor_Open_Tile3 0x2CB +#define METATILE_Facility_NewMauvilleDoor_Open_Tile4 0x2CC +#define METATILE_Facility_NewMauvilleDoor_Open_Tile5 0x2CD + +// gTileset_Fallarbor +#define METATILE_Fallarbor_AshField 0x218 +#define METATILE_Fallarbor_AshGrass 0x20A +#define METATILE_Fallarbor_BrownCaveEntrance_Bottom 0x261 +#define METATILE_Fallarbor_BrownCaveEntrance_Top 0x259 +#define METATILE_Fallarbor_BrownCaveIndent 0x208 +#define METATILE_Fallarbor_BrownCaveOpen 0x210 +#define METATILE_Fallarbor_BrownRockWall 0x265 +#define METATILE_Fallarbor_Door_BattleTent 0x36C +#define METATILE_Fallarbor_Door_DarkRoof 0x2F7 +#define METATILE_Fallarbor_Door_LightRoof 0x2A5 +#define METATILE_Fallarbor_NormalGrass 0x212 +#define METATILE_Fallarbor_RedCaveEntrance_Bottom 0x34F +#define METATILE_Fallarbor_RedCaveEntrance_Top 0x347 +#define METATILE_Fallarbor_RedRockWall 0x269 + +// gTileset_Fortree +#define METATILE_Fortree_BridgeOverGrass_Lowered 0x24F +#define METATILE_Fortree_BridgeOverGrass_Raised 0x24E +#define METATILE_Fortree_BridgeOverTrees_Lowered 0x257 +#define METATILE_Fortree_BridgeOverTrees_Raised 0x256 +#define METATILE_Fortree_LongGrass_Root 0x208 +#define METATILE_Fortree_SecretBase_LongGrass_BottomLeft 0x281 +#define METATILE_Fortree_SecretBase_LongGrass_BottomMid 0x282 +#define METATILE_Fortree_SecretBase_LongGrass_BottomRight 0x283 +#define METATILE_Fortree_SecretBase_LongGrass_TopLeft 0x279 +#define METATILE_Fortree_SecretBase_LongGrass_TopMid 0x27A +#define METATILE_Fortree_SecretBase_LongGrass_TopRight 0x27B +#define METATILE_Fortree_SecretBase_Shrub 0x271 +#define METATILE_Fortree_SecretBase_ShrubOpen 0x278 +#define METATILE_Fortree_WoodBridge1_Bottom 0x29F +#define METATILE_Fortree_WoodBridge1_Top 0x297 + +// gTileset_General +#define METATILE_General_BlueCaveIndent 0x1B0 +#define METATILE_General_BlueCaveOpen 0x1B1 +#define METATILE_General_CalmWater 0x170 +#define METATILE_General_CaveEntrance_Bottom 0x0A7 +#define METATILE_General_CaveEntrance_Top 0x09F +#define METATILE_General_Door 0x021 +#define METATILE_General_Door_Contest 0x1DB +#define METATILE_General_Door_Gym 0x1CD +#define METATILE_General_Door_PokeCenter 0x061 +#define METATILE_General_Door_PokeMart 0x041 +#define METATILE_General_Grass 0x001 +#define METATILE_General_Grass_TreeLeft 0x1CE +#define METATILE_General_Grass_TreeRight 0x1CF +#define METATILE_General_Grass_TreeUp 0x00E +#define METATILE_General_LongGrass 0x015 +#define METATILE_General_MuddySlope_Frame0 0x0E8 +#define METATILE_General_MuddySlope_Frame1 0x0E9 +#define METATILE_General_MuddySlope_Frame2 0x0EA +#define METATILE_General_MuddySlope_Frame3 0x0EB +#define METATILE_General_RedCaveIndent 0x1A0 +#define METATILE_General_RedCaveOpen 0x1A1 +#define METATILE_General_ReflectiveWater 0x0A1 +#define METATILE_General_RockWall_GrassBase 0x079 +#define METATILE_General_RockWall_RockBase 0x07C +#define METATILE_General_RockWall_SandBase 0x091 +#define METATILE_General_RoughDeepWater 0x14F +#define METATILE_General_RoughWater 0x14E +#define METATILE_General_SandPit_Center 0x121 +#define METATILE_General_SecretBase_TreeLeft 0x026 +#define METATILE_General_SecretBase_TreeRight 0x027 +#define METATILE_General_SecretBase_VineLeft 0x036 +#define METATILE_General_SecretBase_VineRight 0x037 +#define METATILE_General_TallGrass 0x00D +#define METATILE_General_TallGrass_TreeLeft 0x1C6 +#define METATILE_General_TallGrass_TreeRight 0x1C7 +#define METATILE_General_TallGrass_TreeUp 0x025 +#define METATILE_General_YellowCaveIndent 0x1A8 +#define METATILE_General_YellowCaveOpen 0x1A9 + +// gTileset_GenericBuilding +#define METATILE_GenericBuilding_TableEdge 0x2F1 +#define METATILE_GenericBuilding_TrickHouse_Door_Closed 0x21B +#define METATILE_GenericBuilding_TrickHouse_Stairs_Down 0x219 + +// gTileset_InsideOfTruck +#define METATILE_InsideOfTruck_DoorClosedFloor_Bottom 0x21D +#define METATILE_InsideOfTruck_DoorClosedFloor_Mid 0x215 +#define METATILE_InsideOfTruck_DoorClosedFloor_Top 0x20D +#define METATILE_InsideOfTruck_ExitLight_Bottom 0x218 +#define METATILE_InsideOfTruck_ExitLight_Mid 0x210 +#define METATILE_InsideOfTruck_ExitLight_Top 0x208 + +// gTileset_InsideShip +#define METATILE_InsideShip_DoorIndent_Locked 0x234 +#define METATILE_InsideShip_DoorIndent_Unlocked 0x21A +#define METATILE_InsideShip_IntactDoor_Bottom_Interior 0x297 +#define METATILE_InsideShip_IntactDoor_Bottom_Locked 0x233 +#define METATILE_InsideShip_IntactDoor_Bottom_Unlocked 0x22B + +// gTileset_Lavaridge +#define METATILE_Lavaridge_AshGrass 0x207 +#define METATILE_Lavaridge_CaveEntrance_Bottom 0x25E +#define METATILE_Lavaridge_CaveEntrance_Top 0x256 +#define METATILE_Lavaridge_LavaField 0x271 +#define METATILE_Lavaridge_NormalGrass 0x206 +#define METATILE_Lavaridge_RockWall 0x274 + +// gTileset_LilycoveMuseum +#define METATILE_LilycoveMuseum_Painting0_Left 0x25A +#define METATILE_LilycoveMuseum_Painting0_Right 0x25B +#define METATILE_LilycoveMuseum_Painting1_Left 0x25C +#define METATILE_LilycoveMuseum_Painting1_Right 0x25D +#define METATILE_LilycoveMuseum_Painting2_Left 0x25E +#define METATILE_LilycoveMuseum_Painting2_Right 0x25F +#define METATILE_LilycoveMuseum_Painting3_Left 0x260 +#define METATILE_LilycoveMuseum_Painting3_Right 0x261 +#define METATILE_LilycoveMuseum_Painting4_Left 0x262 +#define METATILE_LilycoveMuseum_Painting4_Right 0x263 + +// gTileset_Lilycove +#define METATILE_Lilycove_Door 0x246 +#define METATILE_Lilycove_Door_DeptStore 0x30C +#define METATILE_Lilycove_Door_SafariZone 0x32D +#define METATILE_Lilycove_Door_Wooden 0x28E +#define METATILE_Lilycove_Wailmer0 0x290 +#define METATILE_Lilycove_Wailmer0_Alt 0x298 +#define METATILE_Lilycove_Wailmer1 0x291 +#define METATILE_Lilycove_Wailmer1_Alt 0x299 +#define METATILE_Lilycove_Wailmer2 0x2A0 +#define METATILE_Lilycove_Wailmer3 0x2A1 + +// gTileset_MauvilleGym +#define METATILE_MauvilleGym_FloorTile 0x21A +#define METATILE_MauvilleGym_GreenBeamH1_Off 0x230 +#define METATILE_MauvilleGym_GreenBeamH1_On 0x220 +#define METATILE_MauvilleGym_GreenBeamH2_Off 0x231 +#define METATILE_MauvilleGym_GreenBeamH2_On 0x221 +#define METATILE_MauvilleGym_GreenBeamH3_Off 0x238 +#define METATILE_MauvilleGym_GreenBeamH3_On 0x228 +#define METATILE_MauvilleGym_GreenBeamH4_Off 0x239 +#define METATILE_MauvilleGym_GreenBeamH4_On 0x229 +#define METATILE_MauvilleGym_GreenBeamV1_On 0x240 +#define METATILE_MauvilleGym_GreenBeamV2_On 0x248 +#define METATILE_MauvilleGym_PoleBottom_Off 0x243 +#define METATILE_MauvilleGym_PoleBottom_On 0x242 +#define METATILE_MauvilleGym_PoleTop_Off 0x251 +#define METATILE_MauvilleGym_PoleTop_On 0x250 +#define METATILE_MauvilleGym_PressedSwitch 0x206 +#define METATILE_MauvilleGym_RaisedSwitch 0x205 +#define METATILE_MauvilleGym_RedBeamH1_Off 0x232 +#define METATILE_MauvilleGym_RedBeamH1_On 0x222 +#define METATILE_MauvilleGym_RedBeamH2_Off 0x233 +#define METATILE_MauvilleGym_RedBeamH2_On 0x223 +#define METATILE_MauvilleGym_RedBeamH3_Off 0x23A +#define METATILE_MauvilleGym_RedBeamH3_On 0x22A +#define METATILE_MauvilleGym_RedBeamH4_Off 0x23B +#define METATILE_MauvilleGym_RedBeamH4_On 0x22B +#define METATILE_MauvilleGym_RedBeamV1_On 0x241 +#define METATILE_MauvilleGym_RedBeamV2_On 0x249 + +// gTileset_Mauville +#define METATILE_Mauville_DeepSand_BottomMid 0x259 +#define METATILE_Mauville_DeepSand_Center 0x251 +#define METATILE_Mauville_Door 0x2AC +#define METATILE_Mauville_Door_BattleTent 0x3D4 +#define METATILE_Mauville_Door_CyclingRoad 0x289 +#define METATILE_Mauville_Door_Verdanturf 0x3A1 +#define METATILE_Mauville_MirageTower_Tile0 0x3D8 +#define METATILE_Mauville_MirageTower_Tile1 0x3D9 +#define METATILE_Mauville_MirageTower_Tile10 0x3E4 +#define METATILE_Mauville_MirageTower_Tile11 0x3E5 +#define METATILE_Mauville_MirageTower_Tile2 0x3DA +#define METATILE_Mauville_MirageTower_Tile3 0x3E0 +#define METATILE_Mauville_MirageTower_Tile4 0x3E1 +#define METATILE_Mauville_MirageTower_Tile5 0x3E2 +#define METATILE_Mauville_MirageTower_Tile6 0x3E8 +#define METATILE_Mauville_MirageTower_Tile7 0x3E9 +#define METATILE_Mauville_MirageTower_Tile8 0x3EA +#define METATILE_Mauville_MirageTower_Tile9 0x3F0 +#define METATILE_Mauville_MirageTower_TileA 0x3F1 +#define METATILE_Mauville_MirageTower_TileB 0x3F2 +#define METATILE_Mauville_MirageTower_TileC 0x3DB +#define METATILE_Mauville_MirageTower_TileD 0x3DC +#define METATILE_Mauville_MirageTower_TileE 0x3DD +#define METATILE_Mauville_MirageTower_TileF 0x3E3 + +// gTileset_MeteorFalls +#define METATILE_MeteorFalls_CaveEntrance_Bottom 0x24E +#define METATILE_MeteorFalls_CaveEntrance_Left 0x24D +#define METATILE_MeteorFalls_CaveEntrance_Right 0x24F +#define METATILE_MeteorFalls_CaveEntrance_Top 0x246 + +// gTileset_MossdeepGameCorner +#define METATILE_MossdeepGameCorner_CounterClosed_Bottom 0x232 +#define METATILE_MossdeepGameCorner_CounterClosed_Top 0x22A +#define METATILE_MossdeepGameCorner_CounterOpen_Bottom 0x234 +#define METATILE_MossdeepGameCorner_CounterOpen_Top 0x22C + +// gTileset_MossdeepGym +#define METATILE_MossdeepGym_YellowArrow_Right 0x250 // gTileset_Mossdeep #define METATILE_Mossdeep_Door 0x2A1 #define METATILE_Mossdeep_Door_SpaceCenter 0x2ED -// gTileset_EverGrande -#define METATILE_EverGrande_Door_PokemonLeague 0x21D +// gTileset_Pacifidlog +#define METATILE_Pacifidlog_Door 0x21A +#define METATILE_Pacifidlog_FloatingLogs_HorizontalLeft 0x250 +#define METATILE_Pacifidlog_FloatingLogs_HorizontalRight 0x251 +#define METATILE_Pacifidlog_FloatingLogs_VerticalBottom 0x260 +#define METATILE_Pacifidlog_FloatingLogs_VerticalTop 0x258 +#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalLeft 0x252 +#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalRight 0x253 +#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalBottom 0x261 +#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalTop 0x259 +#define METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole 0x237 +#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Bottom 0x2B2 +#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Top 0x2AA +#define METATILE_Pacifidlog_SubmergedLogs_HorizontalLeft 0x254 +#define METATILE_Pacifidlog_SubmergedLogs_HorizontalRight 0x255 +#define METATILE_Pacifidlog_SubmergedLogs_VerticalBottom 0x262 +#define METATILE_Pacifidlog_SubmergedLogs_VerticalTop 0x25A + +// gTileset_PetalburgGym +#define METATILE_PetalburgGym_Door 0x224 +#define METATILE_PetalburgGym_RoomEntrance_Left 0x210 +#define METATILE_PetalburgGym_RoomEntrance_Right 0x211 +#define METATILE_PetalburgGym_SlidingDoor_Frame0 0x218 +#define METATILE_PetalburgGym_SlidingDoor_Frame1 0x219 +#define METATILE_PetalburgGym_SlidingDoor_Frame2 0x21A +#define METATILE_PetalburgGym_SlidingDoor_Frame3 0x21B +#define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C + +// gTileset_Petalburg +#define METATILE_Petalburg_Door_BirchsLab 0x249 +#define METATILE_Petalburg_Door_Littleroot 0x248 +#define METATILE_Petalburg_Door_Oldale 0x287 // gTileset_PokemonCenter -#define METATILE_PokemonCenter_Door_CableClub 0x264 -#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280 -#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282 -#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284 -#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame0 0x281 -#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame1 0x283 -#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame2 0x285 -#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame0 0x288 -#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame1 0x28A -#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame2 0x28C -#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 0x289 -#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame1 0x28B -#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame2 0x28D -#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame0 0x2A0 -#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame1 0x2A2 -#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame2 0x2A4 -#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame0 0x2A1 -#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame1 0x2A3 -#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame2 0x2A5 -#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame0 0x2A8 -#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame1 0x2AA -#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame2 0x2AC -#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC -#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4 -#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E -#define METATILE_PokemonCenter_CounterBarrier 0x25D +#define METATILE_PokemonCenter_CounterBarrier 0x25D +#define METATILE_PokemonCenter_Door_CableClub 0x264 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame0 0x281 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame1 0x283 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame2 0x285 +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame0 0x288 +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame1 0x28A +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame2 0x28C +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 0x289 +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame1 0x28B +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame2 0x28D +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame0 0x2A0 +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame1 0x2A2 +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame2 0x2A4 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame0 0x2A1 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame1 0x2A3 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame2 0x2A5 +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame0 0x2A8 +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame1 0x2AA +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame2 0x2AC +#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4 +#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E +#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC -// gTileset_InsideOfTruck -#define METATILE_InsideOfTruck_ExitLight_Top 0x208 -#define METATILE_InsideOfTruck_ExitLight_Mid 0x210 -#define METATILE_InsideOfTruck_ExitLight_Bottom 0x218 -#define METATILE_InsideOfTruck_DoorClosedFloor_Top 0x20D -#define METATILE_InsideOfTruck_DoorClosedFloor_Mid 0x215 -#define METATILE_InsideOfTruck_DoorClosedFloor_Bottom 0x21D +// gTileset_RSMossdeepGym +#define METATILE_RSMossdeepGym_RedArrow_Down 0x205 +#define METATILE_RSMossdeepGym_RedArrow_Left 0x20C +#define METATILE_RSMossdeepGym_RedArrow_Right 0x204 +#define METATILE_RSMossdeepGym_RedArrow_Up 0x20D +#define METATILE_RSMossdeepGym_Switch_Down 0x239 +#define METATILE_RSMossdeepGym_Switch_Up 0x238 -// gTileset_MossdeepGameCorner -#define METATILE_MossdeepGameCorner_CounterOpen_Top 0x22C -#define METATILE_MossdeepGameCorner_CounterOpen_Bottom 0x234 -#define METATILE_MossdeepGameCorner_CounterClosed_Top 0x22A -#define METATILE_MossdeepGameCorner_CounterClosed_Bottom 0x232 - -// gTileset_EliteFour -#define METATILE_EliteFour_OpenDoor_Frame 0x344 -#define METATILE_EliteFour_OpenDoor_Opening 0x345 -#define METATILE_EliteFour_OpenDoorChampion_Frame 0x346 -#define METATILE_EliteFour_OpenDoorChampion_Opening 0x347 -#define METATILE_EliteFour_LeftSpotlightOff 0x2DD -#define METATILE_EliteFour_RightSpotlightOff 0x2DE -#define METATILE_EliteFour_EntryDoor_ClosedTop 0x206 -#define METATILE_EliteFour_EntryDoor_ClosedBottom 0x20E - -// gTileset_InsideShip -#define METATILE_InsideShip_IntactDoor_Bottom_Unlocked 0x22B -#define METATILE_InsideShip_IntactDoor_Bottom_Locked 0x233 -#define METATILE_InsideShip_DoorIndent_Unlocked 0x21A -#define METATILE_InsideShip_DoorIndent_Locked 0x234 -#define METATILE_InsideShip_IntactDoor_Bottom_Interior 0x297 - -// gTileset_BattlePike -#define METATILE_BattlePike_CurtainFrames_Start 0x201 -#define METATILE_BattlePike_Curtain_Stage0_Tile0 0x24A -#define METATILE_BattlePike_Curtain_Stage0_Tile1 0x251 -#define METATILE_BattlePike_Curtain_Stage0_Tile2 0x252 -#define METATILE_BattlePike_Curtain_Stage0_Tile3 0x253 -#define METATILE_BattlePike_Curtain_Stage0_Tile4 0x259 -#define METATILE_BattlePike_Curtain_Stage0_Tile5 0x25A -#define METATILE_BattlePike_Curtain_Stage0_Tile6 0x25B -#define METATILE_BattlePike_Curtain_Stage1_Tile0 0x22A -#define METATILE_BattlePike_Curtain_Stage1_Tile1 0x231 -#define METATILE_BattlePike_Curtain_Stage1_Tile2 0x232 -#define METATILE_BattlePike_Curtain_Stage1_Tile3 0x233 -#define METATILE_BattlePike_Curtain_Stage1_Tile4 0x239 -#define METATILE_BattlePike_Curtain_Stage1_Tile5 0x23A -#define METATILE_BattlePike_Curtain_Stage1_Tile6 0x23B -#define METATILE_BattlePike_Curtain_Stage2_Tile0 0x20A -#define METATILE_BattlePike_Curtain_Stage2_Tile1 0x211 -#define METATILE_BattlePike_Curtain_Stage2_Tile2 0x212 -#define METATILE_BattlePike_Curtain_Stage2_Tile3 0x213 -#define METATILE_BattlePike_Curtain_Stage2_Tile4 0x219 -#define METATILE_BattlePike_Curtain_Stage2_Tile5 0x21A -#define METATILE_BattlePike_Curtain_Stage2_Tile6 0x21B -#define METATILE_BattlePike_Curtain_Stage3_Tile0 0x2AB -#define METATILE_BattlePike_Curtain_Stage3_Tile1 0x2B2 -#define METATILE_BattlePike_Curtain_Stage3_Tile2 0x2B3 -#define METATILE_BattlePike_Curtain_Stage3_Tile3 0x2B4 -#define METATILE_BattlePike_Curtain_Stage3_Tile4 0x2BA -#define METATILE_BattlePike_Curtain_Stage3_Tile5 0x2BB -#define METATILE_BattlePike_Curtain_Stage3_Tile6 0x2BC - -// gTileset_Lilycove -#define METATILE_Lilycove_Door 0x246 -#define METATILE_Lilycove_Door_Wooden 0x28E -#define METATILE_Lilycove_Door_DeptStore 0x30C -#define METATILE_Lilycove_Door_SafariZone 0x32D -#define METATILE_Lilycove_Wailmer0 0x290 -#define METATILE_Lilycove_Wailmer1 0x291 -#define METATILE_Lilycove_Wailmer2 0x2A0 -#define METATILE_Lilycove_Wailmer3 0x2A1 -#define METATILE_Lilycove_Wailmer0_Alt 0x298 -#define METATILE_Lilycove_Wailmer1_Alt 0x299 - -// gTileset_Contest -#define METATILE_Contest_WallShadow 0x221 -#define METATILE_Contest_FloorShadow 0x261 -#define METATILE_Contest_CounterFlap_Top 0x2D1 -#define METATILE_Contest_CounterFlap_Bottom 0x2D9 - -// gTileset_BattleTent -#define METATILE_BattleTent_Door 0x26B - -// gTileset_LilycoveMuseum -#define METATILE_LilycoveMuseum_Painting0_Left 0x25A -#define METATILE_LilycoveMuseum_Painting0_Right 0x25B -#define METATILE_LilycoveMuseum_Painting1_Left 0x25C -#define METATILE_LilycoveMuseum_Painting1_Right 0x25D -#define METATILE_LilycoveMuseum_Painting2_Left 0x25E -#define METATILE_LilycoveMuseum_Painting2_Right 0x25F -#define METATILE_LilycoveMuseum_Painting3_Left 0x260 -#define METATILE_LilycoveMuseum_Painting3_Right 0x261 -#define METATILE_LilycoveMuseum_Painting4_Left 0x262 -#define METATILE_LilycoveMuseum_Painting4_Right 0x263 - -// gTileset_MeteorFalls -#define METATILE_MeteorFalls_CaveEntrance_Top 0x246 -#define METATILE_MeteorFalls_CaveEntrance_Left 0x24D -#define METATILE_MeteorFalls_CaveEntrance_Bottom 0x24E -#define METATILE_MeteorFalls_CaveEntrance_Right 0x24F - -// gTileset_Facility -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile0 0x314 -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile1 0x315 -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile2 0x316 -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile3 0x31C -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile4 0x31D -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile5 0x31E -#define METATILE_Facility_NewMauvilleDoor_Open_Tile0 0x2C3 -#define METATILE_Facility_NewMauvilleDoor_Open_Tile1 0x2C4 -#define METATILE_Facility_NewMauvilleDoor_Open_Tile2 0x2C5 -#define METATILE_Facility_NewMauvilleDoor_Open_Tile3 0x2CB -#define METATILE_Facility_NewMauvilleDoor_Open_Tile4 0x2CC -#define METATILE_Facility_NewMauvilleDoor_Open_Tile5 0x2CD -#define METATILE_Facility_DataPad 0x3E4 - -// gTileset_GenericBuilding -#define METATILE_GenericBuilding_TableEdge 0x2F1 -#define METATILE_GenericBuilding_TrickHouse_Door_Closed 0x21B -#define METATILE_GenericBuilding_TrickHouse_Stairs_Down 0x219 - -// gTileset_TrickHousePuzzle -#define METATILE_TrickHousePuzzle_Stairs_Down 0x20B -#define METATILE_TrickHousePuzzle_Lever_Off 0x23E -#define METATILE_TrickHousePuzzle_Lever_On 0x23F -#define METATILE_TrickHousePuzzle_Button_Up 0x258 -#define METATILE_TrickHousePuzzle_Button_Pressed 0x259 -#define METATILE_TrickHousePuzzle_Door_Shuttered 0x26A -#define METATILE_TrickHousePuzzle_Floor_ShadowTop_Alt 0x252 -#define METATILE_TrickHousePuzzle_Floor_ShadowTop 0x255 -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0 0x24B -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1 0x24C -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2 0x253 -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3 0x254 -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0 0x23B -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1 0x23C -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2 0x243 -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3 0x244 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0 0x248 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1 0x249 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2 0x250 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3 0x251 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0 0x238 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1 0x239 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2 0x240 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3 0x241 -#define METATILE_TrickHousePuzzle_BlueDoorV_Retracted 0x24D -#define METATILE_TrickHousePuzzle_RedDoorV_Retracted 0x24A -#define METATILE_TrickHousePuzzle_RedDoorV_Open0 0x23A -#define METATILE_TrickHousePuzzle_RedDoorV_Open1 0x242 -#define METATILE_TrickHousePuzzle_BlueDoorV_Open0 0x23D -#define METATILE_TrickHousePuzzle_BlueDoorV_Open1 0x245 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right 0x260 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left 0x261 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up 0x262 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Down 0x263 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left_Alt 0x27B -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right_Alt 0x27C -#define METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right 0x298 - -// gTileset_BikeShop (also used by New Mauville) -#define METATILE_BikeShop_Barrier_Hidden_Top 0x269 -#define METATILE_BikeShop_Barrier_Hidden_Bottom 0x271 -#define METATILE_BikeShop_Floor_Shadow_Top 0x26D -#define METATILE_BikeShop_Wall_Edge_Top 0x281 -#define METATILE_BikeShop_Button_Pressed 0x24F -#define METATILE_BikeShop_Button_Green 0x22E -#define METATILE_BikeShop_Button_Blue 0x236 -#define METATILE_BikeShop_Barrier_Green_Top 0x2B6 -#define METATILE_BikeShop_Barrier_Green_TopMid 0x2BE -#define METATILE_BikeShop_Barrier_Green_BottomMid 0x2C6 -#define METATILE_BikeShop_Barrier_Green_Bottom 0x2CE -#define METATILE_BikeShop_Barrier_Blue_Top 0x2B7 -#define METATILE_BikeShop_Barrier_Blue_TopMid 0x2BF -#define METATILE_BikeShop_Barrier_Blue_BottomMid 0x2C7 -#define METATILE_BikeShop_Barrier_Blue_Bottom 0x2CF -#define METATILE_BikeShop_Generator_Off_Tile0 0x2F0 -#define METATILE_BikeShop_Generator_Off_Tile1 0x2F1 -#define METATILE_BikeShop_Generator_Off_Tile2 0x2F2 -#define METATILE_BikeShop_Generator_Off_Tile3 0x2F3 -#define METATILE_BikeShop_Generator_Off_Tile4 0x2F4 -#define METATILE_BikeShop_Generator_Off_Tile5 0x2F5 -#define METATILE_BikeShop_Generator_Off_Tile6 0x2F6 -#define METATILE_BikeShop_Generator_Off_Tile7 0x2F7 - -// gTileset_TrainerHill -#define METATILE_TrainerHill_GreenFloorTile 0x307 -#define METATILE_TrainerHill_CounterDoor 0x334 -#define METATILE_TrainerHill_Door_Elevator_Lobby 0x32C -#define METATILE_TrainerHill_Door_Elevator_Roof 0x383 - -// gTileset_Underwater -#define METATILE_Underwater_RockWall 0x21E -#define METATILE_Underwater_FloorShadow 0x228 +// gTileset_Rustboro +#define METATILE_Rustboro_Door_Gray 0x21F +#define METATILE_Rustboro_Door_Tan 0x22F // gTileset_SecretBase -#define METATILE_SecretBase_Wall_TopMid 0x202 -#define METATILE_SecretBase_Ground 0x20A -#define METATILE_SecretBase_PC 0x220 -#define METATILE_SecretBase_RegisterPC 0x221 -#define METATILE_SecretBase_PC_On 0x224 -#define METATILE_SecretBase_RedBrick_Top 0x225 -#define METATILE_SecretBase_RedBrick_Bottom 0x22D -#define METATILE_SecretBase_YellowBrick_Top 0x226 -#define METATILE_SecretBase_YellowBrick_Bottom 0x22E -#define METATILE_SecretBase_BlueBrick_Top 0x227 +#define METATILE_SecretBase_AttractMat_BottomLeft 0x313 +#define METATILE_SecretBase_AttractMat_BottomMid 0x314 +#define METATILE_SecretBase_AttractMat_BottomRight 0x315 +#define METATILE_SecretBase_AttractMat_Center 0x30C +#define METATILE_SecretBase_AttractMat_MidLeft 0x30B +#define METATILE_SecretBase_AttractMat_MidRight 0x30D +#define METATILE_SecretBase_AttractMat_TopLeft 0x303 +#define METATILE_SecretBase_AttractMat_TopMid 0x304 +#define METATILE_SecretBase_AttractMat_TopRight 0x305 +#define METATILE_SecretBase_BallPoster 0x330 +#define METATILE_SecretBase_BigPlant_BaseLeft1 0x2EC +#define METATILE_SecretBase_BigPlant_BaseLeft2 0x2EE +#define METATILE_SecretBase_BigPlant_BaseRight1 0x2ED +#define METATILE_SecretBase_BigPlant_BaseRight2 0x2EF +#define METATILE_SecretBase_BigPlant_TopLeft 0x2E4 +#define METATILE_SecretBase_BigPlant_TopRight 0x2E6 +#define METATILE_SecretBase_BlueBalloon 0x33C #define METATILE_SecretBase_BlueBrick_Bottom 0x22F -#define METATILE_SecretBase_MudBall 0x228 -#define METATILE_SecretBase_Fence_Horizontal 0x22C -#define METATILE_SecretBase_Fence_Vertical 0x233 -#define METATILE_SecretBase_SolidBoard_Top 0x234 -#define METATILE_SecretBase_SolidBoard_Bottom 0x23C -#define METATILE_SecretBase_RedTent_TopLeft 0x230 -#define METATILE_SecretBase_RedTent_TopMid 0x231 -#define METATILE_SecretBase_RedTent_TopRight 0x232 -#define METATILE_SecretBase_RedTent_MidLeft 0x238 -#define METATILE_SecretBase_RedTent_DoorTop 0x239 -#define METATILE_SecretBase_RedTent_MidRight 0x23A -#define METATILE_SecretBase_RedTent_BottomLeft 0x240 -#define METATILE_SecretBase_RedTent_Door 0x241 -#define METATILE_SecretBase_RedTent_BottomRight 0x23B +#define METATILE_SecretBase_BlueBrick_Top 0x227 +#define METATILE_SecretBase_BluePoster 0x333 +#define METATILE_SecretBase_BlueTent_BottomLeft 0x258 +#define METATILE_SecretBase_BlueTent_BottomRight 0x269 +#define METATILE_SecretBase_BlueTent_Door 0x259 +#define METATILE_SecretBase_BlueTent_DoorTop 0x251 +#define METATILE_SecretBase_BlueTent_MidLeft 0x250 +#define METATILE_SecretBase_BlueTent_MidRight 0x270 #define METATILE_SecretBase_BlueTent_TopLeft 0x248 #define METATILE_SecretBase_BlueTent_TopMid 0x249 #define METATILE_SecretBase_BlueTent_TopRight 0x268 -#define METATILE_SecretBase_BlueTent_MidLeft 0x250 -#define METATILE_SecretBase_BlueTent_DoorTop 0x251 -#define METATILE_SecretBase_BlueTent_MidRight 0x270 -#define METATILE_SecretBase_BlueTent_BottomLeft 0x258 -#define METATILE_SecretBase_BlueTent_Door 0x259 -#define METATILE_SecretBase_BlueTent_BottomRight 0x269 -#define METATILE_SecretBase_Slide_TopLeft 0x235 -#define METATILE_SecretBase_Slide_TopRight 0x236 -#define METATILE_SecretBase_Slide_StairLanding 0x23D -#define METATILE_SecretBase_Slide_SlideTop 0x23E -#define METATILE_SecretBase_Slide_Stairs 0x263 -#define METATILE_SecretBase_Slide_SlideBottom 0x264 -#define METATILE_SecretBase_Slide_MatLeft 0x26F -#define METATILE_SecretBase_Slide_MatRight 0x277 -#define METATILE_SecretBase_Stand_CornerLeft 0x26A -#define METATILE_SecretBase_Stand_MidLeft 0x26B -#define METATILE_SecretBase_Stand_MidRight 0x26C -#define METATILE_SecretBase_Stand_CornerRight 0x26D -#define METATILE_SecretBase_Stand_StairsLeft 0x272 -#define METATILE_SecretBase_Stand_BaseLeft 0x273 -#define METATILE_SecretBase_Stand_BaseRight 0x274 -#define METATILE_SecretBase_Stand_StairsRight 0x275 -#define METATILE_SecretBase_BreakableDoor_TopClosed 0x237 #define METATILE_SecretBase_BreakableDoor_BottomClosed 0x23F -#define METATILE_SecretBase_BreakableDoor_TopOpen 0x26E #define METATILE_SecretBase_BreakableDoor_BottomOpen 0x276 +#define METATILE_SecretBase_BreakableDoor_TopClosed 0x237 +#define METATILE_SecretBase_BreakableDoor_TopOpen 0x26E +#define METATILE_SecretBase_BrickChair 0x2C8 +#define METATILE_SecretBase_BrickDesk_BottomLeft 0x2B0 +#define METATILE_SecretBase_BrickDesk_BottomMid 0x2B1 +#define METATILE_SecretBase_BrickDesk_BottomRight 0x2B2 +#define METATILE_SecretBase_BrickDesk_Center 0x2A9 +#define METATILE_SecretBase_BrickDesk_MidLeft 0x2A8 +#define METATILE_SecretBase_BrickDesk_MidRight 0x2AA +#define METATILE_SecretBase_BrickDesk_TopLeft 0x2A0 +#define METATILE_SecretBase_BrickDesk_TopMid 0x2A1 +#define METATILE_SecretBase_BrickDesk_TopRight 0x2A2 +#define METATILE_SecretBase_CampChair 0x2C9 +#define METATILE_SecretBase_CampDesk_BottomLeft 0x2B4 +#define METATILE_SecretBase_CampDesk_BottomMid 0x2B5 +#define METATILE_SecretBase_CampDesk_BottomRight 0x2B6 +#define METATILE_SecretBase_CampDesk_Center 0x2AD +#define METATILE_SecretBase_CampDesk_MidLeft 0x2AC +#define METATILE_SecretBase_CampDesk_MidRight 0x2AE +#define METATILE_SecretBase_CampDesk_TopLeft 0x2A4 +#define METATILE_SecretBase_CampDesk_TopMid 0x2A5 +#define METATILE_SecretBase_CampDesk_TopRight 0x2A6 +#define METATILE_SecretBase_ColorfulPlant_BaseLeft1 0x2E8 +#define METATILE_SecretBase_ColorfulPlant_BaseLeft2 0x2EA +#define METATILE_SecretBase_ColorfulPlant_BaseRight1 0x2E9 +#define METATILE_SecretBase_ColorfulPlant_BaseRight2 0x2EB +#define METATILE_SecretBase_ColorfulPlant_TopLeft 0x2E0 +#define METATILE_SecretBase_ColorfulPlant_TopLeftWall 0x2E1 +#define METATILE_SecretBase_ColorfulPlant_TopRight 0x2E2 +#define METATILE_SecretBase_ColorfulPlant_TopRightWall 0x2E3 +#define METATILE_SecretBase_ComfortChair 0x2C1 +#define METATILE_SecretBase_ComfortDesk_BottomLeft 0x29E +#define METATILE_SecretBase_ComfortDesk_BottomMid 0x29F +#define METATILE_SecretBase_ComfortDesk_BottomRight 0x2AB +#define METATILE_SecretBase_ComfortDesk_TopLeft 0x296 +#define METATILE_SecretBase_ComfortDesk_TopMid 0x297 +#define METATILE_SecretBase_ComfortDesk_TopRight 0x2A3 +#define METATILE_SecretBase_CutePoster 0x334 +#define METATILE_SecretBase_CuteTV 0x2F6 +#define METATILE_SecretBase_Fence_Horizontal 0x22C +#define METATILE_SecretBase_Fence_Vertical 0x233 +#define METATILE_SecretBase_FireBlastMat_BottomLeft 0x265 +#define METATILE_SecretBase_FireBlastMat_BottomMid 0x266 +#define METATILE_SecretBase_FireBlastMat_BottomRight 0x267 +#define METATILE_SecretBase_FireBlastMat_Center 0x25E +#define METATILE_SecretBase_FireBlastMat_MidLeft 0x25D +#define METATILE_SecretBase_FireBlastMat_MidRight 0x25F +#define METATILE_SecretBase_FireBlastMat_TopLeft 0x25A +#define METATILE_SecretBase_FireBlastMat_TopMid 0x25B +#define METATILE_SecretBase_FireBlastMat_TopRight 0x25C +#define METATILE_SecretBase_FissureMat_BottomLeft 0x316 +#define METATILE_SecretBase_FissureMat_BottomMid 0x317 +#define METATILE_SecretBase_FissureMat_BottomRight 0x328 +#define METATILE_SecretBase_FissureMat_Center 0x30F +#define METATILE_SecretBase_FissureMat_MidLeft 0x30E +#define METATILE_SecretBase_FissureMat_MidRight 0x320 +#define METATILE_SecretBase_FissureMat_TopLeft 0x306 +#define METATILE_SecretBase_FissureMat_TopMid 0x307 +#define METATILE_SecretBase_FissureMat_TopRight 0x318 +#define METATILE_SecretBase_GlassOrnament_Base1 0x28A +#define METATILE_SecretBase_GlassOrnament_Base2 0x28B +#define METATILE_SecretBase_GlassOrnament_Top 0x282 +#define METATILE_SecretBase_GlassOrnament_TopWall 0x283 #define METATILE_SecretBase_GlitterMat 0x260 +#define METATILE_SecretBase_GoldShield_Base1 0x336 +#define METATILE_SecretBase_GoldShield_Base2 0x337 +#define METATILE_SecretBase_GoldShield_Top 0x32E +#define METATILE_SecretBase_GoldShield_TopWall 0x32F +#define METATILE_SecretBase_GorgeousPlant_BaseLeft1 0x2F8 +#define METATILE_SecretBase_GorgeousPlant_BaseLeft2 0x2FA +#define METATILE_SecretBase_GorgeousPlant_BaseRight1 0x2F9 +#define METATILE_SecretBase_GorgeousPlant_BaseRight2 0x2FB +#define METATILE_SecretBase_GorgeousPlant_TopLeft 0x2F0 +#define METATILE_SecretBase_GorgeousPlant_TopLeftWall 0x2F1 +#define METATILE_SecretBase_GorgeousPlant_TopRight 0x2F2 +#define METATILE_SecretBase_GorgeousPlant_TopRightWall 0x2F3 +#define METATILE_SecretBase_GreenPoster 0x331 +#define METATILE_SecretBase_Ground 0x20A +#define METATILE_SecretBase_HardChair 0x2CA +#define METATILE_SecretBase_HardDesk_BottomLeft 0x2B7 +#define METATILE_SecretBase_HardDesk_BottomMid 0x2CB +#define METATILE_SecretBase_HardDesk_BottomRight 0x2CC +#define METATILE_SecretBase_HardDesk_Center 0x2C3 +#define METATILE_SecretBase_HardDesk_MidLeft 0x2AF +#define METATILE_SecretBase_HardDesk_MidRight 0x2C4 +#define METATILE_SecretBase_HardDesk_TopLeft 0x2A7 +#define METATILE_SecretBase_HardDesk_TopMid 0x2BB +#define METATILE_SecretBase_HardDesk_TopRight 0x2BC +#define METATILE_SecretBase_HeavyChair 0x2BA +#define METATILE_SecretBase_HeavyDesk_BottomLeft 0x298 +#define METATILE_SecretBase_HeavyDesk_BottomMid 0x299 +#define METATILE_SecretBase_HeavyDesk_BottomRight 0x29A +#define METATILE_SecretBase_HeavyDesk_TopLeft 0x290 +#define METATILE_SecretBase_HeavyDesk_TopMid 0x291 +#define METATILE_SecretBase_HeavyDesk_TopRight 0x292 #define METATILE_SecretBase_JumpMat 0x261 -#define METATILE_SecretBase_SpinMat 0x262 +#define METATILE_SecretBase_KissPoster_Left 0x32C +#define METATILE_SecretBase_KissPoster_Right 0x32D +#define METATILE_SecretBase_LongPoster_Left 0x31E +#define METATILE_SecretBase_LongPoster_Right 0x31F +#define METATILE_SecretBase_MudBall 0x228 +#define METATILE_SecretBase_NoteMat_A 0x27D +#define METATILE_SecretBase_NoteMat_B 0x27E +#define METATILE_SecretBase_NoteMat_C_High 0x2B3 #define METATILE_SecretBase_NoteMat_C_Low 0x278 #define METATILE_SecretBase_NoteMat_D 0x279 #define METATILE_SecretBase_NoteMat_E 0x27A #define METATILE_SecretBase_NoteMat_F 0x27B #define METATILE_SecretBase_NoteMat_G 0x27C -#define METATILE_SecretBase_NoteMat_A 0x27D -#define METATILE_SecretBase_NoteMat_B 0x27E -#define METATILE_SecretBase_NoteMat_C_High 0x2B3 -#define METATILE_SecretBase_Tire_TopLeft 0x280 -#define METATILE_SecretBase_Tire_TopRight 0x281 -#define METATILE_SecretBase_Tire_BottomLeft 0x288 -#define METATILE_SecretBase_Tire_BottomRight 0x289 -#define METATILE_SecretBase_GlassOrnament_Top 0x282 -#define METATILE_SecretBase_GlassOrnament_Base1 0x28A -#define METATILE_SecretBase_GlassOrnament_TopWall 0x283 -#define METATILE_SecretBase_GlassOrnament_Base2 0x28B -#define METATILE_SecretBase_SandOrnament_BrokenTop 0x284 -#define METATILE_SecretBase_SandOrnament_BrokenBase 0x28C -#define METATILE_SecretBase_SandOrnament_Top 0x285 -#define METATILE_SecretBase_SandOrnament_Base1 0x28D -#define METATILE_SecretBase_SandOrnament_TopWall 0x286 -#define METATILE_SecretBase_SandOrnament_Base2 0x28E -#define METATILE_SecretBase_SmallDesk 0x287 -#define METATILE_SecretBase_PokemonDesk 0x28F -#define METATILE_SecretBase_HeavyDesk_TopLeft 0x290 -#define METATILE_SecretBase_HeavyDesk_TopMid 0x291 -#define METATILE_SecretBase_HeavyDesk_TopRight 0x292 -#define METATILE_SecretBase_HeavyDesk_BottomLeft 0x298 -#define METATILE_SecretBase_HeavyDesk_BottomMid 0x299 -#define METATILE_SecretBase_HeavyDesk_BottomRight 0x29A -#define METATILE_SecretBase_RaggedDesk_TopLeft 0x293 -#define METATILE_SecretBase_RaggedDesk_TopMid 0x294 -#define METATILE_SecretBase_RaggedDesk_TopRight 0x295 -#define METATILE_SecretBase_RaggedDesk_BottomLeft 0x29B -#define METATILE_SecretBase_RaggedDesk_BottomMid 0x29C -#define METATILE_SecretBase_RaggedDesk_BottomRight 0x29D -#define METATILE_SecretBase_ComfortDesk_TopLeft 0x296 -#define METATILE_SecretBase_ComfortDesk_TopMid 0x297 -#define METATILE_SecretBase_ComfortDesk_TopRight 0x2A3 -#define METATILE_SecretBase_ComfortDesk_BottomLeft 0x29E -#define METATILE_SecretBase_ComfortDesk_BottomMid 0x29F -#define METATILE_SecretBase_ComfortDesk_BottomRight 0x2AB -#define METATILE_SecretBase_BrickDesk_TopLeft 0x2A0 -#define METATILE_SecretBase_BrickDesk_TopMid 0x2A1 -#define METATILE_SecretBase_BrickDesk_TopRight 0x2A2 -#define METATILE_SecretBase_BrickDesk_MidLeft 0x2A8 -#define METATILE_SecretBase_BrickDesk_Center 0x2A9 -#define METATILE_SecretBase_BrickDesk_MidRight 0x2AA -#define METATILE_SecretBase_BrickDesk_BottomLeft 0x2B0 -#define METATILE_SecretBase_BrickDesk_BottomMid 0x2B1 -#define METATILE_SecretBase_BrickDesk_BottomRight 0x2B2 -#define METATILE_SecretBase_CampDesk_TopLeft 0x2A4 -#define METATILE_SecretBase_CampDesk_TopMid 0x2A5 -#define METATILE_SecretBase_CampDesk_TopRight 0x2A6 -#define METATILE_SecretBase_CampDesk_MidLeft 0x2AC -#define METATILE_SecretBase_CampDesk_Center 0x2AD -#define METATILE_SecretBase_CampDesk_MidRight 0x2AE -#define METATILE_SecretBase_CampDesk_BottomLeft 0x2B4 -#define METATILE_SecretBase_CampDesk_BottomMid 0x2B5 -#define METATILE_SecretBase_CampDesk_BottomRight 0x2B6 -#define METATILE_SecretBase_HardDesk_TopLeft 0x2A7 -#define METATILE_SecretBase_HardDesk_TopMid 0x2BB -#define METATILE_SecretBase_HardDesk_TopRight 0x2BC -#define METATILE_SecretBase_HardDesk_MidLeft 0x2AF -#define METATILE_SecretBase_HardDesk_Center 0x2C3 -#define METATILE_SecretBase_HardDesk_MidRight 0x2C4 -#define METATILE_SecretBase_HardDesk_BottomLeft 0x2B7 -#define METATILE_SecretBase_HardDesk_BottomMid 0x2CB -#define METATILE_SecretBase_HardDesk_BottomRight 0x2CC -#define METATILE_SecretBase_PrettyDesk_TopLeft 0x2BD -#define METATILE_SecretBase_PrettyDesk_TopMid 0x2BE -#define METATILE_SecretBase_PrettyDesk_TopRight 0x2BF -#define METATILE_SecretBase_PrettyDesk_MidLeft 0x2C5 -#define METATILE_SecretBase_PrettyDesk_Center 0x2C6 -#define METATILE_SecretBase_PrettyDesk_MidRight 0x2C7 -#define METATILE_SecretBase_PrettyDesk_BottomLeft 0x2CD -#define METATILE_SecretBase_PrettyDesk_BottomMid 0x2CE -#define METATILE_SecretBase_PrettyDesk_BottomRight 0x2CF -#define METATILE_SecretBase_SmallChair 0x2B8 -#define METATILE_SecretBase_PokemonChair 0x2B9 -#define METATILE_SecretBase_HeavyChair 0x2BA -#define METATILE_SecretBase_PrettyChair 0x2C0 -#define METATILE_SecretBase_ComfortChair 0x2C1 -#define METATILE_SecretBase_RaggedChair 0x2C2 -#define METATILE_SecretBase_BrickChair 0x2C8 -#define METATILE_SecretBase_CampChair 0x2C9 -#define METATILE_SecretBase_HardChair 0x2CA -#define METATILE_SecretBase_RedPlant_Top 0x2D0 -#define METATILE_SecretBase_RedPlant_Base1 0x2D8 -#define METATILE_SecretBase_RedPlant_TopWall 0x2D1 -#define METATILE_SecretBase_RedPlant_Base2 0x2D9 -#define METATILE_SecretBase_TropicalPlant_Top 0x2D2 -#define METATILE_SecretBase_TropicalPlant_Base1 0x2DA -#define METATILE_SecretBase_TropicalPlant_TopWall 0x2D3 -#define METATILE_SecretBase_TropicalPlant_Base2 0x2DB -#define METATILE_SecretBase_PrettyFlowers_Top 0x2D4 -#define METATILE_SecretBase_PrettyFlowers_Base1 0x2DC -#define METATILE_SecretBase_PrettyFlowers_TopWall 0x2D5 -#define METATILE_SecretBase_PrettyFlowers_Base2 0x2DD -#define METATILE_SecretBase_ColorfulPlant_TopLeft 0x2E0 -#define METATILE_SecretBase_ColorfulPlant_TopRight 0x2E2 -#define METATILE_SecretBase_ColorfulPlant_BaseLeft1 0x2E8 -#define METATILE_SecretBase_ColorfulPlant_BaseRight1 0x2E9 -#define METATILE_SecretBase_ColorfulPlant_TopLeftWall 0x2E1 -#define METATILE_SecretBase_ColorfulPlant_TopRightWall 0x2E3 -#define METATILE_SecretBase_ColorfulPlant_BaseLeft2 0x2EA -#define METATILE_SecretBase_ColorfulPlant_BaseRight2 0x2EB -#define METATILE_SecretBase_BigPlant_TopLeft 0x2E4 -#define METATILE_SecretBase_BigPlant_TopRight 0x2E6 -#define METATILE_SecretBase_BigPlant_BaseLeft1 0x2EC -#define METATILE_SecretBase_BigPlant_BaseRight1 0x2ED -#define METATILE_SecretBase_BigPlant_BaseLeft2 0x2EE -#define METATILE_SecretBase_BigPlant_BaseRight2 0x2EF -#define METATILE_SecretBase_GorgeousPlant_TopLeft 0x2F0 -#define METATILE_SecretBase_GorgeousPlant_TopRight 0x2F2 -#define METATILE_SecretBase_GorgeousPlant_BaseLeft1 0x2F8 -#define METATILE_SecretBase_GorgeousPlant_BaseRight1 0x2F9 -#define METATILE_SecretBase_GorgeousPlant_TopLeftWall 0x2F1 -#define METATILE_SecretBase_GorgeousPlant_TopRightWall 0x2F3 -#define METATILE_SecretBase_GorgeousPlant_BaseLeft2 0x2FA -#define METATILE_SecretBase_GorgeousPlant_BaseRight2 0x2FB -#define METATILE_SecretBase_TV 0x2F4 -#define METATILE_SecretBase_RoundTV 0x2F5 -#define METATILE_SecretBase_CuteTV 0x2F6 +#define METATILE_SecretBase_PC 0x220 +#define METATILE_SecretBase_PC_On 0x224 #define METATILE_SecretBase_PikaPoster_Left 0x31C #define METATILE_SecretBase_PikaPoster_Right 0x31D -#define METATILE_SecretBase_LongPoster_Left 0x31E -#define METATILE_SecretBase_LongPoster_Right 0x31F -#define METATILE_SecretBase_SeaPoster_Left 0x324 -#define METATILE_SecretBase_SeaPoster_Right 0x325 -#define METATILE_SecretBase_SkyPoster_Left 0x326 -#define METATILE_SecretBase_SkyPoster_Right 0x327 -#define METATILE_SecretBase_KissPoster_Left 0x32C -#define METATILE_SecretBase_KissPoster_Right 0x32D -#define METATILE_SecretBase_BallPoster 0x330 -#define METATILE_SecretBase_GreenPoster 0x331 -#define METATILE_SecretBase_RedPoster 0x332 -#define METATILE_SecretBase_BluePoster 0x333 -#define METATILE_SecretBase_CutePoster 0x334 -#define METATILE_SecretBase_SilverShield_Top 0x2D6 -#define METATILE_SecretBase_SilverShield_Base1 0x2DE -#define METATILE_SecretBase_SilverShield_TopWall 0x2D7 -#define METATILE_SecretBase_SilverShield_Base2 0x2DF -#define METATILE_SecretBase_GoldShield_Top 0x32E -#define METATILE_SecretBase_GoldShield_Base1 0x336 -#define METATILE_SecretBase_GoldShield_TopWall 0x32F -#define METATILE_SecretBase_GoldShield_Base2 0x337 -#define METATILE_SecretBase_RedBalloon 0x338 -#define METATILE_SecretBase_BlueBalloon 0x33C -#define METATILE_SecretBase_YellowBalloon 0x340 -#define METATILE_SecretBase_SurfMat_TopLeft 0x242 -#define METATILE_SecretBase_SurfMat_TopMid 0x243 -#define METATILE_SecretBase_SurfMat_TopRight 0x244 -#define METATILE_SecretBase_SurfMat_MidLeft 0x24A -#define METATILE_SecretBase_SurfMat_Center 0x24B -#define METATILE_SecretBase_SurfMat_MidRight 0x24C -#define METATILE_SecretBase_SurfMat_BottomLeft 0x252 -#define METATILE_SecretBase_SurfMat_BottomMid 0x253 -#define METATILE_SecretBase_SurfMat_BottomRight 0x254 -#define METATILE_SecretBase_ThunderMat_TopLeft 0x245 -#define METATILE_SecretBase_ThunderMat_TopMid 0x246 -#define METATILE_SecretBase_ThunderMat_TopRight 0x247 -#define METATILE_SecretBase_ThunderMat_MidLeft 0x24D -#define METATILE_SecretBase_ThunderMat_Center 0x24E -#define METATILE_SecretBase_ThunderMat_MidRight 0x24F -#define METATILE_SecretBase_ThunderMat_BottomLeft 0x255 -#define METATILE_SecretBase_ThunderMat_BottomMid 0x256 -#define METATILE_SecretBase_ThunderMat_BottomRight 0x257 -#define METATILE_SecretBase_FireBlastMat_TopLeft 0x25A -#define METATILE_SecretBase_FireBlastMat_TopMid 0x25B -#define METATILE_SecretBase_FireBlastMat_TopRight 0x25C -#define METATILE_SecretBase_FireBlastMat_MidLeft 0x25D -#define METATILE_SecretBase_FireBlastMat_Center 0x25E -#define METATILE_SecretBase_FireBlastMat_MidRight 0x25F -#define METATILE_SecretBase_FireBlastMat_BottomLeft 0x265 -#define METATILE_SecretBase_FireBlastMat_BottomMid 0x266 -#define METATILE_SecretBase_FireBlastMat_BottomRight 0x267 -#define METATILE_SecretBase_PowderSnowMat_TopLeft 0x300 -#define METATILE_SecretBase_PowderSnowMat_TopMid 0x301 -#define METATILE_SecretBase_PowderSnowMat_TopRight 0x302 -#define METATILE_SecretBase_PowderSnowMat_MidLeft 0x308 -#define METATILE_SecretBase_PowderSnowMat_Center 0x309 -#define METATILE_SecretBase_PowderSnowMat_MidRight 0x30A +#define METATILE_SecretBase_PokemonChair 0x2B9 +#define METATILE_SecretBase_PokemonDesk 0x28F #define METATILE_SecretBase_PowderSnowMat_BottomLeft 0x310 #define METATILE_SecretBase_PowderSnowMat_BottomMid 0x311 #define METATILE_SecretBase_PowderSnowMat_BottomRight 0x312 -#define METATILE_SecretBase_AttractMat_TopLeft 0x303 -#define METATILE_SecretBase_AttractMat_TopMid 0x304 -#define METATILE_SecretBase_AttractMat_TopRight 0x305 -#define METATILE_SecretBase_AttractMat_MidLeft 0x30B -#define METATILE_SecretBase_AttractMat_Center 0x30C -#define METATILE_SecretBase_AttractMat_MidRight 0x30D -#define METATILE_SecretBase_AttractMat_BottomLeft 0x313 -#define METATILE_SecretBase_AttractMat_BottomMid 0x314 -#define METATILE_SecretBase_AttractMat_BottomRight 0x315 -#define METATILE_SecretBase_FissureMat_TopLeft 0x306 -#define METATILE_SecretBase_FissureMat_TopMid 0x307 -#define METATILE_SecretBase_FissureMat_TopRight 0x318 -#define METATILE_SecretBase_FissureMat_MidLeft 0x30E -#define METATILE_SecretBase_FissureMat_Center 0x30F -#define METATILE_SecretBase_FissureMat_MidRight 0x320 -#define METATILE_SecretBase_FissureMat_BottomLeft 0x316 -#define METATILE_SecretBase_FissureMat_BottomMid 0x317 -#define METATILE_SecretBase_FissureMat_BottomRight 0x328 -#define METATILE_SecretBase_SpikesMat_TopLeft 0x319 -#define METATILE_SecretBase_SpikesMat_TopMid 0x31A -#define METATILE_SecretBase_SpikesMat_TopRight 0x31B -#define METATILE_SecretBase_SpikesMat_MidLeft 0x321 -#define METATILE_SecretBase_SpikesMat_Center 0x322 -#define METATILE_SecretBase_SpikesMat_MidRight 0x323 +#define METATILE_SecretBase_PowderSnowMat_Center 0x309 +#define METATILE_SecretBase_PowderSnowMat_MidLeft 0x308 +#define METATILE_SecretBase_PowderSnowMat_MidRight 0x30A +#define METATILE_SecretBase_PowderSnowMat_TopLeft 0x300 +#define METATILE_SecretBase_PowderSnowMat_TopMid 0x301 +#define METATILE_SecretBase_PowderSnowMat_TopRight 0x302 +#define METATILE_SecretBase_PrettyChair 0x2C0 +#define METATILE_SecretBase_PrettyDesk_BottomLeft 0x2CD +#define METATILE_SecretBase_PrettyDesk_BottomMid 0x2CE +#define METATILE_SecretBase_PrettyDesk_BottomRight 0x2CF +#define METATILE_SecretBase_PrettyDesk_Center 0x2C6 +#define METATILE_SecretBase_PrettyDesk_MidLeft 0x2C5 +#define METATILE_SecretBase_PrettyDesk_MidRight 0x2C7 +#define METATILE_SecretBase_PrettyDesk_TopLeft 0x2BD +#define METATILE_SecretBase_PrettyDesk_TopMid 0x2BE +#define METATILE_SecretBase_PrettyDesk_TopRight 0x2BF +#define METATILE_SecretBase_PrettyFlowers_Base1 0x2DC +#define METATILE_SecretBase_PrettyFlowers_Base2 0x2DD +#define METATILE_SecretBase_PrettyFlowers_Top 0x2D4 +#define METATILE_SecretBase_PrettyFlowers_TopWall 0x2D5 +#define METATILE_SecretBase_RaggedChair 0x2C2 +#define METATILE_SecretBase_RaggedDesk_BottomLeft 0x29B +#define METATILE_SecretBase_RaggedDesk_BottomMid 0x29C +#define METATILE_SecretBase_RaggedDesk_BottomRight 0x29D +#define METATILE_SecretBase_RaggedDesk_TopLeft 0x293 +#define METATILE_SecretBase_RaggedDesk_TopMid 0x294 +#define METATILE_SecretBase_RaggedDesk_TopRight 0x295 +#define METATILE_SecretBase_RedBalloon 0x338 +#define METATILE_SecretBase_RedBrick_Bottom 0x22D +#define METATILE_SecretBase_RedBrick_Top 0x225 +#define METATILE_SecretBase_RedPlant_Base1 0x2D8 +#define METATILE_SecretBase_RedPlant_Base2 0x2D9 +#define METATILE_SecretBase_RedPlant_Top 0x2D0 +#define METATILE_SecretBase_RedPlant_TopWall 0x2D1 +#define METATILE_SecretBase_RedPoster 0x332 +#define METATILE_SecretBase_RedTent_BottomLeft 0x240 +#define METATILE_SecretBase_RedTent_BottomRight 0x23B +#define METATILE_SecretBase_RedTent_Door 0x241 +#define METATILE_SecretBase_RedTent_DoorTop 0x239 +#define METATILE_SecretBase_RedTent_MidLeft 0x238 +#define METATILE_SecretBase_RedTent_MidRight 0x23A +#define METATILE_SecretBase_RedTent_TopLeft 0x230 +#define METATILE_SecretBase_RedTent_TopMid 0x231 +#define METATILE_SecretBase_RedTent_TopRight 0x232 +#define METATILE_SecretBase_RegisterPC 0x221 +#define METATILE_SecretBase_RoundTV 0x2F5 +#define METATILE_SecretBase_SandOrnament_Base1 0x28D +#define METATILE_SecretBase_SandOrnament_Base2 0x28E +#define METATILE_SecretBase_SandOrnament_BrokenBase 0x28C +#define METATILE_SecretBase_SandOrnament_BrokenTop 0x284 +#define METATILE_SecretBase_SandOrnament_Top 0x285 +#define METATILE_SecretBase_SandOrnament_TopWall 0x286 +#define METATILE_SecretBase_SeaPoster_Left 0x324 +#define METATILE_SecretBase_SeaPoster_Right 0x325 +#define METATILE_SecretBase_SilverShield_Base1 0x2DE +#define METATILE_SecretBase_SilverShield_Base2 0x2DF +#define METATILE_SecretBase_SilverShield_Top 0x2D6 +#define METATILE_SecretBase_SilverShield_TopWall 0x2D7 +#define METATILE_SecretBase_SkyPoster_Left 0x326 +#define METATILE_SecretBase_SkyPoster_Right 0x327 +#define METATILE_SecretBase_Slide_MatLeft 0x26F +#define METATILE_SecretBase_Slide_MatRight 0x277 +#define METATILE_SecretBase_Slide_SlideBottom 0x264 +#define METATILE_SecretBase_Slide_SlideTop 0x23E +#define METATILE_SecretBase_Slide_StairLanding 0x23D +#define METATILE_SecretBase_Slide_Stairs 0x263 +#define METATILE_SecretBase_Slide_TopLeft 0x235 +#define METATILE_SecretBase_Slide_TopRight 0x236 +#define METATILE_SecretBase_SmallChair 0x2B8 +#define METATILE_SecretBase_SmallDesk 0x287 +#define METATILE_SecretBase_SolidBoard_Bottom 0x23C +#define METATILE_SecretBase_SolidBoard_Top 0x234 #define METATILE_SecretBase_SpikesMat_BottomLeft 0x329 #define METATILE_SecretBase_SpikesMat_BottomMid 0x32A #define METATILE_SecretBase_SpikesMat_BottomRight 0x32B +#define METATILE_SecretBase_SpikesMat_Center 0x322 +#define METATILE_SecretBase_SpikesMat_MidLeft 0x321 +#define METATILE_SecretBase_SpikesMat_MidRight 0x323 +#define METATILE_SecretBase_SpikesMat_TopLeft 0x319 +#define METATILE_SecretBase_SpikesMat_TopMid 0x31A +#define METATILE_SecretBase_SpikesMat_TopRight 0x31B +#define METATILE_SecretBase_SpinMat 0x262 +#define METATILE_SecretBase_Stand_BaseLeft 0x273 +#define METATILE_SecretBase_Stand_BaseRight 0x274 +#define METATILE_SecretBase_Stand_CornerLeft 0x26A +#define METATILE_SecretBase_Stand_CornerRight 0x26D +#define METATILE_SecretBase_Stand_MidLeft 0x26B +#define METATILE_SecretBase_Stand_MidRight 0x26C +#define METATILE_SecretBase_Stand_StairsLeft 0x272 +#define METATILE_SecretBase_Stand_StairsRight 0x275 +#define METATILE_SecretBase_SurfMat_BottomLeft 0x252 +#define METATILE_SecretBase_SurfMat_BottomMid 0x253 +#define METATILE_SecretBase_SurfMat_BottomRight 0x254 +#define METATILE_SecretBase_SurfMat_Center 0x24B +#define METATILE_SecretBase_SurfMat_MidLeft 0x24A +#define METATILE_SecretBase_SurfMat_MidRight 0x24C +#define METATILE_SecretBase_SurfMat_TopLeft 0x242 +#define METATILE_SecretBase_SurfMat_TopMid 0x243 +#define METATILE_SecretBase_SurfMat_TopRight 0x244 +#define METATILE_SecretBase_TV 0x2F4 +#define METATILE_SecretBase_ThunderMat_BottomLeft 0x255 +#define METATILE_SecretBase_ThunderMat_BottomMid 0x256 +#define METATILE_SecretBase_ThunderMat_BottomRight 0x257 +#define METATILE_SecretBase_ThunderMat_Center 0x24E +#define METATILE_SecretBase_ThunderMat_MidLeft 0x24D +#define METATILE_SecretBase_ThunderMat_MidRight 0x24F +#define METATILE_SecretBase_ThunderMat_TopLeft 0x245 +#define METATILE_SecretBase_ThunderMat_TopMid 0x246 +#define METATILE_SecretBase_ThunderMat_TopRight 0x247 +#define METATILE_SecretBase_Tire_BottomLeft 0x288 +#define METATILE_SecretBase_Tire_BottomRight 0x289 +#define METATILE_SecretBase_Tire_TopLeft 0x280 +#define METATILE_SecretBase_Tire_TopRight 0x281 +#define METATILE_SecretBase_TropicalPlant_Base1 0x2DA +#define METATILE_SecretBase_TropicalPlant_Base2 0x2DB +#define METATILE_SecretBase_TropicalPlant_Top 0x2D2 +#define METATILE_SecretBase_TropicalPlant_TopWall 0x2D3 +#define METATILE_SecretBase_Wall_TopMid 0x202 +#define METATILE_SecretBase_YellowBalloon 0x340 +#define METATILE_SecretBase_YellowBrick_Bottom 0x22E +#define METATILE_SecretBase_YellowBrick_Top 0x226 -// gTileset_BattlePyramid -#define METATILE_BattlePyramid_Floor 0x28D -#define METATILE_BattlePyramid_Exit 0x28E +// gTileset_Shop +#define METATILE_Shop_Door_Elevator 0x285 +#define METATILE_Shop_Laptop1_Flash 0x258 +#define METATILE_Shop_Laptop1_Normal 0x29D +#define METATILE_Shop_Laptop2_Flash 0x260 +#define METATILE_Shop_Laptop2_Normal 0x2A5 + +// gTileset_Slateport +#define METATILE_Slateport_Door 0x2DC +#define METATILE_Slateport_Door_BattleTent 0x393 + +// gTileset_SootopolisGym +#define METATILE_SootopolisGym_Ice_Broken 0x206 +#define METATILE_SootopolisGym_Ice_Cracked 0x20E +#define METATILE_SootopolisGym_Stairs 0x207 + +// gTileset_Sootopolis +#define METATILE_Sootopolis_Door 0x21E +#define METATILE_Sootopolis_Door_Closed 0x248 +#define METATILE_Sootopolis_Door_PeakedRoof 0x21C +#define METATILE_Sootopolis_GymDoor_Closed 0x250 +#define METATILE_Sootopolis_RoughWater 0x290 + +// gTileset_TrainerHill +#define METATILE_TrainerHill_CounterDoor 0x334 +#define METATILE_TrainerHill_Door_Elevator_Lobby 0x32C +#define METATILE_TrainerHill_Door_Elevator_Roof 0x383 +#define METATILE_TrainerHill_GreenFloorTile 0x307 + +// gTileset_TrickHousePuzzle +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Down 0x263 +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left 0x261 +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left_Alt 0x27B +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right 0x260 +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right_Alt 0x27C +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up 0x262 +#define METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right 0x298 +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0 0x23B +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1 0x23C +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2 0x243 +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3 0x244 +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0 0x24B +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1 0x24C +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2 0x253 +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3 0x254 +#define METATILE_TrickHousePuzzle_BlueDoorV_Open0 0x23D +#define METATILE_TrickHousePuzzle_BlueDoorV_Open1 0x245 +#define METATILE_TrickHousePuzzle_BlueDoorV_Retracted 0x24D +#define METATILE_TrickHousePuzzle_Button_Pressed 0x259 +#define METATILE_TrickHousePuzzle_Button_Up 0x258 +#define METATILE_TrickHousePuzzle_Door_Shuttered 0x26A +#define METATILE_TrickHousePuzzle_Floor_ShadowTop 0x255 +#define METATILE_TrickHousePuzzle_Floor_ShadowTop_Alt 0x252 +#define METATILE_TrickHousePuzzle_Lever_Off 0x23E +#define METATILE_TrickHousePuzzle_Lever_On 0x23F +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0 0x238 +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1 0x239 +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2 0x240 +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3 0x241 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0 0x248 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1 0x249 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2 0x250 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3 0x251 +#define METATILE_TrickHousePuzzle_RedDoorV_Open0 0x23A +#define METATILE_TrickHousePuzzle_RedDoorV_Open1 0x242 +#define METATILE_TrickHousePuzzle_RedDoorV_Retracted 0x24A +#define METATILE_TrickHousePuzzle_Stairs_Down 0x20B + +// gTileset_Underwater +#define METATILE_Underwater_FloorShadow 0x228 +#define METATILE_Underwater_RockWall 0x21E #endif // GUARD_METATILE_LABELS_H From 1f694ae7ed851e821c1b981af7aca81aa619cfbe Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 22 Feb 2023 20:41:01 +0100 Subject: [PATCH 018/129] missing pla sprites --- graphics/pokemon/basculegion/back.png | Bin 0 -> 625 bytes graphics/pokemon/basculegion/front.png | Bin 0 -> 960 bytes graphics/pokemon/basculegion/normal.pal | 19 +++++++ graphics/pokemon/basculegion/shiny.pal | 19 +++++++ graphics/pokemon/decidueye/hisuian/back.png | Bin 0 -> 850 bytes graphics/pokemon/decidueye/hisuian/front.png | Bin 0 -> 966 bytes graphics/pokemon/decidueye/hisuian/icon.png | Bin graphics/pokemon/decidueye/hisuian/normal.pal | 19 +++++++ graphics/pokemon/decidueye/hisuian/shiny.pal | 19 +++++++ graphics/pokemon/enamorus/back.png | Bin 0 -> 841 bytes graphics/pokemon/enamorus/front.png | Bin 0 -> 896 bytes graphics/pokemon/enamorus/normal.pal | 19 +++++++ graphics/pokemon/enamorus/shiny.pal | 19 +++++++ graphics/pokemon/enamorus/therian/back.png | Bin 0 -> 844 bytes graphics/pokemon/enamorus/therian/front.png | Bin 0 -> 999 bytes graphics/pokemon/enamorus/therian/normal.pal | 19 +++++++ graphics/pokemon/enamorus/therian/shiny.pal | 19 +++++++ graphics/pokemon/samurott/hisuian/back.png | Bin 0 -> 912 bytes graphics/pokemon/samurott/hisuian/front.png | Bin 0 -> 930 bytes graphics/pokemon/samurott/hisuian/normal.pal | 19 +++++++ graphics/pokemon/samurott/hisuian/shiny.pal | 19 +++++++ graphics/pokemon/samurott/shiny.pal | 0 graphics/pokemon/sneasler/back.png | Bin 0 -> 821 bytes graphics/pokemon/sneasler/front.png | Bin 0 -> 913 bytes graphics/pokemon/sneasler/normal.pal | 19 +++++++ graphics/pokemon/sneasler/shiny.pal | 19 +++++++ graphics/pokemon/wyrdeer/back.png | Bin 0 -> 854 bytes graphics/pokemon/wyrdeer/front.png | Bin 0 -> 1094 bytes graphics/pokemon/wyrdeer/normal.pal | 19 +++++++ graphics/pokemon/wyrdeer/shiny.pal | 19 +++++++ include/graphics.h | 48 +++++++++--------- src/battle_ai_util.c | 2 +- src/data/graphics/pokemon.h | 48 +++++++++--------- src/data/pokemon_graphics/back_pic_table.h | 12 ++--- src/data/pokemon_graphics/front_pic_table.h | 12 ++--- src/data/pokemon_graphics/palette_table.h | 12 ++--- .../pokemon_graphics/shiny_palette_table.h | 14 ++--- src/data/trainer_parties.h | 2 +- 38 files changed, 341 insertions(+), 75 deletions(-) create mode 100755 graphics/pokemon/basculegion/back.png create mode 100755 graphics/pokemon/basculegion/front.png create mode 100755 graphics/pokemon/basculegion/normal.pal create mode 100755 graphics/pokemon/basculegion/shiny.pal create mode 100755 graphics/pokemon/decidueye/hisuian/back.png create mode 100755 graphics/pokemon/decidueye/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/decidueye/hisuian/icon.png create mode 100755 graphics/pokemon/decidueye/hisuian/normal.pal create mode 100755 graphics/pokemon/decidueye/hisuian/shiny.pal create mode 100755 graphics/pokemon/enamorus/back.png create mode 100755 graphics/pokemon/enamorus/front.png create mode 100755 graphics/pokemon/enamorus/normal.pal create mode 100644 graphics/pokemon/enamorus/shiny.pal create mode 100755 graphics/pokemon/enamorus/therian/back.png create mode 100755 graphics/pokemon/enamorus/therian/front.png create mode 100755 graphics/pokemon/enamorus/therian/normal.pal create mode 100644 graphics/pokemon/enamorus/therian/shiny.pal create mode 100755 graphics/pokemon/samurott/hisuian/back.png create mode 100755 graphics/pokemon/samurott/hisuian/front.png create mode 100755 graphics/pokemon/samurott/hisuian/normal.pal create mode 100755 graphics/pokemon/samurott/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/samurott/shiny.pal create mode 100755 graphics/pokemon/sneasler/back.png create mode 100755 graphics/pokemon/sneasler/front.png create mode 100755 graphics/pokemon/sneasler/normal.pal create mode 100755 graphics/pokemon/sneasler/shiny.pal create mode 100755 graphics/pokemon/wyrdeer/back.png create mode 100755 graphics/pokemon/wyrdeer/front.png create mode 100755 graphics/pokemon/wyrdeer/normal.pal create mode 100755 graphics/pokemon/wyrdeer/shiny.pal diff --git a/graphics/pokemon/basculegion/back.png b/graphics/pokemon/basculegion/back.png new file mode 100755 index 0000000000000000000000000000000000000000..cb4e0c0883e7391e103718b619a7d7c593117371 GIT binary patch literal 625 zcmV-%0*?KOP)D7 z5hx!8maw4!000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPxq@WN$AP^7` zco-P?q{v`ADB$GaKu}O1FgPG!IQUR_U|?W4R7k7>n$iFO00Cl4M?{!*(FQ&M00EUr zL_t(|ob8f5OT$nUhJ#Qjbvng>LkB&y5Tu#9*y2zrF5-|PS*kxqoi4Nm!6^kHw021r z>1Y-!?IM{nb-Dk=bM8%B`+b+{=&!+hmp$rHkOFi z6I$KqBjAjq4Sc{?#eGmI?us&*?dPhfCFs}{hz}VG zF{-@@5pVAx&h#w8?|M?ciJ`f}RYF<4_Fl^|fU}?5SZaCR1t_7g!vjnJX03ApVEQEZ zDR-BAB2Ve=tS=wU&NB%OZRCR00vZ5NwB^ENP^b@-&{;3w0dP!$qXp03T|ff%6D`!d zfp6qKHWvWcBB?k9EqDXtZZ$wJAVDS-*LAeujn@NGj#8rQ-hWbi76!jx0a0XbxouEF zos7o1VUa0u?72{Kj9fj#PyoxQGy|rEwMh00000 LNkvXXu0mjfr*!_m literal 0 HcmV?d00001 diff --git a/graphics/pokemon/basculegion/front.png b/graphics/pokemon/basculegion/front.png new file mode 100755 index 0000000000000000000000000000000000000000..4d46e3cbc637fe4110e0a8df7495e2d4da6db96a GIT binary patch literal 960 zcmV;x13&zUP)D7 z5hw_TMKxvs000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPxq@WN$AP^7` zco-P?q{v`ADB$GaKu}O1FgPG!IQUR_U|?W4R7k7>n$iFO00Cl4M@0Xn2lB-L00QJm zL_t(|ob8f7Yui8=#*b2qK#AcBHWci^2hx&i5(#7p1k$a89Op_5k#R(=4&jz8ojL}* z2M4rd=#W8>FW^8S!S19&eIS)UUoaR$y#)FV`krF>kDM>i(i_B~=l8zPd(Ryq|JUET z@^-rO)MtGKn52LPO|40Oe9t!U?Qsgk!hQ;9bjbJ-0I<;_LrnZhC%>6&g&CBhu)1_U<8!=w6srTA~P)!%#$F&9ZhK;POP+YcF_&fAA)g=!Do5%4dEWVGl&NRG7I?Zaw_4Z>dCMsQ;?rOH$KMfy-qBQscLnRlkv>TTfan11%L* z$G0Lx3qumJ i|3ux=daCh1wf+FDY-@nhW|Kq!0000AP_kztSKoVgJKw3K`ALQtcz+&N?L(z#+|?v~PqJf6vfZUe5(U5Cz4z|vOvry;JO2W^n`CQs zRM{lEMWwg~6p3Ec*MZVD-{-4=vR&EdoNunF0Q<}9Kv^wwRn=DapqEuu-C74Yr1-o# zPL%8C*A}gxuZq`SQp=*RYG_ z-doli;k&S$9B8@16aY*C%XNcnih?WV%NK6j&L)6QAqD=0hbi2amQK*dC=;R~gvXFM z8GxU8u$v087lWXY0;YJJ><$5haWO9qJQGu6(CdUrvQ!OIGcmQ-=`j3_aSBjkQi!p= z4*VbpS*8Y|O6Xw<+UYoxAYU6n2JN17UMBcr0vl z324RuqAm-ZAa@K!*a?6ryv=36HU2w<1x$tK65Qh=QLZvI^f6mKGy?b{uDSq zrL?sQm@vy{Qp$0z#s-UfWFo-0l)0BZZXMfku{6~R*0h8bcL?0!gtG)%rN@ZWk3$9W8oW;N~3=igLI9FtW=@ub1+ICc#MS_lX*lM(^01;F?q;6130PZb|yyM1#mCtDW*j> zh6{li97eYf;3+1M`jLcb%`-*O+vq$22A*K_=ScQT3(d-?ULPkwkt5hxK~SA`8F%{b c{$3;GFKMiIKa1T==l}o!07*qoM6N<$f(o5<0RR91 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/decidueye/hisuian/front.png b/graphics/pokemon/decidueye/hisuian/front.png new file mode 100755 index 0000000000000000000000000000000000000000..f3c4d93af1fb2cf6727504961a4dc89d3626f676 GIT binary patch literal 966 zcmV;%13CPOP)(*zQ0S&1zE4{XN3gbrLI-aRw9BKRnGOyw$H6To6c3rg={~v5Rq>PkN5=2z`@R47 zJ-tu1rWJJMigs07ph~M%Y14&(Z+PA!z`gI9WKoXI;Lak0Z$i|g`SEZwKt1^J@tkhWoMu0-j#e-5{8G+@gMV$6aGQ`6-_&Gqp0$Tylex~)?8Kf@q-b|Mee-aiwt+3j{8pv8%ll6{)ZAa9DFHm-LN z*pHsxmWTIdfkUy^F+CdC0O<;o^7f3y+55pBeZo1lAfeK~E9KFJcqZR2LE5jat>bgp z$Msl7(c&`B1@!tp%bP!Wic>j0`cwoyyvL=KF>K8wx4;w^l7w3#fkA__9sJ%!;DeNB z1wcQQLV(rqnTtT5j^)u;^cSyRuvi7!PS{l zC;@X23}=+DF}G$g1aL~U3vwoUMryp~@j7c~=2fNd@m-;s$vxBS*Er>5HvWa;+_Td< z=WFwRO)+NUp&~a2FtH=j-Ivt`fTyQBDRSjSi$Bx`C9g0EnCq^b0fXKke6dqqr{Z>i_@%07*qoM6N<$f@P=AI{*Lx literal 0 HcmV?d00001 diff --git a/graphics/pokemon/decidueye/hisuian/icon.png b/graphics/pokemon/decidueye/hisuian/icon.png old mode 100644 new mode 100755 diff --git a/graphics/pokemon/decidueye/hisuian/normal.pal b/graphics/pokemon/decidueye/hisuian/normal.pal new file mode 100755 index 000000000..a5a61bafe --- /dev/null +++ b/graphics/pokemon/decidueye/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +115 106 106 +16 16 16 +238 238 238 +189 189 189 +238 156 57 +65 41 32 +106 24 41 +189 106 41 +205 49 41 +148 32 41 +41 41 49 +213 148 98 +74 74 90 +172 106 74 +115 65 57 diff --git a/graphics/pokemon/decidueye/hisuian/shiny.pal b/graphics/pokemon/decidueye/hisuian/shiny.pal new file mode 100755 index 000000000..5dd5e9e8f --- /dev/null +++ b/graphics/pokemon/decidueye/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +115 106 106 +16 16 16 +238 238 238 +189 189 189 +238 82 57 +65 41 32 +16 57 41 +172 41 41 +32 131 98 +24 90 65 +41 41 49 +172 139 106 +74 74 90 +131 106 90 +90 65 57 diff --git a/graphics/pokemon/enamorus/back.png b/graphics/pokemon/enamorus/back.png new file mode 100755 index 0000000000000000000000000000000000000000..1b2b00e218f9f00d05f649ab21fd56845f8afffc GIT binary patch literal 841 zcmV-P1GfB$P)D7 z5D71?693r%000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP^3p!LMeSoHyF@vN&frW4IVDB0G0ScK7DR}525QO_4 z3Iyb#1qBMe50!T(xg^%RJmX0}|L?t%eDb`pz&GEy=c-vE<})F#o#49=SA`J56){WV zLM&20iCuut84ofqZ~?|M3ySm|5a;iLFL}s9bPj+&-DVyzSAfTw0(Qv21uE5W*swGY z9RW%yh#?0dXi*`kAqZo$m!EEFuq*RL3nb2zhi(VfY~TG1KE8g zfbTal;AYCt^6?`v#$m6TVH>30kRUR*GsX-A#1h^rGPfh=L8_lU3g8?y_5lS35SQ&7 z^#Rvu0E+~yQp-Iq<45W)qrfVxYD}ncoQI!Oz#(cXA0I13G{E=%BXnRH;5G4#tfRwUyG+_YnP_{%D27Cb4nUf51;`M2|C!Z)UPYK5#x7p~`k+7p Txv2ET00000NkvXXu0mjfD7 z4i6~@lXDON000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPS6X|3#AjbR$egk)H1r>g`@nkuc-k0~z=hGcR|1&hpyt^s#F7@Qi zR|!llY+}z63@#uN3!Y~pysQEy()?%gp#}n-nhzv+qy)aX;QGF6Vg*2fsf%HH$X1L2 z1r7?4Uem~u0_emNv!vNXIa2|#UC$vpNTjEoLDfI++$@42+r zVeAkt5f9?Q8LcuALm+Lm;*4PBe?sxZ7w_fh?MF^nHIEe=- zUhW@N`ZXZ0RWFi@B(qoAVSNz>S(aVRPgh#T2<)Ieo@d$jIj*7|7@(&=v#aMnM1hZE zr~}eowC7)6Wlvf=qY(^#HP61KSJ7}|40k}KA*CzV$6Ng|{3SHL_>SaJ=Phr*1?s#X zMOK-8;NS=(uvm|m*-;73BZJGY#MpsqJ#`MFqY8hxZLtGbtT8K!qW7}PF$mUsT;y1V zmk(iJSQ7Mjf3&TbDDj?Rwec`qSAd=HCT97kngZl+CX>(kY%_;}kza32CX;+N+?;_x z&!Zc#-rk+UEncSWgb(sYnkdGgr?ccTNp~+pIFC?cmZr&h+E(R}EBg99Wd{rWnHXeCmU{lxE`4696|?sSj=F*rSwIzBF-F{1T^FfXeXbZ9u@Kf5Qg= z#`gdrwF0o|y%N4ttPl|5-fL0ZZ3VbXQX*QYfPVuB1awEXAfmdcPnJSdn5%%?g#^SY z9&LZXZHRtW0od}dw|SSY{#!y1NGLAiNM@6gUO2h*P+kG46Ok2%ieljj6Drpv7{3AU W4&fabTMu^t0000 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/enamorus/normal.pal b/graphics/pokemon/enamorus/normal.pal new file mode 100755 index 000000000..08f6e5ebf --- /dev/null +++ b/graphics/pokemon/enamorus/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +74 74 74 +180 180 189 +252 252 252 +16 16 16 +118 50 58 +147 33 30 +224 116 156 +243 46 46 +174 74 87 +199 46 41 +243 84 143 +187 62 94 +255 197 60 +239 228 176 +0 0 0 diff --git a/graphics/pokemon/enamorus/shiny.pal b/graphics/pokemon/enamorus/shiny.pal new file mode 100644 index 000000000..180ae687e --- /dev/null +++ b/graphics/pokemon/enamorus/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +74 74 74 +180 180 189 +255 255 255 +0 0 0 +131 57 82 +164 24 24 +230 131 164 +255 90 0 +189 82 106 +222 74 41 +255 139 238 +205 98 189 +255 197 32 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/enamorus/therian/back.png b/graphics/pokemon/enamorus/therian/back.png new file mode 100755 index 0000000000000000000000000000000000000000..8ef80407f583e2838b0e46e9a2e69fd4503d1f6d GIT binary patch literal 844 zcmV-S1GD^zP)D7 z4izI;Yhcv?000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPgqq$|2WS||<0Ds*Ulsl zWQCOX-n4*Gem?Hu=)jXa#Y7#D`-WBEqxa*n_oxGepBuA~wnSJ2o(x~N_JJ5uTE-?xFN6G-_X#l2*6*#*Dq!Lbg2>0Sq5BlT9xcN)r}+yz!C zLO3a9~i8-U|A0|r~M0YaTY zC$38{1o{RbirpF3B}5T&t#!#)NOwUsuQk_Dk*vv9rVY?_q#UQp5=T|11?UDyN2e>J zv#d&0LYfA6(`(w~Bd#}s>(XX?-Ug1gKTW#PV7*a-9^&meC2qYGn}$$2UGF5Ngd;%L z)Z!`K2Gp$pb?g%C*WM=RD7 z4h{t@P%g3n000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP0PS4v7s z^DZv@{QR`Ey^|px^Hh(=E-AY{UjM~B@8qxm006*=;>-X500Cl4M@0Xn2lB-L00Rq2 zL_t(|oVC@xYui8+0Pr(Hq~59|ZK3s25$_6Drw+}OD!Uu|EK#zhKCqjip@{R?VuX%P zDFIRADHs=eWG)1E2_Y^xw{nzkga>uXu@ zoUZE|Mg~{~P+SJ;huIa1Gy^ERw*f-nQ3(Oji#3u0gt3asobY0c)N6amCLv}yD}cfj z^p%ED3RF~Qg+u`1&F85OEJ$t*5sCq-!0+mX^33IqH0hGXI5U?6XZJ-yr{ur`ryP%RF-|DgtXDZCqb)s)*8pg>kx=kvCxZju@ z1)@)!c{i5e^%rseQ}k&q025K9wb*jykNolXUqWmJp*n5s2cS`%gPiD%e*h>kLiWN8 z!N)CCrr@Cv134C-`;0M6tLCIc!z{bA1VVT(g&4J-daPYyPfW58J(xDH%o3b?j*zl- z<}qfmwg;7DlZzi^WDes)6yQgn-N(Vk$;m?p&lrbR*5R6ofaYJEFdy%)E6r!mBBe z8-Bx4TY>0cSq8czjTn&jG`$NE04|ntek5+>RaifGs@@C%bYu(^U`od*bIjr1*%^Kn z0~dB+Ee0+X11T7lI}&dfMpX0-Wr*i3(4(vHm4Yva7r(~<(6in!2IfC}y@kua?$IZz#%gfJp3Ez8UcV;Gmxh-U|=Nz#_a2tZ#HS-%UTel#I^5tlfS*O zl3{`+K-oUrUI5MbwE~|hex0Yjp8)9rpqmY#DSDCt{G|ZD7 z5I8ZCK*b0E000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP4I|bCe0WH}DVBG^RA6jLwFqU1@a6IZ2-mer`WdW$8!BPRO@#Uz%J{tg(X&g6A zbB@5QRUlWuha!*z(LoPg%w!KuGCb@eP_xE2JO&m4*u#sOAa=R}>j)Hy5m1IVfpAgR zBHknLrGUo)bop%unE6WNBYBg324L3%P;}bJ(z0Gj{*k1TXQq`sUT?bkuvPS(=w~em zMuAe8qlgO)M00kppTEBSup*aC^M9dN*{Q*~1ISfaY1?`Lu+QE_WH4Z7tpfC(=L#GV zoC4S_I|Edp0G*EQrO33;ZDU&{h$s^Hdp%WD=Kg>keiK>Ns1k%_8i4AQdhhkfV85-k z2=#~rSvU~%B1{PEDV4Y!p)fTTa^%fmp4uD`JuRa?ABVT!P}(LD$hW2svz;+HyG=k z-AM}`L?t4PXc;IHVjL-8w0~Qrh0||40*{$L=QOR z$GlW0v`%BdHZBY-<{3X#b@vq}%nng^YiR;7Av^-eFag+Z+M~fekXY_5FtNB*cMjd1 mM3t&*7n1-sy9(=c&G8o`RmGQTvojz70000D7 z5I8xUn@u_Z000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP*YurE(hP92cn?uvgSu*}_*=9%(30$=*(zv=yz+g4TdvJw1-;zd+^05$b zm1a4(Cg9>ARcx@i-;i1Ptkaz~uF_;Gp?P@U+1b%3ivEv)?c=K;fbsLwK^+8yY=J7Q z;UyZMtYRbt$c@V106~BrIIvX~1R^BzF8DG4wzkq%aUd@wP%JDpAp-!$f+TJL3P^xA zftsj(=Ox55B04NrQBy{DziX7-mcd4O3!I?`>bnOkkxd@ssN3NvI?QE8lzmqZwkb0J zWHo)k&v{;Xfr0Y?c7U8@yJ>2PGs565|cM&QP11|T)!gQhx4W7|vK5dCUAmGoPGKJW$FokY4Qo`yK)r;P6Mt z8k0QI3K}MDQ&`$;*Vm z%n@V&&_$H`O%Nv7&7;PM*B`CekN&(48WwzNCv5D4*Q1Zkv5zZDw1Xt8A=<&DwVWc6&AA z`Ko2NQxJCn3NQUloX}-QJOos568tN)7Jdi5Wbv=#58-ov&or~g1poj507*qoM6N<$ Ef~sAU6951J literal 0 HcmV?d00001 diff --git a/graphics/pokemon/samurott/hisuian/normal.pal b/graphics/pokemon/samurott/hisuian/normal.pal new file mode 100755 index 000000000..65d979af9 --- /dev/null +++ b/graphics/pokemon/samurott/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +112 96 64 +208 192 120 +240 224 168 +160 144 96 +72 64 80 +248 248 248 +128 168 176 +32 64 104 +40 96 168 +190 54 54 +192 184 200 +96 120 120 +32 48 72 +0 0 0 diff --git a/graphics/pokemon/samurott/hisuian/shiny.pal b/graphics/pokemon/samurott/hisuian/shiny.pal new file mode 100755 index 000000000..f7c51115a --- /dev/null +++ b/graphics/pokemon/samurott/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +112 96 64 +208 192 120 +240 224 168 +213 82 98 +222 218 220 +248 248 248 +128 168 176 +36 49 94 +32 69 155 +162 145 134 +192 184 200 +96 120 120 +32 48 72 +0 0 0 diff --git a/graphics/pokemon/samurott/shiny.pal b/graphics/pokemon/samurott/shiny.pal old mode 100644 new mode 100755 diff --git a/graphics/pokemon/sneasler/back.png b/graphics/pokemon/sneasler/back.png new file mode 100755 index 0000000000000000000000000000000000000000..b39320894ca8d955bbf59954d6a2701e1b60fcdd GIT binary patch literal 821 zcmV-51Iqk~P)D7 z5d|gVurvGs000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPhCjzQ4l1z~=q} zvAe=XQV8h}<**TU{|4VoCc7aC_QDNhGn@C}`@Zw?UI=+u59@zi8GZE6I19tzG2Zj# zeB5^8;~@~Ky-wzVB0e6Ehlty2>CS2tN3~iZKvvZZv2ZjXfO{ZU)rlq+D1HfNQauf#y z@?IhTd_8_I1zOM^ac!D!H*eGNDFy&E`OTLxU=IP{&%WNCLM)vEo7+Fvr#M!40yNE& zrkB2B+q={NZZFU@O`l>L6m5vX#dc5!3^(SOcFW>`M!4Gz3kBcb8Q?hzFu|0UAB0%m z$pq`-i#B>0Xb*(_9Jt&xrVJNhanJ5A)W2*;%Mx_X5`7<7KD zDvK;vcPzNxvd<8Pbtm8=z&zcLC}2iwCHI#SM7Q^(@03tV-B6G$I{_(c-eoJLeD4T> z4*=9bDi_Nt!^;}XfozbRrie*($`WvbJ&6GD{;gvd(P*s!cw-AtTe+{3bOzu!6DXnx z@W~iJ4_u7|ih!)o-;#U`pvbze&#heoWg1W|ZJxd6_3{k7q8Y`!D9|5_lsP9u1r5Le z$VoZ`IHg@bCF7YgDHvsDs^;SOmCbsD7 z5d|)EV(N4N000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPEe<_1(SX6BIHQ(nP~8 zol555CG7|38puHix0It}yM%s^KIyIn+wxp3HhMq)|M&EsM96XDh(}U5}&3{PBLiav=VXCO`*o?uC#`ho6>S5E}lC+W|MA zp~QX~;Fk>$vU>Oo2+K$y}R;A|FwNN{8UFH8NNw>yB_8hEFFHBj@|1eg#5xcUzpR|A;db`Suh%*a$d9KNRkfkwG;KnW{= zD__lhErrn@Y_EXP!Ndaev~VbJr1G)l>N^L!OQ0Ky<7y4W^LLGdSl2+rV^%!{y70LHut`FD@Jv>L?@wMYb@W$_d4(hD_}vS$M*>&N<`RMWYM>4WyM1H2rT`nhfOpy@Cr`=hUq53N~BvUag7C9bs+ n0V&%7wCR`aVPivEGqA2dM@rwYmKAmH00000NkvXXu0mjf59)ut literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sneasler/normal.pal b/graphics/pokemon/sneasler/normal.pal new file mode 100755 index 000000000..5cc13df59 --- /dev/null +++ b/graphics/pokemon/sneasler/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +49 41 49 +74 74 98 +74 57 82 +123 139 180 +16 16 16 +164 189 222 +164 123 57 +123 98 189 +238 197 49 +255 255 255 +255 32 65 +90 65 131 +255 41 41 +189 41 41 +139 24 24 diff --git a/graphics/pokemon/sneasler/shiny.pal b/graphics/pokemon/sneasler/shiny.pal new file mode 100755 index 000000000..b3bc5103e --- /dev/null +++ b/graphics/pokemon/sneasler/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +49 41 49 +106 90 41 +74 57 82 +156 148 82 +16 16 16 +238 213 131 +74 148 156 +106 74 98 +123 213 230 +255 255 255 +90 172 32 +74 49 74 +246 189 8 +213 148 24 +213 148 24 diff --git a/graphics/pokemon/wyrdeer/back.png b/graphics/pokemon/wyrdeer/back.png new file mode 100755 index 0000000000000000000000000000000000000000..00f1ba932de55c027c83d07b22b389a1da1c01a9 GIT binary patch literal 854 zcmV-c1F8IpP)D7 z5epGqhw8@w000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPYgfB*mh zNJvQFm{_2wsCamIaDa&L@bJLM&^SOqSXfvtvk9f!#M}KVC6Hx76bt@{Zj>ozSGwqL(OvNo zFh8pIOrq79NolW&kn_!*bMA}=fv<${KK>&sHTkk z>Eqtih?Jzn+BW6%kCPj~jTq8pfU+<^D6AA&VO9x=!=OYw*n{HEykvyaU_jjtstbt; z3L%MvOfxopGbj^sDnx9a!3N^F5pMDFj3$E`$6^Jul;blmZn)cZN)>>B@4fspzt=nO(m)&Z;Ewy$V1h2|cU#cv9 zCWGh-csA%={3}pT<7(>1Sb>#px7~aSQnZaM)^V0cV!^V|Hj5*e)H5 z2L}2O{BEoZVTN!?X_&88hC`RKTaSA70Y}rlbLj#{0Qwr^9@t|!#!y3S@UlH}0$4DB gnUo)Bt~op4H#IbZS=}eo@&Et;07*qoM6N<$f{6NiHvj+t literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wyrdeer/front.png b/graphics/pokemon/wyrdeer/front.png new file mode 100755 index 0000000000000000000000000000000000000000..9e5bffce51c892308229b0856acf0c06e7b636d4 GIT binary patch literal 1094 zcmV-M1iAZ(P)D7 z5epeoTw?VA000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPYgfB*mh zNJvQFm{_2wsCamIaDa&L@bJLM&^SOqSXfvq^5IwX$^kPKh`3djGycrvcS(BAwl$~#9XV<$1NSk#AyHc=22D#qQ>JbP=V4VOR5riYlIcr^w7cQIv z_kj`&x|6wUIVZq%FcP&cbR18(om0T6iaVzZCFfeS8{I;jmd@>rfb*s9oB$vw&iyU= ztrkv9DunYy zh)Jkt_+6_pzInTSqMBb`_f+9_NkIMU(>xhaS_{3|0UL3&LR8ar>|@qh(cI?y8HD%{ zM7VhfF&0^Z7mi1{w^GLK47YNLaW26j1Hc%+eL^YsB`B4G*Bp?a+fs%Mo}r=;JqG9= zfnPF=G{&J?@}`l94n`3Axf09Bc+CGFbgPaG;) zew`#^nYK{Mr`@*hLBar|41{9_!vlb2LLi|xcE6>;YRMp%0D#Uc0mPWrrxa2p^6BV` z(V0ki^#rIo^ccWoverwrittenAbilities[battlerId]) return gBattleStruct->overwrittenAbilities[battlerId]; - + // The AI knows its own ability. if (IsBattlerAIControlled(battlerId)) return knownAbility; diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 385460228..38d8138e8 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -919,14 +919,14 @@ const u32 gMonFrontPic_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/fron const u32 gMonFrontPic_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/front.4bpp.lz"); const u32 gMonFrontPic_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/front.4bpp.lz"); const u32 gMonFrontPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/front.4bpp.lz"); -//const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4bpp.lz"); +const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4bpp.lz"); const u32 gMonFrontPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/front.4bpp.lz"); const u32 gMonFrontPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/front.4bpp.lz"); -//const u32 gMonFrontPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); +const u32 gMonFrontPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); //const u32 gMonFrontPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/frontf.4bpp.lz"); -//const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); +const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); const u32 gMonFrontPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/front.4bpp.lz"); -//const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); +const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); #endif const u32 gMonFrontPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/front.4bpp.lz"); const u32 gMonFrontPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/front.4bpp.lz"); @@ -1031,7 +1031,7 @@ const u32 gMonFrontPic_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlo const u32 gMonFrontPic_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/front.4bpp.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonFrontPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/front.4bpp.lz"); @@ -1043,7 +1043,7 @@ const u32 gMonFrontPic_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/his const u32 gMonFrontPic_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/front.4bpp.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonFrontPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/front.4bpp.lz"); #endif const u32 gMonFrontPic_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/front.4bpp.lz"); const u32 gMonFrontPic_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/front.4bpp.lz"); @@ -2131,14 +2131,14 @@ const u32 gMonBackPic_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/back. const u32 gMonBackPic_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/back.4bpp.lz"); const u32 gMonBackPic_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/back.4bpp.lz"); const u32 gMonBackPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/back.4bpp.lz"); -//const u32 gMonBackPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/back.4bpp.lz"); +const u32 gMonBackPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/back.4bpp.lz"); const u32 gMonBackPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/back.4bpp.lz"); const u32 gMonBackPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/back.4bpp.lz"); -//const u32 gMonBackPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); +const u32 gMonBackPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); //const u32 gMonBackPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/backf.4bpp.lz"); -//const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz"); +const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz"); const u32 gMonBackPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/back.4bpp.lz"); -//const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); +const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); #endif const u32 gMonBackPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/back.4bpp.lz"); const u32 gMonBackPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/back.4bpp.lz"); @@ -2243,7 +2243,7 @@ const u32 gMonBackPic_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlos const u32 gMonBackPic_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/back.4bpp.lz"); const u32 gMonBackPic_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/back.4bpp.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonBackPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/back.4bpp.lz"); const u32 gMonBackPic_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/back.4bpp.lz"); const u32 gMonBackPic_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/back.4bpp.lz"); const u32 gMonBackPic_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/back.4bpp.lz"); @@ -2255,7 +2255,7 @@ const u32 gMonBackPic_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisu const u32 gMonBackPic_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/back.4bpp.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonBackPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/back.4bpp.lz"); #endif const u32 gMonBackPic_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/back.4bpp.lz"); const u32 gMonBackPic_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/back.4bpp.lz"); @@ -3337,14 +3337,14 @@ const u32 gMonPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/norma const u32 gMonPalette_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/normal.gbapal.lz"); const u32 gMonPalette_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/normal.gbapal.lz"); const u32 gMonPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/normal.gbapal.lz"); -//const u32 gMonPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/normal.gbapal.lz"); +const u32 gMonPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/normal.gbapal.lz"); const u32 gMonPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/normal.gbapal.lz"); const u32 gMonPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/normal.gbapal.lz"); -//const u32 gMonPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); +const u32 gMonPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); //const u32 gMonPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/normalf.gbapal.lz"); -//const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); +const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); const u32 gMonPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/normal.gbapal.lz"); -//const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); +const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); #endif const u32 gMonPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/normal.gbapal.lz"); const u32 gMonPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/normal.gbapal.lz"); @@ -3449,7 +3449,7 @@ const u32 gMonPalette_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlos const u32 gMonPalette_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/normal.gbapal.lz"); const u32 gMonPalette_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/normal.gbapal.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/normal.gbapal.lz"); const u32 gMonPalette_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/normal.gbapal.lz"); const u32 gMonPalette_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/normal.gbapal.lz"); const u32 gMonPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/normal.gbapal.lz"); @@ -3461,7 +3461,7 @@ const u32 gMonPalette_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisu const u32 gMonPalette_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/normal.gbapal.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/normal.gbapal.lz"); #endif const u32 gMonPalette_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/normal.gbapal.lz"); const u32 gMonPalette_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/normal.gbapal.lz"); @@ -4570,14 +4570,14 @@ const u32 gMonShinyPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/ const u32 gMonShinyPalette_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/shiny.gbapal.lz"); const u32 gMonShinyPalette_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/shiny.gbapal.lz"); const u32 gMonShinyPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/shiny.gbapal.lz"); -//const u32 gMonShinyPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/shiny.gbapal.lz"); const u32 gMonShinyPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/shiny.gbapal.lz"); const u32 gMonShinyPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/shiny.gbapal.lz"); -//const u32 gMonShinyPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); //const u32 gMonShinyPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/shinyf.gbapal.lz"); -//const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz"); const u32 gMonShinyPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/shiny.gbapal.lz"); -//const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); #endif const u32 gMonShinyPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/shiny.gbapal.lz"); const u32 gMonShinyPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/shiny.gbapal.lz"); @@ -4682,7 +4682,7 @@ const u32 gMonShinyPalette_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/ty const u32 gMonShinyPalette_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/shiny.gbapal.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonShinyPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/shiny.gbapal.lz"); @@ -4694,7 +4694,7 @@ const u32 gMonShinyPalette_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra const u32 gMonShinyPalette_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/shiny.gbapal.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonShinyPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/shiny.gbapal.lz"); #endif const u32 gMonShinyPalette_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/shiny.gbapal.lz"); const u32 gMonShinyPalette_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/shiny.gbapal.lz"); diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index ebe0c316f..0cb20daaf 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -908,13 +908,13 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(GLASTRIER, gMonBackPic_Glastrier), SPECIES_SPRITE(SPECTRIER, gMonBackPic_Spectrier), SPECIES_SPRITE(CALYREX, gMonBackPic_Calyrex), - SPECIES_SPRITE(WYRDEER, gMonBackPic_CircledQuestionMark), //gMonBackPic_Wyrdeer), + SPECIES_SPRITE(WYRDEER, gMonBackPic_Wyrdeer), SPECIES_SPRITE(KLEAVOR, gMonBackPic_Kleavor), SPECIES_SPRITE(URSALUNA, gMonBackPic_Ursaluna), - SPECIES_SPRITE(BASCULEGION, gMonBackPic_CircledQuestionMark), //gMonBackPic_Basculegion), - SPECIES_SPRITE(SNEASLER, gMonBackPic_CircledQuestionMark), //gMonBackPic_Sneasler), + SPECIES_SPRITE(BASCULEGION, gMonBackPic_Basculegion), + SPECIES_SPRITE(SNEASLER, gMonBackPic_Sneasler), SPECIES_SPRITE(OVERQWIL, gMonBackPic_Overqwil), - SPECIES_SPRITE(ENAMORUS, gMonBackPic_CircledQuestionMark), //gMonBackPic_Enamorus), + SPECIES_SPRITE(ENAMORUS, gMonBackPic_Enamorus), #endif SPECIES_SPRITE(VENUSAUR_MEGA, gMonBackPic_VenusaurMega), @@ -1024,7 +1024,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(QWILFISH_HISUIAN, gMonBackPic_QwilfishHisuian), SPECIES_SPRITE(SNEASEL_HISUIAN, gMonBackPic_SneaselHisuian), #if P_GEN_5_POKEMON == TRUE - SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_SamurottHisuian), + SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonBackPic_SamurottHisuian), SPECIES_SPRITE(LILLIGANT_HISUIAN, gMonBackPic_LilligantHisuian), SPECIES_SPRITE(ZORUA_HISUIAN, gMonBackPic_ZoruaHisuian), SPECIES_SPRITE(ZOROARK_HISUIAN, gMonBackPic_ZoroarkHisuian), @@ -1036,7 +1036,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(AVALUGG_HISUIAN, gMonBackPic_AvaluggHisuian), #endif #if P_GEN_8_POKEMON == TRUE - SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_DecidueyeHisuian), + SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonBackPic_DecidueyeHisuian), #endif SPECIES_SPRITE(PIKACHU_COSPLAY, gMonBackPic_PikachuCosplay), diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index 24ebc78f3..4da64827a 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -908,13 +908,13 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(GLASTRIER, gMonFrontPic_Glastrier), SPECIES_SPRITE(SPECTRIER, gMonFrontPic_Spectrier), SPECIES_SPRITE(CALYREX, gMonFrontPic_Calyrex), - SPECIES_SPRITE(WYRDEER, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Wyrdeer), + SPECIES_SPRITE(WYRDEER, gMonFrontPic_Wyrdeer), SPECIES_SPRITE(KLEAVOR, gMonFrontPic_Kleavor), SPECIES_SPRITE(URSALUNA, gMonFrontPic_Ursaluna), - SPECIES_SPRITE(BASCULEGION, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Basculegion), - SPECIES_SPRITE(SNEASLER, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Sneasler), + SPECIES_SPRITE(BASCULEGION, gMonFrontPic_Basculegion), + SPECIES_SPRITE(SNEASLER, gMonFrontPic_Sneasler), SPECIES_SPRITE(OVERQWIL, gMonFrontPic_Overqwil), - SPECIES_SPRITE(ENAMORUS, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Enamorus), + SPECIES_SPRITE(ENAMORUS, gMonFrontPic_Enamorus), #endif SPECIES_SPRITE(VENUSAUR_MEGA, gMonFrontPic_VenusaurMega), SPECIES_SPRITE(CHARIZARD_MEGA_X, gMonFrontPic_CharizardMegaX), @@ -1023,7 +1023,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(QWILFISH_HISUIAN, gMonFrontPic_QwilfishHisuian), SPECIES_SPRITE(SNEASEL_HISUIAN, gMonFrontPic_SneaselHisuian), #if P_GEN_5_POKEMON == TRUE - SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_SamurottHisuian), + SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonFrontPic_SamurottHisuian), SPECIES_SPRITE(LILLIGANT_HISUIAN, gMonFrontPic_LilligantHisuian), SPECIES_SPRITE(ZORUA_HISUIAN, gMonFrontPic_ZoruaHisuian), SPECIES_SPRITE(ZOROARK_HISUIAN, gMonFrontPic_ZoroarkHisuian), @@ -1035,7 +1035,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(AVALUGG_HISUIAN, gMonFrontPic_AvaluggHisuian), #endif #if P_GEN_7_POKEMON == TRUE - SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_DecidueyeHisuian), + SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonFrontPic_DecidueyeHisuian), #endif SPECIES_SPRITE(PIKACHU_COSPLAY, gMonFrontPic_PikachuCosplay), diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index a8c986d79..a85829be2 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -908,13 +908,13 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(GLASTRIER, gMonPalette_Glastrier), SPECIES_PAL(SPECTRIER, gMonPalette_Spectrier), SPECIES_PAL(CALYREX, gMonPalette_Calyrex), - SPECIES_PAL(WYRDEER, gMonPalette_CircledQuestionMark), // gMonPalette_Wyrdeer), + SPECIES_PAL(WYRDEER, gMonPalette_Wyrdeer), SPECIES_PAL(KLEAVOR, gMonPalette_Kleavor), SPECIES_PAL(URSALUNA, gMonPalette_Ursaluna), - SPECIES_PAL(BASCULEGION, gMonPalette_CircledQuestionMark), // gMonPalette_Basculegion), - SPECIES_PAL(SNEASLER, gMonPalette_CircledQuestionMark), // gMonPalette_Sneasler), + SPECIES_PAL(BASCULEGION, gMonPalette_Basculegion), + SPECIES_PAL(SNEASLER, gMonPalette_Sneasler), SPECIES_PAL(OVERQWIL, gMonPalette_Overqwil), - SPECIES_PAL(ENAMORUS, gMonPalette_CircledQuestionMark), // gMonPalette_Enamorus), + SPECIES_PAL(ENAMORUS, gMonPalette_Enamorus), #endif SPECIES_PAL(VENUSAUR_MEGA, gMonPalette_VenusaurMega), SPECIES_PAL(CHARIZARD_MEGA_X, gMonPalette_CharizardMegaX), @@ -1023,7 +1023,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(QWILFISH_HISUIAN, gMonPalette_QwilfishHisuian), #if P_GEN_5_POKEMON == TRUE SPECIES_PAL(SNEASEL_HISUIAN, gMonPalette_SneaselHisuian), - SPECIES_PAL(SAMUROTT_HISUIAN, gMonPalette_CircledQuestionMark), //gMonPalette_SamurottHisuian), + SPECIES_PAL(SAMUROTT_HISUIAN, gMonPalette_SamurottHisuian), SPECIES_PAL(LILLIGANT_HISUIAN, gMonPalette_LilligantHisuian), SPECIES_PAL(ZORUA_HISUIAN, gMonPalette_ZoruaHisuian), SPECIES_PAL(ZOROARK_HISUIAN, gMonPalette_ZoroarkHisuian), @@ -1035,7 +1035,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(AVALUGG_HISUIAN, gMonPalette_AvaluggHisuian), #endif #if P_GEN_7_POKEMON == TRUE - SPECIES_PAL(DECIDUEYE_HISUIAN, gMonPalette_CircledQuestionMark), //gMonPalette_DecidueyeHisuian), + SPECIES_PAL(DECIDUEYE_HISUIAN, gMonPalette_DecidueyeHisuian), #endif SPECIES_PAL(PIKACHU_COSPLAY, gMonPalette_PikachuCosplay), diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 012a95cf1..fdc5b9d40 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -908,13 +908,13 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(GLASTRIER, gMonShinyPalette_Glastrier), SPECIES_SHINY_PAL(SPECTRIER, gMonShinyPalette_Spectrier), SPECIES_SHINY_PAL(CALYREX, gMonShinyPalette_Calyrex), - SPECIES_SHINY_PAL(WYRDEER, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Wyrdeer), + SPECIES_SHINY_PAL(WYRDEER, gMonShinyPalette_Wyrdeer), SPECIES_SHINY_PAL(KLEAVOR, gMonShinyPalette_Kleavor), SPECIES_SHINY_PAL(URSALUNA, gMonShinyPalette_Ursaluna), - SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Basculegion), - SPECIES_SHINY_PAL(SNEASLER, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Sneasler), + SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_Basculegion), + SPECIES_SHINY_PAL(SNEASLER, gMonShinyPalette_Sneasler), SPECIES_SHINY_PAL(OVERQWIL, gMonShinyPalette_Overqwil), - SPECIES_SHINY_PAL(ENAMORUS, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Enamorus), + SPECIES_SHINY_PAL(ENAMORUS, gMonShinyPalette_Enamorus), #endif SPECIES_SHINY_PAL(VENUSAUR_MEGA, gMonShinyPalette_VenusaurMega), @@ -1024,7 +1024,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(QWILFISH_HISUIAN, gMonShinyPalette_QwilfishHisuian), SPECIES_SHINY_PAL(SNEASEL_HISUIAN, gMonShinyPalette_SneaselHisuian), #if P_GEN_5_POKEMON == TRUE - SPECIES_SHINY_PAL(SAMUROTT_HISUIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_SamurottHisuian), + SPECIES_SHINY_PAL(SAMUROTT_HISUIAN, gMonShinyPalette_SamurottHisuian), SPECIES_SHINY_PAL(LILLIGANT_HISUIAN, gMonShinyPalette_LilligantHisuian), SPECIES_SHINY_PAL(ZORUA_HISUIAN, gMonShinyPalette_ZoruaHisuian), SPECIES_SHINY_PAL(ZOROARK_HISUIAN, gMonShinyPalette_ZoroarkHisuian), @@ -1036,7 +1036,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(AVALUGG_HISUIAN, gMonShinyPalette_AvaluggHisuian), #endif #if P_GEN_7_POKEMON == TRUE - SPECIES_SHINY_PAL(DECIDUEYE_HISUIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_DecidueyeHisuian), + SPECIES_SHINY_PAL(DECIDUEYE_HISUIAN, gMonShinyPalette_DecidueyeHisuian), #endif SPECIES_SHINY_PAL(PIKACHU_COSPLAY, gMonShinyPalette_PikachuCosplay), @@ -1328,7 +1328,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(CALYREX_ICE_RIDER, gMonShinyPalette_CalyrexIceRider), SPECIES_SHINY_PAL(CALYREX_SHADOW_RIDER, gMonShinyPalette_CalyrexShadowRider), - + SPECIES_SHINY_PAL(ENAMORUS_THERIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_EnamorusTherian), #endif SPECIES_SHINY_PAL(EGG, gMonPalette_Egg), diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index 1759120b7..e3f1fb303 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -6873,7 +6873,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Torchic[] { .iv = 0, .lvl = 5, - .species = SPECIES_MUDKIP, + .species = SPECIES_WYRDEER, } }; From 1c832768bb3d9fa9661221f8141e6eb306fb3f48 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 22 Feb 2023 20:44:03 +0100 Subject: [PATCH 019/129] fix trainer party --- src/data/trainer_parties.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index e3f1fb303..1759120b7 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -6873,7 +6873,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Torchic[] { .iv = 0, .lvl = 5, - .species = SPECIES_WYRDEER, + .species = SPECIES_MUDKIP, } }; From a86b870cfdbf313024ff4ddd7f1d1b9eaee50660 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 22 Feb 2023 23:06:22 +0100 Subject: [PATCH 020/129] PLA cries --- sound/cry_tables.inc | 28 +++++++++--------- sound/direct_sound_data.inc | 4 +-- .../cries/basculegion.aif | Bin 0 -> 122206 bytes sound/direct_sound_samples/cries/enamorus.aif | Bin 0 -> 171902 bytes sound/direct_sound_samples/cries/kleavor.aif | Bin 0 -> 66940 bytes sound/direct_sound_samples/cries/overqwil.aif | Bin 0 -> 50784 bytes sound/direct_sound_samples/cries/sneasler.aif | Bin 0 -> 51992 bytes sound/direct_sound_samples/cries/ursaluna.aif | Bin 0 -> 59604 bytes sound/direct_sound_samples/cries/wyrdeer.aif | Bin 0 -> 87764 bytes 9 files changed, 16 insertions(+), 16 deletions(-) create mode 100644 sound/direct_sound_samples/cries/basculegion.aif create mode 100644 sound/direct_sound_samples/cries/enamorus.aif create mode 100644 sound/direct_sound_samples/cries/kleavor.aif create mode 100644 sound/direct_sound_samples/cries/overqwil.aif create mode 100644 sound/direct_sound_samples/cries/sneasler.aif create mode 100644 sound/direct_sound_samples/cries/ursaluna.aif create mode 100644 sound/direct_sound_samples/cries/wyrdeer.aif diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index 7714cd00e..98225fa8e 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -1334,13 +1334,13 @@ gCryTable:: cry Cry_Glastrier cry Cry_Spectrier cry Cry_Calyrex - cry Cry_Unown //Cry_Wyrdeer - cry Cry_Unown //Cry_Kleavor - cry Cry_Unown //Cry_Ursaluna - cry Cry_Unown //Cry_Basculegion - cry Cry_Unown //Cry_Sneasler - cry Cry_Unown //Cry_Overqwil - cry Cry_Unown //Cry_Enamorus + cry Cry_Wyrdeer + cry Cry_Kleavor + cry Cry_Ursaluna + cry Cry_Basculegion + cry Cry_Sneasler + cry Cry_Overqwil + cry Cry_Enamorus .else cry Cry_Unown cry Cry_Unown @@ -3456,13 +3456,13 @@ gCryTable_Reverse:: cry_reverse Cry_Glastrier cry_reverse Cry_Spectrier cry_reverse Cry_Calyrex - cry_reverse Cry_Unown //Cry_Wyrdeer - cry_reverse Cry_Unown //Cry_Kleavor - cry_reverse Cry_Unown //Cry_Ursaluna - cry_reverse Cry_Unown //Cry_Basculegion - cry_reverse Cry_Unown //Cry_Sneasler - cry_reverse Cry_Unown //Cry_Overqwil - cry_reverse Cry_Unown //Cry_Enamorus + cry_reverse Cry_Wyrdeer + cry_reverse Cry_Kleavor + cry_reverse Cry_Ursaluna + cry_reverse Cry_Basculegion + cry_reverse Cry_Sneasler + cry_reverse Cry_Overqwil + cry_reverse Cry_Enamorus .else cry_reverse Cry_Unown cry_reverse Cry_Unown diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index fb4c6b44f..2129f32a1 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -3986,7 +3986,7 @@ Cry_Spectrier:: .align 2 Cry_Calyrex:: .incbin "sound/direct_sound_samples/cries/calyrex.bin" -/* + .align 2 Cry_Wyrdeer:: .incbin "sound/direct_sound_samples/cries/wyrdeer.bin" @@ -4014,7 +4014,7 @@ Cry_Overqwil:: .align 2 Cry_Enamorus:: .incbin "sound/direct_sound_samples/cries/enamorus.bin" -*/ + .endif .align 2 diff --git a/sound/direct_sound_samples/cries/basculegion.aif b/sound/direct_sound_samples/cries/basculegion.aif new file mode 100644 index 0000000000000000000000000000000000000000..a1405ee8d7370b6ead460cf4f240cc865c5ff301 GIT binary patch literal 122206 zcmX7P1za0T_x5gFAwmodn&2*lQl&zjy4b%t01yCl7XaEIj~7`;9eGWf zG%gG275D#Z005g{4Xl8bunO*iC9oWkZsgbqTVXrwM%rN*0#E=3DLB9rpaV334fp`Q zKrj#mL<5mP3=oG%Jdg@x0s{~k3XA}VNWo?MIOQ z2Y~~~cmHpMeaKkt)R&>vyIC}27;2f=(Buo*!=8%P5BA)o(;^}oOpU;)yy5!mv-mbnPF z_klgg@fxJ}N?F=fg;-}pT9yN|;2wAboQ;%sa4mw=R`@zVMc5hv zP!X={5KBiPmLg7-_PM2@RR@HRf)u! z9Uvh(n1MLh4JSfs_!DpsxPmb51~SSrAPeq8d_5WQ_B5atSc+hK2ChaJcNM|72C-lP zTnA^s8xWKN5pAa-IP?LZ5L@;FGvS-?WJG5?!qbPqV4x1zg=pi0j5!kN%>*WaqrhLl zJA}D5fQYa#6S2jDM8b98F>o1)n*e}-#L)*}A>!3}2zG~nRfz7J5bfn~4cvkF{3g%^ zyh5Vn1uz7}0}#+3xsnnY{U3x^^ASE@gHvDtb^uD?6%d8Q(Ol>QB!a&H9K^H1zzh@t z)FM$E0^|V&z+i-t(_k-z<6q&?&?P7h+6M1IaGZiUQst{x}880Ut!KWeBU6 zBO^5;Id2_e>2G*B)D5=-(-DosVH5BHu6MiLKj8a78)7jY@CQ$$xS$i93S0x;fXN^Z zn2O}fnNSxJou$xdHwM}Qd;}Z_j&2YIegUTdmw*WPG-B%tpa)z5^npas8`yy0$wIug z1Q-C1fp$U=Fa)>^zlB<%&u|!m$0NjZ!9Xh*1k6L?crp_Ef8ip?3_XE!fidt4gqeX* zJ-ib6ejPX&+=xWaF>nDub*H*<@K_{YPC@!-!k2)Zum-vc$&t}o5bUCWUT`!(f$T6H zdg{IcA$ovcfq!8SI3J7#Y4Abl8XSml@D)fxSQ89VfjGAl3P&=`LUuZP#7hN9*Hqu?-vYq3xRg4jv;ATR}x0S^)0Y)4`N1^KuOAUk6BGhi&V4=P3S z!)Q1Q%7fbARNn3ldL4J1hPkgpOlUPU7`h722Qt7Ezzy#}Vt|0mMwOrp>xLmSlG9%!Y*_^v-S=TClE03@LxJ7kD4+(JnS=;_h?n6NC<-_mIs-A_ zZ@@GJs~K<>jDh0ab?|cF7VHIK;ZpD%xC2;@cz7(554+(hZ~?FlE=2TkK;PgMhyG|;bI@~2*yKRkO-OkGZBv%;9&SC!r%ymn|vS*JOSnc zG9=HngB)-JFbrXB8?1xtkvOoxLC{<%8XAK{v;$rNy@4Mg^TBFxEowJd4g3I}fV04h z@NGBQT@Cu7sIVQ$n|k0mz(um|9QZIW9Sj5c$n4(_(d-nQkl8{HXkiNyBMTADBi(1*f02CMfy|p3NPb!aUV%-J81WPb zU?5{d@DX4rY7Qy|S#hwC6^9h$0f&*+TCfhzb3cbdpdW~hVF-IcBx}zG4uj)?sgM=P zdveeVbfCOJ0r(Yl7rcS2Gjc%|61Bb%(QN@nzy{Yg*EwJ-coxZw6JQU(7t{gy@D1<| z*aMWH_^2~T28japz-z&5lmz(Ze&m|s`V9Tw3g{4A4!FVb;1Gf@3H|;VPzRXf3wXK+sk{n?-SpA)+Vx+P(UOSM-r#uUSNDNtAJMf z4eJ0ybC;#POhGeVHKBT>njhLJ`k$8gKC^R^E6+LDm5bgyok7zEX3--9{fEoz5lkre?z{8%?!l*#`rwq_|i^NyKx@2o8~<8Ax(+& zWP4=u=a%QOO{reL#gc_5fa}rvL~U&4>I?`knGAVhJgkSP3fL%`xhvxH@7fTuo~) zl0Q|3C}gT;<0_lTZUThV8y*(yLbM8}!5+qy5JJI`uGz?1Kc{cE1#Nj|jRvnDK$x&T6375cgpp;9_vm*!?852aHGCVe4LVvu=;+tg8?`gCO_(!_5ee zip+_UM9vZ%3CQQWv1Rqy?U(H7&S5|TE|mPva~pFg>jiBh-Um02x`Hv76~T@2D)U&*CI__ z^}2dj+b_Cc7uC_>RKj`Wt^PkEXNDeQFx_Pqp?x5Vg+jShR)1hWs-Hx-JM|9udb%9|0GJOP!(c4W_f4TK&MGQtg8XL zLKOU6UKeP0efEd$4a)Iyz?(JKH4A#57&{f`)qhO8%vm;n44<6uxq=nq{ehn&6vRZv zSR)sQ?DanDF&X{b{mX{Ze^%!yL&c+-eCua5u4#``SuL-vo+hYo2w@~o>i>)XRM;uJ z=N;uqr-Wmh9Zo}=@N}Hxmd)3qf`ZMtX!GW`aJj3cDfN;EE zSRl<4cJlPUwTtC%C3~drCD&VaH9n%uj#88)9DJz zb?ki9GqBHTFbz^DMQtr9(q_H6&)~WOGf`ob4n8kw*nrmb5wV>yeu;hwUV>td0&~k6 z+nZ)TXBBF+5>9h|dxGsoQ#PnL-@`bPKai@F}%@(8tXCaeZM!0zP}6=00aQFfUyua0F1= zdqUCGeoxdYechES`^V5|ukJf$ZHFD?r(TbIruYfCu-7_TA8|B*bDu@#Cn-4HIa8mi z_^Hb8k(&3p@=&8tiwOICeUqcJ5{52H?@kPkWyCy=dL8WaS`Afevo#wnmfpQOiF{k* z!;;%o%R7_`jpDsDpfgB{?t0gaQ?O*uI+uuZkJoW%qAkWO5h~M2e*cR$~YTa&nY+vTa*lzbKtOKkA zZD-vH;7gp2| z-&C7dzpDOkJ+^5}*9*g@J`OO;b1rKbr3AN;LSR<0RlkVcbokh>Ir@m@dbV! zdN%4bT7aKHMuAmkwYI)X&v13qHB9&3-^Izz}h_U<@S~6h|IgHAn>gl^^A;iUm8d|2$LBTh{ey^2iG5)Go z08h#}OOGW|;i0|X^<$Jv+9%f*R%O?1Xu-GRyHqNXa*mefR!}c6qS(FskO*%4>X-up zY*b&rWvP22Z2l$mm!x>Fwc-AWSrNTHVKg=wBHhIikf@z7$>f<@@Fj z)VGCSM^%Q&m+JRRKQyT&|CyKC$7!27CW^1io;MFGzF7W5G)!9rrn9dGZwhS-&5rn% zG&#LAb9$;P;<-@QZ_ALbcsqTYbC}bGsl!W1A1FU@8q^Z}F-i*210}FkX!#uz>x&!g z?R4?ZF0*Q)=Cdgb7)@SG^JFA5TG`csYr;o`MDXr;10lX)D|{DuJ@mTG^5D$~Y74Tm z$K#KELzYM}jVSPYs$MeN8yV=M-}erG=EjI2STJ z$un6UuJs+nx#^w2n?UQu%8^X`U06HN?55n|2ZT6z zi#?JUDeU9K&5nG>K2S{_!&>3LJftybpZ7CwXTS(ABX zHQj2y)SOnQt)kVnv=)mVwSR35sT`Znc(>!}@s}6A&MuG_Wmd#DHg`{T#nZQP4l+}z zLgo}9oODc>#*N{;4YQ?eOZE`#^gYTc^~c9C()-08^DpB4$3GpOEF8#FqSqK#X-DXn z_cdX55yxZvQ4_F4qL99qu@%F$zX0%*boL~Fl3y|fZ#*j-+Ox-!WT|nTgLm0p!{yZP zq&Vy*Y9WJ8TSdzzZ2>>KCL7wjcFCc>cr+TnAKU3JHNEfdYGyPycEwAU)}hN+RaI2p zDfa)fwnSWUvi`H=jFxLkg1Q+^eh<9&u+tbkOtx8~-(-4iIHvqZfw6hewSit?10#pW zaN|y;-R*xj(GlJtd>H*BXsROQ`hFl$2)E%vlJ6$z0S~VrhND#aAm&6@RL^(K$__(l4^~S|7j^!VJtK^lQ(hTsU}L{Fj8`QHx?vMV$6s z`@-M9`*RA_Rac_@~ut&#pHbEuV*#Wq@Kz%ie%+etAuux z|H;S5I7m5x+U&Z3`ia@s_d*q^Jn!1ZdBdl&BWceWV_8DqbYCZVS0B&t*!bS?+c?e< zi=_embeq(=zE}1GhBU){ORgbZ^I7>`A`%O`g&o_fR+J2C*d;6KJ}2^1SX~m-PvSG* zss8uKqtPXdul@zxm$Z9aztHp1wAAXM0=Lq?;k99z|eEumHO>$Ng}!gL^ykd8Y`XAD#@F<^sQv+Y-miT62PB8m!Z{I7VzU!Sf*;<^ zTs`Xm+2Xm=w~F@_JI&mz_vyo;ZUYi#xY7CA;>RCxwa+7`g(MS%l>140L_RF;x1JP%4 zzk8g7j}kKdEupgm&xSsZOo`eRNeVP_j&uHHbzmb5I}}b$gT~ky-FjC&!c?kb+13%G zz*c>n&KDX(ngsIo12t_uCzKy_W(aUL>WPN&@KNeF>TlNq`R_KDB;9ZUS?#ui0^%do zr@nAqOoy~3M6Oc*?M|~t1gwbQ@LZI1B0w63-{SgUuGOifubNuL1k*z-j<-ALJF5d% zi@pnvb1t)IK(T~G`fl%U;m)L=(LV$G`xWt(!adQSgLg3Ac$RS#J{vf}3=DlAEdU*+ z-QT>Xf>HLOp-2{}J*zsetTyJ^PWMc#PbhSjY;9Sgz!+~^E38lL^^X4fIBlKtn0uo3 zy!rs_#putz%SdDd`HhY!iXIi%zzm@4eTH)V34c&dl$Uk7exxg&_zXvLQTry^(7340g3#k<8L7Kca00J(%< zFB5Mjr!`=EY-VCbsE{M~oe)^-!}OZ#=>z4;8I_57=l>F0<(+RD=ht*J#&u~d8%(L4 z=;o!WVHgJY2sapnRS}XKhEv2Sj+>iLy9~z~%58f59M|&h{0^x5u5wTBCj1xtk-oF$ z$AqWCfvK~F56B|>K6@T|CVnwG1K0qKw2srR>>OTt^C$ODWZj`gZ5>pCQG2R*Y=z@fp0kBoChKLB>(78Iudmx|B!uye6!DI zdUb+&U8d`21Fo@l&EZ{pXm=DH&l^7gaR>&7g5SFfMy zxMXSPr)FDW)!PT3zWiaA$cjc4k;;cQxLf8n`L}(N?U1+1XBq5{S*CvCh0XD@I`nQ{ zt@kqeZu)s2A^)u(k@whlNRT_m*ni*P8R^#Orvcl!t2hN-i--!x2g_mXs(}6xnPHi{ z#iRvcLJJ&Qv7U`W6%s+rir2W(zNh5 z;p@&{@wLTWy52>QpUzzuST?zRb+f@<9*Nx4tRPO}bUh#FF^R54u0> zgCRe?{zJ_rFOBpckes3r3OO;@;RL+j{IL1nLi0Y;FB5vG#lE=$gTETZ z?CGz?%5rP0e>jEXKks@ZyT^O{@Wt$>rFRcL`1LDGc2uixom5g$e6FgXxwflUzt9ou zu`~AO@G(P#>F6PAM;uDq7ZDL5kGv{482%|LEoi^jEM`cEYyfKH>wf+HmNW5T{|*{G zf5?gxX=TZUS^3zKSMq;w@0mD8Jo`HTLgcHs9ASMhO1L30W$2#?7qb|G zS|5C9ep>#JRs9R&m&WolKIy>sY$X~(&L0;&9YEZF0-M+H%6$4Y>| z;d%Wkf5^9@7I?qqr}MGl8xp9AridHVAd{c-7E@t(A+0rf(QPaJBgBNEPb`IxDO7kUrP2WzlLtnYI6PXdHl%Ip`` z5b-;*EX{vV@E}vR*F@?#djI+`mG@TmRq`wcOY=_hS>Ek>Nv);9lt}bC;1%HyozAGG z7K4R-!+W3f?$g^;kfK4pTaMDWdvBN%L`8piWz*#?_B6YP@t}Nk>!14A%6lc#O3qa- zte?^>YHe!EZ%JwnmCv#EQ(G$Xa*N+gdMv;5;eONC_o6b}LNb>Z9lS7VZc@R3h1uT2 z5A_=|VE(vySt}zm15SC(!^|ZRxnb;i#4l8Jh$?f(7*!5>#E`BY)gD}ze6E<8iUmsakt;#e!-EK{NMA>#`H@oPh1`t z?eP*g31)D=g@^H8VzxLtjdjYI^8J$it)Z=Y$zp}9$6*a{U+7z|=$2j5G%0GNtghwa zs|}O?J}m%Bzqc)tY!|1?;%xodEiu-VvB?J`S95-OGH74WKYIFicGP!O3~rr<{LY|ef%q3uK)^b$W7J~uHBN4LQM4;+U|f96_mDoHHu`Fm!TQ#c z<$MS=^ron<%i6l?RfjG4_C?Nf*al{ zT{h|pPAqFI{W24zy@z&)*Ob_b-j}zFf=t_;IVyZJtEw3(kp$`U~Pfbo) zmzt9y86r%381MvrNby`0slP+8QOM{Kz*Q`lGR9*u?w<3Eg>Mp?K-K!@2PHLMBzLpU z4ZP&{cy&IeA+sYyqLg!Fuet^+C}sxAOlrrJyYE7L7z2ipEMAYe#s1A<9pQ&VPOv_s z7P{VGMCbt~Y}c>OhaCetrK-c$!+^r$pWt0d1Cka*bPEQ@JWSaeKQO3)v!B|Gd4yU5 zoU`Rw-@)f7g?^Kwo+jLgof=~Gnd&`)Imq>|I#&5YpJ^NB9&DFci|tPUFL0jmS39OP zN$R7>?g2ClMc-@Q)?BOCH-Bl}*51+6h~MP9J8(1Ole^8dMy-_4+itW>ZOCidDzY~} zt$b1Er|brIvZUc%1JlR7$mz~Ojdu*571>W%k~Vr+>?m#4_87CzDRzO+eZOhcsl8RY zSGpwG0LfqJ;5w+_M&6aOie`hTxNW?|Lu<7S1B%=X_0iVgChxXkqL7BX`oprwzW=Nb z^t<{*WQ_O0AZc(He{!IANI&mH=&0CIf4}vLIHdh?r%|z5wN5j}V!)KM&Tvyn9fTI| zmPm2p%-9HDHZ_KIA>vdb9P)!s$o?UV3>=EIxHL#iw4hi$xqoagpW$u-&Hw2GP!#wDtbS64J49vHlnJa=21Px;7ZD8)>ywW!5@UzV@4%MCe=qw30@~SAnfB! zbg5+IwwjK2%FmX&?lx=!0znR4zC6o}Sp}Rx0M_eZL7Y%9*Ylv^$ z+-PbZEV3&k<|ykJ*AS16fRUj-VT1S_uQ#;CJZ3aLqc*7}B07cFg|?OQg|f@*jo+)lsbNVGFQSg7V1`Z^QWHOp_lo!h_aE*!_A`DO)`H$llCm~( zG^~l#i(m`zku2$^sDrmY=FYl9of~Zyr$Ty;A*tm$J#YIzIwZo-xFva0$k^AiQJTYEt52G z%Yd~R`jm<^<&dR=7RJLNhuFV~qtKs_dwUp2N-(k%A>R`-(x%2u30dVE;dPC=m*@+r z)EO;@8oxDEm-QAr$}7(s{+0Pf_;bwPjOy^Fwzl`8@WvrU#*ateoAUqE@Y;IB8)aN= zt(5>qlDE<-*kSzR5wBwsBZESx`+sC@rf%~HWB{Hfs)>=$?oS^@UO~yF_F<~}(u`ZJ z^%#GTR}?zhjO;-!q<`Wqqw(NGXESysBj5WgV+p1X*N-ua&x=lp9~?J6r8t9_U>Ep# zYp5(#x@&@SutVNE)nY^~r^XO!+*N&Ipq{~E1VR639<-;_U~4}}SlS&uE!~|>v+F8F z*6!6^FQhnWhGcdZUc)ozSYg+A+(cT8uO+cyl;8LXBgbYHWhYJgcSggwG3j4ZhGx7; zKb~9?yE267Gl4B6wYwU6=Nr`;g?L(ZXx@*v>G$C)>1Q*pp8J?lOA+r;9?)Oadbi^$ zT_ux?4;2qDaa9rP@3(D}$Lfw5>!Ajpk#SFBKM5~H&&$jjH*8YJsKkMj`!7q*4gSjD z6NdpMmQDIsmWRC+=F5Heod?_@xP1C+)*}DOF|@=Zkt%*KdkLY$=v#OD_sfdS9WvR+ z_Wd=Y@;jv$N<*r4HQs9dEWKh52D4$7>4q-M9AV3Xm6ZML1YSO`jx_=Q(TM8|6-h*A z8>B6()$48dfK1G9TrcIAS0THTW%l_M78CJaKn?-;*FEQ2-0~>-P|bF8B($6SoLR`& zN4rVCL|W%^*!OfB<-KSSEr-AQeyBlXW&k}_-6;-iHrWdXKRa`kztp?LEQ79pXj*p~n zWT*Nk2gp9ecm|R>A%Auf;zyO28(U^16PVCRr9M z-qLAR{jrq;P6%TbD4AU%d7QdHTdh1UiR$Q(W$L!-Amt-{19@ZwW6`T4N#t|%GhjBgoOzishAC&|P+p>M5g+)z zNIW%MJPtL?J8qy)sMkN7XbNZwlixCd_8!AGRiaK}Ic9E;}LOV0^?v3(BAu?^Ag>{{KJVfT?busW}(;T7)T$`}1#(4W-3tNrt~aj58Kr?>dH z^r|i$UB|u~^j^3m__|LfYcAy``AL8x`E+VdjAz(`zzQD;a~o|JC(IuVz85_={)ylZ zYZ$P>DC`N-*c6Sj<6R}vQSxERvEuwTjwHG#-;Q^STzcmpTZM_Kk2U<%kI_e3Y0mo& zl|ux)r?9w_10IHMjc$k|3SB`pJ~nb_-xYPMF2Q7_E^-0YwE(TIpVW& ziYlk`bq%#_WQC#1RaMrQq@3g^M={Z!C=E(ODfM3){N7u{Y-f_Z)bu|fRd+-6S2qjt z^|=(gJ!(SW8SW8gF*}YO%(VHZMSYF=8Kz`syTi3dw99(V%AT}yMDIF-Bv-U|`o*G6=c)nb!RcW+~MD^K0!<`ZIw*%$)Qk1P^YWty_q4u?jr9I`U;d4Q4eg}#s` zAbli^!}PhP_pu!yP=?z;oa_8?iajojf-5F?pJ8xp9Qym)X%*?LLM*fQ&q;v!ZfSLD<*OuM6{D{VA>N zYzY!?mUPNjXiiJT4Ko_POQfcUKpuDo?jg5w!?_Q=9#Mk9FjNiglegSEiy2S%>O#se1#s4)>A#nnw0&WlSK&kPM!w#P@_f>}LUD?iy+} zkxSj|*Dq>mTxHUMOzkkw;gJI;#!3XfF(VRwg$MFa2AacmMHu404)7n_I_d7nU#a^9 zk*olCpgg!b^f&Q4_T7Wmd7m)_oKj}}WXS;SN<)z0d9T{-14s2ia%IERij5`3`OZ(k zhkyUX$={>)6Q{XYdQL9{ntOM&4y=2sx&~6+_^#)TZt({rOuQX9OK?+wk6V#CAZdGS zMHt8XAa}C2(XWXQu`juA>FnnHuC1td_^-rL(sX*Z?-QT##27TJs8#Qtc6>U-<(hkD>Hk{!kj%>gJb6e?dD#2Ghk9dJu>{r&ZS?^|Cj{}}yA^v3y2_iks&`EI)DuIZQ&W%YCN?VzDd6JY#= z@~7|cJsNr(xua4ZOHTfgnLXrT_U@d)6Kh8w?4J?7$4}x-_j*bvv;XzI#^GqU0M>QRN6-=QF>uTF0l9nHjJRc?h9+LpxT$4*dt&3fy0{L3 zc9LxzNfERnQ9O9W_~fan6HVE?6n)@qHpw%~{zLS<=6>Uxx}IX6A16M=e!_hZ%)S0* z-kXTGcb-|E7~jnQQdd;ghSjS9E_FX^E9(sl*`to>N@7M1=b!XZ^Crv#KC zD4KNJ`(^0qXiK_Z_PCrcBYE+c{Ils#@x>T4;fTj@$~Qa@zXGE)yl7wE6=j;&=V#}; zcR575Byp+8ARZyj=)y{ei3h6>fJBda#wHGd+uw&7y=IVTz|g3}f$_mhBOQrz6PJWe z^}Gi^GObmv&^@!~*@IlSux>X`^<3QDBB>Po;rtx_&iOp$S;pIh0(Q-crhSb^L?%t4 z{VGcl?yzaY(PQd!BFEg%t{lT0d2ztz zlHd@!%?TZKEvUzDbEe8(Ha zas*t7E{UHTaU*z~PqF7i>|NY!N{8n^L?8Dor;3#7DTW+9qt!q37Hfz50&v>(-ZZA? zuz9p@hltcXwYy4vO}SCNTDig`bWE^Mvc=lgSa0>Mve7Iv4R!jFy?D%f(k)wVXJQ?# z<+HNL@I=?3!KtmfFPd>}_!?Mx1mG|QY(Fn0>k6~bOXsr;S@*F#9?+V=cYQA%k1WS@ zYr)q6yQ6+ZIig7sKl!7WG-Q`yD6Z8t&t)SY@SYyn6qP>6bIhxul$cL`M?A8zY=Xga z1T~SALfVg>Yl`V=l0MRw^sR7Y+mo#rEeUzNO>Ie0+o1S!vCf?ow+7XN4}FKOnt z+q$cj-(+_bX{IfGE#`l19PCjn*SX5>FijJ!E#LS1%8whrzSjft!+n=P4(=G^J$EJZ zxbMi=wzR341!Km|KDTVg+=3y>h%fvoUI2F$djr^GAUf5I9L`Dd7hp1ek{5?kjR|EW z^T!6WBFZ8b)6-4$?URcie6T%LKViM1etlf>pgE!Yi)x>0o9QWPG-)4I@4+WbAvLn! za3~(9DHA<*Fr2I)%5`wF?MlyI?JaAm^@nDjB1%WIAI8k0lD$T-_|(6+UFd%3hlJ&n zTU3=tC-Qq<0&N78ww;M$g_+fS-b&mz5hqS%+Ro~&gff_wNX2hzNOAcKRk58 zz>KJl0HaSl6Cz^37}$V3H9x|ogS=3?NF&HjP;496`&+j_lv6hJ@A@i!gR5atb#7VI z-#LFL6%$Km)VP{44apUv;*b(e(;KzY?ggyIMi4cW5b`?Oe*XDn-tg4%fupDQ>kFR2 zTt+zW{N3wzw^qfJ^VTq5o z;2Nj4uaMnSz0%g}gUt7VS{l{s2Sp2|8UCtJ-PdHxbm{h07@mh8%|^b0w!7{*+E6*9 z4IZ)dEc$GUp0Eh0wrKT!hQywGDwgVBZJ;sI@f~>PYP4`Pi{wva_dAknZd7UN_f)U0 zZB#ojeRKh**!v0hGVieOM&B&|oS+Rs-$N3Gte{oQ+vFnZG0Hj|AH5EH9a|2Hp|SF_cD;cBa#B$o6P;ytGmXDr$`lDmzo{L(FH^QhE~Yy zXLRh6PVbO(?&}!dJh>x5PjwH(kHg<`@_JrL-7RzK_E+G_zKC`kF57;Cy&kWT)%F_Z z#lSPdQ~W3N#h7s0OYOAwhVt(GCqHxZ?i3_d4Cojn|JF0YGG5mqC#&PkBY}@RW28Z- z3>Jo|BK-t=14{i@hklLQ)IVd;on&KpeZ>B_Q3=13SEjy6j!xX2ax`ge^!n&c(T##5 zq3j?MH`o*IctKWV4p8a=Zt+xHB zm?Fw-JJ%Z6aJ5-3_U~LO<}1HyRw<;~=Y5&(Oz4dBg(Difh8^esGVFQMw*dhIw+>jD zF+L5Oo-oidAT{oEFxfYTaTLD@(}8Qk&%qr+WkdO}3Os=O&gjpR@&MXxpu!ShDz`R5 zfy5tPW4zmZ-m_vnS2EPz&-}Cecli(T31uJiT1I1%$)49)dU`0X&UxJIZ(ELfgW3Wy zdT(|%m3aSzzejz)l;8UIV%5in{*4ct--<3svor$J`Ch-?j^44R9>YNGA@zoyquTcp zQcGOtq;5y|JndoEcT5=w*>9VV+drbE_+_+1{2gJ(g^4jy;mdeYUcEtrNJ+4o*?@c7 zCs7u3UsSTx;hH4P>YhWEQrjMDkZpo%qs?Ues&14*9m~b{RM#Bisd8U^*dD=yz;Piy z35BU$30sqdsj0CigL63dJ-2%_k$yWn^b%dVsS*Y~XiN$HDdUFsgn+}`O!8JtyrWSG zHKWSqrHAUji*_}?YIpVw)2@VMK_2mdt0nw{*+$Tk7Lz})IQ)n}g7-nzTF+HDKVUWpVlPle z()Kc!_&NnI1^@E5^TZyP-R}*5RQDx;ZC2SI>l*hwC=+!UpG#fM@@B86c4FoM1oV9R zEdO@y3y`cC&{-|&=ol$F-5k=qsp)=sVgB`>TZ#r%DjOXgKb6xAIrhD{=cJvO7sOXy zM%FC$pCB-t7O^I3rErGd1l9>JJ?EBpKmW$?r>PwSX(?MnlLHopO$wXoQ-|z9xOuVu zRcr{Q(>uEbqTKqWrPAWODnU&}<X-#B)_H^DNsMS0@%ZbQ6=f!htx|A z>Ah*T3$8!V@?Nv{fj-OnpWV|r3cb!l#muK~r=6oL#4ICLaQFHQXKi7=@Is;lJHYf@ zRjk(cC{2G{EMkxc0Iss;xSzC_S-)M+*e}i#X%RUf@(`z4?NsPw`f)Xx?2T zs-)BkL{lXPr6O&lV?Am(d46DD`jjl!u-HLiN#{cyJ{Ha}&$XyOu$p4!(K*$$7ODr) zjT+XMXAtSXT5?fsjC7BYy;3Q@V{oTK%2g~j>+l&KE^HFmeyMZ3i!#f0w7 zqRmJ?zg4~RPyA2$@B4M7lJN?c@~$RIKT9Q(RCF2TR{1C0J4irYO1tivaGh?N_C@D_&RYts+D~=YFcr+D ztS5xv2H?Gre=tqQ_mIbt3G@VpoF?^p#v}MLgE}Gw341c!!{!cpA4&0<#9L3xaOrxE zia#}a)H>_^nzpoFY8+OXRI=~S(BB<@r<8;g<4U0V(b9awN5D*<5Fo{H|LEiTvWED>2l{Sgpmu(>orH}Pv;qb-Yq@S zTqeWoZvYg}QB32M}DVXFWxqO@skU&r4gpxiG+x+5%cPP zuv-HdtefcLuJ6zV_c+@$^J{aBJIJ8Be4mM6Tmg~#Zi=;Q3)5;2e z>3+=3E%>?c&y|v_s^Hejc6DQG#gf8Pd6?g}x}>h(+A+HR_B7StGw5kQhmK_Y|A^vU-fhI29%r@=$Gsd>J#GeeCV@*GM(IJfxN}hbiQeP_nu{f89$~imE#VJf{(~J04YH2Yd>7}} znJR>J-5npg%ajee_kD8cth*0Y#uNt345IUu?3I}J&a+T580|jlmmRp zlDG@g&0ZL=o83TjvnB)vMzzM~M(pEb*?r6>WF|y&UUJPe3>IyvzFy6)-rf+W(P45( zv#A@{OE}wUTL~AOK7`JrJ@ zS6bQe+za{V8b){OG}|z9I7Gic;oDMXC(aaDB5+9~;&+Fg@vHHuhX&h+*azBPIu<+o zP&1emeqGR4fg_VVp>53K6lq8ddo^*ROJh1_n&K=5KDsYCs(_Eo8^NFbf@sG%JHkeU zR|_b?-ah-e?trDdY0my)ROcLRgc)Nzu6ie4E+#6k^gL0|lc&pQVq0BH-tpIqUa$Q@ zEDvtIrCO)|pn0dRFdF*U));G?V*=zx`{Eq<(P#pc=X2h4&6GvC-jo0H-WlK%Ta&sl{za5B?oaCBjALVOC%*UFM4LxnL9IjX zhb+O5_{K-}y7wQ2KJPg9A{!F-CT&mtllU++i-86wXxAu5Yme(bo8EwW;S$&i^lfqn zHH8Gi{)eI?y`e#v8}j>JLp`ov@Jp)!55_P#X8@b$0&qxE#t?S^a;) zAL1|aB(*^MK$WI^WsPU(D-3}@ zClVOrmEe)FCW|!2nxUF;a>3D=L+LTW8kUZ-nR19$O{Bm!gTFxEyU$lYK~CFOlgL`; z{NTK0ZcHXeejNYVRm7;9+U?K(DSD=4 z=}}s%yi+<)lWicVP8ho}`3y6w$;;|BjlP!Lj{zE=iI}3ZL#*y~UF4w^${WTbE(a7x z4B;9g0g+<^>&Yu@S0vMVA9dJ!iuy48Y-yH*4)JxhK>7(fS~xR`*+5xJX=8^)S4;?) zJ!W3z;+6%2lWvTy8-Hco{&D`}az=ko>WSYIZtxi(z+FF-!9r#K(9q-|U0-=KprNYc zP|NG`O{F(Vk9=GE_EjGJOZ}J2h40H26|DI3v4~wKZn#-{pgF$3PSzq`(|@{8(tD=o zrRbeuH_V5DU^9uo9oMW!pjG5dpYtK*ar2W0lWZ}Eg3hwv_=m;)N>e5Ohz<&v#)u{u zsXksGgD%9qOx>0mm#{DNJmWB^+b~uGmYwf!>&YGEjaXfUkT25PQI z_57gDi=Cz2hlT0-VE8TMT~`4Rg5U13+Xw7j#iANDSJN1A7JM#%pn zdLj=6TKr#xR)_N0>&dH;4WKhX8)gg>>UG?E8RtJ=A*;p<9kwyWD=jg3FkwTq(El<% z%Lo`~>@v5lZ}?tu=6p;eRr7L;zOxA(pj6m?g1qIsRd_ zQ5HLtj(Ux>gG~0v_7mV#>~~^4dN$-H3zhr_r-NJcUJO!tDiGaI zl#i?)jtdr}83L%nA}K{)lSA((O-xRRJ`(yg=oPotcQo6ZbJgvT!FxJclRZkAm#L3w zXlfs>3p(Dp+5Qx$L?j_5!up{noK?0|Pzn^|^t1~AKV2(;8=*3Lgld9zv6-UB$*Y9> zTgFv-6*&vz|BkO+-7=$o;McDAz}&@8v#)ME%esWWx&Fq)D{)u;xw_!0{r-!*?X5v} zgvZ*D+?}9G-^LaSyG`F`;m&x&A_d6#((k;G^X z`Yy4Ueu*G}FhRRe8iI>3j${vxpPIPLIUhHvCW8}6q5mQrr$v+ZU`hz5-S^-oc^Vx{ z{)@hW&S8~?y^i5W{V!+?qX|2RnT-U(V5nKxBWNmI0R4%`CvWuz`GURId!~CnWM-rP zr!N#u8)zJXN}5!y#>=LB;|XJzV;riVa1BugiG=*;x@lhsfPiPflkq9E|L7@rFC>I) z4lIs+mU?ph^Q@fl!D(LMC|U=?4E1zOP@o51j3lczX;H=_juEHThBmF&)Vc9XVSSrh zZ?!ybnOl3dd|PQ>CARsDkY;>Cu||B1e;qO1XD%)ddJ61m>(`bmwup5@qJaV4kG`wo z(bDmvmuepFM8J%gKZ%;yyimITu$Kih(=tX09BgX6P?=S+va+D^O%1JXLu>M|#!_Nk zpqScyws`m3=}*azpTG2ZcRUaO^WVz2`j}dM%Piq^waXQQd{2(%nB&+PUuRXUJh-lD zL*|;{c~2*unP|$Ip8-nu8xqQ?#Hzkw%Lpy(V13SDLWG#mTEhFcL+2TuDyD>*D6Y{%8s?QWq@@MBS`Ic0o z>TVo3+7sFl+H-GUm8KT*aKn#<% z&R5G>=OLwNFkfIyNCB({{vQMlT}$RL%dk(8nKUXh3YQG~1U>_9$9Pbr6ejYP^P=Ug zsR{82Vr~q8><4}^Xl%zs9 ztvh7%4d-z?>AP7wg2SU@d{@91=m|2m?3-$_LM*?jxvVQuZBlA<&kS!(p0;79uag7m z#{{9lSPpp^dbd@sxhwfO02X$NWRe=UuOip&HeN0abE`&(wu!Y_mCI{3H1F=YJ@8Pp ze6VC>$KcjxV)@;g#tu{$ZJV0jIm4s`3sfhema~;NVkp6 z%~v_;#G0q5OJobh2S=_be*>;!2Qc->ZK(ecbr2`yJGjz?wNC(2u_}*vH*q6^TIZJ$ z{VvgvFe8qgNK0nMD1+qOLjjds5Bgp_lTbvm(av}-_l%$o6RYrj)E6FDkF3DD(Wf)_ zkNG`zetLP-P{8@XE#H*#OPO1H~8 zN&i|JE557%DMrh1y0g$K4BR!SnJSvtux)mDX(q-#`2WCxsoJb1yB z@c$Bnl4b|IB+n)na<&Jwcs*qNVNRwsGnK(t5`V{s25j(9dfw$62{_8eWD9{b%0_Qw^!u5gS58_1SWQ^FXaRNn+LU<- z2~nEx!05HnHV>Tjhx)vcs(B(_sTcrUCBZx%c(u|#!ZFSOgphUA+d@A|IF1>BHW^xn zVh3ZS7U>)jX(&r}!w7|SXLY+;gsM2}DC zFz0P>GX4Z(QIrqMYli};N*k?8EC;X7bS51>W9A3=}YHisOTe+k)#M4GSCdnsd9y4^}9y8k&sP<+}u{+f^;Uy1Imu2Z@7E zqyxrA;7aIQhzv;}H!;fS-@Pj$Y^ht)=8R@d7?_-yDhV4GMCUA|w4$=ncv25#7Gkag zZ#kpuSBvZ^m|f&&L@_GOVEDl&1C<>p%E`&lf1L|h;Vqh%h4wJ}U&n{&g zhSRK{9EH$3sBw5d@@Mx|p6QjsU=cHsSb);vqlg{Oln#i$^hR{`5Bwdp@Lz~7>Jy!3 zz(KhCEG{(?r}DfR+7WU+OrLgY{DGvS!Dz38lsSZLtbvH%A@^Y~6=Ef3a8BL6T9ZJg zh*zuhE&5y1(?g?l$6;ZJC9ZDk3F`ru0(KTQ3Kosh!>>55TSwWF0LuwLPk+i8*aFZe zIF3-|GcKecCO+-Ttj7q=eOs(H>X4 zSNo3gIY3K5E=I0lM)}O5J)nQ~yTL7`6@lLv*6ZqBP)v^7jTS~aMk>Mh!cT!TR*7pj zN$R3tLB8+1l=UNP3oG_jo9f#-i=-#)BdBf)k8~Px6X1tVrtGCzSYE7n zDhOW$kPZwqcsAvC_X!PZG~g@t0T~Q=GnC#GP#0KPQBqw#+{RFmm8B&Sv(0=3Xon`3og=vE;Jhh>?uJ)%}=(wS7Hp*W0)A?858(@vTFR zC)=NN^>pzC8wDLL9rf8QA@!3h#ElApk93@2w<`^jiPU;9liyAsHK{#qPWT1l1bvM7 zi0Y#w2l^Cwn{XI673cvCU`6`A^PcO=@#_h=6!&EOoXq(t^uSo`FKu^UV0%U{K`^n4 zSP!eXT>h?B((!ZXkL@$^5ei5N4|y7AiTV{jJt&2Z3ye*jIpN{tnrW{mz8do>Ugt9b zEkWtYL0(7wDg!{_^-+iXiIn+{=_7lEar~JbfcD>g{DCt9R4cD?XW{*CfV}$8`p+jn zsorUF4t#p|XJ$oaU2XTXA^)M<{czDrQx|Fkw-I&;z_G4(pN5pii*_w|FJXYrBy(uq zUL)QQSSVrvssR0zNMJ7Xp2a*&+sqiERZz!LL$C|*v)SAI3;l0|jCg^epWp)0JVYn3 z7TZMk_k;(Zh@BBJGvHf573Uqbfh^!QriM@A&EU`CPuZT*5IV>A1m!&Nl5|N!(a){# zzCQi(T#(26y|A283odW@`u=5Y&Y^tjuV23p7cD8(ROD1ostKwNYzpSZ_D2cnk`LN0 z%MQ>r=zfS2SLLIN&Q57c_z^xafa~^05JGwbbJ#`nY(g9MnOkLr`n=%m@qFqvkJA*` z8UJ_E*}1O8h0E&Z%pbEfy34AC_4NzNOWY@)pOm7BmDCphewOw- zFb8%Gx5?A#ch)PP#=v`nFPg%XKEn#pEy--<3dI8PdC>>)ZZigP63c?OfnR{8Te3AH zRuFh8NCR3AJ`UsKUgOE&57zhkxkD)(ms;nw5!(j4PYc=NbFy$zRhMtW%O))Em#Q2# z&G$@d|KzOc*y)OiuM-3PzEL%}Js35%oV>($TG+mbl925_0J_8DF&h}*AK4l=KITT` znUG@6RAvKp5{?V-&~H`_ODv*^eOG#(it3D4AOg%$>`Y7$QVe{lLyL-sPnx^IZvn?0 zc*i%85s?V2G`+AS*oEdQ?O6F_g{SE^n2fnd`H%811_@kZjFdR}hdW<&ui`J~M|Kr7 zOeoF&iz#PSta5AGw^}2Iuh~4{9auHxv_}~81!)240DV2V9TS7#fP)-WmO}kUeXVV# zvjSqFCi$-7-V4a&412xz+TcBh3yA7UdK=#xxgZeCj7HrD`P(KdBD)q=`&82E(%Qp? zW8`Zs0q}KhBGNX~O5Hh)r#wjc9Xg&p5OToZ!<$GKqdKq78bB zs>*Q6wjGK>FahH%bB&#vy~0`bMb*7+`Men3r2Z&HoNW{&0Z|VhgqPqsl*c40_A2@k zIvff#A5@Rgh@A(JAHZ;Pgelo@K#3p5h}K9is~7368bS6$*#A6Vv6hfu(_s`0V5hc6 zD_43Bixt1D_nhagJ-T(u3Ca@1bD5ufw5b%^=+VSZ<`!~BG5pa%?)>UnNFI(r=P{=d znvqKpztKtV9D28Za~f|VVSIIRX5cbU1gqBL8C^}8Ltjk-0shgiS8kAN7nUyzL)%XJgu4gB zA-1zFa}JX?o9hKB)x!m^f7F$~=smAx+hg^Vp?Q5co)5oxAWCd9z66hg&w+e{d?wss zO`rpqSU*$H-vBuW#;_4`vF|XcNC9#Jp2kTZ^)u^qYFFqQ@2BJzN~AZRZDdVm%%o(v ziG??y#h9gVoC9k(t9(C_)IYZSS2vvhtruHAz3kG@8LzMpdC%+KKyozS_qQO2h4QVE z4}+cp7XM6lN+)9Ax<+Z{>Kuv-^6i>PyFV-jD!`Tn$0py5eH+#u*v-D{ebkGBn`<3y zeBjyu{NXGES#f^!9QLC~-Z=j3`ne6$PEP=h+cefZIw={G@HPLHCeMq zQxktg<@sk2f7?UUAHI76=>rir|Bf`Xfi9EZ9@B{=H7CC!TO)(Ke@$#zv{a8o!@)!be-zJwm)j^Y|5!p z{968%_5=5GT>g$f#m!6l-;1BBz3gfP84(LSX&-HN>Z+vYh4=eUNoE-%ok@;yW~KEY zXf|>+ejWX%=l_^G+HUdxyBxc`IZQI*;KU7#_7R#t=CxID;eiSnb|r_A)PfkMg^~p3C~cI74|rP|>M=i2=iG z6Z0H-0xlJKA9a?x%X^Uz)0fDt;ABzEplHL0tfqTu_1B8_s@B@A^$~S5TBZ&xQUr-d z_sncw*J+fVv{u0aNuD%6?0(36d$OdUxwHCYtAIaCB-U2LCbJk3phS;|S==@L!=ay| zdgCHvzrb3Kpy z?kh?yVq>aXLHIq8(^J>UYRl?m44yK)fFmeJyi5F#26BBLGS7Kl4Bj5?jExDDVon*B zDVhg;8!F1SS6dtU>dR{{lz;x~Q_X6@bf=3qIv3+YD2G^FHpDBG9Eo0wE}{CdrVR6`@~Jf zmHL~7Ph79?FB)DLUoXrV{>cAf`(0VIrHQLRLw^tq39yS1CLk;83z+iS?(>pWQl@H5w806`~^uGCRHRa6wiyr{*b-y+?E#`Uj z0r^t}(|hlC`nKdZO=yCH~)0*OPyRlzO-sfm8M?90iYMhb&?DW2)WSlCLh;;eahbn+R+w zmXS;Um-?Hs3HKH`3+qANiEVObn|!Uc_LbJD&IQ0m^H(KSDb+7FzSsY&^p{%YRTJG{-eheUP zVc2K)+!)1Xu?n%T!C&31h*ye>(n%7skkEaIpQiZNe8^ysMF?N;_Vq+|$Fx+JcbCkq z-q4uVaH4gosM2V4Qb9wQa6$|I7!gJNLoP&occG0ZMy~Y+bj|Lp>YUu^>e$^{-E%{+ z(OTvvv<7?D1pNx=W!g!rnJ>Itw1t?RfIP!R(=d1fB+s5`f!NJ}Jm>|&46i3a(74Z8 zi)IvLtO+LuS|W2}dP0O8BPZUs!0QWb81>G%)WyR^G5VMY$_UAiG?9FWTusEl@+?pT zz=}2d$li>gGz0d#j&yC0@NzFuI8JEfqxt{!za4(1xn=oetF+@FZHy`Yx!il~Dh}E| z#ZSvB!zF{i+Y$`dv_(DD}FlDWVB{@zgVJc^_F#zT<9234rryz=9ul6ZN4H) z>3h`?(zLJg{jY=X_q+;u+n)d9@BOw~8O^nXf(dO)XHTr2v32&e$)htqXB`$_q@h{84ei=duF$J6r$ndO3Zh(7GWvnnq@}Li zsv04=2f&{qxuNYb6q>&|7Xf}d-#DnQ#~_*WgVro%4Ugg9Zrt&E(TD!e;NtlW7kbM2 z)^*(I7E0jS)tXY}MWseNPwTB%E*X#^*X&a0NU_S7K@v*W{ zIn^Kl{lWl9y*|u9v#&p~3iMK^m(7#EHNJ-5pxmYZ@)+$a;m+rN2|JS9k#;}fb1Xe7 zBIt&DDojWaC7=`Vv7dr^7+8D^~FIzOo6R^Ol;sO{DE zTf<=g!``DDrP|?}t?QlNV8>u6=Y91`L0Vfy=VL)=r?O^q8$z;2enfIn-wwS^dCLus zIhGbb=5Ja}+-k2epaNSCC=D=d9%IaRLV>TXlT^FpH}qnF9GOJeOEnQ@g8~c^Y2!ee z@U}a3ksu{k|NEn(rxKN}Xk(&wd70?&1 z8@7|0StD;oFyd=6g!LBfQP_jHBk>nw10n*0pZMS8^!je`_(=*zu5@nHK9-*zKFa6v z#DaJIP2zjTuMicL>gx!M2`h+~r%f51l6pJ2I_j9WC!OneBeEjop~qozDPcQ=rFZM% zGO-~8ehPmFLe`y>%oB|akCK>W^@><=UUyD)-tT#zTzPwc^J=)gt?~rrHRUYx4d*n| zpuylwLv3Un<`i>Rac*+A1jTWY%t~4nwGvjW$`>~FE^Zl9@7tp6@$H|cIO})|&4Y{s zzJ}aDt0^+pWY$PmYxzS>O!5yak%nHzb;?*u-^TA{oyC5eFjaZZ-uI5jBe%VBC0ADvmRBv!T{t-DQnZi9 zKEx&aA?q{yVbH&*ZUTf>;GM#m80Z_ZGfC^fTqx=dyV!o`rtXHfCS%{^kTZhx0Dl2 zJBk<5R{FGa@A)mI9ROc-T!s2zGl*U&mDQxYt}1e@0;?=vEbCDFNN))@m;vEMsTb0h zP9C%1>uhw|%#a2~CKzh@;Mi7y)Rq;iqau zaa_JYx<^zfsN>%hHc0waH#9ucY70U+bKn_&QumYQW;gFD`fq1JW8SR%x7EDfa%qRH z1X2x~hhB`V2HbUSvffqg)P%#fF#cf{Vkyq0y}L%f4i5Is?msR*q&#Ev0l&rNVkWwN8E$EcrMLP&_GJoy!xI#XB=-jY z6@vQqcCBl@*?DZRNfDwMqgo>$ttquHb323fTL0LWm~IcwZTeHSvD8&wT3_5j<)_Q^ zz^ynfE)}n!HZV5P%;bKiSKxu9jTtQo$Nb;;VCZOE7WN4-j*`qg6Rns9C4L0TnT1rfsbLD2RF!*L_rBGjY~?&^cI%Nk!br*&lZM)m0g#|93GT8CB+ zKa$$i{@PI8X=^;>2%HLL!p0(#0Wy~kcbxH*)$jAn|Fs{D&M3E0M@Zneu$2K>zT<*_ zhtKovVNR!SqwgZ)fGzSZJ?kqV?;9TZJp1@@xNvT3lH`cdO~*oZ(yaa~gJ$_DeU?ym zLYApu?XSwt|GxfbYu&icjP_nPEdbhoN5qonIH$nLNE2=|P367X^Wr!N6$&w-ND88My6wEX2WYBo#1O3EYmRAXTD0bop&t+h z6XSxYAuJ->&-;$YSud1_%(L6Ah3#j2Wi)!84O|$E_vE7Vpr=lp=BNy+S+1#)iQTyj zl#6aUHL|jgCA_6Xn6uqJlY$Z5@K%|heg|+CrVo1_9uDw!abZ`Xr){UqblXPISm-(D zE~CbL6X=a~d6k7#rA{BWJQWpP7kez+<(umE=tDe0aiyR_!@iLUK8gQE!guRUxlXQn zk7Sl&pE5D+tX$2)l*ANcvcm37_Aa5kGYWXcWmpV z+(|*>2%|L7j|2SKkC`2qqkuF^u3@oZy7`v*x#59UsD0fwW-$*OwQCmR3-B6m_nR4Wxna+1%ulVKdv3i=jO8=@Gcz+Xn(a(6m? z1+{=ME-y=uF;pWP=@$MY`fns~u&YEjVLZ#1CWPFZL}E1 zb%u`CL|lMAj;g{PqzFCG9;@gAdK+sSlSdU1x!4rMO2975Row^a?m^qgJLMdib=XrX zF->=O1?IU{!nl~3m^3U7_a4`R-+`Zm&4PKDx69@awhZ0ZeFR6sKOl&Bp$E+SB6A#R z4*oFFNel%;)M%_C@2oso^{4hk-Mz+u&Jt0!6ga#{+Gq0t|IaA}&t#4d?T*S#Adg{X1SK%T z4~O*z2Cy8I7eo?ll{r=YR`<*%2Bg@FEl}q>)LGIs>Q)cGfY^|JF3mHZ=0lK@LG)hQ zL2@o}J!&karLe!@R|Di8xwv=G7(k)D%=lY- zSpScSqAO6-G=qjox)X|I`7E_i*)i11+uQ^w$u3x4II-+djlS7UIZ@~V6gN$83C6+F z1@uQ_6W%4YWU!}RoHl*jzLe^OiBVGmbA8x!6Zs1nMf!^U2{u`=>NfG!kz?|`vSovM zkxfIgytFQNi~_HQQbA0>S5SnDpt{;!+f>^5wkxM@TgBMA1uf;B8vYu=&far^DXRIP znYelq2$za!rp{$=^gkNZ6lhtQ*qg3EQPWR-Ny;apEk>#7~3mVidZ2ku63*9kS3$B#r^0*naG7*~? z6{PaOGG}uEvAp!xV`e8*hCK;+5Q_8tLlR&Eh^{Mx#n})f3zY? zw+*hFDJ2YVl25mQz;j^Zz*L97HOjWlzRKa&a4iefD8;{OPwA4Ly1JEBKbyY`y;bE_ zk-Ky6H9+OsV4}z>C2}=Z2UoovsqSm-TEo*wXa<{OxpN4ZhcFX{=rYexrir?e0w&yq zXbc1~VURm~T0Tm<-1-1$LctijxINsNzSN+s*t*p8(I-Z&NeoMPoMIn!JYFBz&OAw( zO6kDspa(5$B)xrq2C$k7j(=cQQafvl=YDn~Cy7Z!-G;@WZRil|=z&`;mztjN4l0w4 zF1G`4J#UA|R}rB&C5=`tw4Fnhkh_Qo*hYX8auYTeAasHAdh3Sz2J{86Cxlw!dqksCX+dbhM%o9D4it&5 z%f@J-M!bD8I0Cu@R)v~{VPhs@tT-HL3|-DZle_Ugh_?_p_&(r?t=T@^xd<4K4k3NP zCu4sRoA7_Jbn-&RDq1J)BRz;(N$>ZFrq^R+PPwtfddL-IU1`YBE4Aa*hxJBtiv?zW zqaRX+N*9aYNLZML z+c3ZgIs`lb%7Bf*dUli6@eOge?pagp~)4=O%J~GP}@o zz%8I8+e+0XX^~C=%12;bq1rOlfbo{?wdu4nP0W@ADzB^O$Rfm^>Y0FU;uX(m&pY%B zObQ1XcsFQ6C@(rK4iVcI_L#oQ)+9eJ+aPWhPVC<^GD*HwebLA^oipunE<-#cVi?OA zWDLSZu)?fot*cb?J1+fY{h3*G=eMN5`RnaHBhmF;O{n zWb44n!6wlu!MlM+s`-XmLzgMgly1(nlWj|^8gLxU;tbXG$bXNBB{=y)*%9Rj%ORi= zCP4oW%fz{}T<(7+sfU=n4bzLS!wLa5+dHS-@>Ts)8)g}0t2B=@&H`PdU*UY@9uJ80 z&-Ekt9rL|O--$T_S0j5czR+oAq-K(KiguG$V7g)LwG*9UN2~#>S!md3xnwT}90B@( z3XmzdNJ1B#>9xW0vuC&;BRD2d$4&4{^qb)Kp3CtZi(Um>4%vjP!|!2y^m@${(U#Lc z(|)-*M_lS|(oNJ^H_wv!I&usB^(L-ZrN&ULhhs_cuZoGm^+A>l>gEFX-|F3 zp_jvoLmk0g>`$yn<}){=j|$BO1DsaFh+@7HsrNE`(R1`sDuZ;9d`M+h$dt=85t^mO z28Yfh*H8>U%n@#`M$Jh7NQd~9h{NmXGYugndTHKpf4@LL@82MjYK~an8q17A=oBmw zfrs}Y@U|Rz#_;B$AA>#pF?~UUm1>hdLYXDoE!`{g)IPA(ISWxs7;pVj!$yZzvH{Fw z>ILj*jFSdn#!|oI16)7U4XSB6lI1I0M_xgVWH7xSvAuoo2P|W6!=7=jvwpKra2~Z4 zD@_7KYd{US_~=*kyOb}wqMt=Ig~H-DMH~L&8?Lm?YPsK)D2VTSDu62BfVX54TN`{Z zdQnPdT6wI6y__%~-9v_Y<#=03xsXW^CiY))0{yM`JYNd?OyJI#i}5dG36Xn4?+4B0 zqCGo_!>}R18KC>ByKc+h3k-sLf`Ptp-smpRh6&YY8}7A#Y^$xmP-Cb=)oiRfRwb?D zw>|Ee!?&p3!e3IEKAWQ#rnHAk=|?b?cns+&HHT41W0I@92DtBOQus<(KlT=dMAPB_ z1%9<;o0H5$ZIO6*C{uDm0hSjj(=;LK6xDTIfstok2udZ)W5oH)2!sc0V(;+W$#~0J z%l_uMlK@3V!_ESqIWg8qy@b6|Leb(gJ9KQ#u%#l3hNj`M`7WxrZB`b@jBd@|{!#_Z`B6t`D z9BDsid}{0h%*VeWTi`JcHs~C}1v%{c4a|W&K?7*>Jwdctcs6m+Ti{>pl|iYbgi+ky zHej6Yy-Xl~sp`;{S*E~RJ=R1plZVp!Q)EdqqK-01&Q0bzi?8HT3$y6TH}Mz8`Ha0blU|GJ!mcf~GNjz&>vnyYbgRw{6qF5t!S=OH7;B3WkVvmwn#% zSHPzDhOxz?R!7nz3uAl&7|hFFD((ZO3SMLPS5N4nRxhf0RGnTqr!u&DQvLs0j z5AwL(?Sc=QtL}Ew4$FJvMsPP{m1i|`Da*`y$lT#hXxg0bV$5q z`mFvK?&+Lc$Yp#gyY@r08~!;Ht;d!=auSP4Ii6s@zCP2s#N18uV3)Dpx`Brnw-nyoVE@JDH~J6SPkT+lzN z;&bWsp4-ZAYLK{oC`g#q3u^z`EN}YSHj0-gs+5COZ{;1bO7neuq(^{vi0@%`BXfXw z0{O&pZ0JEJsbN~}y}FU6)2-|-{vbd$L;KM75Og1O6`nyfyYKLPd$p}ZOO*Dg=R4NA z&xG?#5dc5z49YTAEqlIiQczaZ=IH8(8vn_jc={0OBI*LH9@uWhx_r=&3D2=yXc;IE zCPaC{9s$R?3L&pipK$@C6ZDJBK3W+ykh&Oq0~lauI#|Y=n%P>T@{(+sYMQ!D@sDN| z5KT(+YVs_k>X>nXzvJe|@*;Gk$#7p(et4Trx&CosP?)Hp)neds3`47QcDoIcZg zr~j@HUF77j8{85$+_&8?#J8BUK9CS;jW38tN4*Ms?V+Z&(bMQMij%Mr-3}80E*R6L zt-~3@yxwX2k3+wBBem9ww|~2TxBjj!N-DooTUVV}Q^V6KmTE^C7504)9lnbUL@#qN zv>e@dBUxpWkClf?maBe&-%{UrD%cAH1W~fYiS8$*$77I?f!Juv*6dOFD6gmq#(IYs zJc#^`X>|8w-NH>Em(!Oq-}(Ly5(l31HF$ld-*oplBnlm!Mjq3>aA*+C;JxXaG{{l! z15SWF1*Jkjh`o?U=16JoK(vq{f9`sQIOoWbj}~1PAJAPhm1{`KAT>{#%)8W%tb18P zEbeNVGICy7D!nT?ues_N2R#Lu4e~&I#7sk#;HEIbeXoWf;^!xwkJ!%kqn^jvkO;_g zXcQ)iP>6mADArU9=^Z}p#GdZ{3ZbVEG4f2a(CQCh0kiDI2BrcanJ=RZmG$l5A0NmZ z6(G3ZaUbnhKpgx?f`kw@|f8AY97TMrGuW85mA3Vjc}$R4I$FP%9wTUg0&8X{_I zjfeGT4Px_WP#LL``5*NHbvl)TTZ#@t!63aZ7@Xy04LD z0o}o?16Ohlje3bFB7)^!4y@!HWJn;uFf{x+R9I z)+hG)4yJn#=;44EpQ+5UN|ng8-15YF$r5e+s>Nz%m`WV0ph?L0a4@QrGEDpzHUe9K z&0tVHXL;Nvj5ut-LUJ|Dg5)^0j>ooITejhpBzH(*Y9U?otntiYxwnLz&KZ&zM!lMdcf`CBJ~?WE0|_Q;%+$C*=R zdM?ghv3lXYsoGRFcMhwWwH#Nj|K9VkYN&X|pN7BtYEQJMOIE{PdF2Khxt~}LMgpZD zKLdK&G+*JR&eq6=a(nB$zV%&_JkS)lNBIQoRpvh)k;F;1*pdGUXG_xbcg?3ApK$ZM zSnNYyGnhC}f!|1AV7PBICVW}Y1^*cKT)N2Jl|XiEGp;t;0TWSEap|~B;$_-t@=?@L zpwxcH8fZLVIA9#7BdEd^`TAPOL(&EIhsa~`iqY_CUbBX#sir4QOPeH{baMQ`SSvHY z4wqaK&TOwQLFSe{Ir#j;iwD`CZdKe`aR+?&)Z^FhS>I3nocNnk`hN_a1y`F{8%5(n z9Fjl;5`w!s6bjU-ySq*GYdf{+)MYw#_fFkip;&2g_W*&Agt!oQ`|=C2-mF*dz0Wy& zGwS|rVRSgze+ynH7OQT^wu?F>HPSSh!hF)JgM2+;Ul<@EKJ!ejbmAXHb0(dhMw>Zi z;)5)0{E4uIfebpHC;;IlQwOdLbaRUNSM*rO1Yo9Rs(p*?o@T%FfoQ$#zGkZI>(HX^ zD-Dj{=cG+p9TS_Vn?QT1Fj z!jDo0If1}pc#$`jA&9HWI$XG8V*U8VV~m+z8MCre#&A+EL_DXT#odKkP0vIMVZmsm zDaW?Ny&hJFIqAdq>_3i?hJ6Mpuz)`q4Ayn#zl1=?i0Zg#i_oOlr2o^Drv|GoT94V| zv{>c;G_S2o-De>iaDnuBL5*R-QPc!;20T?1*%~m0bP%INlTnwQQ{`m>@8S4o`X8f(>H!M@c-%wI%yc#Dvb7H9L*SQD z(!d%{hTxLqscfn2ioOW+m?VhOrlJySBKC)mNr7i9jH0p@vQE<`&~RaKabZzEf_DaG zGt(K~tV;o}d`pSXuub4>D@?JHdq%j<2(Xwm1G*|lArR-5SdQw)n!=qs97J8UN-jOe z5w=^~`#Q1R=|ktFbB*O-6DEkT&}Tm>g|d?I#eW6i7wRIRgvJV^B<_w$W`3qWWJCv~ zknxyOh!}F%XFGEoO@UhjKjhZfZ02U&HtluI1mzy(3u7(-0RUNaCam$eY;pJFy7J!{ zrH9{NeC2*o_~gn9%*ScvS&eHr8dH-Ih+|*>T5xkx|ZqYN`8wzX@{-v-2o(9g!R1T3=OUC3hcmlLt76tVLB&sj_~qDQqQbQW=6Sh!Dyy+1>n+-%1&16)He;B^laN0saJ zGjy$<=CxITmuIT_RILUtQ-wNvROfn#1iAILR7e;~iTz1xq*n%Ak3XFAqVW8r^;5D7 zlG7Loelf!#epG|E0SdP52GLO$05-)I?u)?=zCre5^r^nte9XATvK$lwi7@`jX>8Qi zihn1TZz{uN@aATw-cuO%3m{-#|LuTyS?j{SIw;X-gKZXxtl(q zkvChstYD);-(Ix9YoT&^beYP1SCMxR${>@y989{9L%tsN+~P zj)|ucDZXDRgA7x6NW_Bh;yAz5MY(&YESMr6*IbxWaAJJP^w%?2kA;TaC61!Lz_tO& zR*lM^PaD3=J2ZH-+uT0f+a>@jrCPflZfr3fHr}vKfKqU8aerbP2^hH4(5vXsOf!-+ z9g2tgi|#1MI%p;M1EdVi_L)c76$*)}jaVA7F!UPhHY+IbI<*EHfbynX3{Ijyz>mV8 z!GDu(1?~@<6MHDxlJYp|Rct~a1=VLv(oVIUGfq@`XtV=~UE>EfD$}g%T=(5I;PJ@$ zNFjKw6+0R%o3F&lA$;E8rS1uh(Y1Ls_Zk=VM)0Nxmx|TO2va%O8(ELOg580?L!hCa zfacn-0VZJ!e4fLL?KoF4+z#DlW9l*LJ>q1xrgeMAY5oV}bbF4OV%g>FgKzb{6iSOe z7sH8a4iG=h*S= zoxRl7cTE+Yv%6n*wXlahJ?zQ$deTW&UD%g|+nJ@A+T4uEZ>Dg^DaS3F5HW6EUSZCp z6kW)7ipBSa?+f4mk@9glC<^ihya~|`pYMKb3j%HM$@2}wxd>FsB}%{d1{@PN88?W3 zhL(e_*m~_BY+l-D@<)V1n0uJ39X8e9hk2v$=g~ zzg)8!bQe$ZyF<<-@couEkCWd(N8nene84VMm~=e9y6@kff^KF9uqmbCdgIhuY;|V6 zuvyd_AVMq07(}27%vyR{^r6(<>FJ5`vz}n)R*?0lAbqCbshk3M5cK6`ZolRiQ15MDPwjV zBYt{zMDi<27b+4P;GK;B3(Lg)^4?4SO8>x&VY#B(lBu!Y%!f3pe=qG7y3#!iDaP-| zEe0WVk0fISySPPzv4S9ZnmSUuQv;Rn9eFssP0%6-Yfv@^_^R7#x~XUoXDWgE77dH9 zWS0-!R?JXd7a{o%hWGM}suh5pSflS;|K^aj@o9;-LNiI7FqmoBD+sFrogzmGu)0F%cNPQbOg)uJHjQ6*eX z7Pkx!_w4Jb5KS0eB@dRq9BnX@9bjv-Eq6akQOiiTy4*BsdElsWJDo4})8$TW zsN)*=3i>x?UZ6Zoo^UN|Oit05qibEd|RH1;KRRy{Hmru;Tc@_y(^s(wCH1K99T}T=*~J$*+?1R^LAAz=i&_ z{=I|r!Eb|u+(Hk#cP|&+SKGU?=S}C+9s&1)uxnK8Vj#c!%%=SC-R^sV2@j8sx)44o z2oNSuA*RD(%EOV-f5zU93|D?dZt*S=GJmR82rFRF9b z9%}iA-NC&hDpJ{v?=5o;8`PiGFvB*d2HfrS7u6meocg4IHD!9PG;%KO68Q`nK^!1_ zLd^uMF{bJimZesXiDTYmw>uA+Z>s(kW5w~x6WSDohWCc^mDAb3sw=rUzscMc$F5~x z;-;z4#;Znv*$T?=I)F8ielai+_;_0UAMu~kK8~4^gUvXcGAW{mmO((lS`2O6<*lC^ zC$-eFKa4~Q6+D@EgZ74DK$~cMj!I><^1?d1JimsOB=OG=o%WnoCvZ99T79^E zJqU(x3tpdO$Wu+ZJdHm+WiD=E)HFbLLwab2U+hbUgsP$bri`avp`Rp6(WS^7qyi#w z)w`DhAl6*XOGUEi`Cv#Zw>tml+DdWd*PpDPT~$A8vs$4&X9w1Cf(QQ{`7}CgUj{c3 z%6tpyse!=MZjz1%>EbHWsp-LQ7i9S6b znWp)`vxjHtv@gnAE@$(u8Vd!GAoI{p=D zu4I*fH{{cwH28aXYapKt>!~_e&TUe93;sa8h|m1Q@w3 zeWWp1{{!YA)}k+Y{Q-Fj7zMSU4v=s7fly?3El>oIYu52=co#-;#o1Ex$Y1@}`cIB* zRgE*ff<};*Gv!gJlp9&rv6PA5re)8(F!$`d6LU;+^fS+nFG=r>*h%VgOVq8(Yx;b1 zfrlHMtM9guY%?5RoI7pjt$pq*z&}iZ3a$2;;|=(T7ZBa*B}H#Vd%1d4uY}dSXT#Z& zv*yokndJ{b!p*4LtcT2+u&9W~frov4QE#0e?K;Fn%n8^MSEJ*GYqoou{fL36 z7MUJF+Heq`{}B^#uaE_x{kG4R6x&W~oki(V!0X{p?J8ZOezj%0{g>^74kkIkJ=oRU zps8|~sw!tR$M&iDKLoD^mUVAqpBm~AC25i!G|+qSS5L?GI&d0dChbMiym4ozJSd#x zdA|CiJ3=dFQHDN`(dxFb4On)w_Emm`-SDlu;P}bG^7V507KAz5Y!UzTDQTX zRmy~CMnHn{;T!$o?PX1>jtkt=@*)G&mSYL`xJf@lNG^b0qrc;dLM%mXKplqPvYXUw znMV3sK2Fh~IHnk@6l(6M>xFGYUu9cd2hd+}-%&piPrZ)ei>bSV?uQ3PE{c7T&MACf zurqm5SSE8SYCt4i=h}g5B35|MLN$WG7N_#(z_RvJeUn8MqwBPV>OjRr$!if%!c?qO zR_H;H$5e1+L0nPj312DtIApTDNJEtUp~}+~%eCU25<34qJFffT;5^Y>nU_3pbecY0 z+b_rRUiN+Mx!kvx(=`Yj9K#(FNQDQuNu9DrQT>!=)qq|($vz8y4PQq)7*&)}pMQ7a zoN3<{8dkL~MC5*mdKtbd9-EjJWW$0TG7VcC$2s4X-g7}X#n1`RBX&bOte14xEma^U zG#d(sPeVq7R_NZ3Tp#p=%7ja#aq>@|D|jZP3sXjv0+Dc?q9$G9c6%`N1_6But9y#FdA(5!N7`&LjGJ$zTxj(b; zo)!Mxv77Ra<{cg*OW72}@f}aqgx!zriFzBVi&IXRFu#5lGQV`pj>3uK!ZU3VZpsqe zDl`H4#myIAtWrG6x;Sz=@;L5z=VkND(#q8x=Q!s$oZ(!R8T6A(WF86}6L64B1c%AD zbiSziUACc8RKLBqQj)5DYO(~GAQ z9kuw(KuK^yfGTihG&AOWfG>JJcoZ@Sn`4!U77Vrz9qoJ8ysk2;OwbV70~pvZ1Zo4# zc>OU|p<=TZ?jV8Vo%{8#%`;#o>@v_#?J-Z{Ya(Vn=_slQ{E7exDN6!pL?_h;qOcR; zzL0MgoCF}XyJlgzs7sb;2~09qWmb++opfN}t$%3Oke#qwW=5ZQ3WzE=zb4?5S#>;~YBld4F ziLWqhSL{I2g$#FI!1#*seHlrib;K)>13)9}KVX&pf_oHD1|K^Db2uP} zv6B>uJLTDDM#r3vp2Xn$`-W|ZIS~^db%^!NTLlk;{0(|%=h%Z`7z`7pG;b9yA8_z? z3G5tv|Nll#$xaIw4*B-3Z~3>G+WV2WPddvg$0m^rDd^DuvWtth%+$=jGb5%jA@z8q zg|Y)sr7#Z%_de~o(fn^6pnjljOLzJ(SKDhFbuNK+6B7cu0)W)-L0&P@(O)Buhi>-w z$2_)GE674GL6JC4-E02kx(Z-6`hp}jNEP`(pJ`)#AIOsnmn(dCu&S(QqJxxPZ zUzWWVyyH$B7Rgo_BV2#OzTqCyLt{wU;|iIDqOq_HdTe)8QbK&vgP2uew%{!REZ=y7 z1(O5Mh5jNeXWV6;rkXvcY-{}DvF(6TOP6K3#bkkNe(=3oUsPb;>mI+joAcoNyQm+{ zHC=5tI;Pj#E1#A-em<%`(d9|OInge&(+1oLZ^u{oZwvQ{)Ww7(jEzlp&0`G<48bvNujaf91?HYmVw++79IzNvkMasFiNggm}2ydZ-fXOTQR) zC#o_2ScYP}ZO)^`FXo+{IFQMVCi@>DzVUg9T4oZ-Vx$eyiNY@b0={>OIF^)<1RdBX7G{ueSlRp_kEl z)WQfzJUI4nlsbAtjKof8(0n#UklJ5sjl^FXxMF?W9%A&Hx^Bd(^9R`xw78U2JK11T%@a z3I55Ya_({`InzDnX^!fWYN7-=WZ`CrHOf@QJ4K#!bof1caF8Rtq8d>iSD|%>O*@Th z%S~sa9cL^ueX(tH=XkMw+nBS1KZc;gy<^^mCHg+~0PnN`p6(C*vX5%NQPN zBK#NZKJIWZJEbaZM`}%)HnBhUctU9$f_@5SamJb#i|4iul!-soy)?Z(_4#^vVXc3Q zvU7TSUt4%bdgr&^=|h`28Esb@XE!fs-^kIbCfbF_VBgZf=0GQnE8?`<=clqQJ1w1Cdt~0+aLO-UhpUZxhn|I>!e6HYHak zmgb6Xh?}%T$5V&I_)b@=xh8tu>)Y_Ya@E&6pD4v2tCD`r`1PXY7U$*=wfBBslrUP~ z2ioZM6Ej5G9&{x>{^NlzdSe!H^?QUFM%-iTjro`u_cL^nlddY99 z-#8KlOY~yHNTya%6|Yjr7(UR^*3{DWxczg>hQ>FIq0Kkjkv-(WHQagqt?YLkjbxT7 z08ovJq5Urko|qTk9rrpFlW{3|I6)Z=WON7I4%r%bm3AYrJ?eOLcu*>NI`p~P%*)|S z?8vG3=gX6ChrSNH%XyA`y6fewPvgrD{T9{vG#uzG6J0R`YjOoWgZFt1$tTrn)eB{~ z`i%7t2n?BneeXXpc758B%*AQ9BN|APVIgjnbB4|2*bZsJq6quEHI#9|kK%u&eNVfQ zHZ}8L#^v~RVTIw*iN7=5sm+n=0v3}Ar0Jfi!3knFmgQ-VEr;9(H8>_13pLH!Y1Vn5 zBG^GMJ}wfo011Z`Ly#V771*oLyOP#OJ&O4OigK(m0Y+EL_bNVVQuOyUX(QDgFMrK1 zKl_vW>+R2}m4E(ht>`Sf^LtKv@!%D4okn2I0)U|_5WSe=zVx8snC`@h$)Mz`Nn_(x zF$p2lsdK!6xKzwv$Oi}|#^k-mC&8zjG(y=%tEJp02a;dVy+X318R1z0?`a^vHWWoG z?tj|US@)s-Y4hUt4_)`VUv0XI6Q|O#PEY%no9X>Ybm~R_W zZCj&N7|xrcOpBdsPzQXxi35IoN`}v5LJ}?o9BHj_j=1#NMS^mxqK%$JGS;4tzgq@T0ZC{z9;SU3D$G;MT` z1?&13*au}G2pBuHK4@M*5UCE&gN-xplNrQog&NT<*-D9Jh|v|$l|M9D`OLNmwt`&B zdL6Kp+)kNDV~||L0CKQTA+pIjo4>K~b@`+3|S@@8QhQgdvv& z&PaA=J2C8+_*xyp4&0t815Qs=^U!7t(g4P_NnCSk1|}%x}G%U87P`q?CW{z{nrFzSofF* zgAJiA%p_77a)AqP+M(RZJ2FTb`oVq9H4Ga1eh<77f)y-9l;X5$BWw^o>NN|CC&dw# z0LQB4ao6_$$zcsvbF_oMB{thp&{F4NN38n;;09y^<}CSC;NNlRwDgo&5p1f>dpv5$ zwOV&d|IS&0na>=I&W>u1ii|izo9^Wap)>oVW`&&%KFus3Oa~MivSf=zkJS;@OSViC zLcKw-u+!MkSbM+5uXbe3$$5?8m8kUKcvF~;`x{k9m*^t)Xm5V;tea$WPFaKK8)O$>P&%=B@;-;B$ z#kHKJeUsUbyN`7=b}jF_J~Yak#WP4?Mm9+A$r2!erLI!_24$1>hLNTol2-Bu`#yI3 z>PYJO#a$p>s6Jyj<;X(J^eOV2MNbRqOA5(0j_J-!PR@)S7qZb03qNH4&&fu_;9mG0 z2s#;jjQ)$VnEJ#+&FP^!gYC&D^G@bp$=n-L5Co-f^!5cK4YA@&97N~xhKOHNYME_+ zb=++^-+ZcL`QYHFz~v9h1zKPmutDC{__3&cm{s;0b`#d{&U3;NY22$jXWi+XV^}6$HZ;8_pdRzHv;J16u6u6Rsa^vo zlUJ!~bH{nTBo+m86F$WCN2W)Pi+mjUznGNh(ok5?(y+@B`y%RMOA@o=YT}bqucs%* zmqt}3Hs{>PotROV{4J`@Zwxrme#seOeka>BL}6pQGdo!wk{HgL%F=ap} z;WnZgz~!z8i`)Ry{?u4>9S%5nqh+2jb10k_B-kf=Yus;dgZNN4#p4sVM5AI3r+myM z6trhY$NU|3Ci+9{4%TWM3$Vs~L#>rfmA0uhRv$13-%ghW1%|bS*7<)A0LQ#aO^wu& z!+;3gc-49dsc&23^IvyyOT-ygZ#53kyCFekPKbJS(j=Zho}IW2*~_+TnkP_z}Ae z;RjmgJ_R5HzB$iYZI*gNm%hVwAHEM73El<)fLOpIfI??2@FwCik_4NDoJffCxsKWg zv7iWq*Qg}-Jku}DDh=H{-z=4KIGzcle7kCyZk6*nGz%t%JoW5Hz*;|3v$N85$oANr zr8mh=_kL-7(8}wt5Ir`Oy3YZBKrSPWfFsOCt)EgPsSu3gJn5=yQq;QYpSAh*%7!Kl zz2PJdzfgQKEY^$_Q^Zxq>ySSY-q6diNeCXgl0>I8lg1Fg1`*N{$3k-3^3IQYFabRt zIGH&&d&QmAx)leOTw8cye(2oHS+-fNvsV|r%!^E{rsU~&d0O+K!g~Jt0e;_0>mB1jtVB=x=3}F`Uf+wx=y5jtg3FY8Y&9_6JK7923>i(79$Zgr* z8OdF%?FZtaN708V*8+Id4sSYmzqJCm0W*l54SNDu0xUorgMYM{jU?AwoQ7E#Iug{i`dhlI-41Ae$k*3Tt0JftK(VAi>XD8$>%udK0%v>Fl>e~qKaRnJW zMoScTVnP!uJRC`QV5*0^qFo0prORu!->fUJah8vP>4KxTrp+ zJSH{|BHEoTds@e}t9u8By~RtFJ9RS*d-VUAz5)gaj{~*gAHw&991B?MlMWX`h|otM zg7vFvpD^OOrbkU(;>OVE9`A*&MoJCSn@$w%=-G^ z{lt%tN;7M_x~}s6QMx?&H39%)>jbPqhI{=&wxPSdSNkT>n}Ujhk2Ci89l(oGmti2= zWkaNOiSsJ32YZ=vo2u}gPyFfo2W5M0}=bseCIFKTLEY=j=w;5g8yG#Pz5xvHI?&nTedtK-8 z=ABiuN?e~qUmkl6Aksk9py(;EVKm_q4=^$mSZ#?b|Dhea>KH@W$kc$1=%MY;v_nk7Ao=nLk zoIyi9^kEa=h#^#+AWa>{u-A3Y?AX=|819hG7%k9M7|-fO<{&^EXbuR58AGk5_7L9_ z8+|LNTbKhO`olW!nm$2~(NxKF zg2{Zkbhkp!AK#1ZUD^Aj!_qTLz|mfCr9)mrbMezc`aH%<1ItWNco-M}y2Gy!6M>w8 zxrGy8ws=8h@eq5#`wQ-Y*Lh-oSXd+> z;47KsbIUiIUgjS{FJXKO@r!H@e@tKOea^ej$KiF{N>^p6>#QTTpi!;jxzXre0NMrY zwHOpW;y6i-Ago`{zTADVWn*>LkJBYrs)}k@^;5fc^A{+8=~+gU4ewfMxuuz=o@4fb zP4|&f{-ECpEDmdl62+v%e^0JT-kx+nNtE(WdQ74^j7Z~RmO(C|qS5mmd(`i=d#z|- z5USCqnQ-1~4*00~rl_pHl&hB8rDr)!U5*x4&5`o`CGMYqy2-zPmMTj9er;^(?x^nz z6PPrEpgwOR;Q?fhE!r^vy^GXf`>5pLZIM@EK1J>fxQSludhe?U3u8b)T~r4ntrNMBEeFfzZ6zn`vjq^yQr@ zD4w!%#;RF_SJ5gH?EO?9I&AQS&ITp??}9N59Hujxa}XBBSJvbdty-DpX?B1Cp&n&jxw%2@IcqVEB+Tzj67DIrDm$}hGm|;J-yKZuVb|$@22`8tgX&kexq7p@ z%6mR@w{oBK?qVm3Fry{10KsI*PPN^b<;Vl)AeWKV5qnaerDrA8#6L?xq!*#62A|rL<;>LhFy)&L}kTJ4M(wX;js~ZewFAU;u-%~Un%OW zL!?=MK7;{Ne@K|V^P5q$jOnN7meWH6^4ZV1vY;VC;pF3Rmw_U^#&jJBfiFZq$0wuOKynuW=z|!=%tw`CUisY!yvLyVp7Xwd zL3^6J*8!K@a9geY7R=?lFmNMF6!arpm}JdIj6as2GVcA9orR_xYSx9M+K>Q$r2n~q zDE~x%5P2o^rPa&A)K3{++I+n6SwnU)?ZwWg|2z$O)mDaV26n#~Ld$8k*U;~Xbj)Pp zMBFN%)67$sD&*Q%+LgoTCUNb{MpMVTuGd`?xyua)kvQ^a+IP?FiJrA=3Z$rREGJ`S zh9gZJs}BV;p3<8rzX;dS|6m-bZ%A* zp4t&_WSW9)G&)qSz0M8JZda_+;GXC}YQ>`*v&MDBvDy0AP6m8I%s{_FccaH(*yIPS zG{#%+sf4Tket{P~_w*~~HgY}sGx8uX-;ihf3iwA;C|V;JFBssj>x*hEty)_4=a0COw&KO#Q6zaunB}y_*7&du)xAn9g!u;Q>8(;(Y%e8_vFYIGT|qRXqjwfpW+ zmc&b1BEByS;YJRQi2u{0ZTH*(5H#3mK}!z{lBFNbLqNTAiD{>G4PY~DDf$iJ8WHQe zk#>p}Mw*FjK>C620Ixx7u{q>UIx>I~m=<1}uq~l1Jf43fKXSaXC~O8~^69jN!OgTGpA6(Agw`8NUC*2m&Q7-Ey(tXIIvjU2 z^1rCosB0na02sLnYejG%r>raG8^r76yQKRCYXuvm??=CBy)<)1H!1t&SA~rJ-yPpO z@_XvoPkQRv=JlgSr-cH(-;g+Y+$_sRa5voda{JWWr{3QMXA zy+i$ie}K?{HaTy&=7Y9D|3QSKKM;E;)kG+^#b+<65j!8!>S9^s+DYP>9RD_XeQeXR z-aiF}Y9Zh+^ggd0z?r}kP=;%*iEU=taDZLN)7bwoJV=RUwI$wdac2*J=B~@KD2V3R61w(UW z9yFHCU<)$MH~#__coEQ#F8I?XSN10zTxoTeQ{MX}k$!}t%;iLXH z=>H4)6euE*pu;ws$z@1aJ(ET#@FpiD+N%wI+`3Bnk9wMsF}h1sCfLG7v)ek(w4G!R z3qnR>ht*v6Fom~*cb3EMk+A)_Cr8$Z{*v$2G#F}(mHH6PY>icS#gJiWR;=vPwC-uK zH_WS@*!5L{*9M!zfLjUI0iTAYnih{OG1MJ-jXfeO7FwiV{X^zLD5|Sc*rvBlE>)D zrlkgh(!?(x%ose+`P~1KL*@BM+O?Ya#6Wk?V>*3|`2z!pHGoF5z^kozbp zW6y}+Dk3{g7nn0#GT&3gkpRuuAK^rsmQvMy&VSU{AF<3??TG(fBEvfIf!7;8^GTVv7;2kL+~*;k~j4oe!TO#Dbf7eP^rn% zs0^7FkSh>A9%DknoCq5V@Bl_Y4q?t=%Fz2UZ*dS57eqF_)-kl{(l7n7%}KQljR76l zj_f99b4+K|z+}N0)jFFRkwAD)IT5@w>7TLm{LIvIQQVM^{$qS2D0%)d0SW%cX~Di3 z#NU2b7>DUd+#@WO!V4-0DyHY-uX_DPjfX>=-IlkO-IfT0QXMa&iz;R3^a#`1(UT){ z``&gW_B`W5M&$ft;RNMm(<;zqOo7h_@&-y4Yh@fdIW)m5mJpf3VEgV2$cU~;xDXo} z9T(yxWrEh|trF0XdPqJzh8@|IS3BqTo)XumQ^kUM23ss!WuFV33=&$GX*)Hajayx- zVSgbZNF~~e!{Qq8$rvPjIe48LZZ7}`aUoPJqdELrf+KNEEHY{+xS4W*^ptcDFTsuR z`AoDBPIx_c%{AV(&T;1fir@=K$^J;jwZJ0kD6Yxt6a-}s87l@48?q3}Q4}8sxVRC|m zA#EYE!-wOS$G;C@lhVQ4O;A;>@E~`aaM$Qs-3}AYUg7v^2e|%*>QFzhN3qqo0-qk= zRfID5d*CzY70=paE?5Lf2NePLxKr$&q?tBWdUs@pfFyV#f=Cf^iRO_b2({U_omx%w zL40sMx3{~%whEoXFv%qYUvwz7%#n(|&Te6MLD#L`5Y9|~z6_&Em)((IWg&*!|KhXHJO+5@!uQf@X`)~`xre;5!yk^Rg$-r5c z7H*!qZMv@TS}c&cffeQt$IeCEMH#WTi9Z-y1J98kd(DI1gLBbP50{PN?dP)ta~4>k z*75ER26b6QLUVG?I9-%mZk zoq(Kx-hyL$f55B-{xE2y^LPgSS;1D`fQUJ|L_1skUYny5a@*U6n=W?{h88QZ2BxLN zwFD81TZDcJH=;NmlaYaXlBT8o$@mmzj4Y3u5t|mnj>}AI%xTL7+V*H%b!*3`Z=p+X3MosMtgqe zAA?c+NkcUQPX<17+J=*d6}^nc(~b5XAirJNsCMbLy7TaRXfl73F9>Tzz3}QlyL|Az z|MO+jLE+5geL4AsTPAFtx^p?{58j%~%LQu}trSenPrOZ4!UGM7BMS%Xhl@wJss)Y& zcdczXpb0Yv?L=02*1XR!+n@u0|J1KI>pPA$hgSdnQ`q!v_?^OFm<>Haf>3VwPhnkV zhWl&+?KGSoZPf4caFJ6rPevzbeKeO9cG*|$HXsc1(5Ku-j+|kN7LV}B{Hdauie7b> z@`mV_;4<%C-(dUvt^S#r-rSam&BiqJY$`Qo&Qp77De)6x>;=} z`d5e>G|N2S1*joiw^!4tUafuYnQb@*Glh}TX}s>fnLY1&w+*c2Eg$Y17~+1HKh>4% zDzsVVc;Ggu9#)I|fZBqZf!#_-!xxgzgp7{`Cj3qh&7PgzlX*M&VZ0^bL0m_u%x^BL z+S5u}0Wdq_>_pH$co2A%V~&2tD8rK$_8)2*fb}l#deV|m!hbsOu>Gmw@t^l`4|c!q zEf=+~9SoGdaV)_^`RxiWiXp@f#aLowF>#T(q4@y|@pi;IJmv*_7%>5ZN1X?~ zbX5Y&fCV19@M)azo92RgqH3|`xV}hrlk45S zqZ7(G&8JID`de-S;-H7h^V5RWgey};KRLBsXPY8^#Z}U({#QG_ncxvz{Hu<4PxV?! z81>!As0dfYRK~|AOS1mWzL-8P^<~^uzeX2Y^U<)-NdTOHEJCGV`*3-f-H3YdIk(<* z#4a@#82b(XDkt%8bN2N!d-7XXG^RAqZol1L-SV})gL7(RtMHnbrZnohv~IO-^u4l7 z`AsGsDdxTE|J@$e**X{|2v?4AkdZrxdxFzaj^u8hcxV3N<$#6E>E|cY#@Al;K~t%EL0t3CfHtB5*_Cdy?AdDBhVaq zfjN!{q76qolM51u<84XGEX~-T1=9<+<~>ce#012>j5`$^?^jBCL#ia6AuK{_fq%MZ z0bba1)FaYT$w`qvZ^7^#!DT@_4qupUV zTK~DMdPDaU;ZoHp-6V6TquIf?ZF06lRzTJRd%(TWm5_BT>iL)wSRDSZr%BH zedkP5=08zu!$%`_gdmtp>7Tu2Zj7A46Y&prpD_HQ(E_NuE;@=z@8kZG(*{2xx z9LmPL_F+?oS+k>(6Y3L|L@f&mXB`iz4Br!)A38IsM;wnQ{@=ztsAU8pf>zC z8YpaAf-P}4wlI2PbbH8cpDGZ*STb56-y=ec^E6E31;ae;1vOc-KsQYTmn|JW(-+k_ z;z9Pz_;&5f%TG;joJllP za*9Yra|qM?rh4bV8GwIWP{$85R9VfR(vKU6^02nw4;~(A)#Nx9LDypr5!{3XpOv(U z%trww^b^dSz)t#*hsLxQy%L<}-V9g)`UZ zi2-GSu)r$HH29!t(}f}c^}l7CUEgLZ^R2418XXfc7Jpv?gk+8+8r-+z!x%z088A1a`T;WD6VwRWF| zsu^!`+Nb=VqO%OHDp{lGb$9oB$PNg!B4h`alBch`4b z<##GosXpg)_qX?2;Hk9k$olwx36`|mDLcbg@GkKmgv5m!g*bW=;TI+d;`M(9`2ZDB zDftEdI`ogP$PPe%+CO#O=uHCHwo!`b+B?RD=70@mIjkXf zk7$Z%ZtEMalQ|!H_qx-a5jKc%z9HN&LZ4?$0|-v5tUWrCCPnwhq_aPD9`&w9xJZZS zT-H}Xc-W`d&cyt9YUKO~M)+{vQj!PjMyer0{jY(>2hVfG@Kf5-J5V}P^FjYp&og{> z_#k0OIQn1gNc335bBNG>Lph>re9P9R3(Yq=+Iw&H4DNc__eiBcMG)nEApHEl1y-_ zM_A}NVm@nGVaYU@wAq?;pmjOQIL*@JF7f>FEkjpPR--1kT)-FTmZi@X=Y4H|Ylx2nh!FY?J_p-Meowo>cujeT#6fmolw>6SBHE7aAx~z&=q6%1Xp?q+ zXJ+$&#=FT6Qq9q6!Le08?0;7UNtRo$AF-q&0f3nlxHo1hSeZbz3WX^Rc`Uwj=inI zhUD_i#pdG7V&|VpwMRNe$d6bopb+>DL_X>gnIqU1`ceep9AlZ7=V?LYHI%p1zlmhb zbo3ph8T>eK9{w*HhkeKz9mYUP=J9<+_CA7G_$VHfJ7cVI z)XyPfMyF1XoaLECn?7^W&aqpDMr2x&JPGq+>0vgm8?OV8@g;aaxc0fLKxcecO}Es` zj0@e}u0IBgZl`scd%5$jX|(Qd;~U2mp9!)7Duz4^40SEm;eyw^@%%KwX;u-5kHsM1;On5NzUdB=^BLqXtcrAz9>v^6A)+zRFVHsdFDt9p z-a>2p(!=ap+d-4WXjf_WYsls&&IETc;&0|w{vgIy0s)hb%OmX~He=_b#-N%3T4Xb# z)AyIDpzmo@PLrvUySmUL1fzH8G*(k&pHOFQxz9AuWWN5 zc~~P^$zC8@85$oJ6uLgrnY1D)BmPCYIH!K#onec{p+@Z*BpWnq@Zy1v{&lHmljeVOsJ6k(D3Oea^bAOh-8-LGrt>9+C!*g#|d_P?=vwBhu zwt0$`E(y5{#{8l6|&&qYnzGHGKUk@Zv(#s#`S`Ku7{5^8CCd^M#q>U8^Q)5CMZYRSJN8Lp75^IUc;~{e1diIC zyAMLoK|Te}f?q<@Kr6xfQ6ZRkF>J~P%54`7fGi6_Kiw#_qq)Xf6i%n+%p&iu3gckhq&-;>G~bv-iu z0ca^&?Bxt*R({Y5=V zpG#&y435X%x5#4Da45|C+KM-}8QDs3dv(Q*pX>j;Z)A477vtsQG*sIZupd8-N$0I% zLns`|Th=v>nPs9~rsUGsFzQKf(0X9UlK`AOhB1#*Kap|dH*_S8fV$`|G%W4CUcaDn ze7V1zR}o&Vtx;6&sn}7aXpWFK8jX6j?w}rLJYYR!SSVj7r)Zx$9)VAwN+~~CE7?)} zCP5wdwP;wxg(!7Qc-*Dv!Mw}VVEQuhFZjRUBqV{ni9bDpA9;({fLEiR;iIY5LSfAP zr0cOCf;H@3QYt~fIL%DQgOT^(9RE9SBj^Gc3wi}VhkgpXqg;mVb@pW6!+&4#;1mC0sZYaXu|p?YAAMs8w9 zi;9A;hIL2e1$(*oSRnQ#-jSdcAs9v^;NuYK-fCaTH1!2PONussA6w$BVAWJMBU}14 zFKQ#TmbGl_9gVci7^7@&oRb~*Y*n^8=WE|os29G+TWwdl4Zawc-}@J0 zCxH&kTc+TnFyHW5q^*o0!isQ2#GMcr<2gnJ9`79II*Ry*vXiR8)^D7|K-W2BHz7})MK1T|mmJSPn|2SNAHjsz*Ahs8%kY~qdN{Uw^gf6EeL@~jT^dQ-sX^5+30 z5eBLY{{kyRy@#HM(y-fU4;d@S`w4m`F(_TIf-!)p5mXCTFoQ`54mf^&N@++Jc_;oF zl|Y4K4!9y@qxz;OHz;KCR|aJu3v0y=013UNknNzemT4-EyhZw#^n!Yl=CS6f?ExeS z)&gZqXTKxVAj%)=>Ox2$TJ-~BV zqr*KZd$U04FJk^?$D@ve`GNO7tG5}n1aSj-83Z<$O1`(|)FoC`)R(mn=uD7|Gj=%B z-D!>o2E6Kk4BQ%3d9V6v>ztmoJ+E8e)Xi>u)pJFn>AYD#uaPb}2^hMtmN8bhuNYfT z2{7k}+={owT?~csLpT9eB87|cfia*{5DmBh91~zW*w#!}ietOsFWn$ZqJJFxQDClh zv+Sx3@Y-ILG-0BPI8fN@8JArki`=f!CgjwYkxZbcjp+Y~-Nlp^?xokjkL zegjv7VD^E!qw)^E2<-EM5HN#$`8=_%yXhhVH0&GvJT4dtTxV5bxLNp zuBac~l-oMJC8_ChBd)2nr(RjAKBVigTy!MaQpCi~NCk&w(7#|` zBXsC!QaWP;^AhtGKR9S94@}!kH8b;A$&6Gcmpg-b6LHt_QJ&u3uklsaBIQ%fEJLKd z*)~UWNFoP1{OMi8r6VLK#Ls0rfywR-#}h~nkc!gdx@n9cW&Fide_~2#F@FxQN4^+- zKPoX{PUfm~NI01t&0ZYzI1(K83UFIKPD)M+i?)O$apPDL?ghbEekJt>G9FQiu7#t) zuc17!z(vu|kSTlc%}Z);)$q#eiVJ^TEj>_mz2RJ2n(U@~HKGzEv{hPLEgRKtMTcRb z#cFxvJ`8I0Y;@Wo1oR-36Yc?b1tNXVJUc<7u)T!exIMHD{8`*;`e!WFcf-vG^Z z?2bv!hmPawoju6*8?6&N=Jcd?L%MB>e=V1tPRCZyD)3?tRqxf|t;aoIAy09?$WyUf z5KRbFV7I-)zS>>p8e=a9jlzkrX>cxN8{`x6D*3fwT~uAdhlB-D#UduP7^w$=+!q|L zU9%j^w0os(^2v$=ildr6rXtTL+#B9=Q6V>x23)P9h9lgBa%L3k7i$G$1^yBw+O|k~ zu~}d9PsQ%4OZAzJ58XJYuj-A-&j!s`*d}Z(5_c z?ik~Pd3b&<5`laVMImzVA=DFsBTeG;e@OXKqmpaMhq7@4aW_eD&XJ(vkintT!|sP~4QmR1!}HS?V}?LZ0J-i6@F{pZ zViGhHb&Rr%{dX8PWmf;MgMN()o&XzLn{zmRX3$##&3V(d5waP55cY zF!vD_h&r$mGza{{zu4h4=Np!)xAkgTLmPcf!|Q`<;#($&krJkKrZ&%%q2H~RX?N)N z$e*;a8y|K|l6bY_t-tL^!y14@ywb4Ioeub&GlARRTi7|c50tt5$zczo@rk#RM@Ck& z7bDxfwSE(91bQ)T8n=;ifxVYr1WaA6w10%_V~y$I>An<7#31?uEEjskJhmNKyr&?l zF#X%{lAl%Q8dr3lkVR^Km?m3(nElolt`Xk-o`<%xrk%FS4y}EN*N;38uxQt?J_vV+ z76(6#%uk9>hsQ^Ww9L(<0zxSz58x)N>E#q7<~r;f?AN1L*Z7u0C! zQ27DlW?Q!Is$8IOYkQ63O$;r1Jr2Xpkk?sLvV!C_7q+UVM95m`KzFM6hYf;?F_$#_I> z)UK4z?V8bC*La{|WkW{G%N}$uv{CpI^fCHv!5i3z9YwNVsU_O-<4rk=spc~CAh)b`&F0E8NFi z%r^4>rmNv4&V1uQS)lVqv#u_^5z?ja^0s6)IXX7WNycK=Q^a1{7v4ERr_d8hjtxy3 z1^m>f#HA*ueMxcbr~VbYv_QwFWg zE=kReT^;_NW$^dtVhkc{kTu5s%7rmsQxzz;X%-rNo_>JAX}zmPf2KRGv8aXD`K{}p zj(5Fid5Bounb3JdMlz(?d%;E6WCYUn(>z!+QarZjrt-IA8#DyH7W)PZMf`#gKm)y* zmiOu@n)iZ07>PIzcyEf_)-P*uNa2sy1@O@lu;<~iPLDZoq z2WAWynE5MGO8-JyOYI~ZQOUlow!hS|-Ltx2z-%%`2R1fpniOYbjVg+1iHQ$9hwFQm zX)|p+!#QbL&zU}-;)CK!cWJAq7petYw|P#0enSqz2BJ8mx4a$^mrZ2Eu(mQk)56JM z(sgPvXJ$}YxF|{%pPu+DWnyp0gmZ12z=-h%!tx zHKI2DTgJhD6Z;iphxUWU+5{=oUKHECLT~I#ZTME@tQ1vLRy9=={}%mjt{T#uE`4C> z@ho@6TJ!8o*FNVr=LugLGC=lH`NXf-sjwTqz4mA30hT0Ns_m5{+cD8z=ZbRmdOm|2 zp&0Of*f>}`Bo6&AB|u^zg8kXfSZk;mX^JxbW7_ZPfr6p2;H}V5#3)=doyY?P{~LOU zf0EilCb4j$;NYCFK~a|?*M*G{uAn0cY=G;MWfizCfkOR@EvNhV4MXcVwfvgG#=R}q z+AWfKDw=w_cB59Mj+Tw@sIJwQkNwk74QUOP%+qJukNaZa6zow<1H2rOj^9aFaPm38 zl1n_A9+8-k2p({1WZ3Z0{Wiq11y)8Wc?*yj9*;Z?@MMk>^D*z?CsDNkx#&2ilK7rX zBweC!WDla`z^YwyEbpvcwp;3J&E4h4DyUVjs*#QHUHAG7vWtoxy)!$;^)|?=6j|yI zx^w1T{^5wlP`Ce;dzgK&y(9p}YFO#Q%lsF#wYW8aRas|0;(QXghuTi_hin5_)}2xR zhV>7g7ji9nLE4dl;Pj{Lm!MpCqHm`k$Ug;ecm%gesNm}bSAu?r4UKphK2g|4ufS~c zEzx89VD0}j%`BIH8~174hr%zRB}=QWw%ieqRX`L9MYXg`TqjFXZP6BJNy@+FA%MS$ zr+cXVU?>Ls0n41zpjVJmfaAb7KoqNF1LW=cEO!mOi(qEduwK*W(+sS?8J}@;Kwg*E zw%7QdX1OX~_piM>Pzy0Z%PnXwsmvI3|XIXmPuo1usw#T2vf*p(sD++ zz!F?2R55;&CNUNSMMX-JE~F{qkA!aLI&sb3(XI!OTx2RT57mVH8u(%HD#F?dtNtmO zTFfoauEW$fH`1E#Ha6BTZ0^_MtRGz`Y`xp7Rpy(T!O=7-kH_SYZ)4;9&n?|1g+m6J zjt>U-V)={;!V|(~`VZ~|ww<+3m>9Z|a~=0Lb~P2rej3yneJ6f=?4ht1yyx^9`~g@Q zav_nP zJivtiv|Z-cgShS?HktLavDEOddkks{VIpxnX1j|ecS+vKZ_9Q9R@miAjb^LzmiS~} zxBRvCkfjE+id4^Wao#a=$Ysdupn?9OUXbr06zgAZD$=OcDaz5h%?486iH@zRx3*U2 zLq7v@3Gtq;4IdNzH0E90&$zEi=dxA~Xvy{s**c0is&e?f0j~Jiuw9`%;RxnL`cELa zMB?sZv&rR%$^LqPMV&~pGF}q)1rp3t zWu@ExT(9SK)QX47<(ko^Nwy^ORsA+&q+?p(2PTPmLi9njh+D@FVjTwl${=R7V7{Q8 z6+}{FqmXR)R_u80vT%3s9EKEq!3kDRlYHthH(aZ!sqU)@t((-;(tfyWx|pi|VEOJ5 zcq{EB1KpVCXz)GqY_iPO?3R4#875t=jn`xJ7OUM?0a*?5f%DLHOr+>m5Qqn7eWy!_ zjp)A+0bDUR8F=&G3>_KtJR~8=$O$5S!*0Q(pjW~?9;0=m6>n`b9y1K{>?fY#X0o{C z(Uci<3E6-i37P7j>=|t-QDk=9sDDv;wVYLIFR_xd~lJM<9w#e0$QRMCH2a5wMx%1tGxSw zMkgKq(DJV$w(lKaa^BZa)gIe7S8`W;yZ5O~WV+;zcH?Y6^uM%Atq3>Vofp`J_<_6* zrMoLFUfWDpoXhQR#6;0N{AST->O1fuAI;b6IAbYrN5Ov(bu=z5nl%RT3gCk@9J35pb{bK=Vg+Oj#~zYkO1ssb+k`vDVLBZrN1rOdUmY zUH8IBwyd^STVI)f*hjfGJF<;^2ED5WJ{tdwc{pTs+_d|aY{6)ePS}Nlc zafH7?AFI;pH);pVk1HaS+myczXsg#CR~^@tnQrR&x-_j-ZjyXf} zCEMgN@>%jjrq!MUj=82ZQ;y-P9%>wJHn~!v(~!}DR&$23ROK-8oX?OwtYFcRpd*3< ztQ+JFxL?>HL2I}|jE0^1&!%&>$*##hDd;uiEbZ2RRw}4c(0;V_mov_(B2? zbrX^XTZ%K1ZxhF2^%x&;cCaCb!nrUZbQaKx{Aki>7i$XiH%ymJqYO=^9MeV}O9>Za z+Dcj$^?uU6HC0$v0T#?njz~`uw3>K>+0K@+@00iY_UM*saLO~?XWN!_?dqj>q1qbS zxAbZ?Q?0K9W#n5S595}^rG^&qR|p0PMC@_w(VTCT{ZNp_sppO*bhr{CbqQtQMs2b{SMmAoHScbkrr*XehBjFPG z-?%dJZ>EGFBEpA(1R7YrqO#>-{o&?iy$Skk{|U@C+8&WJEKbxfoR$?dgxYUl^gAJw zF2Ps>RW7i*1(E`BxmzvAjsF1mlKYk2eUs!?Gv5|x$#BqMr8GA?2=7O>(H02BY$(ty zWWsrU?2c)nX^AFZ)o4Ik z)>wx)VPFkG%Z6}mOe=9H`Y~oJsvdI1+vT=`@1Yo=p{7pdO=*RM)nx*>AB%hY8&BJ~ z8jr%I4K@B}n`vKUzZ2ji*8?ZsQ9wuaE2&NREG$TfWCk(N!bwp@ap7r?N7%>L<&KE` zOY}q-9aTDFX0XcwwWr8Ii{<|I_q_34* zxJkHfN*&`JO-~w#vO|;*68MQ{p7|fsBIiAy!EG|H(vggxUDH7bNICo+b}exXVJ@Pd zZLo5VoZWlAIk9$nc~7yqq_p(-@5E|+=di9VO%}kz9IyV%a^2Elz3h?0HlWWVvc2PM zRM$q_WBxtfIYtEYn6NZ*Ohjo&PDoei@nFAjBJB>e)w)pMsQ<0}DI2HlXS!wTXW8z% zjM|CX3$28GNBt%Y2AnaE;0lNk3`Pi16;O(QH|R4g2qFQML$6~vjKZjyiQQpK*cj$9 z_H)6p@QaaaB927q!_SDaxiT^om4ZpcyhG2yE<#25q>k}!suyK_sa+%~ZK|xu{x$#O zp*O`}c!2x+aWUz2>%)^z(QnSaE&NdOdqZc6j&J?s+y`2Z!r_lHF9zR_?oI8>ts1#z z#Lf|66Ms){oRmAxI{IyvJR&WWAB~Bf6g@Shj5UOK1&f1D_UJs{L0Ci|@iyfoVHeTC zsH4rqF_8iv&BW5jsDitTdHiW7C+Pj(-#e78@K(2jc;u}6%qWlEJ zeW=uX!*#NZ3542C<6V7@{+qsWC(s3d?Z{Hof{U*B{Hko3>KEZI<`8+7-J2( z%9@Pd1*JHz=pU)i8&^ALSpHLJ6gy0deD859xa6==k)2^*xHTA|`;hAj=n>?PFVYk* z{oLKwqn9r?u6K0XFY2Z0AniHRMAI|PSb%WGGD^%69Y@^)Shzs?Pl}}ycHbe%e)&oz zLOa(~W!$LjlcdNt>kYt?-$N=5L8tJu&j7@d-?>vJ?3w!4NKL==#1nD-@ZGfhqur+5pgLpz<%+fC8$Rn#nr_;}4wT*OtaQ$_ z(6!UV*!qJNLmOtcUaxo7kL-9XRV&Q0aee2z9UbReDjEuE=GIEOu&Ut-t2k4Usq<@I zC}$|IE4OPz7LvnjzvO7}zV-UO2cSd@4XNP)f= zy8=6fe4Exru~CrBg~7=&7vdH~+9RgLr6gX7oWpnVZgX_FLN`&pti@mcp!#T|rFL-D zn8qm`q>iBW8{J_&_KsDJFRJUyu9tHD=qlqY`>OiaZmvtJtSZNq=K#O4x%qL=W<{=6 zV)Q#CpiPLexc9UlEHtZ?FBE10#Hw$CJYgDV2aq7F$>~u`?%yU#4#%bT^-fJbg@8;)j9(Vzy4YV1&7rfcGD{u{I$IifTvD@(<3D?L! z7=WQ9qJPqkG3Havq&v8Sr1yMy#QV6qgCp>`m_|ACOdRI958>IR{MxH)f)uG~R_ZwohTc!QGw~1Q- zV(SWXwynf>3U(4v4&Ce9|sW@4m(yG!gV_RT*X^SB9M~MN#xy=JEGdQcl1h5=^7nn!2hq1V&HD!%%pxJ zl~MCpheVs=z7Ir>g^Y>qzbQ;eNk?9QZ1Ao$y_Qt9V>-4;Q`Om8y>W@LQ$v>Rm3>iz zOpCl_$X4tx)Ct5G>^kZ&S_a_=dIms59_$a zCxW&?k&YiyZ++9BmQ+OIjcf}|J}kmK=C=c9SvFOF2(a7%<` zr+K3C-_F&owVn8`_>LW&Q@c`|7nT!#zW5ba3T*Y;t0j9>TP&x*N3e}JJ7PWbK2aR> zF>F7tm#!wpKuTN*_I1WMuZl+3Qr zw;y(1aorA>FcWCU1%E{-qD6uvd=0_{?e#z`<CGt zN@2xMLdllmhb57vv8CRUSwA+Gu58Bma)nm?M?Fi1ds4< zvLW(Yu%HU?Jr7&8 zuXAqaqi#tDw`FDXj+UmhF&SZXMOL{zD?q} z@+5twE8NGjA5nem{@it3ZZ&K$OflUFhzZk3orDacn3hS)!QKdfe&>KbIHZD(|UUQ;}C`Z$!5X+ApHO54(>kf~Wot|CT+KA7nL=tL{$vac zPt6!IIC0R2UF>yP^$T4f6jIkBK<=l;iNu8YTknAXA-1oHi{k|s#cvDf&Y>Q;wGM9dn?SoGV`-VM8 zs>D|zf55k+3B(dAj&V@ni(HmCBmGn+JuNS#AZbU`UpyFoHZ;QrvMVf4E%z<2%v($) zKqh#WBiv&PJVYHNeIwOkUqKc)JI!fYzT$~OquHSiS7pft^w3*}*U2lU6;J=RrZ}#a z(`0NQHy~U6?L8eL3CCoIT)+tkV~91R-wcRoUHH9-u~7+e3!)aYG00H&Pupxqr5_60 zPn^$Z2F>SZu+PzVQ+LzDX#Gj2DK~_?=xb5$Ly|?kf_&P)_z&c5^gOzm4ktI_J;*l@ zC1N7}F1e8ujjjTnvwIC{)k{fZU!`QYII{g){e(JR>%Q)F-3KH`43iwYt?M**bswF} z{q2zcka`#x*TZ@$oXIs&`%|8C^!!02C-f&Ai86yPx|g}f+pn0qtv{Rt?Iq^p+BXWY zOr||*{|?@WeL}Ed-hq-#e`%JOe|q}@FPscrqHK5Hv7V_N!#ie6Me0qePpUF~ll_lp zyKf}y8P1A*3oilh3}k`AU{Gv6X%yBODMp;?+7VdjS9omrDc z(I$VK7&n4GkeanAbzJJq%pr+R(M8rF+GeymfOB@+GR>wHi9)7e-=UYH#Mm1Mvh$~z?C1x3NSRGtKrCZC<(#90pfW+P9RF%= zNJfd%dyjNXYwPJw?yhK^(LA8@l4O&5mi+-}4QK-FI4vRQQD`(@Kv{^a1MP*P2vC+@ zuvLI&ub~XVc;GbXc=$EM4%8;xXdDeYmCyV*4E&WL ze+LDzK2qqk!vb5>_2g|C73sqh@FCOa4X6da({_|*m4qh2^+`HZjp;S_>N*?uH2&4F zuO{_(PtnVQ&LU1}e%;lUW6j5#FoDrV4OXa?|gY~>0b>ooAb87C2}PbA2Liz|M^6;h*UPQAvR?_bp(B z9kgI@`@@=`Rl>Tc=DXRKW z^NGG7RlMey1q@kFN@1_(&t+c6=U{FS_{dStrPluT6vI?0q-UtKM1RNf%#I7-aUIl0 zV2?xN=#{q~ ztasF58vR|DBo|bBtdYJP=sC^0a%XMy}x6E4cyoeIut{3bM85m`X z*TrNB`q8Qx)!aj@rR1@ssnkYlEol;I9AhHydeDIIwD4P^NZ#C_>)|U!YQ_QLOl&0* z?|o|h;rbWagM-ua1=V3^;znnb4Af=F z%J7e<8(8CnAra>ixydUdc2KK)FO)#Lxa(%i;o1qcvKmR{!1_~Np?zCqm$d?;&HSIf zM)S_lY)V(b#9L&~HD~qjO;Lt3${|va+@@V*651ZPFb=Zep7y!3hGdU8n4XohJi9#g ze#A(6FC66Qu+#LXRf!srb&m&b=jpa+dMqq&5NItd4%rFc0Dc1g2F1Z1!FYb2RjAm} zmRk9uePA9dPw#rw zs;+CQe9*XBk3%((LHK_$dtpjQ6TY6kj&p;>rG%n3!y8axOWAj69eoJae(=Tg8U zA}3v%wq*Lj$;vUCM*bO-G|D{~mvSU*b;zqIW5U?fYpKFmSj2?TUiM7Xco5Z}Zh0iz zA56!@YMr1uod&fX!tJpo$` zObwa{Ur`1q)@L?DfKX!e?yO7M7m_rQj+oa`?|BY-1?P-VCA=nV2%R1GZeagOj@eu1ET6VvaB0j# zwgPq7+N*q`oS_hPm9{8bb#2a$LG5uZGrHJ{HZ@I})5ntC2iPeCRY4{PXgoaBf7iZU z=TZbIzX3f6t@;a)uKJDp%>Kz=DdclM5)KAF*$I}1o|Eu8SetKx_W@)vI+H@;1hFmT zL9h;clyZ!Cns`EIVcqwtn3}tdOS*5UALu7&<8?Sgvtfe%qeFsjp(T^@(PglwUZ&}} zVn92yy1epz^{~p;I$qxi>sMeh%mqn7j}htQ99j={26QV@fct^V#+<=jBxIugbKliP zX`b1R1j3*S)Fr|{yqIwSa3=qFJ+7f1btnF+fNOMqoSPeUen$C^H< zE&5mPQ1}`=f=XnAx&P2G=a=EX z>dVJhU8x__`muMmg0H6OOtyz!3TOcA28`p$u_DcjG~cAF)lVJm0SYKDu-h;4FM-(s zF58;0dHt$KmyhISAI)q^JrXJ4f8-a7qC^w8Z}I8A7UwqSCdVtQSwBn$?c*wLnvMZB zK$LH=TW2m%^omDFC#X&um)Qy&%RC>TgMl6tGDw$jCU%(MEOR|GpTrJ~Grur1-0Lt? z1f!$RNBhG8ejV*RMa=%j?-6Rl*>Tg8eQ-eC7E_db6*q!~2Ian)38{?GQ+1~I|4%cT3;40XFI-;@{sxlug!$K+qj zDqb}UJJZD^ZKv;=qbME-e<)4fi=O*!9) z^R9DXTYFRrK0?8HKM7$>22+T zYF5>$>bAx?9S8c(N-M>bPFdIF9(|{;^;_%CR&H}tYgXs$_Wt$RRr4z-<$=1%ZR~bv zqqzQ9J4%MpEVcv(%27?&93YuHozWhyO3xo~I%{3>tpry5naKY9m&~oiHU6DCoMe!M zrYm#ZcKk9y+-R(wc9umK-iV%;d1^%1ctBe_s4qP+3deg-e@4wEUP3>FD`7XGM-Yp! zQK%v~14Y8oX|9N!nb@Hdr;z9MpL2ZLq)FtF6EbJV^#Ig>r9s;`TR2O(WZG`*LHJ;A zj=s6~W|O&TV>d#s(rnfsr0<$5ikE$O_xjqK`1jn;ncve(MK)S*F2PYd&>HX6up`@!!iRP?om#*iu~W*V#{jFJ;xj0BIJMcslnK&Wie->SBG@7 zmXOwyFHz0Jaky`ki_ArWRSCp?Yx@;vM-Pn5N=pulbw{v6H-(>xEQ`aWz0UNdu1I~7 z6_O!L`73QQcKJflP| z?tIp~pmA}vv$U@Q+>lYfwR%%6ymoYTU-N7k$aLQGH*6606Qzn};~Lp%q`SzCpee2n z8$%o1#QW@c(ftlxIPGg$Vc_Gl_i=@kvPn(H+Fo|k=+%_OA&;2@k zvVyP5Rrxx9x9wLQ@$ymMDDC{uk@FIErqrj!C2}H}A|z!iBptYaOtSrSf5a9EUq)5N z56r9{_HI<}kcnBvv2M;haFl#w^VY^AHTS-*dJcZ@>}J}f7gy~!{=O0M99z1!?WKb4 zya(Tbx{uvJea;=tO=ZT@JE?h?8Ymb!fl(l$auJkZ*f7<#hEsJmfMItB6UtpIs*SXy zGPCaWThNc$f8gLLsq4fM%t+M3<{U%LN?^n09eO}w+?lQhyf zF|gN*@>f81`2&sw-EwJRXK!uquO$VOK81a2tK`+pDGmJcRnBOeExxMmGhMOsVGB97 z@QAR`ki(*t>~6v`?{dQnU8#DrbgN{8Or^PN$+p>SN=LW17WIHB38f{M403b#6XCN`Xo)jIE7(Qoqh@Q5 zqj_mvLsewWrVd(Pk@8#MJ#iV_9T1`-8p+J>jyH zDFYr4Hjn-_`St9Cye)Hc<^;|9HM%}+NyH+7fJG$U^pxvQJ03&RpwB?BJo&a+R*n6) znJJBJsc*gCkyf8kHnW0OzoX;t-tAq6&hdRuRExDOisJ4)tw-wBWq*ENE!NZ}wmzxW z{u)z)DX**<()hl%dwa36c2jx@Nl;IeC^>da*XmSPdRTs}uee z`d>_8DyZM~w0A*#+$%`3_mqDjEEKjIy@S$ws{aT`hR2>Wng9F6#hy(4Twj3Mr9)IRPT{36R>nyMDSBGe}H6L%Aryk?l1zL&xgQJn( z2i=NE4_4EWsNaw>R0Y5rP%`iHUa-Vi7pwyZVZI8Q5P{?Rp~s!C{ChzA?Z;)sU4D6? z=8LMp5sVEZducez7gP*r2k2Bl;USr~X}@U;RWNCS0;Bq*2AeMWJ$M>7GyFl^x)`RQ zivEn!h&kx_su6X+?>(tHs^4cv_+4-?=>caCD~02TS(dpm3zOnbSP?#uVucX=qkS*k zGhBSK$kBDTisRbbQ5E>2tAH<#hc8J`XpLrt-SuMrYR!jT;*_XKdb) zDSrq~ z3)}#sUF}-E#H8MCf9-tcaNA_6vweSL0~9YzQaBiwhzll3s7cK9(2I#_3Gc%;@m}$< zf*ZU{j*nr+J_6D0xw;^Ao$-hp1{J|r-~s3z)Lud!__ynhajQI3vQI;{23Z)2w$6#| z7$pM+65u2Bp%@WUxS7++aPrrNtpH4!MD$U31K`PAi}FKuc}M!l0CD0y#)hjR{3LB6 z%W;3O0?I{N2aQE<`X57Q{m|svfZ=r~D;8|P=S^V|N$&*~dC|cXzkgfr=s^ z-5q1y-Tmz!;0IRE``q_^UBpSa`Q$6KZF z|Ms=@jTF&!JFN_}%RFFrz@E_$29)`|K^xG!d<-%Lmgd`*KXNvh2Xw1+QZvNlue+(| z82)D-@LYm4c$0KM30pB+=hb|YyX83XGrmOuvNi(h5g6z%Q>Sc=e2ltE^^;drcfXAH z<<7_8FFikBmCvsDSvBBWUHSFk6`w3*bF8k?w7^vkiUqs8MB^w$kFw7A$T`9D33>%@ zAo+se2us%b0(im0p^4dl>W=H;jFO&Uzv8iv6I1Hphl4ySgLW`p^ab&BP>Bhu{!j)j1M zCmd$eKkCI&h%l}9KuvGy;ZLO{Lmx>W$X>qv`m^$6gR*O;bgv6XT*kaXnTKERKZ(18 zdo0Ku@-oQD+{>KB{=+`N2qQnhjfNndc!$g}UOz-}N^w9wK^7(-?fa`?qK}G7{dwz7 z=Vf0{aDnWWuvC~OxuF~_3GKeo@TID}p4w{^>ooH%#pYh~T(3WVBikFcJlq)dU(BSa zh~QRwuHS#Chrlg>DUfx*V#`L2N_#>(M|;b00nvna(vF0b#gs%`4<5>t;PG%TZYh2@ zsM1g%yxP6EwY&LC$1>g%;Woi+sovP<`VGq>RNz}-Hy|@mZ2WzEFv0*hXuD!up;k+q z#MOg~+W)lPZGYIh#P|Ci)Bay=n9n+%*YibWG5l*MJ1+xs;k}rLI1BbM`WK;^~dk@AHizM@K&B}5C?NEXQ-D0irO zjdEXG9cujI>TsX6ce-zQPkB=jV`wLWw}i9?FAJ&;qOzX*=TnM^%PLe@+c@#~L*w2OgyxeEV`+eu+bkIZa75M*vO6x=eN3D?tN$OQb z?Z4Vw;}`dS5X-UAWOR-IruptiMu6NPq*v)=Im5jH;6u>W4z5_(URC?5=6B<*mhjF8 zePga4P2-D=r|AQ^z^ave1ASAz-YH=)4czk4%POJkvaJUv`Nw@Bc@#+DBH{ ztj{&JnMde0N%IE|bPC$IEyRYL8cJ1q<(S&vop@27@u$ZMA4&9Qyyc$u(P#cQape3r z3lTFMW1r`oirdR&vtQ9C5z;V7=r>!QS|d5nw@GHGBMlk$cJFiW25hN+8{baI8;3{}5q6j%3wF+~Z zIOva{Po-8+S5xZ9GpS5!4P!$%C~j-a-MDY5<(d0ah~f8GEtHewSY}A@z0lggV9cPS z)$+(3tK#z`e5OZcdFq#YAIiT?`6H?Rw?^C`ZS(Z?O2?RyP&cJG;4p0_3T$>>12o%o@T;+zt2y1Rfm- zw?ejhKl)rOo#yRYmzfQ?0sD%6LVg$!5TZ;tkYgBuAGtnnTFS7fn}J%&E%-R=F!db8 z9EpEFziV`#pD0{$)r55Q0D_PZ|BXRYxUCVx6Q-tk;${T-QFHKU3q44cs* z20y@!AP=QuSvvnycqvMNtV4s5nZQ%F35MmS3l5Bv=1qX9VQ+y$T^ns592b4m7J^Y| z?y&AOnYAeSEcq`T)AH372F!pYVmM#w(NORsdFE<}`T=Up~NLT=lPsyUp!ghii zJv?Wj^{eB(M+vAzJ|Z8W1d#HmcW9T$_egUI#Rw003kV9R1_XL0SPQgwm4UJ+>S7DV zxKt((r1v;l?9FYhJK7F)`S<+j{U!|4?{f%kOv6u$0eYKJ7P~AhEY~=0*z~1yLuTWL zZQx@SW#u$y%4{wMpvjf%l+4p(kMK{YF#f__bjMVJ6T4KpL0@zYTi? z-tQ__A%%amecsEc(KrhjrY)A|Xm>isLr)<`L4J9r+WbwC*0-QV$Z4?W;0M48yVA74 zT&Vp=Tq#>)EOb49uO;7O-C_~_qe)k=+fkKRp^pS@CrrSV63D(2In!BdXB!~WX5nU` zQL0s+)+ZQ8n{Hb#c~IbEutwxA)J3eDJb_F{cY>e0Us!gly7)Qm>l?SVD*9siBnepc zO3yZ2GfXjUbT5Ms;EVm)foUN_!zP9L1)2ivbSi-jEAifT$(_aa4el7=2UoB8foag0 z4Zldf!r30WDR3b*5J!b>bAC~WcZbv;tKI*1d)1P^+A3^SSYuJoR#Cjp4CG^B1U`8h z;UjpOnkczl)OM~{$&ZpHTMmKKQSXTHwEUptxCtpW>9`@^#+{uN zzF5Be`$F{Oc_YURQKznqqeuS^E+)JHeA8X;QB`lNx>+AtQ&^GE_*-~G;S}8(nA}s+ zvA%s{=j8TbZEN~p$numEwLSK8Zn}>=#kB5lPVj-L2B1fPZJs%HDCq&wA?4ib%o*fsq#5KmQVvm0Afom|YJuC_$6fn8N1d(K{Wh>;jE|5Jrhg+m z($-mC{+{x3*{iK@_kADU)Gc_Z+3ntjL(;fxM0D$roWj;=L#Blk<&I9s%nt7$UrW|vFyNu$u+wUhwL0Pl<*fImysuk zP0T{(Z{|AAZT1)cQPf&y3HNc#fALWfp=>`&2S)APqW<0A+tJ;%w%gLVw_{b;kRH<@ zQ}jf#NV&xbvBvwh={(yd56m;#W_8VhtwSw=1ey7Am}t6am9$NDQa{Y?#eMb@VMk#; zl1H(+*p*B*^F`ptsJ?_P;d5CJ7#V(I*cgBfcpCzPUI31CqV2KHIe>WZDliwCi~*9* zFlR9O{M5dbCYV5nCA-tWaY!2|)0$>jp@GWhh&6+xUWbB{T$sNNF zS8yj#osdDxZT&w6xY1`OKq@H|Y7L2wZAE)~&3qZSJ|aE*d+>$;6@4@{ny>(PLoZj3S2RgGd7)hn-Vx1QyB3fH zi^kLFmx5++#|IoI1ON=?Eae zMA!KEirs!QKs+bi)T;h2KQ2DkKddF7+E(M&@S!2Dg7%g9mGd{J<3N9@h^PKxVS7qp zD0C+oAGj;-Z@M9UTH4mUsiRs8zGfPd0>THGaei0vPCpl;KQNbd$Ny%~jFgyymm@A^ zUXHmPKAKZOXn^E;K-Qm1LHF^>m0ty4IHe6`zkaj-WY?)X{d=DF|CYi{D`20QLm~>J zqPYX~GL(9ao zIW_6eV$KCJC}unny#R|N7%>~%N7OF|k9DXzw+=#Oc^a!B+x!;v58)qyd$k}c%#>r-?eYhyL=8Zw)Qw7lwEE`Dje=Qg4*&~62POr1SyX`y{=aQ@GpX~41zL6t-#G@B@*?W5^Bu;h~|)^_kJ>6SEKJ{X3)}H$LrR%=^gja7;*0 z5Z8YpZVNgL83#mKWR|<$tuQzC7DdcC8>`Mv%b!qCH)`4N_1Qn-&a&DGGJGy_qvN9n zE%fhbX!_K2sPTMbT+6i1hkXTnh9b;*7)r(l5+>5(f_8*Sf+r9fTysqeEqI3m(nSO_ zsLZFd-~O_oThTSifj(E1Hhbon-%~78$4u~!49_&jCx(QQi@|)OQyAN1DO*{(;m@kt zO-7 ziCKZvyf@gaMC)`{C<2VJ;6{>|)Fj5(fF$O4&Zw|8p&x_pu{Y6A5FF6o_KR|1_x+}y z4dd&{wGs8pJ5KhK20jd^x^vsD16QU0$?qt`^_}jsFg@xh;t*h)b-P+BIwaIeYDK$* zK*DP#sZ5<3_D3P&bSVU%-U$1vjN#2n>X$O1&MM`Br_>rpKh_x6@{&yh^hr<>iL zkw63Z66O}AjMEgkGBm<}H*qQ97oiHHhmCRlHbiO18j6g&%)fkVxn}Ef(+S5JZxld_ zct9#(9SnXKJ~ZJ?YDR2bJj z!Ey=o3X7%@S(O3V0qZy+L2Y5zqO+pj1l=GHfxB!Qlzu9(c2KoUaaA?X5DviL?o$Wo zd+29b?}I;uWk$@7W2Rn62PF-Ut_bw_ks*1G?H0cIyYZ5#)GXKCS6ovX&FNkMQuGhcOyG&obm%&^o(Dt7j z=Cy!e@L2>NDHAmndL3E|jJEwyzmhH0QcWWacZ>}C2k2fxF6jXFD_8)01i1lx=c9$J zb}jR62NVHd?m^2{V}S97#w7>>C8V*0f00{&ov!PaZz?pewAUk;p=ejt%EOh@j7O|m^B1jF`@ve~-2?yN zSHPMOc|A!T%jIH&7K9Ku8Q5=*kGdPmZQ`YU?$$ZAE2}0}1=YN1OAxL!c7m?pHq*z1 z9Et5sACX;{2nt^v9u_!?gg}ji0YEa_21#&dQe$%C-`2sV(xyj!f21>%IPDbU4>Q*C z#8nGRBZ%n_n5+Er$Un%sfWnAaUza&E{cHv)Gb{B-+_tF0F%?M#(R%u7UsCrE`US z07=IKzxy47Gdy_5BHg#%ixoZJ27dkX$NMezRsNk-S2G?wD|!Dh=4Wxeqd!429uP&o z9hIKpmvuICZ|8-h_Lq=*l$9a+*b6DW!t8zq*LMvhKqyluVjKsZZ0pTHvIW=tM>K1|>_YioB+2XwnF?ieTw z6${GHXY$$I)b6VO0|R$?Z4#y$sC}nBt6U~p&Wq`hbe|h=O1;L#-hbf<*itHzK9qa~ zHwL?$SVL0dANXkM6QL_`VA8+jA`%1l5@A8CgnxDaYiu&jv#LF{s5ite>RnC~w}`cv ztRo;0Z@m2uw58NM#47Qmz@Fh1EHPb} zE!(ZKDvzq(=<5tC<@&xIZOLuNd-LT5o^{mck-}8n5b2O7Y4ekn$sePiGruFwx*k~L zbWPd}{RhKPElL#JJF?Fz_)jy}8R!afZ2)bAhC@Rk81E)asN%ZtoDe8io5#6kgM0!p zVgV;1Cc{TXj)>S5eKR7KbrdyVAEv#o!)dzJ!^|_?M(7hlAYmHv6XqlBSMWeICV?3L zCgKj~KIuOEC?pNA$bQGY4$=pEjz~uaBb%_Jhzvh0`j{usuwOgExXZ#YAe7l+f02(N zu8_%J%f?GzsDQdo^EO}&ehRsQyo@*zy9c=ea>otT7V;-{uCLcs>*@~HMpXq=j<3-F zecDcu3^#srukpEm-5)T3t7_;Si5mrzn$0F95ZGUjxy$)4D^VhL+b= z#J~Bq>uQ(OZ){%Hv4Gd_BfzZ^D5XPmGweW6Ch90|1mO|s1ZlFLl`@1Rz%GC<1J{7Q zAl8uD8Fa>G4n6cwL~_K%Ff(^7XFVGe3=PU5e@D$iq{GW$1n?BZciIxx2y!MKOO*P~ zSHn4x%ybOGd&8A%4pzRC%;s13n|q>rGQ>t>r7h5obe^}bG4L%JU=rdw@*VDu?{4!9 zx)#Yrh2oI-4a5+it7ac*KKcsKZd~ZQVGi%S-!AUb_pm$o?V0VS&Y>Mgo0rtYRj4ap zRex;~^Jb{mSj&J-@aL#R%reAe;BUYS?^^du@JVzpeiF4lSQoM`(2qNl>k5cwVc6%7%#JAF{S%cDepjqz=sODQ%}U>}nX>V(i{LNEJ6K{k5k}Kb$&H zFKjnVh&o0L#+87zju~1Q|DT@R?pK|y?I*e}4%`vCrLSaUS+ul3m>~(*o--L;YY?AE zO9LKoz1+D$!JHKKDmIGwo_ZSn8lZMPv5}4IbREjMvOnqq<2%O<;A%uJHi1B;S%Pz7 zBXTuk8zxSk2ri(eOpA7N&XJc8bjS$LV*4HI2~)nlR+}V)h#%|afKTZ4ep#3(;Ai&_ z8`B(ax7atEGAvMgv2m*0B0sIEH!*B?ZJl0#--LkG^i}>>830l(Mvgv=WfSA6X4)V8 zOwe}gIm2_)UDHq5h4$#G@^b3$KjpuF{Vo0Vm0xNsTUPa`tymOppgTdpo2V^hHZz|+ zmHw9KN96g3QiqcZ$%ha@_OIAe$~*v*0#3R_1!o5Kt+VB-ESMGi@Q8HG_ZjQBbtfh$Tfryhz4+h%W4oP zp36WIzWk%2mh1R>u$O)lbA7KInII&V>MG&Of4*$K7K}?EdEU>I4CdRf&V>n zGD2lR$_7OL<74}jeN_G#)nmtWus=ZRasV{2t%%7!KGJocSz6`6ShUL9g77|cOIwwo zQrbF|w~^l}$d$$Dg?6z=3>%Ma!4vT>{0!vv)K4r!uzw(v)<}4QKTKGSEOQhpFY|ca zk%IxMLDOYNk-gd!W2=E~!3;-lKx9C-K=jy?>@|_9_@&A7V&shPFq?I(Ld#p z+>_g_KOkRlUK)*FNt@#Ljd;y(4@L!fO6**8j0$2u9yGr-`^A1(c4f`ThjcY(<9h! zn}Iz=-yD29COg$Lq%-eyvLPrJ-v*iLf*WEaE&cIbcY8sCQ8IyVwcl^(wAvl_9Q&;< zv)f{`gPe8XL`*)m3)PCr$0*>pp~K)yAj!@Iy-Rjvu$ae_^;^Drb>4ekEowUT82u@w zkKD;h43$Lt$Nfy2pRzRlab{5b0%k5WMRT?5XTy>f|E??jCkH$GPjsj9j;iOGC+M#! zXRAdPwqvcGXTR$xG%XQUHl3$!)Jl#0YD%&axHNO)kyj6 zOJtJ3G|*cVmwr3=Q^03(AE6BYl=zgfFY;Q(`+V`x_}qP&domtmyow)SKOxcmUXXP7 zbI1%xpmUn`nW9(0NZ{a@eVmJ5wlO$jZJduB=Rn1kJEfP?TOq{9pfjYjmt(J}F`0?!reG95s* zUA}&BLC=Q%HX&NdR#?^ZwDXK#oM%8R;BW7C@M6?VUkcrCgZS1zF8eigrs$OrBblM9 z)@PdEfnE?y{b?wi25%`Xxi0)3#3lY&M-yP9j=7&jdqBz5U4OWtHK74bZ_qSJ&8$2 zsY3NVW}cG_W%<1ejEu=ly`7=YrH+LcwTw;7dzcQ1`5CGSDxw4ZrV?^|9gTMgHzmeL z`oaWFryjtSX4AeDO2+SWT&`8FL=5Mc4V3 zc>%b8v84zP;Fx2Sv0JvNU(rQwyi|VqM_BpxT7KiJ)@6ey4O=_}xSdK0sAFo`>%(fp z9|Vu!TBD1i^MVkR4#FHZLbf)eAt5!!9c&^FASICN z#{Gi5J%{QGzc#+B|Iq&NR4Kb=XIGu@m|ATsfV`$$;7$x1jJS{(oGHp28uvfeaA<*g zOxL!*f4;x|JnviN@11`yHDiURTp@TmvoInc4L)r1gz}ls=WLq0Vcyc&H^w)l!Po@! zHP;i3Q5qtu)%BPAsnrjXU$OD68nB-RfF%$_}YTu#qQ+`ve zk%~kD!Ald9Ft5e|hgGhW!j$ZT-R4fGONVSZ#XPXbIPAUJW z$0^G6C7|IbG~yug2{r|H9OFW5LYLqZ@gQtB_6=&JZ$XDe7*P*#=W$0c|3iO=0$g&J z%}&w%w&%icgQU(t_c9ZJAKhOjsNydfDDEKrS^o8K+3woBHb(co{uuthJWlJJhDmLU zJNC5x*M72(r~C|^#GD=YgT0=u3p^Winj0U+j1G@q7V|l{mDb=_?!SvWCv+Qo2YYf< zVmc-N(b(4$M~rApn;g3^{1m&3HXNq~l$g8B7-PNajc9kz(I$BPnzn%cF~VEoco9PQ zLky4(ku4L;gjl||uc>2k&kpfHrN=nV*Nr%ah{rbt{*CMi8xu4xu$>zjJ}3HXY-Pg6 z)X%A9u_0j#LSY;w^*3QW>Nxnkr`>Vh{MD4GlS%IQGL=D9rY6+LG9NY!)!kQDNbPM;xH~q8h4se-OK% zYvJepZc#=e?|WcYtKp2U%N%QcWnN`!vwm^b0UIH=>?Ua??-&2h;G2GMZ&q)Mc)L{q zdI((Rec(I4c+>tm#Ank9#L)?xY#>&aJmenUufN8#_KNnb{moUkH*{f zhmcBAGOH`_A=es0@^P&nVB?@CV0~yftjc-PM;j!|&xv~nzIUrTcDAN=9utNs)09?u zrF^l{Uv83hYC4R$THl?lrQLSH26rv?u${wPUJx7D;$Gw2?mF*T?Pa+U_8UIW$$MWy zpoITLuO*N7C(>@v_EPuLV>#uVuZ$z~5%g=!oZy||dqU8GeStq%D{0yO8yHE{-9$D< z=VKJ~f<8Fc8CxX_y9@*GjcUM2z*_(h91hXL4nT*2!ay^@0w2fY61dwFXb-X8G_BWD ze667?@@cX{Ny)&{zCE%BMu4&2LUJtxhC!FWA3;w+8Jm7^kH8k zPR9rn&L+1e`$YvX4aE6)0-l2IMb@Au!qwYX^P zXsjIHLe9aRuss*=9o*7)yB*gm@6O~cl9Mbmz`KYBc1bXay_tT%F9{(7#9NPQ-^gQy zT>ebqWFEHtZEJmZ+~9mA%5X&&rhce3=to%J!Y7k0?AXZClnYr$hJ@rT$U&!FNN!Hf zi8F<&SWa>X?11TvsI&V-BfmDQ(b);;zSKWgcH6q%Q)uflMwo9{@w$zY-Gc>#@P29A zkA|+Mg)P*M5pKJqdv!2;S|U?ca?3QJUW7omipmClO_cd3dvlCQ0Uyy2va1T*00ldn<41OrR}C;|omT3z+-5dgN+ zVcBM{@XWHWGQ~NSNHXpKewSYzAk$&X)}zO?`|lAF&;ogRLG z!6zJn=Yxv8yDZD4SG#XC1vakezArDam%x|$v6!=h6~XgpA&7Oh0U@Ef;KS1w*PpgM zp7{v*O!{WvwdGaghjnG}x}09L{D8F)8Fw=giONUavqRf z=={_$vQqfX^ReIy;it9cZ;QQccn?*YW~lWpCQRYniMkVC6?-8vKa{}6Q!Zma!~a0V zV1t`%Dprbp%q(Z;i=N57<2qoiOL}Gw{uOS}!~l+CLAdisKIow>K!q0V;;DPS_T80J zjo*xKv_1N5#(TOP^JnaA?yBg?aX%8w@#ffv5ox~EgW-Ri5Q@Hv7zfy z)x=6t1a1bD?=)M;_U)j{s0{26yo_=wa8Jy$)P*^iVZ{8r)D^KI;X=j~C|FMu?-57J zIf`4V3z~P@pJtfrHeeOF0m<>X$tWy_k4=q_tYdZH&p_dxpRN|yJsU;6O^g!m5dDtX@<8Ck$@dZkdtRKW(Uf+KSIJo=Z4kmxyc7365%wNnAQm(RH|` zuerPDuHv~xV6S%*;So3%R!5jgc|$9pP4Z_@)f8WzNjpqh55MhtXyvSDawemj9Q|SkWZ>-+L*2Q$%$myT;dOcS zsK3k_Y3E7)3E5b!!fbQy1MP+{MeIjj!p_H2k$<2Hd?06eq&*Rlbt3me(!Ai~^wZRF z)L3dL?uhr4{+wi6|Igm&K6l^u-j}>K*?Zj^ON3*lqtGm~lz3ZVvwht9PS6lw6fgpu z4cmilrBCPFW2TYH388o>;Su=<=@M!_pvCdkqPP74WWk!z+i+izFYJFLrJZ9N_SNri z$><^RehpxINA!pG_4kqn2NbzlyZMfX3?GUolfx)K2>`%S9Yr=t9LyIBKFQZ=3$$(8 z4#Py_J;NeB!n6f=nRGZfI&L7{nZ7KAnZ6~5oJokQ3nOyHf#2!*)Q!{%jPGM7T;8_( z@8X}LpCy&E>qoc22Ii?UTy6rNi;cUP7M)8R<{2F~nxEqeeS%GMOi|wzF?%Xo^BOla zc$?3({%x)4xIbW3Z3Tk;*Tmc$(mcMQ=wK122s8;hc3#eo$aeZ2j4vm!9@V5uHu7t` zskP+tMOAN_cD8+Nz1TXmbJ^f7?PbqT$P@4&=pPTv+^Brc>uEhxd#Ndw_d@nr#!+1~ zZq@5GmHI=rU{4J=3w?rdBIHzfNKAIhw;}Wq@L{Nov+?VLw~{@?C8Ud_6rzL}hZzmz z*(Fw+QL20-Makk+W(yWNl)ftBY?L=*MtA|&%51`}vKTPAie zc;)I#_5yDOcoFm!Y&>ibiN=s|$FO-YC-4RM3>t%23?4#sw2SK%!9{n+og5x57q@x*NM3=$JZL5zk+Vj}Uc(Eos2Kn5fo zBg4$c5A%P|{TcZ;vMnk#mK{?a@xRb{AuED;0aCxOph#_T|G}2DreDpZx?{DcJB~`0 z>qD(v=U2~5z)sL6uo_hFY|@X=uuVnQdb7~7&9Yj96CM#Pkhf?r8kc($aLIlXh$%F5 zKooN&?E|0D83W01z zD^Xt{2LWk-)1Ir=2IFsYpgG$pvNM7AfpAwGNQ+yA;dm=7zYH3a&OHn|7JZjGFXUVt zGd?tCY4o9}u^}6nB9gB#4N`jK?pBZh7f5@}ppiAuL7hhAkYq@&3EKL1bctK>bwTA@ zN`L(XSNyFyP(7oqS74ULiS~&;O2eddS()KE;5`zLdVrkZ^E5rtG$>c7cUg*oP1vY_ z`EjY~k=c9mCg*P-az3**`9@M~#*Ja1QHw@rjrl&dui#ly8Rsw21wUq=DSyL%D#((2 zR&10T5 z)U-jg+H?{2pa1D#NBG5<-EoOwS**yw;JD{WkD~WReu{AWUgcLfCwz+Su%<_4lwT8T z7LQbZ3*OMn0i4|VPf19*8J$5 z>Cf^>qoXI>ns|KN^1Kz%7wAKfyDXjJ4c(N+=9&>z!GA7Pff~Pbhw|14K8cP?GL)O_ zoj3~XVc_C``>czBFS$*je$i?1$0Is|{s!))`nfg?0&D1{Yd>xIHnnPU`{IFIQJxB8 z)VSi|uSwe(6qYV1hs$An#U6((hDJg{JTg28 z_m-=w_0oHCwouqsR`;i^WiVajk%#Ly*_Jx^u36rzke#qGUbQvNvcq}RJ=(n;T1?zS z9)X<>{{%GxZ`r?^3XS!q)5aRZdE-V)k)=Z4F7M?RbY(Z8Y99RkU5jlJbx!u(Ty5o8+ke~#Wa z{BCMw$S#_U@E1D?{XgVOr~>o?knBo!lOgL-ZGJ;og@L;Q?93|00~(Mx5_b^y3H<@y zh`0a`^p107gRfyah`WiWF;5{k0dK%V!4|**KnvIa+6OMctoJL!UV@X5E3jLUW#AoP z2?~qbh@FAzKwre5;b8A)`)%!c!NP$p;xB58ndqA2JG+HBiSFgz1pqQI-shG*<|7=5 zJn618KD*f_=S#hL{~*fqebz>F`Gi)arXHuaiPu$l9Fy%{q^#7zlN2q`!?tM zgzBGd*`2(;^`d=>U#c6@!tT-aHyh`6t?$$KHuY5rK%zlmpGd99*X=RiaZ#WSqKa9` zxvm zU!{=QiV$?FGpHi!d7>(AHfOotGYkuI+F5PBt(W^~=Br&79G&I?Q?X+tOia8*dC!ar zZAwICoyohNV@mswbSCye=#s!goSAewt`GXJ^QLi|4x?k4jyWH@yX+8Sqkf{cR=>-L zP#))J@x}^L2B)?)RW|bBwW`8{^Eqvt(fsz-@Z&Lg; z2-I(R`+8}D_39SyRf^8Hz`VsI`|}vXn6K#@DN;H&tNY#OPTa^I!a<9=9dk zx8@CF(!L-Ty90FZ2j{l2+CsWccmL?G7A_PbMX~xxpl7Ie7y)St^Di4jg(HNZ4)||O zA-Kd4Ci%&4?X&g1?#t|r>5J}ZYG2&pKQLWlS6$ZynN1o3{>5}x-9uIAy7<{;blTqs=+5%K_sL5F?!q*+;PNp=Ogno=TP@C zhs;^*oM?-(vE6mPr|`e*#_<1zPG`x#pfU91ri{?KbSD(Q<=Z96{kray?yEfyyQ`Cpj z2&2V|r00}uC0e!EjPvcjl8_3#!0#gIDD^BmDZD0nbXWuXIk_IQ9UkOatXnVLE_Z2@ zG?$f!WKN$2gXL5J#(*#4idZP__wb!@H&auR(<32_4$MRE82xe)rMs`|#o$UIcHr!w zNx8$i3~a4OVKIq zn9*2UcfI~y)0ysVJo3OkNui<7JridMot`o_YeJ4H`+nl2khP2&^m{8&h^SltvFOR+ zdwI9EUYmWb_fgd6;Oa%4b&@ysMVNB|xv`V84-d`D79_8Y>xv#9CJEX?e@FU2Ov1c? zoObVXj&#>SR-x0;@6jcMCIS$73RR5%?Mtnu5OWB7$=m63SYHFLhtp%`#u^hd6O9ou z0RxOH6brTlCIS#GLzRDpiT&|C!JTVb=KJWx(Apc#qdH)nJ3C)@t?ELwq}APNq4c#1 zKPy0bwjBuDbcLaH1*IwF$HhQ_oKRi zUz4$X7;nOfS%>FwXFeX6nzc7H9`(ke(OeNmHxz%J_A2{j#CzhWstRwonlu8cB_xi#ujL2}m7xV79^<{{D-}!>dRdyLKc()<8`OOYWNRZ`z7`1o8 z*+TYEVrpi>@3{KN+K`QbN6FU#*LA4DB`xP$SNO6Il=QKRtnO7VQJz+hm%me3OuOu- zybAorfE6JN!|b7NIW0a4fEPmna2*4Vy*?WrRCv4lY^$kR)^fc)v`ZkkrQKjnb85i5 zFf(v^Y#Q;B|2qE*lyQD@asMK=0x0%>ZJE~P`ah~t)j~;4-$kBDd(0l{`U`o0U4?yx zI0plR2#$4@QtNBBWw)QK95`ne(0y&SmF*=2gHnlC;pB8y9~nnQqs z&zUdE;QfU5gvL+x+v=87uKD)(L+;0i-}sgO?P!6`=g_vP70TV}bMnyx6MB~Mhl-c+ zhV_gZJg4YYUsH`X(Sc^@F&~?!1=tPNA;`qF0i_X3W8>q)(^SLC#x_h^JjF1{Jm&1M z?L#Qpg-O;>1Yd8gy5H4a`u*Y8mGbA+AKHs}|4BmB6OGSp^WE`YA&?C7 z5Hu7wiHjAXLf~R}EvgZ}!7rZ}j}gLt0q(o2J;%N2fCG>ocmrY%ssZ%}EOiaD-ZE^K zs|BZoPK8ljqYRVXQ@^&a^{AaKuJe$Qs77oQA)idd?*?-noz`6@e}mjO%aCk9nG+mQ zKIR|>ih}Qg0l+wLA9NA40GUfrlGW5gMo}O#WH@&g>jdpQZ8d2*dMC0473IjuK6>;5%>0z@{#E^R0$0^{1Ohv_5XM z)&Fc*U;CkASy^x?=~G3iyQxg{pCQV#9}dLy(#~APnaUT%JAZBPgDiu?SgVC3V z50C7RI1#Zm48%?(Yy{WX8};Kg2bHfR4oQ_bia%yBZs0KQw8X71@*ut$ zxfQVqn?oSt7y1=aT%_@+2jEWM5_+!z^`SU0}zdfoKO>17{&4X-#;75E42 zySvP9{nC#WluA#TW6(zep;7GUwCL*C-4RUz^C<{|ALNcXQSnWj&fnENwf5GZh{_GM z>b4<+6V*G-p{9RK4W1-i5xXgJO#HaS#c{C-fXuQ2`gqf{`O~gV0*rPHE6mD`4-H;K zoZ-pT9uP`;N45H-A`P2bt~M|2UZ6P%K2K1S>WBy&2Wf*@A8)cnZym=Vd7 zGft$9jI&1m3M~$t6$}U`g;ob&3u+6x!r4R_4c`o`0M7U9aXfS#gsRayp&vZO?l!vZ~zjAvV3 zHji(*+B&IsrTm@k2gnc12DU-YBO*|2*nlhByxO!*`$`q4n`kMp9Mt>!KG-pOwS68~ zfvKfP1HCckG)&ILk?STsn7(sHOyP)ZUMw%<9`hMt9U>m8@hsFF5=`SQ=UwcH=y*9; zEdMSm5I2f|mbWEiMaK1%GZ9plh?YmH#0J1P&^*|3NR6k> za>BUN$kI>MfmKmTjJiwe;c0pQ3{bn4H?6EosefGmZ_~ndQmdfXtxa^k0g{0Qo;24p zo5%46KAgCPGSNSZMdi#57|sL*vEVWPC`Z6jUHhG(+6D`GGUm1$lacv zwnGw2qo~S!X$|)p>6#;^`DMey+EXPVe-?dAe%|-VvBwLa&v*;Gl)lLQnw~qa;C^+m zeIRuJZ>#J}I4>c)tvtOljhV1I?6qVQXFhBRxSbZ~YgY+jSKi=qVK`|D^(5CMzAw_q zOT&M}O=LdhWw4@7$z=3eS))n_X+%5p0Q*EctMwdL;K&}8NYAuc~G8N)O1>;f`} z4IihpK>R=~DhuQR^8(xa8$8+QboxrkrI3SB5wUsE>ETPl_lASP?c~R0vn8Kp3`Kuw zkT6FW#j=t*`$!hNVSL%8@&z@g>fbhWufJc{s;+(W49jlsRPtNiY}x3bDtWH(8z-GP zlFj6G7El%XR&lW>Wp&+F!LRYCo#wEsB=d=Iz=Fa}IIwHq$FOxonWtiglGf zfHs*TJ`Q1qkqwAO0e>YV3! zjNo<)vD13pJl&!K25=LDa%0*i?@g&nx!pP^Wm??i$kwW8S+T&&UQ8{7USn^}s+x@A zcg3Ac7L{gH$m%~Le};ZP1PY9I12`A)|bofK`}B8uj+AudzhXYf+QPvUKsD|vyrlPJnpMGBXf&I$* z_4aGvi{Mv5L409)!Kgxi;l}(W`Jal@D-P9*bY*tE(`C~ezcyZ~nbp|S>_!R$bIHL> zR2~`mEoMYi_lV}OkdQRhw`e@!O!CWCc?s>qo=PusTBt*?+nx!Yo<1pd7nVp3;f{!1 zA*l*LaWeEtgjJO+nnSJkZ+Bd_{4#abK5Z~mZLiSP46Bc;U)8{GEYb|tlxw%yNT>lS zfXlh(r4`{VNxM^#HhJyZwiC8usD229q;khnbB-g~(Zl}Fn-6pbH&ex2T)aovB9h4; zh4u@3s#>VT2~R);b+0q0<#SDBxvaEj@twkZdD(w*^XF78YNQcKr|Y$cDvE0kHNDo} zGK$TE4aan2%!6GB(%{;M?816tsP6-M2NIBX;ZFnSX|W=5$oHs{gzc$q+dfLmOKWH= zOQ}k{6E9KWViJ2l{Rd+bb3Rp0Dx(kO^klT9c7_Xy+2>@jHsn`idRT>Q4r>~?)1}nV zs%GVS-gkR^=aK5=@gMSnft5>JzSNRI6O{KN-;?#ho750R$JU#Kp`%}tyezanbAoX?z0%b*ECv*)(y zS>wg3qs5E<`3t81`;sUB+3<18yQ^Q~eoX)QCGT(fow}pV=PfG{gD=eY$~(yw<~ohE zvwbslF`YKqo!QVfww8~Hhe~J5PRU10hl=(Kj|k*^P*kCe3R6V1j*JiQ9dcF)O0$J= zqVZBtEE0Z^9uGT~T$-{c?3pl<-rM)bY&Xeu<#pprn0Y(?zRTTPaIfTZ<>(rHExmSK zliSMi@1PA3rU%VeCP*y&)2v4FMQkOW55Ey~RO|>T3GWoUCFWXCKi*3w6%29JT5=3& z&7JG&tHWxNTBbXuW6vpH*}0-uvMtgM0*xS5%n-fiY1yk8R=7X(Iq(Df;dj}xH2pMh zOxx}E(LwYvyz6{i*j{vAbXO?jS~+ULID!$;PpOc3g**7C_-(ix))06X_zB_aCe^Gc z%_^E!bhYw{HpzV%XrTUKcH#Y&b0c~seoLF(wqNR^#NH8;gWf8{il5Tkyi@Q6(nKuS zeZe-?w6uvB%Kc~h_aXmuerZuu5ndSbuOvSse?{@MZtEVSCvh z*#YTlWm(vV(D{mbSy%CIVLG48+Cu&rnB(t{gjkccp*4?+f(izd&8`S8JyO}B?q2=0 zmi>-p{#B$MY(DoRd%Cc#EK(50Zsb4VAE4)w#S{Z`2@8WUnvR{x^{~J5@`xGv#e~g# zVu&>ShRQ4t<0?tZ?Gu~F)qSXoR*!A@PXo8yGEl5#wie4tYq~28!CjLaR_`-VNg9ja z40r-dJg+U{mL+wstDtJW`n9H=_N;9uxs~9J@F!;->ptfy7vbnxUs(=bAHITpoQ3jF z2=DWb^2W$|giR*CM~fpaM)iq{PMVR-iSHf$MUg4+(0;qqnxTqWg2|eiTKdCw`#Rii|Gd4lb6uBl=|Rc=qW7sdVf@I2VLyX!1nn2ifB|qU zWjA{cmkY1QXCe3OF}54dhtByno>ghvc@+DjAbSLy{4Ffctnx?h9*U>fP=9LZa(xJ>ILEsWzH@t>%`S<3u4S63ow0)%Cun()iR_y0UxDTm zsoQXJJy;pY@V7!c;!*xl_PM6}+69%9bHC;RC9azD4L9pQ)NHFl>c^R$__eqi&@mUv zItQN$@0k#t*1N-$ZkM_ZZJ*MrbA&|JQP`7kKny4E4>^?PhqvH?Dkhra8`$>1{zVba3D)?Vw1cs*U@RoSHVO!{%;Nds=(0 z>@vJ#X*Z;oxAWUpm!di06N57dVp1Ye^;ymQNGqbnQx*m^o-fWy^ZMp#HJ8iZl^QA~ zjZvolw)NIUHl_2tbEeU#cGt!Lew{3pFK+%GKpN zO8b=FDH~N5TS=>~tD;vJt9exu%I1}fC==Jb(G5j*k{>b?m=n3R%BHxttv`R>6!gDeL${v3;^+9Vzygo(~wO-Xecq8#Fo(vX98pXxZ z#iB4)KKz|=l64ktCU=46VEs(Fb?u9zel7T1^kv46nCxrc8^68z8I*gp=xaHxa!5^c z(;EFyb6Z;hO+@qD~^zxB3&IiNA)aJ72IAqBX~{Fc2O+5 zj^*OK;4cty`6;xZKmtLV>r0+ax(t-y3$Pq~Bxx1C+~u&Wa*FYK$_Ge9`c1t>E<;Pb zBe1rCGd?pGL;g)(fKff|9NUakor$6W!6>pgZ7pFo$NUIw2(m&`EetYhNV7k(~#UIYC^=Qn2U)! zlKRF~M?Z*ctE}X8r}d=XqLv1-ZCmxA?ojjJYEjYLzdydFzjeGm{5toI_U-VumJgYq z$NdD04%S?&-Bc~F7aI@zhLDI{0Q(Q&b*NHwl9UBY;)>H)>7;h?DUI>`i0vW&Db%8; zY>?53E0vZagjSj8EKHonYFfa{@ zCE*vMKPQb#BeWc;4^zCY?k8o(4G-@t|HZ8)>;0?TOPofB+xge?1|5r?!^RQ0qr;?* z^jX}Ue3Njlm|)lO7I5R4>6DAK_3ZcDeC_~l2ljM$543}X(tO05d5pD@v6oJPC5+yj zo!s-xujIdIuKSmxw}r2J+1$N;T}AJIM}8%LUH4`DmrGx$Kjmc$G+S+}JsRIC2gT^N z&LR3m{VY1$K=&T+BVP{>;x@Q8Idi<7$dlLxkxEGkpAq#b&YN&OP83HsmG%m)K+NVv7-ZLXF~nlMjtM-$BwVvG1WiP>-yx zojb&*ElF-2H-YfO9H*S~EYW6F?=8mvvHztNO)RX>vlAC-bJ-%T!{3gc#QnuSPkRpe zz~uyKN#P#n$@jvHs z16uEHOKa_mL?krUX=*eu!Z*pT(yeP)UHUlZ^xwAsf{UpYLUpy_m-(M*zAmeIQ@yM# zyI_3&wp_`d`?*64f0ibey{Pgvk1%ht&v)$zgfT`+hsRMn-^=_nviqbRGyBe5J!S9c z!hr{RjL2xy8cCTRe@D5ReS(}BNOX@h#5SC%?NQ|@T~zqBct&-jISrsv>!C;3L0>nl z3((zr*gQt3)sAb}TluN-Le2B~p-mT!S6m-41$3Lymscv^7`3x?+jb3YThf-M_HR`a z_ccNlo*6C|A17@_mf8*&d+D@Isxob^`d3*t{d>W8ezqn5Q%POv)M}-6p>?b+h%m4o zBG{3O$|H;S7j-Q|8#)nGC$b|Xz@^=0Oyz=#+L(E5t9$=9aO`07Nax7(0W-SaY`?YD z<=AauF9}KK4LsRX;v7dzV-;E;g8DMLg`%?=gS7=M-;D(hH?rCH2F(FbMt{y`dL0=h z4Fxg-`+Yt~mF}1NR#URxXp=d6yCOV4fT{3&-ZSx4{#+)X{X%jys8nX*R?wfaa(Hc- z!6d>q?dj&dfSm>e6eY{deZVSY2GI-1OR%q=D(6hAOnT3ED1`EDSZ(!B2|8iP$5Ai39l+rtjbHQy@v7t`I zEMj#!CpaPOFVqut^2>}t)B{if_z|=FM*8yut^Cct8G+s8AG9wt6@3bK6Tdy13y-8o z$P1{;Y4y}Yi??SXbxH*`MyF^n7;+tqU$2J^rGyHd}GL=(Ep@&crW=}B4O_rU1VOQ%z;&$ zL%boJ7u+%Y6@oOucac_nmb)Bsd#;$aG(Bl7YRS`F*VvjyRebyRIwzQ*)dl@k<;CWt z{UzriC0omWlyWcRF z+ZHBxV)jIg35t?P#0C+Ab&HgXHlv~5UG~Rjr{#j_tS(v8N0YDhY1=k^YBXvN=w@qf zX_uK}9S2-*kn7kq*dzQQJ|L#b9|unjDUP5<4~uk%bqT5!>xE&Wp3+bS7P39qEPcvG zC|$t^Kw|*%ZSm+3$T8G5h{#jlv~D(>H$8FrJUgt##7sjf(#hIl1hpL+-c)rjSCn2V z`cSa0ptgujoU~5WW~tj~k2`WmY20&ihbm3ACge=`uJ|_bPa^iJVj@bS)L|=?=au7v zNTLNSCuNfVxnsTcp+n)C=J@LTh&h?*(vomV?4r0Qu`%&uQ#!PI7BPkYg`kmH{7UCz zou{UA$&1p@RpY96R;($XT{WSuM%&prFHlVV#+@!Z84N0R$filxaOaTbA&-oO^&={n zRbv_;b&vXKwG}n=n&ie&hBxMCrcvfp`&y40jHL&$SF)t=8Cor6NkHdcj)r69BofSF zmkCNGS7j5#!?{!0RQ4^-TR{i0MSPs!j@bo<=-*jAnBlZ}q?7&>#|XmSm`*s1tIg5o zQJQ6Sd+O5~hSjvKzOU}A=ej0BM|o`&>m!2_1}9FBDGr+&lqTFsUFW`MN;kc59>g9{ zrqMUB4hr9e_KbZRe=j;!wL>YCE|Sa$QYh5?2F7Ms1$SjErw;*sxoS)wwa;3jTPpQ^ zO=V`aZeR8Dy!!0v-%fm=`4h>1S+!BS+ogt{@`0ceVY0AaAtPl=g~M4gU=PyYZnoaC zp0#c=9n~weh#}Mb()!UAkEM{Zpqu2;#8{+`y`9VC7V=v2kBhRUJ;azOUea3DB6kG; z7ulR}F}bLfC*?~Dp4O+GIc;FQ)0=g(f{u!cteHmu94;xe^ye+)*8i;>Qh${HnmEuVq&S-RaBV3A7pL1k+e`T4iME z;9-vNPrIC@e~&# zer5Gl{Kk&PC8k{M8cmVuzH=7ZOr65q%K0ek8+WWjhn|D_Eguvz=)?eKKli|@p}rx# z`o?t;Wjt?7YV|2GI%!C2U5Ago>jvEE*S2qF-@#oww4NHHP_0t*5C?=|oDga#cGun6 zv{XH}yyRb(Z?9gqJX`xZ>V5Rb%+H2z`d{C3OY@|;nvyE@6a!#hWvVm$HPAI}YQC1} ziUZ|kRhKL0RD7?6HHA(u&Y_wFYSpr&-5pN%+~04^fIfY@ckPwRj;K>kmf3`lS?kF? z{TWte^U(TzM6XHuZ)9%izo#V+Y7(2b>z)}G+H3u1$r5H9Z>3-gw=GM-dVD;HMyh@H{YKAKOD~PQSrkiR?H^tm|F}<`;?Iq0%!vJktwV_s19b9p&BD1P<&4wn( zc*`_iyP_pezrt34?D3?y&RTm~S zQp6hR1Icbq9)$tihLUJs;J1`rpbl4HT&w~32ju(XU2b=shwgH@#aLzlXC^{G{li*?0|Di+nOsP0-Rsf;Us zR3WWCTHR1%QhT+H)>f`7NGHz$?>65o&l&4C!ywB7Zx67DGM(mUt>bkUE)wYlImA3? z6lpT0H@$+TXJ2FwV~gly(#=3mKj=>naWy{1NjEjMK&jq*2`OdM$0oe~& zI_Tq@e>K!J%x*5#zHTu!wN}?Rwr*&tepo)dWO6}SQGJ!Qd7Sm5?+{7IT+2Tz=@B*{ zVO+}KHr?AuQ`RLFCiaZ)8MasWhjo|E2A`v|yr1m>-P0z23tO{YQ((AaFGd!4mim$~ zDSiY*h|X?26`-~-zX?tg)%;vKPLHPVhZj(Gk-lOboP~s$+-NUFrut#;MbAHUeqcMA zh295X;4!+u`wG>7-zn*ggZ%aaDJze$o~`D1;ota1?>^rWpdAII?xOyq{387X9}#QD z0{R|e-?f~vmX6Wnlr0P;M+)QMUVK>~%X`>1)3n_z)Ri|puKriGtmb09vaVJA8%>6V zOFVP$wTEi4;*fk+$@$8hGJ3(gyqvrd|6&UNE16iqs__t3@!8gM$VcED0})ROz7nxF z?qRE4sRLVINlJ>D7fFs-8htT7HTGWQ;?NQDi*jCYr;v=Gk|2`&p}@{arCx{EFtu!y zmCL-soh#LZ&J2wX+8x4(*c&}3YN0Zp*AxChL7{gb8GYi)Fs;=cX&zNOvgTORVQqFx zQ{x5oK=n>_Q}cGc*tp)rH`?|8X$87DrjaJCeu8eC@x1LGa@aG`;d5ONNT{#5Nx~jH zn8~Ls!HyxTJx|C%!a>T6u#lLA@dKk7!GA<|*?gLxoCe&*V*R81SNsoA2jGX^QM)kT zav8kV;`hqEs!LI-*k3Vw!#qJ(WD}%z=`|@wm_m;Lq5}P}16~6%fnb4NaBXn^vX3W- z2#xiE+NSdA(s||cD%Mogm3}DNQLbsI)|2gp$W+fTUtj+Pe}M2u&h{?#e?j)y1NMMZ zLAWGq4dZlKO*5O4HS4riy~>zquC?X5U!zy>Po!1kA{r4{l8y}86n-zhRr3C{F>UU* zQb%``I|OR>Wx(rvY%8{%)6J+)Xrh=lI?nr>A&}exujX<@lVrbD3u5yV_;HV7enyUr zkcRyV8X>&FT1h)Xjl{1wGfi{#dfnKjGnFmHK*^yBeR)$UT!}WN>(`pD8eR~dveKrn z>g{!F8oau##sbrM>j_(k<%v<;bgE%|Q;;UlxW{_Ufg$649mv7r?C@zZ?-Dn)>Y3<| zEsHyrtWN2hWKC#_k}7V90pTNoRn#b7M@-e)C2yqe;0{FlTbr;fu_$?Bk|b6c-bp!G zw2yaM2ojw`jAp0qgUq-e{|~758EtP&y)`H5dJwiWym0>?_7C&7L7#Vg%Kfr5yZT?3 zvJq8WbqCXMHxfvqOkkX3a#?(SkZ>ROF?~IGA@~g9F(XBl618ZL@G_@_n2ZRrk@PB! zN!L~X!aU6*0V|0!MHRUhHI*|%dYoV~yb+HT1c)_s0PYMh{YCCJmNwdz&3ClNjKhu3 z4fidH$jHDT@(|`Q{tBr~UMxN-7$hwwyn=0Izla%ZcVv3h>dd(~mAag0{ z2b$s|BW}CT+QqV0|EPI~dQ<&@hLQExtFD%fDH~VyvZ1xQQ(Z~z)f#j4rK&~Mo78gM zDDznJTw|Cm7#&7wW~H;QGA9w=oCr!L2;=*J5m;x>VRvtLFSHAJ5A`j4f!ic0k-25d zgF-`nVZ{+ik*_1&F{=~K#V=NQBv<)yOg{L)E3m0`^Xg4CkLy-8Oi(XqeBX4xnbPv! zaLiugc|(}gtT2r$;C~h@mh}y@M9U)&huv0YODe^KBs=(%Xkj27Ux?0e`)ovRPCdUl z#SmkdVDfsy!5hF_>^}Ys+D4`TBEQ`)_rA96(q?Fm>V9e4HD%ZBsybhLS=-ebWbUFH ztv_Pv=lJDWNYo|&gHw2$#P391g?mK~!D8MH@uHyjp`BG{gI_4_hBzX6gbIUVmCqIT z1pVlR&Csb|(~tf(qoTWTp2 z7WqqT>P41F$1Ea6cM0$8|LD2pIq7=}DB%bq1>BC^%%3H^Bee1NaQm{&tkVo9?I84> z_fc;-0_`uh)jQVka}S4J@sv3f;LCfpdF`e)+r4UmQ?pbd@Q^}#1DxI?-6-AIyRCS zwommX_?7ew|1WDk0$gXvcpUx#dwtpg0hOoSc(3AKD@l)vk3#?T;nA3H`@nWTT_jm zaM?BeZlUT2T1Gl^eFfkwN*CxExC2ZKz{m?bW}R!=s-re)8%&L%OT*g0tf1sVL+A^5FSzgMN1%%V2gVBwMT6|`iHVc9Wp(+gpJ87{ zet7!6`v=9RjL(YCe|{XxjVYE?op0W5E%y&3g^@SGBL#PZ#o!V=8$n{yK0Pe~52Jzk7<19=^38Ou0z4!H*ats19ryGTO5n z8Q>^)?s3IhKj=T}W*VMara1gAi9<(l^oDz;dcXNc6LrC>p11zZ*c1E~{x;wS#pI`y zh16ZF6#{@ih)rS5=bq*#5E;8!%mVTU@Cx4B+k{N@$^387Q!qM} z)sMN0J_fFY2hs9r#gw+-Z-V=<0~uj@r#;yc(xN1C-QSxV8mx6+Dn=DK$_EqkR?iw& zYJMA++6Q{P;6A#TrQ#}uRpMrXl*AA19riA)hibfPLg=|*mi&k0kLa)v5_}crh)TrE zB^#w5B}_q+sH@bf=%(zUtW#VO-C&2&J^{Grvop!YHXpa9*;>r641*2lw4|B^rJ*IZ zvYzGds%?#zw0rc+b=578Tbd08W|Qp@5`mTj*Puk`9ylGi3F&ESW-Ob-%3#F6C#gTk zOCTwo;I2zH#@dfa@;y3sk*GXdQdIEB^XQ)z6jiErny7)JOpxj*(4 zS>qne`4HfGa}>s zGr=m>FiC`hCQn!FR*sWq33$Bz+<)9lEC7DaK-e&MiDpzaUenb(+1XK zClR4Zry1IiQT?)dUTr|_)^4!A^1KY(pp6!-3i}ZEATBz3a7-X(ci5%S_QC5!61W~5 z?+ZBZTIU%%HMXf_mVPK5QNgY=w+MAT3^(no0K%8R@o*`^Txn0qf6`;huBsE^C&Pb+ zk%HSucL*<*}O8P2BHm4Ws3w0pa8Ljoqb_whe zw%_(HgyZ*~^_qFM-e9V8ee@3WCU|WG%jP_wz(Mprx)}8ZibzKwF<4DK$vVv%% z#X7_o$;hO4gwq*L_GdOk_tE%d3$%vhgZPwUdOYPTeg$pxi9Mq|M%Q&qvo+Cu#b54E z^Qb(H{!-s)_jr#O%fb$OHanH3vCRo;XXAvrgeqC}y*feN)`rW?<@ziO=H>@V;Dy|F zl8>s^k;fuG#O_EAP4>o*i{z{NhRO+!_g6s@6Q@%B_iR~)y?VgZ(>SSlTzy`>R6SpV z8GV*fw)uotwiE?{PIQSdOg2c`M*2?qG`O#HfnYZ0I6NI13a%rZ*W*bsfEEkJ)W9St z8IEI2W}M+(79&z$5D=afGbVa^)S9qjxq^7_#llFAlRlHuouo(8iGKSH?H*mU;i_$o zbFB5CwYR%1@}Fa{P3R)|r=dxnCGI`QQ13|eJ}4)RAil#wY>9t?x0OE>Uk~PjXP^{X zEu%Ai7-KHyo{%G+ASshS3LY7DG-94=Tkz7LcCww4DSQ&m1_BuD`RTmlT;&dOvdp+< zcP*(bzpQ^%QeErX-*wiO6NVv%@5VvqSthS;jCP4pY-(dZVT-rn&L_xOPjByMq`_Y3 zcu;Y$@O*wZt!$WBb*#i!II7@y;naUm@}CrR$ann1E7dL2&HLRD_L4H4O&1i2M@V@J zNV!wFL_S=cD{RY)WUph^GHx>{^elP|y){$A`NPsM(pb?vk?@e@vQ#R5DBBx6Mpn+6 zOEO{^Zn7y{J44@MK5w~Zi?H{$tkQqhPHS1EKHtbDvPepEj6>pHjr{UW!EBHU_Apix z+{>ZVSAQgHy3W{2i$+bd9tdKNZNrYk-en9vOq@)0fdx=<&=;+_s!^%m#WW z#6tZ(y>}im%X7%T-1p8i+Z*XWj&G$brFp37lwIUDz(F92G@ann?(wVr+x$JSw7_qF zx$iCbj@gUXmFwiZ;U=?((1+7gnKPN0^xyD3IGox@?h9?C{$P|bV_*F-_ZY3t7L3Bf$-e%eOpVBkog9Pb*q30^0S3;f06P|$tXLcEKXfGyxC zcNr1DecXA_aTZBIk6^d`@6azm6f}jJNR|eM;(e)|88=zUgb(E;@0H*y?;-aQw}yL& z(}(#6Zl**5&4JwkJ{|-}Fw`&iR|iCaJH-BTI%y@?3y%ji%n_nxij(09ahnrr;yy=C zQqfiCLavDqv6j*vQtp5OuhaTN>uVfZ(^5P)Cp-6O{-ylgMW1U{Y2r;QZU5Z;y)0y# z^Oobj{j^hz&Y=h?AMoF38~iw_3|tA^AWZ{{P=lx0bI1M4UgfYME8J?=Mnvi9M|7bU zk>4RHLZB3AX^NvEMiZ z-UIUS9>74{i`L>t>63Veh3m!T(*06YVvw9AYF-HvNV!HO3i>Cmlt^T|MMd1UY>Zt( zKTmQ4#b7@63t8jp?T9wXw5N4#b+MXp`e~Lf<{O4<`px=P`YGBGO+bUR0d1<$OwkgE z!p5&naMRw#naxT1D8qLB0n00IHV_6*g{U+oy*1TAnL?XJ-_BCs7#UBQ5#exp`$|ID|+$U)3c!^{*TUN+Y#G$bBiHee_0>e z@}sG!#j0IJn3FE+D5i@Jq5HSDDnN$zQPx0%$xeEEri$5_HUo6x4#KYBvWqN}ty>%n zVoss0>nqw3xDd!i#|B=L{!;4cuXugM1!5_$HS;xb!jMAgKrY@C2ts>#(~wc#mtLd$ zhzoSQx7ZB3^)pNt?Q^|+pfBkVX)XB#xdV>i66id}cxQ^0N6@3(wHcHpuxHN%N7>$)p744gPK+Q#3+6 zOq?v9EKQSlR?uY!h3!~Hv^yk8Ack05%$^w@BYHC61HO>&P&-n3Q~pstQ-a8F07V+@ zE%v8KJKsy+36B@);a=u^YU5e@TBe#@h926G=B_RMjIAB5J>7`&#W%2wI*l9$b*7Dl z1C*!d8wCx}ZM$GpY3LUeu~kbXm%_!*DR?eeDjo?=f37BiQh$sZsbDZ3IpTA3{! zMr1w`1+xWo&Ku?(_AtQ+;d1sAN*Iue<|CtR73L)UP|Z=T(>UKe(X!fh$Fb14$r}yU z&`Hc;%+>7s{M#al(8Kp|BiL!ItBl#?J0u}3h&i7D(lc3iIfLO`V7uS%-Q>RHyldB4 zmgpa7yXiNY>db0uZ`Ta(Y{?znKTTvk%j>mu^5!= zABjLjYo&bFz z%^>Q+xz3%=!|q$2NUzj?0~AoFP{)#hz-Md*ieszLV*fe+8Q(B>joXUFL*=xs#OfZ+ zM#Q;_M?t-nLCXJvLS%@zA9pJA0rNea1*pAMj!OhJh*86=yjhb|f36|Ed987rX_#TT zxrepbQe$iJ1n^Bj7CsOpa_8h}B#fehlc{@1dx6Dx7yKRQBz>Tq;>;8;5pCly<98K! zBq!wAvT8}8XcoUWvye8OIN@3;MdaD!tB{l+2sD#gQJa}2VjaH0xX)h7m2t)q z-o|qSXSz)wY~K3j6=;sZDVW;tg9V7_Z!b0KQk~N*bC;6Z^CaF zrF1rVcpwZ}W``}A=B4H+(+A^1{cc@1&5dTYHs97AIqhC!=i60CIl9F^$#czj2#}GV z(voRh@-b37AQY=Zt>}J#l=rVs>c55EC4sP)bC_onpi+jsLHeJlSb9HrW*9~FR+%NS z^Yd9Z$j5y)r^E5yVX$AdJ#c0CGW~7+FToUoqjQ70o_vRVkGhx^ORgX_LA^<0ECQMD zgdInmpIqS%n|+^EYIeq(-PUE^%z9A~h} zZ14?Xo*d(TY8!2A-@LP4Tx)9B)_hJk-8j>-&T$C=TqX8?jt4$3IGNNIpx`e^2Ph@f z0Z;*n2DPJ%rJjQG*c*jRX^!Hfk{#SCn5lR#w+Bs;Zx)>sdE_PXE~1{o!J>{llvT}s zza=>P_GV*k!`hZ1 zrp2~Q`vAvPB-ytQ{Q#V!^rMy1XE4(kHhLm`7(5V?<62TTvKS~ux1j~VD#CYvFi;$r zkNpUQ12$l*?;wJqEktE|tEU`sdWedpcMraul!zb4tN}Ut8SRB-qiWv{bR=+%=;|i{ zUP?N=kJbhHMPfoKY6e^d_k$_}JN>o(Snpw%!;ZP?(Jiidgl<{&1uxV^i!~#yakL43`BNYYK`smIR>Hm zlkKc6!~V`AMqgr(FW(pM`|1Updn{Jt9m6)`XLD!kb|g9Q7&wiu0&1vI_8;MS(HZek zIUdw3m&g{%2Z;aU9b!+Q-2|_Ig^&atYM*D_=<10qa=vlA@oYjT`bvEh{C$xIXN#u~ z!Ls=1--(_Awt-8rbmWwKvFC#K40ef1Wn{p`L=U~3PG;yhCXSu{o0iH*Vv|^5%n#i8 zf-L?(_5%1NBmp?!Jn(fO$_KcQIqy3++J+m3>uOA2t$fRS`+e_JU=S^oS;ub21qEG& zQ+T_W1@w6gDx)KO6z29~|XzJ70 zy-C(w(_+weHI_TP-m7SDY#ZJPy{CSs%UGXyPY9CEE#6k{cwVOXwyatBiG7egi}Re> zOx;fGhZ(**-s8l7Nc|PqP11jq2xt!Q1OEWf0s{yl;!ZRJC!-|<@gRV=1WsVx0uB<3 zoC$3LI^#8v7kGpOb07U|V9@ zWKr5I&Kb^+PK*1K=cId$l#?K8BJj&6=neTXDIzgm6Q>{~N zYR3g+haU?(M%8{U9!_$SHj&>j!kDXRe<2@91g3#!NonAD(kUtc525j(gOHNC5e|dL z!yXz9$^->KZ+tF32vmX70&DyOktZ&WGuyt$I@Jkz|6##^oC4BPNguFk^rf%AJJvlP z?E*-#WdB@Tir@CRJ>$J+e4~*9ca(1x!F729P)NP0F4h|UXR%KfA)gmyP%e=!Cz1gt zm=>CuG!mFe+5=4mSy-)qns>ANo&AAzlr7-YyRuxE7a?t9zU1bxSJ5}pdQm15E7BP3 z2QV7U0(xOreOnQ~`;*J>Uy>N@6{?R;fFW2raWtV~Bd zlHeKP{y~)a1?V1h4VFjBq+qmW`h8Xg|G4bGkQ-6*_+1Il<2T0EN4E~EQ_hk06bP7W zDKDV~V4C-{b-1yov6a3~Q_*OxZ(ZBA_DI9Qmd(ai_HcI=Qs%zvR(q;E8e}zc&r|9B z>g(inc)B`w*v{Eb*b=N{>q~nF`v4o&_Rqy7?#+Et0%Z$P$Eszn5PAH3+(}2#?IvR;r&N+b&g9r%jSt*@wEIFp_l81*VEXH zQ;cjXAAf-I{cYS|EQ|FcHNA=MYmTXl;gNopZn5@6i?Q)TgQ0Ok)4>LRt*L%&(@ISn z?OTJ2Ahm5psy%P9`Otf~4X3qaPjKt7w20SH>evhM7ZTuvQ;B;MxKTetl|1g&6^v4YB;7__T%o2_V)Jo2;2p^q-gRv>IzB%DJD>h)}U7G7gmq1N11pI*+D%; zxkc;69wyo$AE4+V*C-#T#)p*y=FUZ4de8Zu`nhPP-;2~bQfx-Y zM}kVx-<)l%H#a!KoSU2ryejY(tYRExj%SB+Q#lFrSF~%aM1DU14d)_f0q;GZ#Ocp; zuznM@{VVKNbTVOrJxWx1yAsLnOL(wnkQa>z#pZ(0OPq-bkd$_4wsLMBoFF zEO&bYem}69V3(~3l!2+FtKcAf0dSb~h8#@$!i})NE!)h0tf_?8=CbP+u@f<&3f}|21Y3^&anG>#aHSx9oH_P` zR=@eR>89zCX}Nir?VM`^V)J(O9`y8b=XviC^aJM~ce3DwNW{4AhN8Q8h z%k2%$I|Qqd;!?Xt*ms#1m^NAa+j>}N+=!Z0Ii1di*}BY$DYg8^36m&lFVDm+RNfIPt$foP2^M5j^qcx4SXJyO?i)7 zeA&JZ-rk-RkC0(=On2(M$Um+x8aUF*yDFT!jf z2fyO=I1$GR$4iIH-NoMm`B=;Nn*~M@S!5Lz3SrJGdO3v`*y-8o-h>FSCSXB; z;O(Ld{Qm;aNUMRL*kjb^o8Ve(dqPxwGfks(QG_SJ?W}WpZ0{UgUkwFjmb1#4`D}<^ zBh8SG6&eL^g|9>}#BD@(1VUbKp^q?pDcRK=l=GXlf-#E@&_^=pjFHS~tSr_OdK@$l z;Nh=v2j=x=BRR-PSGhCKS?|!=U)oHz>9!k=@y>JhZk9QgpSB~;UhXl3g~RH3i`*mj zUWh%;$}z1m1dPiFbK7KJd%O|~K*xbImUH_#Mdgt#MRXa*6uSF&o#kSv#>gvw3^Vdd*VpE`6#o-J~$@ zu?8IN2{`k9TU*Oa>nD4-{Q^PacAB1&o8GN@3iG zi>SraV#YS^N`4Bi5XN#rH^TmX^+KcKW*P&d+oUD*7?q3qtKh)j_z5WZp29z zN3J?AIQrVGR*~h8^^-Nne!^Ai>FfW8c>`&rG}RadnSwh># z6cGE)cBCZ)EA9&6UUD$F%v;=W{%W3%+m5}O39~NnON5;S?fCWl4Z;jDTLcL7{97C@ zJ&fE)+6k-<^g{1@CpatZ*X(obplybe$d2H<@lyOAFc0767r18FX4-}$WPg_TD&qID zJ+C|y+$|2bC1-Q=O*Zg39tgz$z{Qby3n^BTkp1k+i5MmuIZ zP6zf6W*_D%CL5kXSq|Pt2@tn;Bc?*vcqN{LJ|zy5FH^Qt<#1Pc3;j47BDG| zjGpXa%>Sq#Nrm`fzs7gM*WhjA4za&CKQqkLy9|qT6b(lgqCcz`>PHy_rkxgtg=L;* zmD}IAXZl!J3Z9O$@G8=1(g&~`Fb$|BX!vhwWz5;E!R+Upi$p$X6T{2gL)XDthMv`j zd4n;O#)cLF!_Z$u8lD4?i9FafJdK1vk4W92&eXni8vO%YOvTBapekx>8kxG7l13VV zbI?0}JNgSV;}Ll4fCo4a+{9d{8mkTb2vGc2d}?d}7!Dc9qbUrko)$*%_%&oXc^bKi z{GOaaP9>K>lkxffKc3yLcaA;8%yEm?LF~J4(;{FSqZ8vUlgv)y3}OozkKsS?A1Xpv znhyu22jWqg=Y_kE^QGgtYYcM59dMJ8$)4`W7mwCI4(lGci>dup{(JsK{tnnXpf9na z497IM3~CLxV-&-^DLp73sHdo(D2JeQav0SQFZf?aR{UXneOVUSFc`Gdv1GPy7Fr!3zU+q)^GOIS)^oIq&C;QQVc@MM`V zuWzuLZQt=-N@}0fFKI|(k@($l-(zn9FK&!E7k@qRVf>ExREgP>Qu@Q~pFC6GO=9Nw zyos-@8P0h-)>;@?7T9lV_Gx>YliZ2s*Th}*f}W;1)kif=MysskfEH;S(ca4{B9xXl zj^W<2F`mwz$KGIXv7iRQH$pyyW`VAwlY5W*hI^AMm4W+zh+qwjc`jmhcAX6#mb`b$ zRw?(SXc=BNOa+a0S90Yxc578>GE!aDbW-{B#0rV`6HCPv{gXU8UG&*Mul}t5UE-(w z-8_1E^yJ_9epZ71C-?8r=-Gen#bu9+ju{pGF=k-`^(ETdq)GM>zZ~OuEr~x$Pa|{nwMx{8yjAe$oHPIr4}ep_5b>-pa}CthG1zKF6i`ef8J#Uz>ifiwTb@ z6TRoR=f}S9*MC-zj*2hf`(-_M8u3#kQk$s#!7b7E^@nDZdr{B|bc_4V{;q%Aj{B-B zx7I`W?G<)yYiD45pp^fl|GD*>zaRtj5$+N}B5XqV>{P3855vV2hr;@J51S*jlw=u6 zr)Jn=67$5jNT`(9%XikAVWZ&+^Omlu>PDBKKDgVeR?wW_=^;OZBV2jSl%66UVNPcK zX%H<+LunauORThV`j1#fpm@@h#01}bDXJ7RCKfbuwgw4L4&P35) zv=i5b=6rCT@d{vBSIJc3zCFu-$X-dV8>ie}S1%KDyS)QL)`VpWeHk3*$*V8Kd2dIz zfP>1a-*DXx8X9~c%BNXf#5{43rxBIp zL%CT@bdE5ebbF zuEzIHnC8!ChdT3|7`{vGq<2VRQPzHL74$z!x|uLKzG?ig_+x*5{Tdn_6raZDSpDo5 z!lEM#fAFDX`9d#-#9>n8(!Y4!Tho)tGdHM0@S)I{WQ{|2L5H0`_(;f$uz4YVZzcC+ z4-Y!&z2R=}TIiV^+&CnFoTRy@sq3Yyr7?`%BcsJ*N3(_n`X(KX?-;u~HdD;7=%v4s z{glxUV<*JZgt19m0&jUTe%p=?+zRZ%r4ps+9O981;C}|N%|-{albK3?%bt_@YJsXF zKJiV?Cp&?UQWwb#(u@Ubzx3nA5c7|ldkc96xt6;^JU2r!1^sfJG&{KRK{52kIHe`g zBC3|`DAS6~e1|j7ZV`y_7xVQGL|MwBfrFN^Ti9#(7rNio-g5!G`&iR7+q-JJPP&>H z6X`uwT5VN7#X7r5pk1Jw6={W9Y3=tSk66jCh_osd>8tL_-JYrp`#-i_djR*dA+o;IkEEmG%cEyg)V`os=(OVEl=M z>j|ghPQ*@#dG@F3pNX;iUT@vAviL9frv~0yu}&Ic(;NCgW1#uM zb2eyJaNdv+A+>_WdNaA!>W8!*bg81Eg7e4zV_ghz%%zL84qGd&6jl~{H7fQr@pfX# zqy+y#Ym9v;a3je`7?>#iJFVZ2%l_eflEqa7F&U!)nv<2&^O{3lASU$w`6i}|6b{BFN)K8J`q%WO?I=dga!$px-G?kHZoaifp z)B*NhD@zxUDQXUP`%n6ufUxHJX2zw9UiW8aT<-X*31t%=Bo#@@nUFEwN%|ZR&M}pe zoiV3-SBI<&`5k0=FiFBQ&%4^2%$?SpWv0dLNa?AYrX|h9T>q80hp`(HOZ%mNf8zV3 z%vLFxhwjDP;l^ev^NW$*nCfoq>E!xs{^w5NEg!TX=!)0!^l)7^KbT|8bmmHT38?EI z(@bhDov($nPjs+~Qx{b)nV!$E2U%k++e(F+s+O25E_rm-pX+~q{k{KBxfm8xHnwcs zw}glOB2Gv7l+`k_=!v+Ez%t&sCwb<1UIt|ixesPyQSejbMuUUr!s|wRcDOs5|L9e5 zYh5$3R@Q+6u(v!WLY(}3vudldh{>p^HSn)XN}aSYi6=l1@t)Wr52~pHkKI=%oMI)?z`q%4UR``)d8_XJz zW-6^15C4)^gvwN^ENMi0up~XZM#*w@p7f^uSZ@{&JziQ?mb_CR)JtSzy8;^$*C*CZ zyp_-?zIyzv__J~T_*C(2;)Z2W|Gx3hK*#^q1C;r>-sUXjBA-|x+{&#kJWmNN`IJ^gsS5l z)t>+2_e5c*wUy2)Y0q|YS$==Tq~wY3{ULU^Gt%MUO*Uh1&Ifk;r4{5nQgzYk`jmKR z6kA4fkg9BfzFF_ccBp5fjC0pXV<*_kK4kCU5%52cMMmXOr$j^U=4a(n@ZLXY2(f8( zdVqeTTWA97%MNI|mRjTbMwUq5qDDTGIC2Yrz}q|B?D9@BenX~EAK3)$AiXKShz&AI z-GhECiO$v+x#t9z4Otre+PmL<+2e9A(Jv`Wd{@bFva`u8^o^EUuW#r&W1N1*r=}+f zD#BTA6}0~W_Fk^Sc~fgEGT=dp856=|Km57>r}dvK(M>V;ZA)ysxQmIqeKCPxD~iWc zAMWwp$KJTSp39za*Adq-^NEq#$Y_=|d+9A`F0zsl`jytE>u4^uNR=UX*)T0i8^->y zr&>*|y*3@)5IKTYhU5u(8~QqIWLTzM<3Ai2?k|woFtLqq zpFeMs?OPc5VfT0Th*9#QIzkT8jcf$gssnsPX8pNVOgpGQ)SA*dG&^~#9^sa-qv|YQ z>%W}1D*ktT!-Sy3Hc6$Dn)nu4H^fjn)fn!!gZl?B_9S>Wgqop8f)=^Ex|F*xri(C| zOqP|&_+o3Af4YBQ;DPnq-p|AMV`T2jHNSDn_~j@m=F@CUrzTqDEkaRZG-^ z|9hw&l1=n2ZAc1HM-S-Fv=v~DTDaf9PnT3tj1r8Ns?9d%8+MWg9eI!`64Zfcw=tZJ&pipV&X75y8_SWRuU zwnMwCAJflh@%V31{iAWsIH9*eJ+c_)T5aY5C<+f*i|u`Oz%FY2vfns)?U|Oan>Zi% zO8a@Bt-p7mbzqDyYhuSF0_SKA`ybgeeSyR#i7)-7{l9$06MH4>PMqgE z7Px|aKOs-5c48Gz%^#>ztfH2IRnRi&qxJs!1y^eCoS>KBkp_jfPSz-SZ1V2Ox+Qam z{uk0QD6Q*((LI}vKRP&CuN8~8J{lxF}T*a#NB~9PHSh9vz4FbGcobv zkX6JQX%}=7cvrqmG!cVjOXZcBL^qLKc46&}!NwOOh2B@+taT;bRe7>k%c)P$;tl3@ zd6K!Wx}Td**&$*=mGqg91j?Gj>)Pc44SgvSA0{>P6-ly^)*}~;jW^>C#nnj|?vJ#p z+T)$uGA%8uxiQgmp?=Wl2?U(WebX)7)m*(@v7Udu$2@agpIil8`Ca{82V7~53(%a$ zyOx+0v^UyLv#+a~_Jd?s4T(cui!r>eoS~kPd}JjlrN+pfe1+4*ImfeG8-2U|v#d1! z6TXVRXMyeZBi@jo5s~7fEFvG$=2|_blg1RcmtfXF85)U`+*{kE9n;U7V_m^UE$z6z z&P=UGk;`hHY~)buzSD*85S2w4u(q4*!OkSUOSUI#=}vH^MO1>?N21~L>nXP?Mn=<% z%%#4Gv@(J%H8N|9=`;3An?@Ir`)t0p3qJMYfHT1nDg5C$GPKN zbb33h_)F1>XK}{y?$6KLvLU70EUx+a6|xT=3?0mvMbFFX@Nb zOV)sCY7mdKrQ@>tCz)}XV(qxfu_3V^5;i2w@a+xMcM6F0BGO53{jl0vQ=QV{imI%R z0h9I7CeaScCV5G5RaJDildKd0pJVc9=ej+gAD4IJds0MOYf5)7cY60gOhd2hJ?}YT zPS?)EpD)()u{YWVqrBdRPF6+bO8G`c@T&GvI~6?CYoV$g2P5Xel@D{R4rsO?&xc${SVISfdol;i%fXkoB z=kiyuZ-@v!)(Lg0@a`hJcp&p&z3YjoP&>5t9}A?kE?bKOy8`P1rf-C=N8lqk`ik}v zahOa*UObX*U{Bb7y}tR%o#_1-bi;exQ`jYqT|gp*%v$c3o+<99?rq)~LAyQuU2b!% z(Mros!{q_zgtfxjVjr;^1=jl)`pfwq`S$u71Qu8atPfU)`;JkiD zsD9NDdT%lnTJcb4XP`dxOzmv1J;N#L%memXP4mhdyuYZc&ay;Pc~*msduFaQvS_)Z4e+Xd`8)+VbI z(0&HKNIleQnwebnU2AcB=~~kTG?OIefajXyaNoovw?7{`g=+Y_`RDngpy_R74YXc6 zRh5^<(wXEtYoZIs#=A(&PY7rv7IjevorU%@CVVGL-nSIyu>T8Uvu5O;@-aPILt`e?E z?tk1}%!@{TBeQwL{n))iKS77kRH~8vJK**&_CG<4ogawxFY_xqk5koIB(vk{6BjII zlDB5?y3h%sEraWNTYE!18I6W46C10|*9x#yB@B4gY=-ow0-(5eZG;>)!F^8Yr1*Z-N2eZUp#>S5ew9aL-CPI|fR{Nnvk zsa=cbVM27F#(eBdkEH5)?B{BnD5+Ci;frP-8z$O0;Kl7bOT#NSk;Scus z-`KXyqi&KSw1(D0zocK$1BPXOa#b?tU|QWSdR0pXEFDd%ka=_}>&Q}&xAGOA>Rjdp zoQ3vdXBRU2mrgfvgc@`{8B8zg!j-{Y!L#05$J5TW!?>!gp)s_AiV+d^pg@Vly>af? z0jP=pN_d)ZBuVq94m7Yjab5NkGo89TLKPrEvX&Sv-;pkKxb_bevzsw5t2}$BCF(8p zk;n~+=eavlPs8%->0NU@SrK&yxbhfNwf5{OOJJMW9JZf52X5YuEb0{-qwO`*x`=U1 z@1&R4`{4v%MdZ#-JE}xBCr@5hx)#oxG7|NAVVO+%3ys#?oma|7jNVa zl9@R45c|x|kY%bKa8wzYhDY*ia*aHKmE9Wn9ynpWvpZS8ts#Nsfx-48F+fyujyu(O zBl&51FFKZ20F|EH|5T|D`%LTpSJ+_UVWNoy@@X#O4Y_4e6 zD1AAr4duvX_KKtwi+Cd^0XbUd9+m861E*0|1Ts+btA*bQoc1X!79X4@bahz zXXoAcNL~Qb_nD}LT6(CutbWV=yuY(d)K~Y(dQ2F&Ov?hEHU=|QUP3?nDNEk29 zPs*)gxqa65I-f;8QBs_f)#MdgO26fzu7~bmOxpJt*UfU!8)VYQvluGK8+AY&aNfWh z*Ay-}R_#`A)OEE(&PV_2F#ikRI^USUP3JM<@lth9yJ{pDsq|_FHR@;^NsQ{FG9czC zdyx}nAG2rKmz)-25KinZV58CI67#!JSby*Gy6zcqdJFBc)?a&uiD=Wr5T^}K3D&Wp zeUJZ;S$Ih&LS#WFctfj%Gg~oaMYoknn#;bNIf}P*zKVRL1#-}mD7leT?%) zNn^LU%lvHia+UH7_r$pV!F=Rw^n>gz!o@pL8qair&lHn@SSR>b`1|-@_-Fca2G;V9 zsDeB*L)}?D3q5B%Q#?yOQ$77W?cAr_ZQY;TJov1xBxrmX|WE(BC7DjXAWwiETd*#AYBR#s(>29BWTr5rxy_x|z0e%3 zPcu@O$@Ko@ve?D*IH#Q&w%f{PeRVd9HR>fDjH&TE=wftjTqcvrX0llALTAel(u1^+ ztr0J;s&n#@n2HJ%C`;A{w^*H2#pMPOBQN8?Ad%D z>fl9GGTN8@%bFrT*bZe*UG{>V*7E3uz@&1vkL}WGG0v*do8&Nj!YVOMD7jc(P-#g& zlFIq&zvff^g1$%o4c0m5y?CzvC2=$dox+mQY2+x~txeMQuux37EuxiSCec+5RZi{~ zgSn0v_Fk2sRj8n=fn+}GclFn>v{%L~eV376KLF;*rJks5V6?^{V{?O`J8(5$_ z;+UMR4p73@YU!z;y2*Lm__NXpcUtj{vY`BciR#a|0pC0iUaEjN3#)3ZG<6*MQK%#2 zC9)Y=X&?R=z4J}6Blq}o@g5vddXim^lT%20dXC;;-L)Hf7QL!*#dXZHENDb<=Af&= zTJV>UCc$Yu!DcTb!OV`_x-WgMu8ZCLJs0dq&plN0TXv-jKko#!euo5oJkiPXo0mR&n% zltssIC;f)jk9k;5dV&!38Zq`1+pKMd1>V?@HJk@R1nwq3*iWaqWM2!r;cA60)aP>0lNSw{rp9+sBuht`^X*V1a- zC~xL7hnkmMEs@FiTxDF3%}H8K+MX5AYJ#~4mKFIQOf^a8RJYGqH?93vjCBy0d!}8XmUS@_c>zzC0JdGS#A;#`{{p- z5=K8G%2=h3W(DaJZMZ&1Uxa>@IQAVZu!(idB%6siSp}!i#cy%9=qjIy77n`hWgFOV zZ`oYVll#;iKzpKh$9Fwp95IF% z_lyOar4cO$JIBUp_n=2OV>~em=pJB>{6>_1O}XMEGtZ7}Dw^!0 z)u@Y>pl5)6@2Xg~8eE~KKQ)RQ^^N|RYB@u_Q2o?5@P1|Fabz<2>|9pQKum-_ftlJ#d$0rsL8@xTiz-^yK+XQ0N==H8drFD( zz+^wvCY;MGVi<4kGy}H33w~fP?L>F6a%>%aOj@XF=yIxxPpTx-6HfC8VOxmiYk~Xg zS=)FAux7jI2d%rl(5Pcn)EnqbKdQaPiI=dycxeGN{IQ$U!zr7H5j>R zGjQ*RX*=NJ_2h;+NPg4)G6^-GHRLQX$`Tczlh}T3pYgz*+MUDPZR|9d{>b=Z&NPCx zu3C2XnkLY4q=H2MjB^7S@pEU1lM&U{Jyw*}0V-V|P+xNSU0ibdId^4gxr-lj#yMA= z7tT(elYhf5-6j3$c{UoIMp@t?vcR4OlY^?Iiet^#De_F+P^aVpe%2Z6%y6#SFYJyy z1a+_V&Q1OvPq|miu2;a@t_2bcxQ@6D7v@&G7PzvR?_s=IwYx?deF2+DZSa-r)I{PT z_enf0#9H7SEzt_l9Poj;)EbftCt?tAL}~R*P7;jI;x~cEx1bi3-D+?5a(vEjXC^NV zj@PH|$pL(n^TQc!-*D18;a0~$aceLyqzcl_>^7TC%c83~IchB@*cG-D(Xc*N@}3&5 zZpx>qMBNwdf!H&H?>!7V>8DLKEl&pbQFE!GwYoEDCl%oYf%r<^9jaEXPz|cW6zfg@qs0*K%Fq$0U7n)ZNC{dVon$BB?G3$v9)Uc$u@R&Tba@S> z^XWKt3ryM}%(o$c2e`mz*_DLJitL1gJ z!B*??cF0!>$~0mqRQa9xL|El084z8a&CU&x1~ac+d9mx>zi`2rdF4*`{S8UAtUSKys)o247Pj| zokpwZb(Vt8rRP{>AlaIvIZ$$PR+Qa9_P14E0en2(Xl#_$Ul{X@CE9bgj-Azp8Bv(e zv&(3}Z1zJB0zcjeIQTsLOl>HE_CPZ>k%J=wf?cFC(lKlckpVVsva``IK-Cec*73PduO0c1Fg_;wHB<)7%Kt_gWgs(Yn{E`sSo95 z3Uui2QeD+o^e+r#^;lZEA6T&i*n&$~^TApc^ahR5PJyd-$Qs%UR+XGB2G*^_!pJ^# zn#@7fs}O42EfK>%tIfoq#ZXhd$MOQFmt+}mil)$0=a;k0o@Pz4 zw~4MQGYN;b47(B2H(*VQ$=QxX{3y*pt6%6EP}+U@=C|;?q{{PT6Or=5%dNsS@Ym&cVcHhvKnAz zCb0piTg(OnTF;U2CeeJDXf6Aw`oO;5$XilO2%aRG$knvIHd|ZHp0mm9ANE_TuJzT{ zq7o?d6MA#Di}nNhEH7PhqzV;3cw3$eT!6OXOeyR?A$v$9>5R(uUG3#!EBT3h|C(M^A>&w#g`N&AxI zB#OL(25=B26kJtqAgkGOkf`hou!}*v^3d*xr)9`dRyjMtY6jUS?e%sMbY&GmmQ~DY zZ@cVL&I~U8s?O0@+ZoHeHCHMA^XeR|WO zs6f|XndlPIi_}A3$O^rQQBA)HW-N!ETARsMAU_W#$BBkD8I5fGwI~43lb# z!;aC_sT21n=xiFC^J@t#fu8XA`f*AIrSzDEUE8(Ai`=_}1)do{Cf@Rau<4 zNWNDQ)&~8m1+~N4HT{cm#W-nfG0JI&=n-^3j#CpzF>;z5pv^H2;HZ8FI>{ey16f-2pPG#x>5Sy2S|dJUjVl2Aya1xC&uw1Yxd|U?LlHIG z4!2V~Mfhki6)#m4@D#_$C6a}FW05#Jc>;(&Z6Um*vo2edw!M>^S^j>rcW z2(K6|-pgh(9(lxkHJucuY3NGq#z=U`Y+4BFUmvwcT1t5JB-#jClbI|x^|Ob1Q81jV zjLiBgW0Dza1*6?;I z*ce#kVZ9dSd{sl$$AHCNqoaW4+rYXrX(JG&i{re0X6v<$tS6m}zQ@PfQI>=JL`P;U zGO|h94t58&+z$AE6dA8tfni$3eL&CWfx-&fukFIt6zi!y0V=);_ClTtyxeq>kvt@$ zu`@qNEWHTsJujI^(vcWe6LwsLd1+5l2w7qYAph24n5ZT0LTPM})?_!?f{tJh5Y~5X zo|YP4TZsOE9%iLhlC_~9>0|nmKBe7JVNR)Tsm9WhK4`E16Y2OX~$j`k*R-Y-hK~DMCe6QCFnH9@i7MWHNC} zY?Dj|p>{h*e3KRBEAW=ZRgk)kSdbRgWjv|+j-2N{c5OR3N6*4vUDy5rDtN%Af`3}9 zb=1@9O`yWajdvY~_kT@)BaU9cY=N6Nh0$Pgzo_-9y8I@;A^Q%7-|8>NqjJ@hUx!yc zjNJ7EFNfRay0Q!QR|E#3$aqkuqty!VQ9-^)HO8)YyU&Fq$Yh2_9+2RJVv{yZPT`B z#o%4CQio>1iHH#bE7D2a71zXcume5#D(5A{FY zPf-zf(MTw+rr|ViSEZ2qCx{-RqNp!MidmvEKg*LjjiIVOgXof%yPc&@1E9y#@`n5u zo~)EA0&hG3xMB$IP@0d}y`S}BbyySd*40=B8b=kXj7w=jM5;F`QvOmsp&;x=8Y5r7 zhR?mFjv)i|s^9R-n{Y-c^wU?M4S3ADp{i4!G^K?}BFRru;S6;LYU>ZRQW2=P^08s; zFnq#RvYgz)_X;KbXgV;hr4g}blMJLHEyr9e3w;9Kp|JcH^lX0?uP!nG|#NXY3is*9St2afY9S>Shc7 zih4&WSw#h*dpi;+Z8UJmVXeKMQ->OYebJh0|7o8P1K%J=ZvcL$2JE@5%ApFXHmaoD zDC;Q-RyQ|(cO~gY2e8~=0_(8a#70&!V8-g|HhxrvW8HlbfUe;4f2)N2U{kA7pIY3q_OG)Wz}bS z5gfBuj)6}*Lk2^CTMe@bwy284MPAeFSnX-7C@PlWs5L&(Mr#apqw=t%0i+#CgXlK_ zN}1xQg?_?$>kD)?TP=ZVq_XOax^on2RK4JzbD-i-RO|!V`3R33=|tF5?2X_w!kqbt zroDhYx=2m+f&IS#e(R17>NIQxE6hp)lOABd;M-QSjI#TYhXoZlV2(USZf;n z0{>8rj-b70UfPTOqy5xZ>qFsj)9DlR{Xkz;z{Qqk8}SwE)kIk3ATbu})e5*L4tIcM z1<--LOJRCb;1=#2*yQ5{(N@%fqU#%6CoQtVoU4c`E;S=^imwsI=KrMZ&Q;?TI zyn7{+%a6oFw3|mziAT;`82SAOc11(SE-I{dwE8SH&H^V(@I(dWVt$_21hPK{R<58^ z8<^DvozZddF9pONJk=8ML7oTlzJ_>I18DpZ=}NYPU#w3mAs;c2m9L|d@uvhGr=N(z zo^4QR!Qfv3&v;o<@la-z_2po>NLoPYo3S>7$xyNp>}Mg^%w}}9HH5DZL+nX`$i9Na z;KWu36W)fdVEK^ujYNDN1)ugW^lq2f4|V`px)`{RU$ECD^04^DFY& zRMlo}QSFKX6Sy3)bOJu567rSy$`4O=nU~XNav}VdG^7xj^*g;m#-C0hOD=PF;Jnz1>;L$BLe^m3*cs z-nWz5M%vQmKr?&jNcsyqJrez|F4hmTurBChQI#8k>2BHem3n3%WCMBaIzbzeM_Ddciw5@(bP3eeH`T(6o! zI$-ZS87;PmM)B*w1-Pg&6@qK8alChDoB)${4$ zS|Rp{ox(Zyu=$9_zgbGwiq%3)e}x#=j`hN=*SSe{V5{qL9jbH6X8NFfT!GeUzSn2dz%KAs^nL!oVt|5TAf%FJQ+y z$i1=&^iqxSG`mO&e0CJ`v#(IQWe10{-WY0(FmmgiaGDxJc~YNzQ9pqrip!Q@z5C(b z;xD{7SSK%U!?Qa!UxU2yfs6#-5r$gxJ=qxNEkY_1jGF3DM4BE@9Bl!UQc`7=C&fu* zn=4T-`h%DiA-lmM52%;m1jhq&)q_23({gKB*;V=#XSgQ3*JGgT%fMm zAn&*$!(?hqJID*oR*D4> zt1>_xw}2!^b$cC7>KB;>Rx@1I6EFE&Ahv0uvp9$v>uPwq=Om}%n6!KexbP_0%6yN9?%F!dt2yf0P*B}V;?Mj{cs{&9oBgcJuV~Y7uJ-$gFfaT ztr5IJ1v(UL#3ELLrGc(sD4T#>cNgN+O0YlGWC81 znZ4rwh#|^Kiawo`z^>)AFM3h*1I$4d_?aDN1Mxk*$gn4% z))E1jB$bBc-wC`^hgL#^zvABSC-FL|11}l__5MjM5-U0vc7og)`DA9SXa~9v9`Tpl z3ollI@8UIherKXR*WTjP1z+5dSB2iii*Bzv(nr#u`tTVl%x>sLiqJpke&eB;1J&fx z+6o}}eW)&#K#k2sI>K@msbR>xYpKd|GW>oCuyemLgJ~xJ0smhW^8&zm&~WvZ z{7a{Uhii>_V|&mQoDT@=Us{yB2DkkIY-bm`9_&*x__>uLv+!d2&v)S4&FE+AFBbsg z)Pdb?2bM_3R)WEfXVakpEXjiDzuyD0MLy=X{i0h5URP7}PA#?0>^^Ccs0-p=0G4y7(fHfouVH*zo^Z;$-|^ zPGspD=?L--c71^?P~*Un)x(}WhYz1DFM*Tq0Bq-l?KOtg4x%sMYNR zA@l~>MHIN6mgp0XhX!Z7Xw3g$zmGySQwbj7I$6i+X#0UuT-r-Ly}nz&to=f*APqf$ zeE6yAq4LQR{41(R`$Q;Ld_5lwTRg!_IhQ!$@5M_z$30|*Ux7PfkrB=#DQOBihE4*q z>5Ga>C~ibFQ9(QmJ3PkRz@dKd3bTOLQ{pT&2N&g6cSt^DH7~(!Okos$Brh2LD)0ek zpx&w|U&;couM2XB>?^wSyZp8jYd>|m@vAu9_rarm5*x))*%b(WAW259VC@#tdEhD* zVw&I$wvzg=K9O`S5JOv7L=;U;-jSPN5yLU(Xq}n?hG+}0MRsI|)8)TP2Mf9v+*CJp zPC>IJ7o*2x3AnhTSmQQOZ~K7o2=;6ltUm{kbCir#1EE@Z_IK_TaPC0Z{eEN*=jd=` z^2xOx;NBJhLGRVVwb8&G;rL27^b%cAQMryj#K*`KP60PPh5FNvoFN6~d>jFn`$uMj zmjM@z+Ts`J^*3QhILivFEk^%xaAk3dt3#U<36xa`-y;!O$|*#SLdZ>$BOB@t8+Z#$ zl8j^_O~KWr;v zS5%#PD214oLi|QN7|een7R1SZDmSv}l!&BzNCaYNMN$?jj!#&taOA+_IO&Xfgey>VEfBBT*=u1M0BbOJV9fO=Xu z5Zq$S>WD`a-cDKrC56Lpr9kiJCe<9cJ11Dbqlmk8VTEVG+XT?*P!gH%x&LSWnUHbj z0;lK4bnW5T;R&*>%!|IEtzaRllYGGU5tyCz4ZOz}aM*gJxEi6DHupA!rP=I&DAUUMjprK@5cL$R+FKNSPvA_Lkt&#p_}B$4{yW%FR;uM zRZ-;21!-S=AFvqkRfTCgyq^j7?5-Lj-^oqTRvbijULC&kB-pf{@PbvKighDbNKfm6 zDXdCUgY75_577zlS{ymtX3~-5QBqw|ov=DDRZiITcM<{%Y$?wH`;U{mP}SUp|8I-g zWhrG3xf%MH`f}y}xsTH-9@%$QFjOajZ6C_+Slx{9&XvUuIYf=X_j!yr7>4Lq254{~ zxkPmuOnb9>z@ja*rP?ZOfVN#{+FV5FCEz>uBdfXz6g3w3x+*Y68Np?UutZ^=${FKa z<2!*-b-4*${F{KDHj()_j~%hITfxp&QP1Te*ufmIm!E+fqw!qH^(CT#0F#>lMCyTOJIP8Rk_@K@pzzubPw^Ib`338N_|gSc1V8lC ztKb82!+xuwj(bDim*GI0i$rZPO?qT6c^tnp7)T-n)>s3bTN3)!SwOQb!AL~l*-Ojk zf5S1d#Uo?^JpvUTMc>y2_DQR+4TZv|Hn7Ta@DvTf`1hd(;$v;-;YPwkr2)5*6*xC5 zY82<7{@ep>kRLZ7e36N&iHw!|!N?a;>0vQ7QFmNPK7n0{LXXTatgK=UksEc_{{B;v zt)+wD-PYsp)K=4RQ^pz9}sIw;G}r z;P)QGNB>65&k8S-6MFa|*w;wpijlw+AtVnNgbv8tjzja50;pjRJ|!F{?=*frAJ+2{ zeJi;zbFU5QL*|2BeFv2ehpIRJ|DNX&d{8G<8}aW97>Azd(rGF$!iN>X^KB#LQ2Bp@ ziqBNAYaT@R;n-yz8O1Z;ruO){>~g0(jNE?();}1`U|G@%EPxw)#17QMKH&t{!h0_O ze;Efxt_3V}Ki1?R5a}j(e4B;<^UMN&eFywSAyflf;;w=KaNjBDt_;}%Ym-9d0b{ov zr)3NJpME0RN8ps+Kn>wH>SH*_em8mk*Vm2dF3)$3E2&twcj~Ce}pV z_$_Skwh+h~+k!*chqHEE6~j8G!21uwdX7Ma>L2v0Z9wH?3~Zzu=}Vr%YlWbyo9_P^ z|<>#zegK@;3apK<2wq zepZ=rW}AY0*ageW1&*Z?INgC*{maliR7MT?3Mq;R)C?Y{Gi>e>c&Ge`+!I-6Sixvy zx2<6zp}_9nQH4#9JTn>TjLiBNvX+9-Tx?Q_n8LgoyOIySy9;(^3XuLUs82V8M=A+q zxd&^M2C9Q5vaf6o{4h;CkwdXZi@_>pLf3n4*mr&Sg1zBe0+yUQJ0X5TAc>8%kRsSL~41^s%QUqUnhO7X$HV?KunZ5_YUjwdg z2UzEDVDMD5B3QJKV8p#(p>nG)I0wZLz2~Aja9`%Z**uO2Qy5t45GoaJ%CI&Z)vcZQ zF#-E^5`N(V@;VoG%Yrq1!3+wHHyN*HLf6p|?^6JE=WuxI??4Bg$pi40^T2%l0|iD- ztXMDD&417xe?>$;g%vpgn~Fk|-htJBL>j{OThNI>oN7VP0%ekl@|G@igLZvS`DF{BSCsr{H zYE(m1Em%_%D9OT*qb`G9$i~VX0jIwmKI;Wy=Ld2ZXznbc$szcjMzH0J@S#(%h7-w1 zOq|X{17HODY9{!m7@V9?WM?N4>90d+H4pf*9e%80XMxCPu!i`P5;zmpRcD;S7e&&zwwLl!4sy#n*Kl}-k{C^&0WO2 zVlQ!{W`c+dOjQwo8V#S=7gjSAsHG(|@P0)77TDG0q$ik=S0pW}PajaF#$-r!3g0UU zS?hEBh{1QtKuUmj*^2WRfK`-6mRSWkMMJ#L1w@JN_>{KfBIOuU2jNu0MS=#g!xUgJA70uFD8{V9cKk3&6RFXC!>Fcp1)hgyNb zUyAq^4hD8Fc@I5R5D);`29bTIgKFX(sfKl{h}km?_O%k&egSGVS7l=`1i$`jmci%s zKow^(yunvIdwJBWTH@3U1-oAxd0In!=55$sYLWqd?LDk@6wY-~yi+QiQ_MVu=e&qX z1qak0JV$=If*wchsRXitT!^`yk*C!FR{Iy&qCV-}E;OYag#1;6H8rbpWc!G>r6U^xVc5aD1E`YkwDX1w{p+d6^Y*|G-X(CGp>)V3= zi-dPmz&(#KMd%EC+FfWE-hrXZg$U~<0qpu&C=Y&tS!)44<}hj=IT6XW;nPeYARm0q z&i`{Yh0uHQTD|~EKP9IkE}cUCs_9=;inqCqEG`V$^aocX0am!m~*ex@2x@Bfao3>#l2h7YQ+xo}J z>DlxCU+zn?U?j~vJTuRv&(INrA0Og1e*(WqX_CnQE(jt;UOYKhNut?qC-po1^^wLQ2{8;_;rs3u^}$R zgZPjDYyt4VITw7H4YB?UHaO$_r(6&ughY@Sl0d=D2!TQY!k}<~2q^MD2%LpOA)u55 zlox=v{(2*``K>Kq6+nTvwIJ~Qz;{{A^$pba7wDkwzs~<{0U5Ng1(fD?1zHqnXW;#T z`Uct*XjK4#R&l_cz+1?GHh2gJVVi*iM|g+;t_45>Ac8Y|a|sNfK7^vE56~3>^mU;Q z)Q(zF3u;1*r~%cZI#i3QQ5C90opqXO?!qniIf3*N5-(1WiT!B@=y7Eps05p=*_fcHcJAhSsDUz(}Dnv1Dp){ zAAX9OrR0~Kv`9%nPC|iH1SBT(Kl0NeMS*e>AXQ@URNyTwvcLx4q=A|QcoN`PGe>?& zKHyFO&3~W)et3TCE$4x20q!{gb!>ooW>yhTP#2e?^^6Yi*EeV znD0va69*#B2+Tl6iU zX#trF=wg7knEye`wZK(?fP}XEHM6^=T#M!s{-eDC&24FQKz0LP3`p!Rscot0zZUJ6 zm1(hx0auPr*?qVfOoEWjlh(A@wUno$pQIRNQ@(Q@9y;86>;1C}vB@xX5j0%yN?&|*W$|K&rA6>0G}|61u5srY5x zfBpWl@BxYWb?w*jFB$q*jshGDYypcMko5n%4_y7f__s{UGr#WsdPB?eziRrwRxcny z0k85)+FQI!U?1>k0R*gJK&JxU>;Ki1fMx`AqQ&$6k~18jZHrX<0T2JLr2Vo`|N54I z=@}5n2dPfaW(N5B-IoXaIq;z&>!dpt)obc%}qAU51vU z0Y6pM?2BrfztPYvrvVxLWp9klekWjU0=5xIT(hOY0tsl*ISSxdi>9?`SPM-8wD|v{ zg;s(6FH7=&?a8lLr6pqd<;9{{=e1#q5)H*bj& z0@gl&09}81_JA)4Jon2E1iVDR(^~{@Sa}?L~tz>Yl#g5 zQB=Sqw`fSfGY2I3m)F6AqX3Np)+k^*Fu*ni=+*3>n%e+@_IQBT4EW-JfBfYcTWo89 zN{VKi+7d}s0_iMkM&P#;NO>Nbi+({rqVLeR=o^67=u7kk`V@VPK1A=Kx6o_oCGo6TOQ*LSLaD zz<0iZul)cTQx0sp8t^5+69h;<4oC+VP$mXSh1x=$0NO$6%~VZ=Izm~{AZReuAL<2l zhkAnJanKBC4m2B@22B9R6Tt89&_ZY_v>aLnumWt0!TDTJVlK1@TwejL1lN`}AFYG7 zK--~h&_-xAC?9xcHS`Cxt{EGlKcSt_K4=fL6;{e%jkVyFnphw{Ky z4Anpi$N%^M11VHzxgf(~8iWVd_8oc!-GRiaLS`Uik)cR`Bn#<*bVqt2gODl6YUC*L7%4#1 zUdSu*w)al+Uyuw_^ z9L4Oz?8WTC?7(coti~(_SdLkSS&W&FnS)t^*@n4{`3#;iW4u@*R*cQW{)XL$y^H;T z&BxYb5nMQK5N<8*9PT-;0H?v@@sap0_!0OS_$By1@h9+i@lWvg@u%@?@ni9s_yl|~ zo`$pFe&WvK7U8<$XxL)xVQhCy17;nD4PSxVLtmg_KyD`cmHuTw)VBMu-Zh8<8R_}p z$#7qHi(K2B8s{L#KMslgu$^N&XG^!{Sf^TCmZO$VW{vr(d7inQnPjRlJu#g$?FKky zdTwekGtIrtJI&RWK9-->1-4L|)PBvez?tr}y0YCfJv`4_WR{oW&GwD(x%`*Wv4FO< z@B_>N>^xjgJP%(>xI~;qN+21@4=IbN!PF-2Fu05~#z@8%#uJ8$ zNn%nN2F444)p==nd0~RpZa(Dr}@)- zO5bL$)tiZo@npHl&L@tk_8_a=^40v-=BGxY{$2Ht3RbRAMk^zg zij1U|3Wkb zErJfiqc9ZAC9Dwp2Ud&w3%`$0OIl7zpi1c*8GhDm_G>Q8OXYVK#0zXecZK7GZqYt5 zS-e>MPJ)+ol}wfl5F5nZM7@L}K@|(@a^!0 zggFE)aSHJ}sU7JI$wkg0FC(uaXOT)tDa09s-S~fS4Y&~OOw0q=3wMBiLwEU~`rN*5 z-c`t9&p!7CAk)_zr4ELDnC*hqXPs}cSWZ}mSa9Zh=0PT%Dcf|`^vI+#w>Mw2q**>& zCtJ<7{q~*?fs^1Ox_s_p&u*j*V)mB!8c+c=6TXWn#^&O#;x`i}5+jMFq)p^-@;k~T zih??mDx?&ywzv-%#pk zSUQJpXWV5DXF6Cn*>gByoDbY#+#kI5yraBEK7ps?{lTr~CUG{i73|5Zd{zjv9V3QL zrID%Wlx<`Sc{1rPv5cU=JMdIo5Ecjjgm$9i{lEKO`PzDqBi}rY9S$UTt%1IY5zA0AZ?XEY9$~M^@2&Rk^A7L^BNpT~lHyt9KH~b} z>gA%k!d;79YWEtq&C|m(+>_?^x|=+B&s>iR8Gy_N{*LA`dt68eG7h;2?7}Rs$+yP$ z+P5Eg%vfZYXM_8i>$_74v~;L-iTSjtmvN0jVd$=3u3MvRug+GrRnAcUrMj)@rmfMp zHb@Ky4cUgzMuzc#Da!QFJlqm&W!NBFk$sJW>^Sf2<^)`JcX4YyXOLuMCsO1cV*Yg=iSveC&CX!WVRolC(5_RzQe!Bq$$yff2*Yt5 zG3}vK=nDU3;KfFJ*CEq9F)kNqU6Z}R=CF0PKC{feIfo>Gz;1S=U|F})l}nF;S+&B&BY(bPsb0(&&S^3#oqsKeC=uu(h`%Z@=do9CH}PvgZE}f|i8-WxY7$aQhUg&P{^!M!dJohLN9?}sRjm$&VA{&uE zk-OejK8BwLVy#)|15^hEf#`aGpW%N z-4NYt{Q$k!@WHsr6luC<7MTxOaF*GYJnM8@sy)^ranv|FJ3Bb}V9R&Cb(eXZ-f-U- z{~6Q`&%!*xzQHZS$?@s<#rWq0F<}AWAfb?`r%a?5ve)n)1pOfn3Vt89CvsTy%~)pa zq*z?cg_uFnpQA}p(;{t=CnG5lso@c!&X9+}%O#VnNQ`*9bW{88!{hh9;q1{9S>Eto1B&N4td1F^&?)0=wMKvesHgn${S`>I7<+ zspP9t!$?~v=vs<$sv)VCj zOf5^u+R095`#Ck-yS!u`%+28Z#u>-$!aFaZ1g#Kp#7GDsR1>}_qBs(Xl16ulYKW|f zSP=F!eQ*-U1Tx)a9}hT{j|24V+-D7iN# z2`+*MK`sb|2Lm4#ib;UK!d*bmWhLl4XZU>H-AHQ?PknR$<^IDx-#yTcbN%h~IR`k- zJL2tb2i-B;ami8aD0JL&Y;jC*jCL$={O-Wp+u1mlr{*kUiD9@cx9xH+_h6AiZ>?{GUw|^8&)6vZY=Rs_EAJ=?GzMcN>ndj_SHT}1 zG*EO*GB>zmFikQY_yNV^^4U)Rh#Bfv8vsgH;Q(S87%$SQYvC%i9bdk0Q zX?RZ9k5GFkKiDaGBYr35iVi0I|*%|8UTowLs$mIH0fj1@ws@!I7X(D1>pKPgsrFhlRm_#zy!MG}_o5mtFWgCv^UTE8C+Nu?r9vYYSmM#rwX0qOAWSZKU zW6hV$kIeVYZp%w+gS~^}hO3*0f~b6_{4R(C$6@AS>+y>T22wcbE$JEwOYB3)Cp;%K z5{U!_VHCbM_B)0LjrG6s^+0}j=D0_?zPN6??zy(RLY4zX15K zo9HIcnoHg@h#mO{IS6{_7|%=4C(HoDU?skxz8>CuZy%%(S%3&UR-_$L=e^|{?ECB= zg?5A%!ym9jTq<6G--q9XPr})794vl_k({Tlm?H4mq4%3oBsR$KK`5N1!w`3>fesY+#Q_*9U~kpN3Op);F*_`6K#%s8?SZ}88RlBQNEQ4;Bm91uP*G&;CE_pvwJeyoV zegOJ`pGp0QUx~dynN<8{+;wa&wk3>aDeJq^gF`O`T**<g+||v?G$HCSd$o+@G|~T+|bww zF^8hFqkcqtdlKDj*IZYWOX3Q5BF+O2qhqq&Z_l<1tVT;G zQ(wd1`oHy?4ZVy9&9G&Fb&ySLtFk|GymG4Dd=JHQ%j5FcLEmAv^NSyFev^P#(HHiV*!N>Q%(W@EsBTqFP1Q#jJ`(qeW2%qscLk{3u35ZupJxi11I5cVcj{t7AvT#6*Wh$)h<@x~OrHMUf{W6T&}-4wEbv z{uC_XTG?$Gf6-=AR+D<;4`a@wAH4PMyN+SjE#`7FY&7fj+L7uc6;3%_F-dl_v9951 zLy!6*>9g9O)pIIzWyecS6ekqTC=wU(ih37)E?!vtthfg_=M_^+EM++r^vbn0;q~+; zxuUZ&O|?+F!6dNtbquh3Y{#u5Ei=uFO!JMUMw@B8sgLoTG1=&~jI*zI3EhdV&5mr_ zb!(I*!#vTHWT-a`G-6EeEN^W0oUJ`JbQktFd_VkM!bDOwZ78#tvx(0a{s?&;c`J5Y zd{L4hBrSwUDn3NQMFXlufHIyfA7qn4uHK=V+PEaQQHE$s=jJKcn zgsb69U=^~&tm~Y8{Hell(Jo<=;44qT%NLZ3e8IJ$FTx&%_YBVtw}qR+w}u@KjSOA~ zrjzo7s|6#unam2hfZC1xocIRc9`gliL`B|-F1F>RewTWrBBSYNLtTBBy6rW>iu)zf z!iV`a`O$fmc~|pF^1l_1Dk>OJF4M{P~f@aICf8x5wCOY(D!# zhr_iJ)Nr6@wMXTh6AG?ILVGRjw4QibD}d2B(tn`t#Eg8k98-zH+i-q+mXLK zTil^w^kW}lK-ri`+;&1RaS9oxj-clIjWm(Iu zLo75i*Bov6%{J5VhYND;cDfu}ZBM~SWxQ>OW4Nn_d!>g8M!)WQ_j{Kj(eACT@9wpp zdZZR`F32;$t@flLqkTuA2HYdkIO;-1GCPWQL%1tAISdzWjhr3LjLnRno3Jn55^ITm z6*VTZGV&16{og|W3SK8p4)O@r^OgKn+;6PzR2>N=)2R;`IZPFULkY(_u^ln}Fx}xd zsM#m-#5wC6eQiFg(z?|)&9TJIKrZwNaU>NK*W+>ZzS>s5I}loHwgXtqi3G zm1&wK+)`l?nD!Z`8&iO#Fd3g2yBgz-WoDYCos|K+59HVn?8ZpXGQ{pvqwCQ1zHOef zt}CuGkJ7gkoeDk248^@BHc)wh*Jk!-?s(oRUMcTSu7g|7TgN{lm?Rj>f4~>>h5S>3 zD8U%P5U?#44CCwh>Yxm9bO;hLJ1RS-N1Q0(Tyk{Ewv={BC5a~zJ0*@v_#9UpZH^ok zek2SZJXsjY&0ykbOQ;EybW$a;E&dL!Kjs1S(7(#t&aHKBu=ljVw&C_t=R#K-*HG6D zw*mP9QeZ~7A3FwGXPW02zv~U!YE6tfR<%JnO}@A(wqZeiK|@j_p(#d|t$41g)(q9` zR_|Bdl4mul8X}~+y2CYND}O8dR{FARcg4WUYgNpuu&Qg-*J_T|wyTv%BO0QbJ}U00 zckA%_PlhuFi*dDSsyWP@Wu9WWX@BTG<5i#}7=!Ch^3&byFTBoz$s&Tp7rG{VaAa!q z#kiRG*9qMct|!q`Hm23IGPe3NZF6dE>c!O9l*nXy(v9RPsf<=}t??O?+jMNRHKR2B zbt)$zDC$zENm3xH4^s1~?5&KUw2ssevY%+f(=hR<+n?p_;@<1HWgBaGW1ej^8P4my zdYk^XE?A|OU8~<*d#UD1?ON%b#!K=ys=M05hI8htwswvot^>#slnH;qT!3Fe>HZww zTrhSW>t=#@X0mgeLu`}TMp~DfmTOKl4X1!cFKQRw5()T>GIMUrD3Iimk+FpshwM&*%;i^M%GnR|$FY!7D?Uf{iwhH?a_AqouNNVu>-~%DI!m6W^NX1FV_vP`J<*)?SQ%ob#b+rn!Yv1Y8tDTmwzjsSnzuR zr|?)YqnJ>*BVUvMsqlV@v0PWVwDL>U)!O$>ELEPqttr_ma1xQJ{=c9oco=pU;Q;9s zIhmYAJ-{jxl#7>0*pjiKDN#4#bxD|ny!bW=15)O;PH)R=d#3H`cDFm8>U_D&`_5N7 zA)Ov)x;vM2(zVS=n~^v!Zbi(f$VH*v;Df=~;7Jmx7!Gm-O%$#ZnZyj?^`O>4!NLgP zrJ$vJDp$a%=M5FagS%uAUOY!!BP`$zU?xzbRD!g2{vtVxCke{LXQ6)R8a_bcJ!upks#}wB! zVVZNQql#SR9?c8G8gobMAV*ivb94eG7URcJiR)-C_GL~UtA@#8jpa=cju5AacS{b2 zPK(e)4~dD0c@oz#Au5rd@HC-wA||<2>YY|YT2-}@wkmIRyH#A;fwYaS`lO#~EzQWz zFl3x)eK&nhtBkbXsq<1&lGt(gA{#?Og3j@<+%f#NLXx#Ua^^hC_9`Yvxy#Rn(PDD@iYM z6!j_Wl>a=hF5g?+raYw5TRpjEQeEeIeN%7QCOJ)hTCS3ZHnj)w@zDligR=2p6Qjv2 z-=Z9&s?~&Pcj+;DnO?1bY)CRLG`%zrG=Ug|u4F5K?7%IRpu{W~kfZ_epJP*F2FA{g zAC>SbF(HwW*fl98d2!166mNm%xl!{ z_{Zqq9zM zkGd{fM@6n(OKtD!gL1e1&XOS~hg!nC;f{#o5g#IEgs%#thJ=d^q7kBA;$xB;FrKLlc7$zt~x6RR_A3i%6ZEU_K_HueVm61ofNF??(ghzmA?JQ5m|qmiy~q*oBsoi6t({E{t$mI4FY_Q{gnqv+RnuDeRBo34P;yl^O^xoXA;tKQ`MtfZ zhv5GP=8G4>3(#5KqwWOzSo2f^Mt59aV%lZtZLTtXF)y<*9X%be^{u&safsfa&(Lo- zG?=bi2$uGy97AVau=bAb2}o0WW3ULsmiq508p`T+`v92@o7!GE8)8pd%7?ur8!7?5{|9+~#Cz z>W-An3FD&FVLVBW$Rt#O^nbIUqo7(8F3Am<5mFyg7s8fEz>Go%em71WGlc$uew=oS zTuMm8wt=M>GG-P$!N1B==WMV~w5&7UGW0h*Gewx6T0U6Dn;sa~fLMm9->%)J-lE8D zT2cR9+P^NVc5`h^jiy#29W2Y##2a3L*>{CWYADem+QaIX%5@+Y{F|S+Cu# zo2&Pjx|>VQxh93_50k^fwN9`)tVC0Z5oahj=9o^J`&rJ~#@jP&A8g?^zBSL%*~ByU zGwrb~v#zjK+9O?Ey)MiO;&MtcZ54e4qc5`ua}VPNt%RZ`t0+h5GdP`v(IG1$SW%ql zjxpGnSuw%U1EWf#&&O_zAD=J_Sf-prev&x(UdrucMdFqC!Lb!F1yKcI*`izA=PVjC zlz9ovNStD2v;JVwnf>WEDGFi%z5u@le-Sqps`V~%?X}Oed^Bg6l%^b`-#7%!S_+L% z4AEM>`k*pJ_Pud+eMs$!s@%#IRq55YYM9l(SKX?DDtA`#sxQ~5YkStl)?BSVTV<|3 zS{qZBTi>r?O2eCmlEwjz{-#?XURt2a(H=A`FkLabtrP5}?vdVe{+0e3bR}GbpGqQ; zb`eFm74QahmS2tDfDS<=&<1E7dsnjvA1(IL1n>cWGJvf@v)y1u*nP4Zny4`aj>-|U6@voHY~MI z^7*7ANu3j4B~lYs$Ipv>5pz7|bj;qUvhWzm#2`8^h5drjitHk+#Xf==DAmvOiI6PU zReLw{Si^LkMsr6_uE{8x^zG}X@gH`4=>LAoyM%WKKXSh0=H~uXP1=p@<$+I6~0W16|UtxkjyD#Y$B`hF8F|#<#=S?rro1BCO@cXk~cOaRiCTq z4n`63s&-fWR$?ytvyfWAD411P2K-Q5!JZ;U>CDQdH9zVG)m@jW8(%4?YKHcsA<{J6 zO0&CM%RJ|NTyz@9CEN%dgzsU$;dR8Rq$Oa!Y!rDiL5FJ#e?@0|zq+T`&KRHQ=NlfF zgUvanKaB!|$&_X3XT4{AX(=&3H(AYntpwXYV2(s(x?myN>CTnT12(sLrqN(o@2vAh zLtWsBm<9NelyD}NL*^86?r=Ns-U}86m5F{6mq?~bUWU{~GGfExhbOd8?3tuVS(Nf1 zd1F#+QlI3U6lKcDqMOKbMriy6nD^=HjYuwf7Z}8OH8qyl)HZ5+t z+_b7`w~QgDDv}i&<-28Fnoc)GG&t+$)fsB%)U2)@C_T_%lYLN~)NauHP(D#`l_{z- z%Ga{-^*f}3hIVqXa;sutWB=MuHOX~r8hgu$itnmXYJoaTGt)q}>~YXt%RLbYggo%4 zVb#<>Sw@zLR!YvH=5o4-vO)%i%#`GS5!1_&yeMDvtmyct{t?H+-iDFG=S7`~EsJNw zzK^nnUk_<5+Rq=)5>Ti((C3C1WAWH!&^hFov%p!2tcK3wal~%K=cGTWbjDcL6jmd9 zE|y0)7(Oob?toAxveuG?Ob=al`$F9gS~fWs2F#%jyhunTjUcT>rFoQT3&oX?3flr|VZW$<^-+D@`}7S+3jY zGW-eZIZkX)JK^CV62CX^FWx5JC4O7Mte^s6spyELW2h*+OPCkrO-O_Hh(h@y&LUPi z4I#fL-X}!ie#5+igVBZlD<~fw<2RufF(J6IxIZv@s2&yi3Xyte4^tbpMd4B00GVgI zl#f-hnkd5>8^LuJVR_lU%kU&ZH!_y^7}pujfojkOTq(#xikj2{@98T0q~+*ubpe z91?67_mNbH>qYUx1EP*%lITOwQSKT>AuR*UcJ1WQnfoZuh|z>1@@QHWGmi0{7DSqa zdyK(D-$7)u92x7H?UXoQy8XWCkRL}PY$Nk&G0bSzLl%y1qs3B(QJIvtW*_F1WIt!c3Sm`<#&Rh*MOmOoWGRp*qQ3`GNauqWuRndex$Sz{TusE2HJ7kZE{n+;21(zZj<) zdB)+UOmn2^gJGuTl;T_yMVekEEE!QSqu@>HrkY8Oe<>cRVa+x$+O}Um%GlrX#-8WE zTL+j{nhsb`I?g#eJN|UWxZije`^x>J{d0W(c<~fY(6 zn)+A|*e^MjIlQi(o^3v!|E>R_Z<_Z{-&@FyTSbJ)eP~me7ud0^r>ujV{rsCjD}$B> zZ59b7zXks(DG>97k%FQ84F0(we$WBFlzWT2f4^+wW5lxR9=QPY|IN3B=o~=+SuuZAbB{iW{ zL#rlLPp#fjd9rLzNlh82GOD_?woBcR`ozZDvRcJz6;C77L3)x-rai0ftVn2D(nxQR zHBuXgG+k1hR99;!Xk?n*y4J?q))kIiPm0eEuf#6F8gcRXU_uV*G=)bwL%vJAM+hUN z5C;&8h*`u`@-+H$&LsZhpudDWMG0bzWPQlg(AS~GA&!vDkRBn0p(Wv-=llCS% zQum~1WSq#@(dtS{eA25FZrX$N1LBHLhRxo46W_Lh0`yseOP$U>xtXNNn;In@3JJCOItDbX-o66nHThEsXbU{aiH^mo%e}=9M7etoCUQduFDig8sCGpGS7sc(5kwgp$ z&JNnk89+Bvt7vDL(>c?5>AZWq68;Xs6#f%VGEIbE05QA|z}QY4kpBBVo+s3iWB=^D z;^~I;@;vg)LI!*LB7e9ttzo(bxu&kBLSEXrWJ2lr@{+3HnoZK}O>>mzw5j?rdY!%v z=#Pw0j#kjY@&;OcY+Y}uNxn~az={k$*u6MN7Z2MK|XrHcL8~U;E_k(uigq| zh+F7N@v!|9Fu5QTZz}#MQ4V6`eT<2;E41gVd4ennH~6hY4tiMY!sDXeMvn|vOFjti zi>?LV4tXp7$v?wBz^r6Ur7Xck`Hy?^{ntPyksKU7_4P$B!tXF1+%e)0Y7WRJpF;0K z@5XG)e!!W*G*iO~m+)uFVT?c7WCosi4&>smB3`CuQfHF1gd+qz;TFL{;NfOq=0R~j zrpsi@HfznZ%+E~IbSqS3MOUR-vscrg3YGO~xKpoa7}j_~CRM)FFtp*?g*v+afbp3n z7R)(ix=Vc!yoK18md)JEuz;M#5ws}!UfOHY7R++rQRD*h8u{XR>;4Js@=t#mx)hxP zwZ?SBI{}kVCZ!XC7Jm>x3C3~*9pLv8}&4b2c zbUkuBcdT^{L_&R|!TO0mL5{^0uhJ**K|Yf2g#T~!JoE-L3AYpE2lpi`!yUxjg?GbI za6Ehnvm5&XHv_8#D;#*3R+xua2KFF6mDG*;mGKWdi`OWohOLMiAG0J5pU@_0S#k%k zcuE-GJ-#5}NW$3o-f_$0PRCD+e;rpEvnZkg$S>#;wv>HOneWN>&!^&byvJvT$wjv=VL!t7Lm=c{#1@ zOUa|c%KZI#^YTPLbwAJkT=TO$?@Ioh{MY#>@(1Mi%zs?44m=T37E|@PzL)%zW|5I< zod+!XUycd3dDg?Wch0X~0^}x4qEXo%At$6h@_5Xl*qqqUu>)f{u}9-%36;sq(!OUr zZGRSww{GgzuUk%6Qpa~~rnWlXYFfse_75`;cYWUDNH16K=&b!c=XdL$xwt*H_3G3a ziFt9<$Sol!MSFsJ3myp6f>Qo-?p9VE<23CfWjG-MigK^FE;o!;?~q-n7uP(gT2*nd ztV8jHf&o7>bID(>eEjX*k2i+b)E8}@EPa^zAnBpzY0L}C%c|GY-68@s#X$Hz;Y#R^a?CKurGeG5V1_n|;oUxZEs{4)tOmU`qX0kt5zG&~eNzG}ZaWbYH(-e?-4iqf%UI+SBN0 z>fH!S@ip&j)1+c)x0>XNDdn!34NbAiKa^8scbg()CUutnPvaqDl>VUZxq)Cl;t;u? zfwet-kkh_e41@5N(iy}`tts)8c-m0b1l~r$Tt1gAXI8T`yw-w-AQ8Wq|4BGAxNGR* zklT`N;!~2ckn9kh6ZpUV|KfNc+D_4C zV#d#mfvqZ%(Ztw<6$x!(zeU`T6a-BGS#DD15c=PA98F02fTj6Pc(fq*qrq{|yh2aW z+*WT>wNun9nd%(92`o*e8e-H^1xFSmld2N+7>meJf-He(SR+A1I89KHW>G#;eUu%< zR=Bm;3S1Vp05c9Q$L4@c?tQojKf$%fKE^6E{?vX{@6voTK*mbLeI3Xj(f?tNu@S(E zn!VN`=2gZteU$d5`mOw%^jT$I+1av=Wl-_hy!E+VzgB!(_>K2v@Q1hWGe2a1{`gJ& zqquNS*_kRy)vZc;d0}NzZB&C)en}OhVQO>qi;Zh6s~t-`<>+V}jU2_8!tE3!60H;u z6^|0nlcb06!ZV^8VsqkWCALr9*tV$a;NIkZlD?a>EIsRcR%e~=bGUE2-VMFddWd>d z^}gKy%78h2`}F+Y?Mj!5%+R)HQp4izM`uU#BNv9;4?4i9WuBwbuxF8r&T!{FPoa05 zC(AL~dedSxf7F*KwT)ZreyhTj49?q;>&Q*W4gQMzfV}SdV%e*K?`l3B`Mm1Wgpd0_ zr{}gWyi;MW-6>6y);A~>IPFSPj_r}7$<@&_*gq9_g{o)ga}At$W+r1QOTfXhe=zsb z(`jvK-KiSNT9S;UrzSH-v1&Lz!E8xwL|)8{=(6y-;C7<7;%UKyf{%$l@Vu;QW^1O2 z{gnGVUl{a{WJ}oehYSwktw_-ZVIJ&iey9zf!pUz{`DSG=vgmB=*rE_a5f z$~VZL?R)6<+uG@`DX%ul>-^Pi%P*ELEqzp8RYj=EuGCe=R?eszQ>Cc7P<6Pbb3G)x zs=B5?v{tBa1UrfEUe{Y?9E099|qdj=7()iDsg_AYBDH zb2{=S>LywN7=?EbuHxEa?I8d334x3K8;*u{!f&xduwSvQF?X=-aaZu0aHC+RuaD=m z+X}J@hJ!4OG5+iDJn)ZDgd{3uIPEO`4($qM9_bm#Z_pEi@LD_>w-wufxemSYU-9(^ zYj385wO3}}2>&Rs^7W!$>^tJ^=lqz%O z#OePXto_`NMxl$K`xq-;MH)|DMOj84&sOm_2$aHc!Am0V#WNFQ5;$?mvA1IjqCQFD zS(m7xv@+H>hLZRRb$Ji^o}l3fYJI64r_`!WD1SC?tzlLCsF+zES{#&@^V3^2wz5qv zt6EYvxs+DfweEEN2dP*3qcKVDRA13$>b1uAmbSLv!6O%~h{2zXccgM?Eh_d}wBX`<^v ze+g#r4D2epmEt3>C1LTiF^eIVzo)mqJI6WBe%a==J+q!MPcgjI?bmcrxSH}Bdp2Hb zYSTEies$fWx*k%JR8fzYIvNhjho}$g4j5LM>THqDEuK@pT=*qn9(5@zn)_97O;j1; zi5wF1A&4OZn?BPdpE84;vr3pUi*S<;j!B+=t}*i|*;OQ|`>WWxqA#R@$wwoA+)GzP0-9 z=zr=SiJyLZ{qS>}@2-NxqE;oMvhx)dklQw+3M^#Qp!ThPCO(gmD{2?HFTN=GURp)Q z$M%(-k~*$ww=m;z#tz|21h~|doxK?hES_ELt*=}>3fv%aYnAA8yN~@VrIi_q_$-U0_O0*Z%kM6xlNganE^o#pC9)e_HQ zP9u)PQb6-;g~m4;h2n+emS{2mB$qo(>KFEI?nwrE2LEt_gomZOR5YEh;i=JGuhKQ^ za7GK3fo1N_*a@jB2LS#6XWTMbjSPt-3o za||xlxu7)&8!6r6tk(?RHvdKb$NeB)>zOqAE|QK=O882gM%+uBO>82^QrEfuWOQR*{)07bhB?6eJryQisphwal z(c9=pXh`yT!cFWUlm^*~dV$%Fv7(DnX{ha(W_%NA2_>Gol)8?L#J+$T>?-3zb-Bz% z2NMCWzp zZ!PdE$}fwqBGi^NzwEr+o7U$KoL~k!@`Ku=X3^Dw-^4%qF7q{u|8|Qk71Y$GjJ{81{JCZolZt;EfEH!K-Tz+ESNCvL%=Mjb+& zMy<#B;Ipv%05ZseYC{{bNmvQ?7CIQ#>y%_pGt4#YHGI`q>KB-HIe}q5F8x3X@&qj; z)KiLSmtFrb?Y>ik&;e$jrJSqmuk2yg33oBIg18BH88ZnfbNLJ(fn&gx_Gn|HKF`26 zp9EN2H-k;vqBg11RCiUK>LPWu>VopIYDBwQzW`v!%8loY8sk%gzh+GFM>A!E*tT|4?vV^ccuGzUl+aZygK3 z4pH0w>|C$wN+Vlwb#@+(>> z_CeIbmq6{1c+fP*ZELr+-JS*HI%^D1w4vHi{oh8gajxm68DyGk$kzwx z$Bg-wN?X4*-ZWmHsx8uj)lgNU+DCIqb4ZylKdngBcp0V}PZ)!zP)m-aEhzYxZ>gk@u4)k8& zX9%he`5L^*_ZD*x{VxiIJdJdUz{V}cJteVe?_I0i`T?dUkTK39#O;DBi$2~p37~5J zrOqW;NXrO%Yyq+q`H=tt&N>aWXVd}uplhycwp%Jai}(}y2z=W9w-Kd!AoUX70)Dp~ zagCCuY1Mtv7nmp89^0qdh5))oZd+*GZ?>49StD$L=4*PoX1sQjajq3)-DWyxgqdDj z7MQt4ycVKlOA`2UE`IRjz>A@G!zIH%hK7dk0(?p4@QlHMAsx4j_muxp5Gc-5G--Nu z7Tq;nlshcCVYhbpet7Gko$mkKLYAU<4&T6ulTufE0jXPIIh$bE5f?dCWXuNikh8o->VF z1MCOwDF9Uq(l60WQ0-B^R0`BPwH5klrt=Pea60&q#PTy6`XGNO}01lB?CaI*#CJJdj4Q1 zF<|akSBcwfW~+CapT)n;N9DPXMRKoj-Ambw55fG4=41K@(b7{Tgr^J=`gV-(D zZ@5LMc;^WQqOxALMT(PtQruR)m9LYVRo}G-^>=hpYNO(jjHvKdHmbr^AwW+uQ(h(c zDw@SF;IHGI9_<(*3?1WY_*XUYW1aTH^AYXJp!_;%= zoLu%N@6|!mBHCg%$9;$uN6ine2}lgw7?K;28#6EAV(O~@w7X&YgX5}zNI5$g6pDlLLYABsK02lVzo9! zt1=8&*EzTljLRwX8~iZ})3ujzlO5+Z**_^LC8#B2Zdg|2Q2dgl-AV9xml$0Xo(1rYCJp-KqWfp?ACr{qo z2|9#Uqy3=QTfA%w>~yOLNHZST7TM#hOpDdl06Gu9hGn?sdM^pt6CEE{6#rL3X>xPQ z;l!lK8^NE0)`o;d`6jGP2~O>qfX@0n{oS1Di#9GzU09zzebTdWQ)0Cd#i0`d{d}C+ zIuD8K7Rp&l0X^UKjN4KA9dZQD3F!udI2IUuRST4ll%=XL^mQe`9pcux{iv z&s(sXU&(vLy)zilAK$mR?^Um;C#9#oo7dUUwWROv5N23BsuA5+1gonwYV|ugUK%MA zs$eRaa<8mea#dQbBCycOQumC*6z^F(z_V0m;y`!%UN5uEziE)c>$yl+6zg5 zRn`O_^~kmu=x=_;m<>7 zghQiV#Vm-fkMavY9s&)h_B-nXV;^Ab@i^@|n^cUgK;^o8g~fr+*-I=q;|$|oJzM1} z?H1e{$Y_~RIb4LvU-tc5-tK&D-m$zjzxEZSlz>a~DxcR98g?~f+UB*dYLj-}?0ME7 zIG8&O;r=rk3DAJWqnr2`@rdlC;($6^mu>2{@xgyExs)RJCiX1vS>FDf>z%26a zYs?w$QfditkX+*C$vWzF!RrGjnFV9CuxgkaU6aUtxIwfJaw>ABOBW0WZGpc)tbip# z0-+W-6}|^@)&4-|E*TRv@^0{4xQ+bDLN5Vb@I{a$L;`+;=rN9Xhj@Y{PIg#waf~k= z541I#BwNQS0sd*nShZ|KbItq#T8KS`+liSAcu86@GqJ~UGqJOA1(d&-lYPj+>5-3P z=EvqoB}P<*3jMl0!2;ktsI8E`7-px;KXKkQ&;5WRg6Mu&DM7V#@**Gs!7iBx;2l+Z}K3(gf3m{`MpvjO+cA+Utovc!5h+2-OP5D9f zMtwxpqnfYXW(YMb)n}=v0REab1KEzVe{wnv@`LA~<^z<#e5WE~oUB!FS+Gj%t^BC_ z1XzN8SZ9Dv!*3%mAx&khZl2>aursIxa@IB}{ryje%eJ|)R z>^R&4t8{*7m0Oq&0l3zMgiXXoVG58#=vkyG)cdYPN&~9eMpjWIonz0WoidJMfpV96 znQ5{8H8={q9F*WR&Tar_zz)N;&d*IzI*xjYKE$%xZnW@8p@&b%*#gH%XQp6`jCW?am8@>fqMW}LH zzvLAW;$mJ zwvDqLaKb>}A=@wmSOfYv?iQ`oJ2m2R{OP2eM3=A2|r~k)UHsD zsX}#c%`vvCjvtVPn5pCo9#qyU_B&P}4M#Ab!(mqFDOj4z3BU<558$>$(CP3(v=l=@ zOm)sQ|7TdP?*VYo2l98LV|@$T57Z6SUaMu*3Ttmw2UWf-U0eL6J;+S<} zT)(z!S({hKXosK!+xfW5cTmgQFFY&0Cbmg_%g}(cDnZeyNR!==O%vHg>EdT&B+*P> zL~CzLW=nGWXxsMID@`Hw`x=Am{A&qS z8KqxK14~dvuk(k$fBQwPc-q+Bd3?|~vYi(%L4>mb9ZTxesQ1wmt zmHZ>Nz)`%RtQt@aX0^4oYdg|9sDvJ^X(BuhhNcF{#T^gsGlcuXDD5|bd*5`C)^e^wp>+$PO=q~8_)#t$_@g<_YqElj5S(Uoe zp5PLP4np;yJqTMUTV3b6ySsg$x6nT`h>TCHkHDMFMW3I3uLG_GAbcz z7oO`pzPQg|TxR&tJ%~o?GxwElGB*%q29Atw#{43JDf`Gc;v>=^eh0GKr58?dkt0#C zKu5A}H(=G-tA3`rtlp>el6)0h=jM$t2P?aKI+9yr>Km#}<+WwH^4KclpOOYt%ge^2 zbrY&@)$VEh)1>H#=$_tJHV`#@eQbexsWINV8$1FhK@h+^<2L#NdNyhnijTQMyhAd( zlbLlaUmv1xu|JV>)pfvayQ_u?^L%w#{-66Lc_s8>VOe6;lA2YG zCtCh%X>YmQ{JhgLViy*RC-EMReizOX-jkiw{AY5r(1DDi#KisT86ejLY{XOY@4rSrTMTh1Mcnl zE2)k&_PER>UE-RgsVTf5^D_V{=ulVzCf&F{K=a|m{Uz)!p zd?S71{d`g+C|X?_UUjNrf0Mo5rG7(wM#HhT*q)H#SKO3QXHklzQK8dtvUf;ZC#dTomN|?kJ3)pW-C68DFjs` z3x}q6`7{pH##Iw*>ze-V+y*rCl|Z&z-ePaQ(&FAdHsA~N&|v-MfzaVIqs;=H@T%xv zDP57KjWfJ34C$jZ9-4c)GsYVZt4l3`MZHINxPGRtAp5u;AVVZN z79GtE?+tq3?-`&Cy%MSpfd@|t-W2*REGi;3@<7mS?-I^J_Giy@?{Kf@%uqU*5Qw}C zy9pT&4TfB?z0xG`H}+owuBOvN6MKf5rOmF*YdTef1YlZouy1)^U{7;baPOl2!C}(K z`vFx?bnB9ahWhlHZPkj3($a;+>kG-n?<#lH$Fvxlo&Kz>+SS}OR47_1j2e2??cVi$ z==9i__O~h29u7%#`5P024+rjB-xzU>r>=`=2xeAbP;_qcs^s*jEkRF1 zO5tBaKe}Dp;+s#^->Uw%e5gcO(pc_Xli6NBz#i6ej|ec57xG_Pp{ZNnsq_%#2`);^ zYOYSM?N&#tHtJ^EvR&Sjj!|C`i!mz^RKVsTM*5;WAZU|J&roEGqJ;;=*QI|8(g*7X zZVyEXKFa^-V)P5OG+i)|b2S;%#(1Nb_PgejVZUV+lz^K+K;u~$0(K^0IZ;4==&Gmf zC7c8jsX#(H9mxpuKv7%qm+>g_Vvoykln{HXnrm!s@4 zWAU7r?2y0w&iEjG3;g%`N_}nKZ!}*^^KMnoc`A_||s^eubmAk9IRfm`Jf3GTvt!StpYaunQZkk&6zHVbvKx=&$ zw(~*9*Y=^-md<-aTv3m5iN4t00QgUXU?a#WxB}W8#!Ajdj-R(GbZ^wVnD+3zfM%~9 zz&-o2hl7>QQhIP`F+_lbW#;(558oJt34ar?!RwY6n-jxwW?pcolmA8*fnGY!81E}@ zDL7K$*fx<^ycXzsvPb#{)B5WM2L_JxHFsZXH?|yY@NZbrMDASAWr>?4FU9Xg^JIQ{ ziR~e1mJ`o51t7_9z-D7<6r%eZ&1Z+`KJ?_hd2wyV4MK+lOz8qiyK)7RKrI+!QPS8X*k+K8a( zpxf3cyAE&-kGKDHa)mKq$H6V&Oz0@`7p@K&8zBbjKS}~ z>52J-Y)mlpFY|ZRBGFmFTHXZi*hqF?N$1km*B#vcBK`zHEq71%Evex*nmYmqghQ8ln_G{xMGd5k77L;Ts|0-hTK;R{fOwDihh&v%Oy_ER z>9~%NkQY#MD7BP%lu7jC%)?%Pd(8m;!<$*_JqbRhpyJ5XXkx^k(EKocY(?^LI&(r~ z=KOSN@{jfQ4%5eqJXOIc_YseN@mov@j zA6tN7x}sk=GFmoJ-C3q~LjvgEt;@uH{8OsJt9Vqe2k%pd)J&d05J)S*r9j}@{ z)YsI_ZRT_^dwPfV4lNk=8+PU?C8w2sx)sWF{*SKZEu6N5-d;(B@u1a3-(hq%?{)Zs zxR8hN9gaP=WZP%ZsLL2?I%Yfc62uikMtvb~CDoEzkhh%ASWcUJ9UEbvkYc#ODHfnC zks5(55wLt6vhUYTGJJEIi8Rx*So=ITu)fj1QnJZUNwcYF%1p|95(j^TFhH0{<&m_Q zM9_4dUccHj3O<4&pmU(lY4h+d0OAwgpZPop;;v zjfJ|k(v`CD(k$5$QS(rCH?023pA(gNb^4~sE&IB@c02bSAGkGgmK!y6slR$4rhj$M zKLD9q-nFGYyXWH2{n72B5D`pRHTbfZ*GKH>?h71RC9n#2j=J@GkJ9B_lNHnmn62;H z;ZO%=J(a`|xc4*NY42#2w6&yNq(bU8H-Fj+_wB52J|Debu=SqDSkst~-8Brj8`FIf zo6mgY=7opjV=3jdBFcRHDf~NH3_FZH%Y7@Y%%hj(?LM7qp#;({k!vac;Wxvi_9OP= zi22ww{4-=P{1TK7dx37pq~iVXbIBh`7;-x0HGT{3s>?fAoul9O-BE12WOFhGS)Ljm zs!J6YGq&LNBb+>T0fsMI)z@`&e82#X(ntxzU+%GZW>h*%KU--ekt6 zK;jQY?F(HNu`fauaVo&ubHJY-ni3M|bDedAQOSPKWV@A9yfBquzBSZ3OMg+fNPb3q zO|W9{(#R_TR82K+wad*5q)hJazQ#dO&z!dXwM%|VUUlBsdok$zzc=7_3HNV4q~BY3 zul~-N`)eNl_44JH^zQ*bItvta6FZT8klw(~Lmfli*9QL^Ef>#`PuDN88~|N}SEIjC zZqX;YMgdNXzbLE7I)F=EOzCr-=(#muK~zCXM8^H8FQ#0aj+-8^c<;vEZG?aREPt{1 z`Mkg8eV)C1I&Ug1t1T za3pq!J_zpRbfH`BG(lRNJF{8?YNi!xzQ(+s`zY+e%A2su>NChw^=IE*dUHGdI^$;G zE&fCEtB3C^f6gpPt$km!u}WDzx#~bgUfJfFS#|V=(YpNl6HQ6oZ&Vwd_F>rg9NKQL zpn!wXoY=qOV-n7dYn;NG^>G1pRn(@0trxd&*D3!tuUfy>Yty#%jK5L2k-6zh4lTU8 zsC#kp!l2pfrVLG(lQuv4OV~r-9A*-|8JmSyU{>Lm6JL>A-QSbukjGgzKlAHK*XDHv5>9StqK<@SLb3$hu(*df(~1k z>R6gQz%^quZqYAQ>Bi!EU$&Gt{M(A`p51JzeVBjh%joaW@}uouy$gm9k5&vr2MW6C zdol*X2mb>okqIJ^{<@<80_Y6k=g^noX4qQP2IL7sCD~4?qg^L&af@PBFkZTz#|{C$ z)Tj6k&c2|in5u+j@qlKpvxVr20sm(r3Kie&hU#d=5XO%aU%=`B7?cTSYZ>M~^_`~ZL_jk_E zxZnSjoGoVmeDpc`BmDE$chI-{KW!^?YPIxd@SceyBsbM#Du@oDJD^iIPQxzaYH;iD z&)iRY#`_CG4n}y#Z%o{tI4;#E-7l+hy7$bpxyROR*%H70({jr4*xY?f=Pi4XTeEcj zg2@Xxi{{U{GjIIts+r3sU5$SorVNM->W)5~;G425J}nr@;?w9f3u8UQi#p%shV6^~ zsSKgKpp;3kj;V%Lw(l+z{F+r5T_7vo{VU>g*IU;YhIebe{FC=EFZy%)=j(YPg~u!R zRIM)GSngWkg3>e8InU_@vl{ILs$ zIK!tX1QyYe@H=H)5-r*}Ob~4upEUi}?B?li8MMR;@v-sovD}n7iGM{E1!?^6Mtw-| z9ha2wFhIycxHFjDoa0_oIS7w=)UB8isE^HT$+J&__&MCvx%^KfU@>2oDu1W&mC(f> z`KyK}_HFK1+zINv(QEHm2P~%e-1m~ZPq~K%ANYZ~)22L_^?PNsDMrG!w24PeixF_Sz<^F31P8 zJ`M%46narRMdZd?E8IG|V}Q|(YMasn@4wNH>v8HS9oW>{(7CU5e{)-tt?|j9AC+56 zAw_3OUzcDjBdc-M{^bXXk2g%}pE=g898$bc2$WY%EazHCwsWQ}2%v=KSg7`?$d$Cj zfZP~X!t^*@GP+7gK;Q&R5Jz$A%j^C?@ z-01F*Eu3vQD`-o3W1D|asDGp;@k>HSO2>pbQ$1&FpLJl4b#Y_voyG1s-!sllIFR|zWdDg7iI%v} zQTG!gGVV<_WPM0WjsF!hGjdjhHhNmnL5?5c0;&Yg2Sq_wJFf%JvMkl06zgPbRYK)z zN!ZZ0K2jU6jnu4e=5}nY`%%BRd{yzEUvs{0&a3%)vOrS&wED%L!{tFW(8jH8cj|Uk z^pw`u{MY!W^W@;7UPy0uTWkOD$l;Or(XyeCk%t3UcncNJozUo1>|}H#q8W?8xDw`| zrFb+Z4z?Wr1@r|Sk8Y&*c*lF~X212w@|zNr61v)dAVBB8&F^5)JkNIT#U4j}OM)4G zSN*)1XT5i@CwN!;Vf|wLC$N9JvoU9%=@kq!I=Z^+ z2j_`SjQturFAWvA$-axfjn$7F8%|SRG?T%3re`LoPOP1zX_wQrSd$tu;w-X?tUp}l zP_B4@yuWbryuLAWJ!1peA>-q6Vv8dRJQsV+qzNHzsYVt}jMQMds^PwfJ)z4eo zTishXci!oU?6}r+x6Qo+(JvXT8s_zW>{N0&l68R3_l)7G^HRhb(oVo#|Cv+?a3v^m z8om?v{{PQVypX)ZOCF+*>W(T3E)L%5hYNWeb|BQI(f{|zG4XO?BX91IwD(hINejL)zP`3Gsg=>y(9_(zt?#B_g`BOl>89(5mJkg> z>8smpE5Pa9!b75BLSl_^d2#tmZ@d2xpmp$YA=x018dB9i@sx?OD~11lEj4u`YU zZm(EJ86NB!#%~sabkAnc?vwmcktKJeAH=%eCoNm6ds=>VZ5pD9;8Ke0tsq(8!QU># zaqsn|x7}{=sbAA*@4Pn9AXTYu=ss!XYK~!#Hqd_2{@(ah`DRS4-(yO!3iV;CR{aL6 z0yT=hhpa)FaSpd+R+)cHI;#d(4jt#u;e)05ifuBe+(pH;Jal^Fd>j(tlIDVeW`d^M z;Q9i<7N&ASLE<3qQ6I1<+AU6@?~x!M|0|x0$ujUw-FZDh-7Z54JBDz4H&M3!y|WrL z4n{+SQLz*{aT}rl^v)?jMN@1M?BrX7hX?QW!JEvT%eW@lZ#7S5mbb{MhGWiE&?$%u zFfw!mgw$Tw9kX77K0*HrSqd3|k)RQ9fK0?-bk$@WP6PF zUKR8rL>_cC`dI9@Fk@I@=y32Pf3xRtkLCDOq!yivb%QN4vn|_H+tlNYmF65fTb*xt zWsOuZbrMh-9s&Ac4prm1IE^068SSwz^-!)h_ zq}7~|=JDfHrwm8bYt;{+uPmpyfjy9sP$8BZq6LEvXe%W~eUZ6aa%=dM;;b%Tw0>-j zA>9DT@|-SF8mS-fZnQ$5Ii#tWAWA6Rn@AyI*#nerH*9st zSjRj>8-wY!hq#|T8b6vaIb@snl7JWPR?mgexUk!9TtcB|J$nQFj@wgqHg2^&65WN{ z4}*bw>0KTYrxBysnPGR8DO5k4m)l+&(j5lyCe2OdEBJZhe~=QV+3N`?j1jd9ie=}<5{8YE zBs*2nFq|!iK_bm3BvVyiOy4xl3JG|!RVLrAjf5PBTvQ%1H^47|w}1x7QEqlXvRmVt z!a9c1ppwW9un_YP=X1zR<=Akqs>G^PUXYx3qT6;V;x)_R`ymIE!A6}k$aG4Hws<-J zEsvKR)NWAC6ejDMvAK|sN_WF<@K4={jOXO)lA%S4dW>hyRpNbGJgON!Srec*16mFB z!MqIG9M;Onrfv`V5>9sC>-H+BAQ122;wuSmWACMh`gw#b#(hPurC*?ModRsjNww%S zTQ<0o@WMMF7a+l*D zw3W!hjo}Xge~ohK6eS4`K^VZRu<4|oFuH9Cc~XEE=P2h>&>6oj*Km$=%)~I5>jTPt zJWW3$d1Kz-5@=HCemiY5TQ$#Y?@0@gcBi$7e3!|hCymSd(F0}8JL>eqKShVTcMtoI zc6aGJ?bqm^r8Sf;}Hlz2mt2n-Hl>sdgAnGNQ8)+FO(fPd2pt&*7QxR7F zp(&}<^8HHTpPFkG4+~qXx+}_xyK8^ea#4^Vl-XAt(=hnQ+JnY55PuBR8X*U6yh_`qu}1i3^!XO`jTeFOfJdCFV+O z+%)&a)JgH_;S&lcoKB>~^HXm7>R2tl+p zj>nxTy1==Cd%O1Yn>Xiv%x{$UdDfn2{5)JB5Q-9|dv&3r^s!5h-6)fDli3eDm-H7g zliKQgIZ)&Uj_S(TG@&aaVb<40w5dPR4^2BaYiFu+JYw9d39BbiXL48ly>egf;T4*- zFP22*RL#atv!}9R#L3w~)gCbRB!3xup9>D(?T#Y8Mqa{ip`C=u9XAoDk!s6Iy{{2) z4vntj^Au4dx4Jq;^xToY?Cx{iq@DwntLq?L*IGu)&Qzajs49&6{OUXX=iM)h^Wtk< zDvtd8mfu|TGcWfOtE8dgd;aZ@g2MPe5oK$d(L+I8Y1hL3#fmFJouFDZ8&-`#+jk=U z5k3I71;NqDAK^XNkFGAR3yFU2SwS~~iQ((U&74-9@n#}z-qpDk(>7$4<#sRqJ{vLD zHrFy^ZCcG_#ndB7QBeiarNQqBy9xP#-P7hVo;K<}9)8~e!emnkXeaYs`y~BGo`(BW z*e6)ldb%E0Jw7k@8>qm&^8N3dMH3sp*Zn9DDUEKfZzwA&EHhVMs&M+fw6>$?LeHha zR7Iv8YAuA~v4`+rL_0d3FcE0`|3{1GJfLjCmw0UtnH$;^vtfGQyg4~H7WJ%pwKRRk znK{3goX2(e4`^kQ6qZeU9SfSrHUMt#bYjJ`Uk4(-hmS`!%Qf zd|O}gPY-(hv6OEvx%0jM<%L&}Cj~bb-<|lP?ZLszpKm<h<5Z_djI3cl|i;#j8)kn)foO34|&bK1J(C$aA*O^XCRnotdmnLyX%Vyv9G*U&6^D?_u?Xp#2o?86HP` zLrKfvWAH%4Mo=xV&bw!T+q|{EMD45D4A?2YbGwEPjh@%tF~h`{M_ES6B-pWDw?ex}gA+|up0saN{54Xda(CgQ*TatBQt@WU zLc~-mm@*3;OTaRnXiEvpU3V}N$g8onlxp`xj~_nYgWvjH@pX^%82>pL8(J3Z74a?3 zIk?Zyl|7CoC)d!na-eS8=oh`CgI9Y&7#l-!B5^(hSEy?nXoR0B+$Im>iW^GW@oi5_ zzc#&=@uUN7Z+bTBgogJH+$keE2TNwY}~vVGXj&xk6)6xA>t!b z?{g&h1^obp%X#63a`}Os#$1hKf#*=yG9sWmZ6WZjMosU5zO}rT($M>Uch}#II~{h; z<#p(rtG8x69VpEEap@f{FTLQ-i~Eo2^K-w_9~oXn75vCYyz=|O2j0v5ON#22*6b+S zS6e20Zb@;>08ACdPNR@^jM#M{>r!xh)WPs~k=&$rQ#a0=xS%b^G*dZi>eNG-o|B`q z(WBGLX47Ix0CgS{B;_0qo)WMWt%6GFWZDXpv)i&D3MtpI3Ex2V zbn>-bCG2vl?yBiZ5;XLMHH{lM(_5d1dwZ&6W@*jmvqhhq_LbiKv^Z}|@tsdO`J|>v z_4|Ie7Vqhp-~OrT(?HqS5AkK*abU((Cv=wcjbPnd)jHiG(|DJ)HotIUTI z@hUMkAvrN6!+l(8=+elanY$)6CA($J&J2t64>>mR%#7BA^yEX+lxfesj3H}N8Uk9_ z0U@?P6R;OT>^JP~irqq{d1a!O+9a?;P9vgc{G~>>AzrO}&+oDJet7+f;hd4DjmsMw z2OhK}75{3C>UXUl&R18CufJ6}t=hl7z1Cj-r?Is!xcg+AvBRtFX={JGTkFO4b$zSH z=E+fVlX8jdl&%iC5C0#`4mpi_hTuVtB4^T;0edOKs7I*rxal6ju`vHnbUcR?Hii9! zk{k&2yW#5M(GXn}agpg1)|>1fu{*GPT>qrHSWV)(2^%Bg$tkYkOgzHZ;fbG3TCDDr z1%ZIRglWF*GUB_1Bj#%gO@qp7stUbT{a%{LmII(oaknl%ltT0Ck|6<7Y8 zZSiSK>lXJ<>``^CX^5!$RkZS{Y_>GTPvW|NPEltzRxHo134XyWYQ(a~2@`lHJOKL?JZoVVzdnFhQ0yZWx7 z&H!u{H746%fsKy)=6mWrvN*wq-uJEZdSVAub)kg|iqnfgpI(02S-!ABQX0^3qJ7}c zjnc(U#D+~j&wXF_J?`0)2b6D5i+_LY`pM|sINVZqpebeON9)EqB0tn}M*F~cmh48? zAY9OA=%r|u(?&Fwcon)5luZkAzek3#FNVJkt?)b*Fc#;CToM`^eIU`EusyaaZTh4S z>ClAB35bOLh#()Rm&O;$uzM~DGlft0ZT8PgjEl@-p8)oOT_Y`mkPr~(c3GH#h6!*v zYuN;kL&a)8$r_zDfC#Edj(ub-q*3voZkZ`$ps8s|-`u_p4WPzD0}lZsXOY;bnj(24 z=BxGUWJ!@?ts;_7=)W?E1}s(VpqL$R6D7v%aZf~kb?za| zaesuo1v}s|=4ykV$7lH_u*Ebe15F)s{N)_xx{Bmxed}l^F2`*LkqxMx+HV80<`M>_TvF4c+UEGPIw9mZS?nV}%BgRx0ZTwh@t@UFBWx(j{@ zb4TDI-(tUGVXV0Ip~pk=LQebSdN4`PNK|wossj6ip37uXbyzk2y{8Ny#V=CU;a%Wu z#>d9F%7g+^hMHUKQuRcTXT6LA@k9y`G{EV?(MR1`zN z5GN-YU?BL4fswCzee|L;Ts@(le>m6OvY6?dha57~#jS+%z+2DCrE|T@qZhczRz^>cXGDt9aOo~eH4<$BupZ2rgE_mr{{<8KOoDI?6(lb zQ#$VqOcTZSRrkb6c1kadY#4Eozv8+L?pOV-${4=a{a9=pxnBdW8Ekvl+){g@eS2qX zZA9g%mft;@y(>qyigL$pi`peSznAdCR5_LrNjT;6DmJIIi z^AYE$?2>IGzlBl!iot{8cwpnFyVAoTal&W=1qEu8^9!S&Efn6H#^A z76$atB0*Du6StE7ktzzhseOm1OrqS}zR-9B*$w125DI7u9?2T+$vij0c%yArJN zO+fwzyl=U-w7+`XtR$&@YmWURq zcIrA5XLP?I&ft%h^)|4%NnRprH~(uuNxXIUp_?7?rjw{J;xw0Ahy=0$-Yz8=GhJ3Y zv}PsV$#a;9Bs6+`VSYw!hn+@#GM4i@gwKWS9=E<}f-ruBV7m0O;@!ymQKdQ0p|KOe zOAtG3H8SDYcHX_teBvdSsQ7%R7M&5CPm39@*K6<_QIK<=NcXWo8?dF zC)h5bE}}5_Pi%Bxw0DXp6`RV#)+eMMYu(+O1c`gDh`=27~u-+ zffD)=-9*euzMBG8vd_C`Q~F(Ipp(&V$Q#fKr)7>3y~dtp=PO%9xA>CbJ1tu~ig-+Z zHSe7=*?4~Jgt$}hFg45lg`31%d(&Dk^?mBIwFh zUn4uzQ^Zlcd;=V*GFFc*()>2WXiJO_kTad18^?j!q#;)_<&wuv!a2gvP$SG@OQ&vUHfYy`+!7H*?WXUQy;cV3_9(Zh=NJ{1 z)rK3gMgODdF5}Yt+Bkp<(k-ok1=!uaxo+34ySuwP|0~zsU9RWmbk6P;Q3OPg?yiUD z9WQuyf9`XibDit@eFaTzn_KpC6MB~N%Ot=-fFM>p-uT(M7IG5XLhu5tcj)2Y(Q!U{ zY7eWNeg=PmQtNXDJ)0o*m0*%Vw@JjnTfPDGS23@n5e#P#B;pu5!GBCRFVc(J>~}wO zWyIT{|2%!O$1pPh4d6_uuVbP;6~^>BYa_Zo!Y{#ah)cd9Bor*#MR#5^R;YjIZYm!R z_zST8oqa!qHQLb@fiY7f*Hp@PNoO0k+I713GOlnG?@YHRv{vF0R1daELIk^cCRv^R zi1C2wiKSB4IvA>q)oR2{!B8nk1>r{auq6M7amNUo6lVrJgBwPtp+h(5_yC*YOf?q( z=YeP0hIl>4eL`eA$gmRs2)_W*O2$cM2~j|#F%>Kl1L)fqWTfoH;VBD((Ql3l9<&Mi73&=e&LNfCH@S-vECjZVm zmiuhj&N1>4k;D8(#g5pT`Y9ncSspngppivo_EK)(B(z9h8Dc&BDefQ)?pYfz42)~p zP_eT7{-5pN=9ej}0l%p4SAWa;x%;{Je&oGZ4|Y5{{zX*@ERpkE7vM^_YISrUKKXZ2a$;`dOS7b6`g>gUA zuxU|=H*;@}P91S=QybdD@R^v7}Py&;{926~`nm)u+`H z`v$q+2j@r!Bna`H%S>%i5Qs$MlU@&)2r{+_|5rYlyhCqwj)yU12; zDzu4QM;sYWp6iYClgl%4i#|kp=zEE5Cnp9bv1bNV1*V6tid@8Yh0Y0^O5aRc5qLOe zQ=|`5vN0uVoDnFn~6t?n@4Mg_QTYk5~xph4{ZYU?TeN5Bs)+K!0z;h{8p^+DBIL174 zoN0qC4%z^J4vcYBy8Qtz_b|tG<4NsX;|(X(dm&tc`~Z0mdykK&ogoh+cd(KIw%||U z?$L|=50DkX?C5|9X{bErN9?YE1jddCVAy$T9}0{(3wJ=R&=u}W#>YmJ4P!Mr#{kQL zO!ruT0}Qs`G}i+UK>Qsa3=eHjEUz`&jK}N(+g^_>wN)=Sv{>J|p8#?85Ve1Qx*%7& zUV2Hu<;|9z)IC=J(rvTa>_>I$bRe}uP}^zfe9gPsTh)21eR11MPI-T(-CSLF0fj+i&+F_-Z_r{K}Ky9#1-ou@ZMswqdTK zQAoJ+qH(~s2oiw#>Nh)dUc`=&`0%ROi0CEpE0R9Oq|)0k`6wsu6!9(*j~xMD3l@N$ zdabt0EfD2H8A(;GN>=?dc)7MZ9;v0u0OeGvP`1@LV3x?AOLCNXs=ZR2Y^D64D2Jox zD7sA@6}?Nuv*jN&zYJzehAq~69l~R)J0iXRfg`NbOkd$h;&?&`IoB7D9|6BdNDm9e8|KwK%_XbIiw=IHAWb{g7uyng8B!YfYRenW0r#htU2lc&ng-u zTOdvqAC%d|_j<>0vUu5oF~SD}b0ig#_3{PUXEIrTs1Pf7)b+Cs-My@jXtn=4?RE$)PRsWHGkc7$}c=}os?T5U^8)wM%x=Pn}I2u2i6zJoHm6I;`Zwl#+ z5+p8&u3+f`9{Uyr1czLU_!OMyo8hr<9!91_?TieL*cqXXna@=H-xFm50{4@r5(@DL za6_;!@p}+aj-~Ed@P$Yk;FXsMx*3*_dQ_~ZN@6VlN~kPgB;@Ryc8Bl#(TXCTkJ-$|Fo6hDlZ|AP~lfV4x)IY6Jza&1)!!*9Q=7S6>*i>&Tf&bm#`htV+?>55CLzSAIf84R0xgDQ* zFFH@rZBA^wS<~7&k)J8wDsc>wRINs?YpYWQ`GlN-xCuK4 zq`{!hg^*Ok?KAC+)z_0Godh@l!%G#jQ^4-ic>MS z1P1xt41SsLHUpnol^7Ps@ML#}um{iD1-BZmFi^y58iCoN9c9v$D0kz8X?5s@PPsv5wbruVqcs{ccqkhkJ^f+eef9Q{Z%`WQV1A z>1pX+8Dj9cqEGZ#AQBI1T5WFuYV=X)H82R-N1j3ZMLr(rWL5-@37X1MM7vbHP$yAs##K(+Sfz{o+UsCfv z^uu^}#;e@U5p@$c>Hs}s(M);G2w-JGUH^_$xjWDaT3v>m7woO+|6@KZSQG2h}(pXq$sMHs)EE@f( z<`d_~(4r-k6*VR0Io~&ZnD=q#n^&K=moBdcm;ElyuRYqhsN-Z`j;utI-2Iyq)YGNd zU>xf?Babm3_Xa}G_#{w_v>-n?d7A%c=B23N>5kFG6Y_?a4euZEbrgIIchtC{m(mVo z9?9Y5_zwk*yfMKscK(Ik_uAL$=6t2v>lXp=yH!F?y;}|>kLuGO8p3BgXDnL zZOK>7<6msgY_oRe@LNTs-uK;v?jw9aAH1)564M$~i7jsVKKaj+ z%83WUfr zrxuJ`KgMU|%n^lIGt(7m%ai&t{tc}iIcvz}-1Fn`!y&27F^8g_gtv$Mi+h)x9975w z;T|CFfucRe;2DouImhu{w@JOkBryZ5_icf?rTqWO>E9`DKD}K0ZqkPXpTj?$FUtM> z?8m2)yz1VXqS8ra1@&*6b6di?R}UsgDn)_(``is3r?HpTlnQ7MP}Zl0kztX;Mk| z*!sKWlFBco$;GXurKRbA$Cjy@mbL`e&uENj5w`1E#hv%My4o6BzIF-udeLFY&VeZ5 zZC)s^S7cUVTuEqu9|*=5wG;gST4{NpE*v!X|K#WL?-H}-gVQz9T?e=IO2 zFAf_1&Nq#+n|zXR2m2BYfS)Lao=l=2PTvm1AU#fu|C%U|A=COX>RDda*v*zol50&*+5ipQ>W3X69aq~_y&eieG()h@as$2$x(RfjKni}# zTo@J~^C$93$h~C$Ttl)eG&?inO3x5!_xb6HqBtqxRmoRMi;v& zQ5UF048vUWIMa0M;@}KFFJu~e9xlQAkH%N`L0!nbTxqX3T05~s`@P|-@yGXH17$gt z!z!MY6_?HWd$%OM_GnvM%lXpFKOdK`s`0LdRzGfC+TdA@Y7;o@uHxFOZ3laWU63Yx z_ho4gpU2;4RQdClL~TP^t1e`|o-FX0dE^lN+5mDRnn2i@W5yj}mOuJj-1bLPj} z-|jWSDz}w<{*zqV`ghsS;F`xZv#ZS2k9!XfzV7uO9I9VxSu93ts8As|((*%B1_l6E zdfh^PrRe-(DH7IX=1>~I-xQ;c`x&y4bs=0BQp?N<4T;>93K;4$T$2onotL&SJu)Ve zH98&gxDx}++QWp^ng3w2!;s0@rL&S<*Vg*-nzkAI-crIUye{M7YQG9 z$#@;gG+B%r=TI9TOx89UtBn*h(#6 zB7!;OQ_wRw9Ya9rhpu-n_AZ9q$NoZ=BiEqRq&=i6Pz887<}ob@VYC-`jJh_jDBuj_ z3ilVY#5N0b+PmF35xIpt-+u}{G0Z2V!|$JOHRDkr0b7dq!!3qDUBS?`*f{GZnZNjl zgk8V*PiKX>X+p!)(nF1VdO@l@?Kl0Jaz#e|AL@$_IUr=x6 z9B=+ro7s~j&8ulH)D{2Ns;J*nhHQ&(Bh;?0oh6vX4gPnd4JX{x9RBL`x2IKOzAyPy z)(|-GzRq1o78#8@bekOOu(8&c(nY3Am~Y@MKoHZ@ewm1kc{FV0=xxJBPPQ#%OFQX!&9*VCy{V86Ej5KE;?)^nr4Z2 z_U;t%TYPJ>+Bb3E)t#wq6Q7rPHbND%1@EQ2y2E9Ys#>eF{-n2jlAaOAC^9?={@5N# z=WnAPI7#zP+-S0z*s1`>O^g;CYcrElLe~3!WC*f?bB9LUic6i;Gr25BmisJk=xBE8 zi>%1(e~GhG4vo(lxhnE#3@&?N(iwjSyESGv!wa{Va1guQZt_M@AEUo2EQ%xGch2*D zE}qt~R$kTAS!-<$s;_ANC`jh+tf1Eq6Xy#XS|htFrP>~DV-4?(Xm+!;O2)m=DJ!9t zo#bul!Ib*d7t64kk5Zl&hRB6o0!3p<>bQG!s*UPeLrz$65MOet;sq3_)Z~ z#%?iAx7~n60ySQ}kV5xpeZK2Au?*@m?FQT+Er6!mib!Vy3$URu0sS{&w>1Lbg8|t# z3H_{c%us8D2&B^jG=m^Mz_JFkz%<+}^~pqE1P(*qz%#rG&1djm1NLLlKn5xe{nv0? zfi|qNKvX21()C`=96avWi06V%8v;RHn0?-F?LnA9>P7TR>~l&nc8#6rbsT!lMzLXu z-`OJwkFkG(yP0IH8kIyY2Y-|&DOTxjNS=#My0M6}<~@czFc5mNejfk#zy{?JZJzq1 zIz?74KV?*y;YyR--=j}QN&fXelV=T*T9?$FYR;=mt5nn->Tc>Za<=F$fOmQ+EOxAr zoB-M59S3{ks!`*;!o5%H1%|aK11TEvk*tr}9ln`DWv)+q6{Baj#STg4Gi!n)Lcfym zUV1Dv7(r^sd(m!F^F33G(?LutK=W0n*54OA5!iJXoCZ=7%3EnCui#3S0T>-^guJ-`~=&`*~~TQ}QJdtaq4BG32U4!-9{#NBh3 zA@0%F5VAn~u@CU4Au8ZjY&!Ip=8q)E5_oGEzzqOlkw|) zBPfp$AkceM0qCAuJn%^EaJtu5#Z3>*(%uOUZDI7ZC@Xtn#G#l4eqa_L=@)Ym;Zo3}kb}?^ z=P{40pti*-p6M4_HmiZMzxs`)?*jv(>Ean(01?-=Lw%$^ma|$fmNpIk(p<4n<+~+c zrElaL4Nlc&%~-+tX7ASb{ly}DSD>cAy%dlJEkN=hGf@a;MQ{prozE)hT38;jjEu)~ z7!QIplv%WWQNI)RrTQj)jQbOFHtN2oFTFOYJM2(k6uraeAnXPPPuv9yL&1O|#ZJQ~ z%oEf>eS|$7Sgfz@$95iR&+~+~6t~^%xWW0#k1zn#OE|%u16=fIqh@m z@Wdgk8;p~*ERq8LfE*SaOdIsS&fLrXFX(2-qR_9NTbx4_5d8w_uWJARByUGb^wXi& zDRH1YEIV>r;3rT&rkc@)nd4C_w}C;)}El1=gEByffCz4)Fc$a+MzMYc(K z#B*O<&O6%rx%G@kLLXnhyQ58#()Y3QXF07cvVLvFzRtPArn)a>DSgQPr|qu=UOHZ{ zrD43RSiPa^7k86oh+#F~s(>rk3{EwFCeUDbbw2PSWeR4VqZvKdbHgtUI2=O>Yxff+ zEEzc~YF+TtA*}IlJtsiHsLN?hgR0qn z5IEPNay~R4QH+*tR0{f8{9*bq4cMb=ALT1+PFJA^h6o#5y9Go=6W7$!3pjx6Ht*05 zLhfP?n>6OxSUlWiiANn_ulBiuDGA>kI+Y5F)TXYZ4v-7u?TMYfqwpfyJIWaPT2@nN zgs+Cu6_F8>7BH5)A-p&8H?@w4ruvhCl&$n?@H(|g;@5b;_-svf%jQaJN0i`PjkNM` zZy|SHLnOz)uc7HiLzC!*?!-V+{k7&ryq2bi71O(b9UsbzIep@Sn$HzGWS1nnYKI9& z+8Yenx)880m}8veN<)+(E&|>Gcj7i-WL}*vCMel-!UCgqGiJiT7))@F?^oX+~cCF=z8CueqP(#ez`?5I9+mzXXHol$8l|vYbt@h(|yAB&E*GtZ1f*wE6P;{2|#mJ zmB_y!y=DEZ{M~C&95udo`Xhd#b?y+$0jSRUMsz~H&D5hGp)%PvI-Fh~v2W>XJ@XpB z$o_;%kcWN1&7dbbUI7xr^}daYJVPVkny%Ar$9}U^i>Ap}84YT#M?L&cvq~c39Wm5e zox)VrR3KDV*}K(-bM2HIQym9+flEOm3fBJ&CIEneKK6NwJwbX#o##o`-U06b*#JJ? ze(;mzqd`7&rQaAPED<+kM&_uL86&3-9mCQ^OpZXpmVgr35XNsC(SFZ?H*JGY@Xhi$ z=058M$1Ow&l^OEe5S~7^X;SY#{*j-Dek^H-{oVQ=@asuM`S-97c}2;8_J8&M`mc3> z$Eto_-d_FgkM<9=F2B*)oGL8Q@ATBc3ARZX1YG1|0Ths%kaa!>2p^Fg+MLj1q0;!R z3Ed&%*qur8_*V&!vmPaq;v3T{axahX8kLu39JY31aNMr2yv&smpZt;&f|6o!-w3j> zZ2$YnYj7{(Vcb>Z9nxS>t53RjPQXw9W6m+=p^mGV*=j`_T#<9g_9~En?2sK7IS&rl~#QTuM_=&lpd7#m4?CLPdXz;iQ_> z@|kzY_FZln9BC8SYwaD_GU5i%UCc)2hD2rDm5|{0kfa#Tmtgjgi*a_!yXYk;9f9Bd zP1%#v<}nUNy&7&xw9t>n_YI*0KO=Eicf$)-@sg)Gw^Hb>ceGJ4NlIY9>{^`|B$1Z;bBN)NQMXs{LE}qlwGi z-bwE=@b)!7s!Z?l=I!KU2>nF&IKO-Dm`=Lin5IG>Fn80FAa%r95wRgHA!FlbBpiyI z7q@W;c_=gykg1-68mfuO8!eb>N=!>9&J^dQ1PqPBC2b2m@7Wc64~oTEkj)gC-#o-G z^!lJHSfg&DgXrZpUbQP6%1%o;xTkJF(S4(Ha^Iq!&bH;PL7h7|2ixCskM#^T8B1RM zK2$xu4*YM%FGdloXmqKdv9bMn=Q2(=x4mz3$B)vZ_3t!DUC2OzH4e%)Sb%?nF+p>P ztNdUAi-=zM9C|^-7xrQQ8L{n&ix}{L^*J+=*D*Vi)6>L3vS4?1MB>FDWJGtu-=GEf zy`gi{PKVauedsfy{slv59W0=~6g3x?gs5@ij3SR>x>t2T`a=)a*UL`~s3am|kvU$L zD`_4K6#xW7HUCse99;9pHfr04=JSm;^__Los$P^wl#eg^^YeP+*)CcI`|tgZp&b=1 z^@7)8Pv2|r6m7Ly&7UI~X8#K6cdT?neQr_y!{n3y3*XC}AG9suKyp=RM(DfPb1Wyj zFU}IPj#V5sBCRQFQNq-SF$ojXjz(RL(+o>VofbYfwRr0WmYuH2!4_Q%W3wp{BceY*OE@vQr@eVqKT3T@EIS~WlHwW>)< zmb(-nH0D`jG5Nk@iFL3wUVPUS^GnM|r{0wXz@x@cW|K9nYyEBh<;L0LvbI zw3Tj{Vhna9*y@1wo|{6pcb3PJ^YR()&qAI@GW^4Ec6%XUjCYv%qqW*PN?)PLQE9D8 zkOdg;G$DP)|T_;|ky{%5hn z0UW3v_D=)keKiyz=K?Us9_JJ9+4fYg_4d7zRP}0ei6&L{Y=GCZtM9t_a93ixmiL2` z)4fJ?o&SjUoxi4|lM~WCuKsmhj7PK@*>z4eRe6)MU9#Wit2L`edwS2Rj1m<{^+q~I z>}>)=Hkcm|X2B;0Jt5}e)56c?5Hn6>=Z&e)q=l9yj~)3ewI^}%=(i)Su_H2AV{3+9 z&w{4W<8Ma2jUcfz>Al!xuou2A-{X)FA7X%m9OL(j`IG$KXC9FX?>DjJPx}Y^Qh3Vh zYrpQ-m33|G%IQOkAbm2<$=2DPr$XawGqOzwh$Wsw= zbOle9|hOSwgV$}_cgPuZt6O3ZCd4U~F7O;$OzlGDZRzb_b+ zuQI>Ve31p&5=`s?zFp+qWL%>6Gq)NSs-CI$X#kpA5+C6h70*1wpajs65tdBnc*1D% zG<*Ra!88Ttgq;rA!|aaR=;_Fn$7KY5U^s%g)H(QVI4$8GWiJ&&u@J8^J_LPWQbMZP zi~Xf!IUxt#35M8mT?oq#*-K@OWxMvwpqD3$_J&ey*kn*iH}_U??9IyB;eTb--7O!= zU8Q+#h`zlo0V1Y)Hz&J`CLJm}(33365p{5P_h7gY-1x5doUMa%jsB7jWvAy&*k^nL zWz)TBg~9bv#&AE@E%vYoWkhiVC}K8qH{l9}#rhFCll_u4J1iwk92Xh}4PKMbl=wd8 zOE{EXM$Yp6>(huRfvs~iIm*1A=#hPQWb8qE`^NsK^4jk1w%1~&?3I8g*{llDtP^kV zGWM1Cx3r$@ANZ3bO+WI+}qzM6+>u+G~) zr+jkk5sqYVHo)K|M6_apVbgu20c+?2>|0L<%3;(k0Mz=?In>Z#&-CgyEj6w*UC?Zo zJybrFPgaN7UU)J_GA%?&O&6nA$FaH??H1!7yW8HT>XGfy$p+|+cdLw*f7>SV)_922cj}q_XZnk@O!X-})Je2# z9?UW&0=x|uToC}S%LMZE)cTajFXUy^(_x2Vt3vmL&?6JrFPTZqY~SUKm-Nx3v$V^R z-=bT5<@idUG}JG|Y}iQe|7@2v-*tWJ)ZVwE8`@;mI6k&*bThH-WzWy9GaaoB?@Hg4 z0{;~J-1F~ojk1XFXG_JQ-ye$7>RcW7o0kr@8~!O_gM@(}>QFJI_3C?&O&xh-oL{ z(UD`r{|lMvdlqg5PxeU99q7}T1Sk<-PoGCrk-KpFVDUbAG=HC;fXD8uwqkR*>6a=& zB{02LJ=T5$lK^I~BRDvEuBF4c-}2nJ#>uvdGLQIZv7A%AaWD0Fe4EUndr;7b*)py80=N(fg3CS{-d{HQrIRs{{D< zreTe%8u}aAwGDOr_NxOH^@_nLQJ1i&&m|@+RgyhIyobdV=;jTS^_e6mO-Eg;LGz&R zperaXj0>bN)LF3d;#jC!wvb#po`mSkA?ZK95EsDx><+H2!Eh}1|S5`G#?-libkfbWr z3aWIqrwSQpuP`jsW#}M|8(z}@YrM-GR^1!zQo~x=d(~z$LI1=3hoB{H^l1zbMDk-2 z{7rZb@f2YR>JRiAaVPOJ8il$BB04?*F{I7@!zof+rE4 zkcwzK@E#Eq`PzNRY*C!+R}B_OMhbfc-$hkDUpohRrCpX*bH|OwuF{Xi`$}Se!;9H9 zTbjkymVe)?UU9-CUJAb9o{?vZa3_2DdsjlU@%q3;)E>kDd^<888t=UgbQiE2JPUmj zQH0H*mQp-5720g_E|dyghR;NugMI<*(-#;U9d5u@Z-n820}rAF8+njVyw|;8P15kinrnC3cZ`MPo1T1$%diz*BJXW5m{*$Vs&Sd3UfFGV zX|LuTHyL_N1JHoZs&35GRG_<+gcBs4JLwe zQ6E9OjJ=NUh%l(s8-xHMdFbzc4b-uSc%T6`3lGO%$HDRAf^E^5;J@r4v51gl&+qhz zP)419X3#m}2y7|o2tJj3fieXJLL9)YLkkem7(e7#@6C`{P=S4uO{{$$M#swY!%k>+~6&;i?PZnqEx{|!$J#4u9iMksXcnwMqRdLqy=ig z8B$!Y?R#aD6@E%n-z4sE;r_mp-A37JGesrVm4IF$Imo@}NJ>w@8B#prDq<7rGx|4) z>^B279(f|LAXF4`IaC!oKXgXq$e2mdNeSiX=eI7dOd3u zlg2(0aVlbBlz;dR=E(5G9P|k7kX_?v{8ef}mB8!?*%IaeL40yzR6@HL8 zJYWs$o!>mnM9Ymf1&h^V18G)Aa}4=@I>~@I7}?- zKc(5Gb&Id@GP{3p()ervuglcM;sr`7byvlD&iuhV^D5N>iOsasP$xIpmbz~kgr+h# z#OgF(_Do={Lo_1@h*OY7h!xb;;rXm&+#;;TZ+^h!;Ds^PgdxH21E)ofjhr2@iS*7- zAF_^RV_u0}nzbxrMcnqd>Csmr<0A6{Kl%}UX+99>ac_}(i@DEOruG;7Cx35~>sDJQ zq1QvmCbwJcI@@=x^ONvI2fHS>;dAqYmgV)MOaGL*>vq)7Z@eP>DWtWI=R2j*J->u9 z%_;G4;eG2%=Vg5q@T2E6vJG(B>1!gow!#(we!Bl*u=wpH7X3Yr>Zw|Bg2wr`2bBiN z{jM<<2P%9%qFlIoNH)wH)8*2dx8PEOdGv@tTFmyS)~MT2|M}H|*s4kW0*PW^ZO;Os z*?7xDGmU{aW0Fyg^j^{@%MCjdGXZd4_1b#Q>eC)?D|}Tc8kUKyC(_-Oo5{A%w|+fFzRcM-J({SmVlA%}3_2hm9E392L@BVaUn zKlZfmHUDB?AcgO92RIM#0#yr`qV%(Xyi4s=_Y~j(%}LP%MS(^voi)jKz#Y3@!C1eG>C9brCid_Z~Ob z=QU*|DGQN~*9W!x4iKCCeiFmo1xB;?ZL}6P2lfV=0Ku3Ht^o9CNS;&R4F-rnPM>@d z%jXJuHXHy*a90B?<^s)C-Bklz8N>PABI_;WA8G4u4C;EpNotO2-_#w@8O!TXoK|jA zYHeiqS4RWf=A#30K?(v2*WSO7PNKVx)eD?WZDM8w=QL`K1}B3hzHONO9$Q#Cbb<0bwRFh6WE#VyfBG19#AG zgdPfwVrQk;GfN{#Oiog5GMP0e%!>TB3#TV?8y zU)K5=KS;yn(<3{Q3zCf)(9Dl<-7(c^=7jrfNl;;s)h`Ei z75gp_AG<7`lK_jGOse$a12@>8Dt~yS5?*gs>(us!w)8F_cU$xN3b`lqZtc(fVp)+_ z8LVk|V?sz8S65?Cntx#i-M&R z!^3EL|2)48%ugs1HUT`#a7}zoeZ>S7YX+&-E_13VfH%Ou+cSp0NO)1;)BC=0pz2lQ z5N(>1>~Nl?!R3xTgSCL;jHK0Y~RnR?|IX6 zNHR)pk_Ic=4KwvTAdhxA@NY;!+`G6ju{uw+)-UpO+{dWSV3;ouE{0U$MxhVEZ`1Nw z%V<8He;r}P24zQR*z*Y|;7S)-U!`x-j8_~QJk+1l->&>>2H9^xPog_e_wnbbr*X%@ zV8jDB$GTi+vrM&CnYUP8DNgXV2^UGN=5k~;VF+pkrj&G)3}9C!jEsm1cGK0^(eMJ? zOH4C%A>IhwWEy2UraUL>a9xFac{ifVaRtDGZkP8@px&GB{l>P?RG{xx%r~yEA2Hx8 z7r`Kx$oL2l2%PUQfw|C+_TxIP38z~s-zvYaDAyXyGaO8Z+~vUsF%_Q50|5J#8tuQ4 z@DUM(ul1RLXu};q@9`@1D8b!sC;S}MK;qIDN2o%^(`o~D1xGR31MD;#q=5sJsW2ew!y0gizw-j{*i&IfLP$0SpP{+?DXEgXDij8cCV zDWrSkx&3YZNLiaiEhrIO=I`#_+%~f1aLuuDd~IqgwLP=lyYp1r)Al#LgZ(SThlP(s z*EQ9;>4T$XXhWuam*l>QU^=AZyEY)s_y8G8*soa&BL`xSg#8H>hvhNf1Ycy;2Z>l2 zA#X$a60*{sB`rs=pHPQ^lI@2r*5&_ICx7`Ale|&59oW|bzc^TN<@P)ol#lPH==7;%f#~DKRe5Q zR?Tc)%$d-4xS!4$)F=?M&Jg z85XMuSxuQoeNTE0(c7cVvo-d?p&rcqc0i<2`V@pagm06ex7xYW7C&NpYOM+-;w#1C`}xAuMZ z*rS=!Nj9kG4A+d!#&7g=2*a$OECVha(BW-|j04H7EslxcX)dCLp^qI{!C$0rbOCi+ zbOiH8%T&udAelHMaG56?@*Is$*5PK8On4_Wz~%5Hp=Q9o;SQi$(MSd`9v$3?8{*&rR)O{ddtrBR@5q^?NWapcSFEDY7pz^(Wu)bReCs{&qq;3+hQAZO z6&K4pX7$eD{ZQX^Uox#7Y!_ig-2U_2paHC=Rr*|fSNGI-SxQ%IH*&3S?Q0E7)#LPc z9U=cWjoi;2-quE~Q*u{z#TIF^xzB)4fTts#QUqb~@vGv)qrb+ENP8E5Ca{jJjt3>q zkM0P09XiGTHc?JE0eP;UB$asP3yNIVy}c2~aVqLY-(+GkZYrV-ddEQ(Kj6LWzR>i% zrm}f%=ZKa=o#**m1!p{U`BUm;I=HM_h~??Kzw~}kzS1p~zywc3k7YM4QJ_=UC4L2r z2FeK%hv|sPO(rC>gH!!Jc)Ac@vd6J5gnW&D6c37>9Q|M1&BWC3=FlSnUvVh%3*Rv0 zT-Ru?^*981E@dYbg9jkS0pHkgnkb=(_l^6rO8xuvZ`iNZ#mv7`t4~#qFI!T#tEINV zSlioVYCT*VUo+4$xoLlWVk?)oy6;I}sOY2ojxtrw*5&9sJPy>LahbATny0O@9&ug- z#lb>gYcMdv5KJLXMi{}cN33E1$py@Y#2e9U+ICtfwaB+TaB@IDlOB3CbV$tnq)XA$ zBQ#M#p+6{Ps2)PPPXn$By&L)*yM%a&I?H!AF^h;I^!oT>4`5GXs}L}-2zD1d!#T$` z-f_Y8%4RbsT0!Pr9^dn*hV5}|cgWlW_%3@#U)P8h*S}Ssnb(!yDn5Pvb+6v1_H(tQ zZEL5NyRv5;|E;`OZ}k|;1iRCA-to$Xv2e6R>ws6ABNo&O&4wQ)#`))mW5RDnw#1v# zmSxqZwq>p!Y0Ifh+LwGR(Gc4aa*j1J3K>m^86N#5MiMRzp^R z6CeU-lm437=Cpck1KtAU8c(TrTIborv@?}!RksF@@Q!v~>{`Tq)sf#E)pV+EeeF!n zMIoSXzj(R2T`iJ~72lGq?|;}|DLm@Q{65TkD=L?~;o-Vv{8WCYAWBS9J9LLlW1S4E z)qc_X*)<)O3heay1sdr|5{ZHIpkfI7h|kF@DQ>dc59F_nXp7nzQWupQ9>b0fD)48p zHZV(k4L&=uG*mRi4|)(j9&`mBf!YUp2tMo0F(pgu`D?qwdJc=miB|J}4tO${T(^-2 zu~~SVUksV)WAzw`Dc(RYBOui*Q=z0bz0$+7O!P@4kbS~o{_v;RV$@j}2DsCeWZEkz zY#82>!zK52c3o$2CSQ3O0xML{Era6Za?k_LrdKdBvO>Oh*i-wyLsYmITf#=(;KNHTRo`>kfE@ z!s~qw|WO=~bpsj)ENKRZ|%qGuW+2ovSx%HF&PQEkx+6Z1YGw!)3i_gS} z^j(N3K&>KvWW)vgM9MS8*@2lihRw|-rdK2#iOFUGaPJTz%xRZd<5ql;zfs9m(Mp@< ztwN{W?ToYOj4w6Y^uCId?fy;Tiu+$uKFoX#|CsUi|MrUC*i=+jWC?mA^zN=KH8( zZNq>waT^diSf|HRSNSsh3xm(Fgucr|WbwP1qnJBbmT(ZW1izll@V$uH2?K%7L&v*c zDGSXTZChnA!ph#*zI-7?@y=82eq)^PeBn(&I559)c3KxD0JE90%ilNPb1<0Q8?YCl z0dIje*c)uq-G?n*#wEs^&MnS`>ixPH{R>aVrw3HihzD-=Opr_*{3^U9$H*h4T0u9@ zPf;v+BVMQr*CwhTs2#>g(>-~NHrqYgrnmRlR#>k%{xjSI+`;AJ!-%n%SDusEEAP25 zB&rH@9~kJF0*dog;QS~V1S|Y8zL}gt4)O8AgcBb5Bw!=Z+q{z1-I6~_mf@Rjikpnz zhrW!M?jyuc!(#C_83+6l5duiFK?5-=$s zp9KjU7cwhwFHPY$ll+*pJ`ff#1P>?M8GJ&Cr;>1!o{4^r7)xPNbe=9DN$|s{bBXw9 zddQogtASespD^xGE+YFdQ+*b@A}xEJGKbDN)oU?43N{27;a%_T1a5M4nBO@*S%yfL zD|+=!s!H(^QNFBy@P_z(zgO$yT50{m=KQ9}rfJ>N`V8GOdrhjd`an&q`M7JEX{Mr6 zmutw?w>Wo#uY2v#y_NBF&jE4Xx!yUbFibCU9pNsU6OLt*BjVU`^gYO5@%H`TmqP<7w! zbMtk*_c_yfP6=52LUKX#*SOI(0r1lO*zpGpL?3`j5DI)Pp6h=z=D%22M027pw>3wW zJ~n6XDCT(C@IR@zbU^aq@Y;wik>6-3s9bUaMFa-G?@?O_SJ3^~aVU&equHo0mZ`)i z`))TER%iahRf?+?6s7%~QnjMG;Lp}7Q0wZlhHs{tjof<9{We*Ap(ktfl8c@^&{oV!4JwZZMWu>8RkjA+@sFcX+24zJTIbls`P^~ zOZ{H(PLeHB^_ct0yO!4NZyCnFB0>uNuZw)U-&DV z)p`mx2Rg;_KZ?#WK5hN&!yyR?3GRhbcbRtU-0jTe%-#LW<;;C&|5@j9=B{V%?%g`A zt!~g#+#wJ`^6Zf+jeqKs2Cm3&fnjy0v;k3An@)dZE7B4)~Su`l4K0O334Ib)7$ z*kNAeAMSdkEwq28=D2RVQBve-Vxpa40D^tBSIaue2*P_t0c$6^4|VgVDSk@B@;A{T zwG@Y7lXRJKDQ^OApKJl@Kuprvm<*mL>KPFuT`yc8m8faUH;P%(+d?N+jeU`fWNov2 zcFuRdH6Aa0T&B>*6@`0W`Fpe$H*CAuNZ2M3SA&PV8$AYw%|!XrJgeQMUM@Ku8pukg z5w1Y-Lws5?AhtG+id7_M#$VS65``^4XJkh;Nj{W1S=mV#D-kND^Y%b~>G=pTwuf~G zSppxob+Z2%x^LlEX=*3bY%J;V1O7hy=d7Z<@=*SPqHc|yP3neM^FVNaNB3g=!Q@kFW*7e|a*eH&YDG3og0i7U{_8F;dk6B< zM}#Nt6zG4{An(k;!oV$XG(Qzw;cG!o!2iJG1K$7?|CeVQGmbt$PXL|lP2qPEVqayS6v_PI-0k9hEG?0ZP3Lb#4?=&CvxCRb zNWpnvX|N8@4eD+EfacIG-zMJ(cm-A+wto-uZm_i=#{oZB73g5`^n?qE@ro64XXIL0 zOI)I$;`c~{())=l^*Vf-c%F0tv&`?~wv;{Rdf__c7Mq47%u!;HC8B0;rK)00;mV@I z%DGjys#cbWO;6z zn^;HH{Q0}KW@}xbWYmxU@*}=(dEW4_?bC+$Uq7yS+nE2mK3~73A+2&v;fd-z>tmxs z*Wcz1obV0zt)}v61=ALOD`*-yH+pqEt9h^NX&thAJ?`DKJ-q5My}j+aa_<{w(H@a*S(@2u}i-tBu)@%C}vnIE;k zUzE{RI?HW85Ka}9;{r4*G>M(XN5DelfWoR=!XJr+ZHcPRiKkj}+9h?wI`(LmA0HKy zoAkeooW$Kx{i43hUZN8roZTJOa{fe5vW9pTIdq=C9G@&c#}RUHaJZ+?ciPd|7_{eD z9+X&1gys+4V%I}*AUYP2!7bq&s2L}d{Q&3+K47f?n9zP3Ui-b`Wm&J{2W9Jx{ao*Z zePILbpi%A+ReEx1#>u3*sBGm+Riy&r&k|jX(5re1F5uVY<068Z%(Oq!K17X=ZQ0^% zD@mHCd7E}elGlmSB+bN`%m|Nys3*_(9KI#q8P>8!N()pxs_0hQzBIa2@vX&&@>jll zoo=qXWxBQc`jMv%d2{XuE^?mCeK-E)#kbPDbH9oTca-IoH7_G|p2m}&_0TdPo6VCd zlsi=mqhBW-%=neHCVN5a6J1yJn$r1gkBqJZnq6wPu-(k;+AL$+lP#%4Nz`D?YIzOM z&0i$`hTjIpV~MI-X&+>Y@U-kNZ3bK*vof}7Y)wb)Q0)L+z^G{$Z@lH5Z69KufgSov*!)FAw*Nf4wYZX>1s~=- zgRI~vVMlb48#nx`-{nXloisxA57heDR@BZVXm^$C2a#^?s_j~{+xXV0uuU~zGUS-X z`m9tp_d~}z-xhKtdD{b+PCCCa1YJzMM0Rm>*gEw<&0fJk1uLdb#h3q2)?T(yg{u{+ zWX)Plj+j<%OdF-C92Udg|tGS#H>;}L>e1_Wa zR=`uSnUW$&P(q8$qF7mf<#_QP@!8~1Q!+L;vR(MznuhP<{1!qHGa~>&Z*~T!ouFEA zBd%%GM)?J0Fd{;>Oq?&H!|W9)W`(=5<2VzMv(R3!0>Gg(et%&{cGF-1fMK)3od0$F zYv5*TO5l#IuD(~zl4^0)ipr|$&(&8dt#vWx4$l7imNkGYkKF}Z!Xxne>=3w*dQSR- z56G^>-xY`bfS8Sym_UJH(-E|UF&Ie{&%Hm=X! z-+?#5Z)Bl=uS4g3#0>IE!fu-Z=Dwy~&IrdZ;}*jP!>XFYb&cB7`4jTvDvUMF9VyHN z&w5Ly|37*wxf*U1)e5umwN$N*<6yjxh{x=4qK~50VY+)LV^8AV`1_fo+p;?ZvIS|9 zgfod3HKSy)ngwYm5*{d*#q>$Jm8Q=6t9?o*O9x}-+w`5yz9npyq==;QIpR!_R@@62 z&zGrsDAQsBiG1~Lxr_IN^>5JcZe8d7y}Io9@3bb$+VtdZc!xCgjpyyoyq%>ZYBj$neS2NFr3$VFw3t%>>_wmQ3Y6uV`$}s( z-9EKzYCCbe`CXQG6?GWi^xvf0P0wXqh-N3_O|LW^)N*snm(8YRrl%~6dzf^&>84m* zd|9zVa#^%rGM*R9yM(o13Yova`%o%94C;)RvH)L&=|=4YT}h>}Abg%ynp?xvO|9#s z+g`o8;#sAn3amU)^yGKTN=?z!uMs~QbiG}x9B19_eJ)y;pYbL1Yuw(q+^bU*xokI6BdbXhv6T?BEuP*!_>;0 z<53bxzWI&|wy%z{?pV(|+W;r%JXgo9_Savm5>#b`31p--XxZI(Rv%%lu;?0`)0 z=2fQcj^Xw-wtQ!HaF2MnvOibA@rF5yFW^1=*HLrBJj|`CzUn1$y`zdWlTy7+FQ->V z?~2$S`!Z&QCONuK*syXcb$o&)BPDfbY`Wry^qEA9lKjL-P_2~p!#Z={t0ILo*a=#P zrcgiZjsQ*y^q*>r8iMv3_j5g7U+c&+PN^KOd+d^!1NDVwOGEDxZRJH{Uie>D|JvND zht}`r)bcTvHyW?kl~ml)|F93V@=gCWK6gwE?GNux;u$G??EhK*)IKDNO|t#)KitPk zk))T57d1!KPxU_eOV<6CM3adv4>j+YVQ${9SxL6B{rJ>zs>6za>Y(BSF9+|0twCnf zW79AHtw6fx&j8Na#0>D?r1IdW z>~&O{w|#KC-(U{e3;a)Pb`vyb%@pYi*M)Qfr}mhp%nu zF;4MDf=`1RsbVUQJ}G=7O~hmI`RETAVJC4E!dYRy{lAg{(w(Yq>UQe3nu&^EiWUk` zS`gJKK^@ap{Z%nse1ofoE0}2CTd$FL;o9q%wv zqC$$2s5^a zIfSo8_5{xdFA}tUyJe<%xA|jzlZxdv?G5`3k#&IXkXXzb)6pPNEla4lDMHi$aI}EhvC$ zi2&-OP1D+l+O*DE)}$o$k8mq(K*Vz1AeM#B^lY=Pv~RGE)n9GcVE-N{13J=k-MM}% zH&3XB+l88uokN8jop2rpVxF@$BU3Ri)DPS(>LJ1B=Ks^vQId;T$Wd8mN6>YUzK)xgpX)m<}L>_zs& zzH30cU^{;?aDp|Hjw91;&9xgV*OqlD?^2nft+4%~o=2gyG3E?i0rIuL^#PE(;c6uX(9h z540EmoFrOuN>C>JpOA}2(?TFu#ELK}XDJ87ElS=I{ZuLo8y6bniReGhfN`uQp6X}o*BQGR|7UIHTIb>FrDe*RZPsJ{4-VQi#yK^79XBVUh-;36j<^2T zK`D8Pi9jzYb|suvX5wDKZQdDp4H}eZME(`_L!XJ{%KIu0#><-6nu}8xWh7;&m3HCY zh$9gb#6`*|$rC6Lz8-7YBCdg7iqGY8@qSP&C=3~ihr|H?@W3g0b(q%Xa!qwcT5lWs zJAMWp`zw8eef7b}z!R7P^@Q(DEW_Hx|I8ofHG;y=>$sc3aB<;_j<7dh$xL??35I4QT ziw8Caw4U$&xnZN%C(kHa434130KJ%hNYKC4R~o!QEwK00y{q4(uc{tdyt43D(aMsS zm1isCE6!;V<3Zb9$1@9Qc;ueNS_FI#{mDFJPvou@(V}IN)$u=4|Bk7R?GP1G-qHYZ z+}OiW6C?jpjtdiIcESwWN;O1&hPQ}67TLq@Dn6`!Aj=e1M}3X{spz1*E;^52M%O|U z@dJDXd?Xk}6~TP}Qr7}zF4z{ahD|angJYP>@QP3_^%hzk5{69dn^arx9Dh6CX0lJH z+_}+Y@y`w&BdWm=_Ks-YGzHD3*3)II9_}i;&NYs_#R8cYyeLN zoie1B<;WHt|SIy<7q9MrP(Jc#eWNu*z*E++~wrl;0-_Nu`~=d-}6tg?sv~2_c^?l zuQsD6$1{?+;#p?=={oE@tZUJDz$P@lvz+wqaQ|t2;AIi79m6cM4MJP4k8SH~GCRIG z%-VAe*PSEv7RysQi%tj~X6;5T{E^{r*{$KK*9fQj>%ca=SmY6M+M_b8HaBtT2!rPZ zJ&ZnYRofdKdz>3s`&g~~=gdC6+neaE^_4pd%~64`o<7#wzF(e9$A8Y-^d$5WeFXRp z-GmnLw?ZdEG&hphiF+E?asFg0gp1;0l+#5`lozBABsq#U!jD{>$LIKv890uN3|@!s zu{-#)>291&ylUY^aeKi(^4V#TiHXsd)9LhmnVnnqOn;u3m9QqEEUv%ihV*{mH#J^% zls5uvA!(|79o;4RMjW8&rrxhUj-;~wL!Xl)i6?fbJm>ev-(Lz^za8?f{g02ik19L4 zzc(`V#&GhRUAL>MN0{WZJe-NnsC#ZLG>U&cE^b?~pzNGsAl-uOYb^5YAa6R36Sv?s z$StgZy@dQ3dJo+QCs67**Qip@tAK+@WZFugh|>~O8dTkuT~Pcjzad!}Jv*+299CY5 zSr`pPb&em9Fjv_xqD{DGES45XTq;{~W!zt?Zs{E%p3{Kg|sRnB47Mu|oM1NuTXPjEmkRs11Pi*L&Mi2JK%#xDq;`;62S zEB}>rNc)sYsiw#GO_`#mWcSoFqlRdF%8RUrh@ z>aE$uXz2v%RPZP@p0yB+K!0-HK-cI|%m{WX?hUyr;eGSwEe2$G6EY1OCYi z4E`4Q%(P;+_Kb0G$S;nm+IYjWh6(jPQU(lXcNb(~2SX(D4Z0n;2nfJwK9Fh+IIU+I z-ddj;HW~YRuZLbTbD>yjWx$9(_P^7W5+^v9kmo!|xl7bj5HD_uF2nv+{7+&R<|}UU zK4U`^ShOzYO3VoPN#;Fb5chyubjW?>#S0^>>)=n^ronwvJ?%!0h^G`<;D1he#VthZy z%ONQ{hIQ2c3SBE(ggW8(To}KF4nT9+Y($TB_3ZF`68?})Myfb1d9R@Na520gxS6$? z=fxgy^7*fMlZ7`0cR69cDEl3|TJ$ZxKflo%9tt5rn1}o;NO{|PTDrzL(tVS_oxrJ( z5bnX~S=X5ipMY8tfb}Emt}9n7o*zsQ0n*xOCNhVG(~4x1M(i^#Xa!3hbH^QC&;0rq7K35g_()yitNX2pX}ewV{87Zey6`+wb{gV&+C?(l=?k2c-1t^W9p7Cm6#L&EW;e5$%t@2 za+7_Mqt1Za0cT>p$Z*Zp%04T&l*%W(tixCyN5z_t97NNAMKVBjU%57OY}40?9g>d6 z{ZjObYukEj)11^UEf;6Din$g|sTHx~n?%JrB$t)A`lTX9Sslri4iNR_-3v_h+@$aN zC%RR^B@|63Ag-X@`pFaFEB7ly6T{cQB(gQNp1MTs@>_}5Xr|yFG!7pswjsOhN?nAx zi@B%qB(cgr*jr(g6&)%8Dtc6vl)NoyYZ&SwtY|}J-TDTj@~GA93nvb z*T!=eZexbc9xNjZ*mBjdge#i2QP(r7lAU4pj4UoEB2x8LwOe*hHVl8k8qJ9ZhPifm zzful%o%E7m3?SydmTRz~AOVSde9H;9-fgxijHRY?5lu1+%w8+$bDv3w2C0o+mQQu#Ih7L7SIeH(`wpPA1Xk(%U+(y9ZxEnYn=10S(J zOCloSNHhjaiq6>GEH&zLby^Rc(AMc5VL zGyV*0KP!P6#u`ZU)Ni#jt|1Mic?EHX=}yDc7FIEIltuX%r;FN1#+hGPw)*zDvaGe% z2Kxu#8Jyuy@=M9*#2R`Gz8L0G`arC^7cqyt?tkN%Ks*TDBNE(_;80{U)(<_%sg$;i z$i*LFeIr(R1ls^iai=V}B;JuKJ@F0wjDIsuY`E}Bm>uv{nvQWWD=y}whi$%*+@2Cr)&qFJ zv|+zvRRtG24mf*z+gNgHc@3kzET>Xmp+Drf>_Z&;oOhk2o=Jgj&im$fwt?Phq1K_t zfm6QG?n&-`o(b0BjeTvuNRX6yc6){s>-=vmt?S-sr`KYZ3Bg;T@x)aZ?tWmI>uLul z!X2T%p>6C9_*bz;Jv44m>eG~zxYp5|Rrew{#tfI0atP5y#Ui|dJ(oKUDQ05vR^+KPpqZISvc1BKAsuXi%^VvP!wRW9*DxD3y3xCz;*zIV7euav#9l$_uOXiXI zxbP5fv2c;#C;!adx3`K|?Roc>U>mtZr!i4&%gdBH8HVJ3Dxu z`Y*YESqAE_Xr0w9YA+iyO&?9H+9&lN{d>rq;51-*XqvCTe*jLwwLX*-J4zd&T0v>6 zsu7J>9jDzS`HXcLa&rY(F0=;*0~-yi+`af^cu&vt@P2tK^Cz$XP(kkn{oxbAg&3nq zk&fo?lmlrr@y=&%%jqg`^6D1-^euO)ExWtN}oWp2!XoEY~`nPpOBde~x zWr$B5-a@_e4uz+Ijh=z7Re??9Ld){{oyI!Pui(_!#y{))sn301xfqy%8bY z7|u4)IJp|%gx%w{kxq;%Ry0$yBC|Q^>|ICzeg`XnVVotB6>?A{;*OBNli%WZ<(9MX z@Ov*CBdcX;Xe2-#G*KzvWUPP#xsau36E@JPi<(FS%$&Oh*D;t!9J zZpBH$uOfZGw9s8ouC2xvWn8PPtiNr9EpFR5%Xmu@$0x6knBo3zcUg2sw!JLW2e<*e zW}eafd2xY?^PO|mLs;`E=^!N>pa|(I_W7TZ9ofht`GAj1WSRhKAU@Wu$;98*ch4% zq%cQGArVPFM#mtR!cFTS_Exl3@&r4>G2@G|Sui(L4POsa{hl)unbq_hFKu06^5DO?@w|To>v{9wj^Ss(XzD(3nZ8Q)aN4{A&ud4RYFz5xI9_z1>Cuc<3O7GbaU*GN{QSrpnyaE! z{;vi?&(VFTx?TFKj8$Iqt3zI!5=ou7wnuSN;icM3)wLB(s}k$3+g9i~MNLZ1)x57J zDs|=`R3?pwv_xcZIr^3z$y*j7)%=%mBC#>;Q`(W(yyz6^cJX-4`H0D~BeHM8C*lNQ zt#FxAt4WX8E*Gn4aFp03^m3TMl~Ov*NRR{Z~iuQb&N*YCvtc~I{`?Yho_0?2%TiD2$4SGMADt<%g9>} z?K-dDVMZHzR0zJae_k)Yly~?;X5O<8x8HwxGxe?U3+n^=V^jI2a#`Jl^4a+pO9qv4 z>)Ey=X4-3k7Qicgb8WR$FFK7Zg3k*qsyRY}st=zv%#i#g|0Ww3*+YIF8^qtsyMzyb z4*Dj89?^YF$D#RrQ5=_~hWj7WXFT4zt)&^ION*f5z52=KhI)PdMZ+vBYK?J1Kq2l5 z`@1}fCXtDPbT&&c5Pr%;B4glj$WzeHj7A0c2L1tT1^4fW%hIXbUfdVr@rtMDq0n^B z11T!ZgWK^}MFqqc>CwUMtoA{<5ivcb$AdUAGx!jz<)0R|6%Ujh3!f6)5!OmF6~i?P zHUFt+s#+-YQbM4V}6c{v0^?gqXBYwZ)QQB)>piC`*sN96K!pHh!M z7JXKJ6!(Gt<$a25qb?Dw;-;vd2uD%dp#I!4Ve??Rvji-qdxj~I-@r*&zW28C8#I(v z1DvOZh5&krXT58tWv;o4t*2#K;P238?>T3ztvQh$d_^{4p?`o#V@7vBJQfLsg+UlR2tcF$!+`>=ZYXr!4;fh9~7?@ z_r$kD--8;?3Gq2$YYq?eb44s7Fw67O-5#3bEj4+)TY{Oawf5VDm!l*%Gd4$#FO@Z< zZmjLGW4gmjL>DWGiNF(+gTAD1N=*fG>tUWJ?8aKm2{jxEIjwv2BT2Zf3m^`b7~@E- zWfvMl?bB<(ZT?f7IB=?Gjzr9wg#Q%HMZU&7G{*Nm^II_*3ye!tiNm~L^xRw~o3j&0sm)`T5O=*xfK1y*RV=kt z>tRKhlS6s-WGxr`UvbOwQ-Cv<|_{L7LleX;2F5q*G#<73R?+p zvAK%J3pXemq-^}(_zdZ)h^JXO(Z=`_(#wjIEf=eA#3se;7mWxrR8Pr6342v#@y%of ziq*o^z<7Czqzjs4J5$BB+O()CY{9F(Zro5br@Dn7x9lfz+i!vkHf@k1dwB#aOJECZ zkq?l!41HHj23t!yiy3Qw0h@{;Zg4Z*mGW_%_O3BF;F~R4$i3oPD*FgzvZC0Z?FA@h zwbu7_*J@?tEz7`K7TF=(1SBgu|GZ^6Ub?*Scy+tFS>7*oZ>yb-`Bo3n-SOS;feRel z8*yWI${ae=(5qpWDc)0L_LkM_o@w`5``X?+RtgKC9Ed_C#8A~JNqZzs2+=xq0cV5v zO+-$37Je+CSzY3S(5m1wK?d+3`VlH;^+leHfNgPigFlq9Cn4W;TBlPQR?YHY$3eF z_s08yo&0tDj&N7sYvvo$h(-D*yE*CW$;?C*$`iLlVe?V7Y*GDq^4m@A&$B*guV z`eRqAr^ZhwW|Dxql=>*;2&)CRQf@h>_$ISHdFP9^H-02{DK_Jn+AFTH5MdMswmCbpj)@)weo8b#Hn=`S*?io0;%Vr0ZkFg? zqE-49@2etWC#Le%AJa#5Ip6$6yqn)T>UPEug(7NPgjroFeBqjlnYrD-o79VjO~hWq zk>Ve<=e~EX{9S>5?pK!Zso$6M!nQwf=VMnpPY%|O9EYR;Z|obPN7M=mqy95~@qILi zO45wY>p@SXFSWKRxQUGR_<$7W6Tt(eOgyDYU)f8+DV%Meggpbd!>i>Z=n(HNRYVSm zdM)TK`2$)S%u_8zR*BckY~24vT>$>#T$d*!-$aMKmB4C_%|0!7)!fHd0PQ2zDUNeq z1Bt5Tmm<;D z28=qtqArh~qF>-Qa!%Il_tx7a!E3xL=Fj|=;)_TEySwAFnx0r8`;7k9 z@DwpoP7Z;0iarJZiwt18;-^%A4~G7Q{$LJqm9`FG3lMehX3o^zC%>ROEX@La4W<66 zq1UxTsnz~t-e;aqm0O{g9N4>@?(DlGohhE-e~#bd>J(;Po@c6TqjEPe!T;RS5NJWX zwsrx}Kr=(%sG!4uoZ)rzzGRf4`+x;p*to>s3+Unz1eaJ|vi*wl!Mi9)yO6h01EH&; z@6v7jnX3P2To9`~5g0%nwG4IGf_IH|Omp`5&@*zYc~+1C`dIsEKi15&>@+!QX4N0` zy$EdAUe=Yk$1}63HijzF#{LPkC12?aSYfJfD2vCi7s&X6b>7v=f${?BKjH%5MdDxu z&fl6mRl-Cc$G?QWN6i!>>T>jr+ZvUNq3quLOFS^M8K(gz6Lk?lbo(&FwlO&c?}ZkG z?t6Yfeay=PncOMtfAK69KW1Rt+StM{QSxt|oZZ=fl~IE|(Jn!Mumn2mD|S>@u*%4q z;~%M?^+mOn&l*mBaQrMQaDQn1t?+55pGRvlejxh0TDf7KbAQqDx)b^ovw?o?NkLX1 z9qoQ1o)$>6lxe*0io24Y;$iA%=^fhFwM@^P(rkT`eJN)nrLscBR81e{8^J%~HDaB3 z5a%rP7H`CcNe?OeO3ul9vHL{U}W`vds)>k^IybT7A9=U zMpfHm)=4uW-wUQiJc+-K&E;IhzVq9ONwmMDRJ~h#K~kqM#C3`ripjvyvKU3Sw6E-| za3{YcG|e-VRSGiLJK&Q)UD$@T+ckh#9K@tKNI@VD>koKX8LmF2-t-g0-fFpijX5#A zy<6ny%o+g3aLS=iVW;bLd>}3Ntf6SU2i3=W+`LPFtgc6Kl=;5@oVSl3_Czpe$livg zrWT&*!XNTz&TRZOvAL8n5KCkgVZEPj3?ds`eokw4Vdw7@n*EmJ|SjAM*%nuW$ zW0t2dvNp}0wm6VHH0`R$kkm1`BcHGODjpYIqv_*WNRTeJ*UrlFgx~^doLhh)7)zQj z-Weo9L#Zlu9@^-O_MUflGq`GPr5ozsIgxsg{u=oc8XVf?>ci@*xWyR`tOggdnK=Lxmk9 zZINjpi!(={kzZ53L&o#|ka?v?G>aooDPpApZa2yKh*84LA|n^)o8z}ciBwCJ`^BxI zQY3SPA5>1!x`^N05AaSk4_n1v2ma-aqJP>pxv;mC)d}efhJ)O;d63*Or_IzQ*%F_5dWjWHRqC(k7fk0Ik*+kh@ z=Ai{3#OuX*7H((yvDsK9+)m7ujEZP3yTe@=yD}MxUM|aKzeA_cMYM%;pRMOC4t{r! z3B>^wtcJjq;1u6E9i?~G-?6SIrt7Sf%joZwho$Jis z&F3AD{2bqN$1ZXMg}SzQ?gX-Fn&CMLjQgGb;8UuHcfD(qXPvJz^Cw;}Z5REIvOOn@ z`xcAkn0O|1h~RG_%G)N}EV-`a;6wZ}&Q$ywQo!3O6lw;EjI^GqftrNdwY!C#6K6%w z(d0-jvm!;0`B_kVRvbN6+K;be^i)_E*T z&HaqW>^tfjD_2*KvwWwAxkp*gJ2(4!5^bz;K8kS@V{H8_S+oZn@8w!g=rYZZt?`Yg zeMBe=dO@pwW6=cU4S$>bu<)Ro7MgKX_LzHxF99Dxc}fd+7Q#am(xVv@6eqdw`1kRd zqB_=UxF2_7z)JM7me{`$CDxaYD!sH~vKG)`rhO)s{WoE=+g*bVW3^Jp4)QSjPO!Oc zyostFsN1epk?3USA{&G!C7ibe|he*O4vPD#LtKL!Skh@p=M(8#+OgB%roBfUEx5mSc?(P(72Ep=w z3p6u`j62N>Y-9YNY{$c})N7#`=oiRDB>`Cgz$yUOp&ugVsej6frHi%U z8Ra3c6;sKF2^NDOvH?%$K2*w**R?FmJQ0(hJR?y_R`p5h=ohi))$5Y;Q~yhN65R#iv+rT&Xo?mQ^>iim-8z(E@V>M2OhV<~cU=?lkg^cse8(E)K z+NS{eeXMYC)u{Z1U#bfG{CHH+sTTbmU2^sJkg}iU-kRq6x%Ch2-@MoSor8t;b! zNsWT^ShC8k(MSfUCPbN&{!Ut!BxveLZ<}#Bxp!=A+KZ@>ksd#xj{a2J4w1u>A$iBnV)|2g5FwgAA2-q8CoMReL zeXX&T!CXx>ywY2|cida*L3^a_h12M~89sr&6YNh}scDw2;ge81u?y%Pa^m;7ukZs3 zyJDH72h$-LarzSmG(k0bW}{cllmv8QMvPM}5^q z2xc&M#bYH;P>NF;p7lWXCzsuO#>)iOx=QtFuI=ut`oAkilwUB)4YTU^HLft-F;6RB zU90kTaXzx4jU$Y=z0XWU{RD&E#UVx*|1@v#$=qXHQajJZF`p~{Qg*iHv|}|P5BIee z+1L5v!*KVXz!bQQZRG8MILm-MEIFomroI+G zDE5*nH!&^d&xp=qC3-?pE0^I`IU)Kiu2yC8O^Vft>ot8v0Yu3hrw0c(1O)EqHFADq z>v0pJ;`T#Nf-BJP1YlKrJD3VgBD>D`*3-qeCOr8(Hy2s@`?|OWSdM%4TFJ(drkLvP z+WoG3R+$wsCF`~iqc25TAH1gZE12mHKEI}cGFud$SP0V)G8%|iaOoC zOZw}moal7U{D_kg9=Hno$+3$cNp%>359BQs?gsy4pA)PJ;!Lm5%3v0j;)rv8fwTSF zp%Sn|;3ia0CHlMi?}iig-My22mDZ}j@8DBIjX9(pr0?L&*J3V#(^&DUp{rJ=|HIYJ zA#<%a_b?o4IA)CTJaYJ8HOC8l=T*6dRtMSO%ICcHpV0xn3+6J*C|88r$T6b<&IYI{ zD@Le;yCJP1lG!Bu=ywIPxiM5r^cMM^yd$dzhJbB2C81l$EOw;uqVkTo3n$Anh2Bn$ zu$Ti9&w)Ts=Z_ja;UXF48`9dooQA;CaO-}E`#QA;Qqo4|1M8ZwHQR;sR+izkU=ywa z_6k3<%AuwFAgU5y1Pmdus^}#oFcKUh zosO*yu4XUdG{M?|6sr*4hi3|1)Mz#!y~(T%Q~mCv#Ui68(pdp~XM(VnSVIcoDj(Nf zNv6Q3(c^Rtt2I<0Xazp9i;$h*TkB!#aP2kQOJ}#L{yMqVrY&jU)GZ9Zx~Xl1RY5dk zwfDbpeF%R_OQgNH<uFtJ*?%_(!de# zErJnJoZ?U{|Bd9E;+RMY&6D(!bfP->T2j5h*$m5l-t^0Kzg|-`xcZ&dWtBU%=6J^{ z)>3;jBi9=u4uhRZUijoJlK7t?#_>4#Cv%yd&v}PGmv)v6;_s2ZIVA+QNv0KfOSoW-nCXOC)$qm5l>nQLihd=bVJj`fa&)fn@ z8xA_WHt|p#W={~Tfy(5J!pEr(m&r?`kE@T0A1GU?XbDD53seTz$*bZi#EKYpZ>(&s1Ayd+dZt?|7bg zTv|}~Uu7HjCf3NX=X-|rx!)KVPx2@`a7%I-8UwCVo<&Y_J}?=s6T%tHdG~O34SOy2 zE$}PM$V;F>-wpp_mJIrbyv`~Lo#u9wqx5W15`Q*v1lksy%b6m%1FjWzV;^9@=sAdXjk?{Z-6>sEbI_e;5F>Oq{4{B zikD%-&PKIaZOfPun-u*fWsCq;%u;oi501BDX9QWX#ljk1Bj9JucnO#T3Bb{al%C>v zMJ5oD@B*N|PDgbEmNMQ->%gtH-QgC+D5Uk=lf7tN{0FEUr*tsE{b;by@PIUeCh z`)6-O=&mE+d24mx+|Q1tKl_S_caB4Wv!u@idA^$K9b9yZ=L|iE*Nmm* z--b6Z^TTJ&Q_waf5o!;w3HGKc!?tRvZ>?z#@G;bZxq}6rLK)QfP7L7#47od1UHZocFWyoN3|sI~VDqZ?I@wCd^g@h+};yk1bX-S*NevrPBCcjeGKf$6sAzQKX%f&$6^ zyaaEGDoQw(`;EFDe%3$0zRTA~sbV?e6`Y4ryvX)Zo1-pBJE;$gH}VdE#z08ERWJ&^ zBHhA!D1D1v1{9I!RRuzYAX(Zt=)4PH0VN3Qa zAi>(6NVg`{C)LN*^6l}pp7QsN2?c`+gC+iwn(<{UX$77 zuJj#fcxVqaP}XZml*jJxM-K3e0PjJw`7g2Oj7FR(*6?5OE=ks@&N8{|GjbL-3Hdj$ zPSPXenM@NqKXp#@xad8Cd#b#|12N6wE2H`)-H2TvyDGa23WYzEAaqx}UbQKHv|?Il zg>tu~Je0%!3uz;d!M&lO{2IJOkb=zfSJRt3=cp^8v;KJg7Gy!l!`p>+U@z}dK>;z0K0RCrd^tquRiTfSlJ8lf`37^B~Tl$a-`B=Tm;0v@0)gu?f zDUDT1J64G-V~fM{Rqx!0QxOigujD^=E2 zfx~1!%WY>b%ubrUXFL~OFTeqgXzw8Qoe+vQ^_WZ`vIS_u8o<<%1jsf#t@77bg?qBM z^m6wEP)=MU(kw$mrR-BS6~znwWOnn$d+*XU?CYUX=o5NBRE;lVOR$;1Q_K$w923~l z*aox@`%{<$-G%>u6rE#uTx%PJw>_S?Y15{*?Nq0>dusR8ZcmNWwsC6PwrwPhGn3J_ zzy1BrpUGT%_WQigTI*gVu}xUAIG>(_Jyb6^E<;_Q_w+I-0lj64_&9qJ=d5JX{Tcg8 zOahNNiqhL0OFeV=DZziOG}djfu74LBE5rU?gD*^k&$C|Ay)E%dlYqdy?Yair&~?SZ`+ z@gEbbYzzxnG{W`JUS`^GN#8^iBok z!lnJ$$|^Ak6vB%|Smgxx%6w|7!cpWgp@5=ZKTwv6iC+VqBhR~fFx$YQ*4cALz9@B8 z)^e?ZG-XsIqU_XHcvgFB(`!8WbPh8am>|w^J+mi5r|>*`qIavAW<O;is`Lq2WEsA8WZvDm!K4;X5oRzAD7xB%6CU8(`=i6!KfCtsb z@>=-{)`@$adtZ8CP5^tbhy0Bq`$CBDLo6X3R_bwRE#L`S0VYD_*@|jUqmByjaZn$+2oRPa zXrOZ_Xs|!z(a==rO(->VO_`FrJgZf(RA6+tcHm2RgV7c3N%Tf~n>Uag`(Uz;$Y>j! z|2gxJRA`MOmAWd20GYT+e4z(oH{i);Nn@5xk6rEE%lw1NUB*L7`!?dT?~H2NG) zHY)+^#a-HYx<8Z^O3I(0H#Z0PJ4I@!E!D@NFWEU@U%G?V+xTVq#;U9B1(#t;gXEXM zR&h||O!xqIKD3g}q((lv4Y-g6l3?Ge=H~6aJ?arf(>DdOCyLhYvZ|)$nr!x zi^Er#9iDm7p}40BImJH~scSV^%(Vr{e0z3OjX2KMI2o$+k7FWL*n1=T2`NZDphD1b zrI7JN!__=sC$R{L<64;g;RedTQdxf=wFJ=JH^O{ohmDhw4Zd2TUcb(N+$!Bcx2t9R zzcWhZCFPxFXK|JNzqD53hsYu2owkMk$G97~iNw0PxJB?bkdbha`E7hakuwZqv ze%!wxtdwUpb&ItfuOekjIlLR#D8)!sl}rdCi~Dv43t^SPK2W^rB0(&Z)sZITIMPkd z2ArPxj>`=XIrX>gkNqN|(shwv$QK+^@{LR}J$Rk(5izBa z!ldwPu6}rd7N?yOKOg`()7Ahel^@7klD}P!0ut3yNL8f^$7*}{%1S$(ea$2tfpW(ZyS5zyX$L+{3!8g>)7zs=s9HSNy zF8J5+SA;@RKlQL!*jOv9X79*?&=dM;ER4i+H+dVFBm06mPS2VW<;X(rT7_<^@Z%ioZcMj%y$5v(3aGA(M!Dupi%r zkjeovMO~L^6f_DiGjfUIa9ey8q^qsCCgLw57Kl;XA;rx@V$}d5`~@_ZyQ_9N%J@h` zlnd;fNHHM|d>&bpyC>)tHh?FDUD_!Zk6v8KrogNFkmOh0M!J5yv{)dNc;Q2>zry6NT)9 z(Q?6nrbvc71AZzEK}(}O%yy1{Y$^7U&^oP{t&sNJJm`Fn6-Fuohsjw^4|6)cy3I~3 zv1fy=yi1}x;6I%k(P~6*`)KN=rz&KJhLaDt_ewu-F62fkXywtJ`pUdNx&P+I@*P9P z^U6y5Emm=Uh|Dc33l%^@X3-(&Fg}(1 zO4VX48w&9!`kv!0ebc;cokdUORC0^wZB(?!XZwrck-E5-nrzI0C%{{gi&R(rgV9M> z)aUe2`&R5JH^kRN+XlRW^0BsZjQ{u_C2ynjT0SPp>K7v3(b$>+=Y^{l{LNJfp0nPv z@oG(OCs#)O0Ikrbu%&`|q1`-WX%Pd>2S!=`4D7|Wsyl@T!SP|6&>%dZV4&3$);zLL z=ndaRI^$nWS$ctHSSiJ^R4(+xHV9dbz^)P4V{|a~RsW$RMOp^_aG!u3u&#XpHs}qc zW#&pS&DPj+##!I9l~9n*^m<^O@)%r*?jl;6L#5_mB{;)41$|-WIM3m)_%;5;k(FXZ z+@$mn6GBTO-vhxw;c$9>*T_TQB%(T2(l|PWyoKRRPuFx?HoY3kRC`z~|61-S0x~D_ zt=V7dIIW2DMNEwSR&-_RGjq~Y9$Y{+arqpBJtgSLu-BaC?3z?Eiu7Ewt;2^qR=6$} zE)hT0yEEyg_g=!{;z{nyNdtD`4G0(kkJna$&d7B$g)v~sO zg=Obv=$ChWp`_feU69y2F)m}5UN%j(LBb&rAusgun6#yD-YMZK{H)U0uq%dv-*DIA;L zEoV`do~cD@hoXd_c02MiKx8;Ghh+Wr{ZqjkX(Qj2>yX+48)oZ8EP_I2ws{$BAPSM= zoFIKNo)kP!L$eoTpA!<4ui5i*hGk~{?D*%|ul%1)ekT9^FZV@GlK&;wCp}Q^P|*P!?6B(3R>LL+*38av?~)GNz}%&$Yw-sq@Bg&91t^`cIzLZnq*OW9zEIW z2g!yz+E+N+!B^0E1cB|qo)KeRhnx@aeZ(Y}9yitA*f_2M%29cgHW6$9CPR~$k)&$Q zM9VrGI$sf!5I=RBTm#L6JJbJ0A1zcb;doq4TOXtX>2aL%SXH977}pk0w7aV99(BM` zoY_Y|wI6hTjvi&Z27xfa9E?h&vXF&vf8{#d*bY-iflO^avI02AE%DDN*ek*o#ikBl zlphq*GFJFoibcYwHJ6kY4h09~9aBpJIpAMfif^p4Q!Qmtl+f&6p(d8w<1@MtZEtI6 zDGAe~*HiE1kTGBH;QC0eM=CjLqFwAVdPDxKL7{RGY0QkQg1)L-_`Yl+j!P;7FJu#;~TP-p%e2<%*-9dh9wiGgTmTRe80@JZncWVLXV2IjSK+DzfwTwpWp`~74-~gDD(_>S?||){5y^j zbLnmRGH|C>VD5IE#8Z(|WTJafVK!=U%$%r`t|JLcW2!|b(pAkBYPg_=+TIw+PS=+B z`sF=ln+L|p&S2w$K7rd=s2tCh4aNigrDFPIeswTtRAgsq$E6B^(R54ViL+e%I6T4o zEV`xpTueNk7h9)rpXhdR17VHm=D)pjXOv3l#kD^8tj*XAFqpdvE zo2YMb(_P-E6lM=u7Pi3+z1?ko_;1C>`mJs{gR3R=@b&z2;zRe$^?@T9NWPNuvtW(Y zbVS;wQM<8N<`dfAbKkShwk+l!w_IqtCxiGJ*MZ7JpW_q38IBIh48e-dgAVYERzsdl zywhx0cj~&hORXE|TJUdVR$eN%DSv6+$;hRQclm$+De?1ps6h^HO-(Dg4*)DY6VGUQ zTy15QQO5MDtpr{EC5$ydH7DFd@QT@HZLZKCJfzG2smqjfVFkDtcq+XR6fo99+hJxn z*~8dD_QG1DRmoLAO-~K$JNQaFDw+Hjh(jt$wK+V(g>+zR zNX6m`h)+mW4cFBY-gWkvu)i8VHzsh{9>H33HoPlKzqHQH^dh5&H==FeS&Gt$cr&IV*Q~&ICONY6wpv!|FbrfomBn>9>wc)O_XvItNWK+wlX9`_|EM z++r@QMS5Ws;3RASw9(tllk7|^b|dbR09LO?Ehat~U!CQd0q_uPkcfnjhP|Qh_-67VxREMi&G|`m zSaaeP$twC?D?#`S>kmB^pYuK;)&9oeGm3(vgym3U=LYn>?WDOd0h3e}` zTqE{?vYy4{@5)zkKKn5;PVFm|6m#SZA*eUgj#zzQou%9Clf1FHTMM3wwUwDlNpJ?} zMbnMd{5bk4^NP9dZV$<}*S4SJ)7ZiGVU9|c=8Z(L^cVN~#JOH?EJ{wY*N)z5?Z~dd zbID2xf1#bJ;bco^Y>6x63gnBko~LfnS)O-Mj_7UhW_%KcVQqo_!Y=5Y+15%_-$MGw z?};AgS>=5SrXmZp&cV5oVQhx4sLiEH>KZOlco~`yPU0F{oT0D2D?&Q>(^nzP1aVqT``RVn|!;ojlh;%5E27;DDs3DQ|{w!k>Xd6IQREu`e?Fv?(d zJixqg9*eQsYppCuXRJ3|(Z1D@N3I}G0;+tD8_dS5J>|0O3>K4?SrZP#Hnpf(+mNH? zI(RBHD6*8_5N;53D68ekKx5#kT8YBlt)q{|67*y8HQkqtqu)7ft~wND9FhBp&x{KC zI_{2g(p+XNGY@b*LZ5`zLLBNLGWBbE8mFsEi3qsRH9WC-)FN*L9Sz(e5=hqdg?vX( z_a0$d)2)EPx(`eb+zC#I{1IP5@qujiw%J!|f-qLTaX3X9%amo}7pb9^BlXw&OTB#W z(#!oE8L28A;@fc7f@|dg1#v$-IaU0O#F)b*QtH4pj`Rqhv~Kzc7pJwCw<$NlQzCEl zftLbL;O2a~9A_>QHfff^WO+<$z<_xd-f!v;uh1_N=NPTRH4SuHC#u%jid8yO_?(GYUo;{ zk=f2kxfUU#fVE0VE zv3vkUlJRI}HQvc6g*?X-h(kzutM@Q0tuLs-;i69%9EmLeh3DpT?W(vuGEZ!*4^->G zA#%3fpFJM*%7kqL(_7k_|2#NO7|7?TYn9v54(?b+#oPwsF}1)f!pEwEQBj(vOj2;U z8#9j_iXL_Tvbixo_KJ)r?=w3+SKYUw%6f;BwTbc8l=c%Z4t2MD_lL=y5eek=?~uR`5IlOlVS z3t^vsrZ878tPbSt@^p9#@r<4UTvQjTr=?V*E-)SGMAQRQ!OzHe{Gx;ME=pJ%TiZRy zRRXIG4YH^Wdu(0M0%!y<2;5GrvQLRC9p5X;8(R=NFsg&&lEd%q1cBlltF!Vb@)H8& zOHxIxgbai-#Vta8-(`yB~>ln9&T`eECl5ADfs?t~G z0A5WyD^86ekM3*=U|IN~1%?CV5*z=fF;MHV!g7;_G@2+bYxX z#69~o>aj(S-EDkB-57_RK+kK3LmTtP2JQ=rQc_Ng{4Fg}9{A#YdS2G|!|7G>PW#`7 zD*CqPtoGmMenndQzXrx|o%AdvnvYkKrL*7-z{eJaFH#GviFA~(pT7?6M@FGB#27pi zsA-y5b7&8_-{o_@wXXwaq5r!7W*$2}!b{|S)IvnGZo64Tf_r}S44VWuze|dj?f?^sKMoJsnJT1oVe6Q4fv!+3$Y!iD99nB}x9@FGQVZ!6(gNH8r63E%dr}O) zidXRU)Ez3?%wiksIOK%S!4J{8wwGuZB;V2B8qo@Qlg7k6pEu4q%=Ffo}(L`j1LU5IV_UJsa8d6w0 z4=l0nJfB=Ih$I6Nb?mm87_P7KfxcPT&(QnE1sCPde3#(T?9%MCVA%hg%gb9A5P~!O z2Lor*ZUhRk&jMN69bpvO+p$tTZ}CiE^Pthp|3Y5_MC*USzga-Jrb1jgut%6=c}S*k zkTEIecG~Zp_PNun#x^OKtqJ@ac#vKL^F;qP)&e>aOYL?l*mbLEcQkd@Yj>_q_#Q7t z+ml*Gbt&{XZlMiHT z#)ehygj!79nO8A*KR8&dVYCUh3Hx(P1gC?E1ur;GtP)-aZQ>qsyY;>56uPf|jQb4k zL=2{a4rwEx6`{-g9Ig-2Hm)!j!RwQiO&8r3x@H?2HJ^k%b(mx5A7HiMvChNc!UZ{? ze6UY2+lQMglej|aDED*US+vfe_` z$}XxTe8ms@uH^PB*yf)W#6d`YsD@P4a;q*8a?ojZO&%uaNw3sKCE|o|t6xd{24jKIS}07Hi^; zQ!~Nt2orVNaoy%A8j5@9IF6m8+DF|d4l=sMC~W4qVsGJIWUs8x!JEPr(4ka6;09wS zpW+_mH=6=fBj(Vw`#c6(anTk4NgM^nKoij2NON?VgrO^3`=MAqB{x>8t$xpLV>t*W zhWm!<|M-$tJhy)!HZm!Dc}`At$Gpo07tmE+c>QC)*@zk;4pAc zePa;_PN)|Q5qbn5$WG%2nd~TGdMwJd*m z!thv6z#=@EcWITOdmDZ-vP=DG z&ZfZImGPmqLP_`=`a^nQX%KtR`gjXqKk&h7OK=M_{F?9z*@u;Yr(oU4V#p7DlYSH! zDjW-W^y_dt)hP`#33`S;Bk&RWL<~X(>buz1ki+aG%vWrI*Fs4^LL~Al@BkhSG&d?E z4+T-1g!V?q+b=*T>FtSCZ4uXhUekFf_A)scJsNe%73ccfwF=*7KC({h8=@L%A$?O1 z6BXbxd;_Es7=zTow+Yk9<4Ygpd5(j~vRH|(l zoGIQ693|h<1H?_}4)6$|g0+l+G4H4|!hgm~q$Sfxt|?5XM!{vZy}}T9i({MiQp=F9 z%NiIJ?qQZC82$`**I$_*0sRWD;>v&n&>i@9PErbpX|ieMBQQJVc81FcDI}(Bl)HdKghucpyfpz(b%XQR^4JZu1$Y)H z<7nZE#Vg_*{@z_0%QuU=zqs04R8|$K9COgNg{LS@V@Y$3EZbU*l1+J;`U4-$SAqyV?{3o@QNBamXB zg044<0aL+`#EWpT@Mp3$*_BvjmH{p^wZUla6JG}1jjysi*1v3X>_foqmWC!n?>JL< z!S7Pn^2hTJL%X2y{BiMwFiL+P$&D0&m!q|jMS;D+JBX>pz;%!${9x1v@GCe6xdYC& zcLR??1yn6$jQgFvHF^<#A}usZ0jt1nnlseQ*s0748v1*4HeMg@%Rd7*>p#^G=0t1H zvswGY<8T?hz1m49%q9Ah(0l2!b{H;?pB6@2)BQ$1NovHc*Si6Ql(JAiJs;cz%;px! zs#@6i0+oYVe7C`1MR8NAtCk7>2%M6a6dcd#mO}^T$fJE@^OuHuSkA)P+7zgO?5t-3 zVI$YrRh6ysjSG<0aVfSFd~XgAw+ zrM%o7nF$!w5X=u6wt+-4(TN%W_eSQyvCMjV8D+barLWnv29J=jm6j1B8T>!G7ClEmfWg!P0B#Nnl(^g&JCX)93OR zshcu8I8AMcN1$EEXR|S!grsYWjP}5EM}4d3;Y##hR`c9x_dSdL_$jIbU7h*pDORX` zR5fC#qpLAEA!6I`%H&7vGDIszoz6@ ziDWBs#K;CAqE_K>tL{7m^7+g@lC_L=)lM{tn1Kwhto<*WKmNEn-*%Vn#%WBqq? z9))U)cVw@zF0w_k`ftUCT2*8Y`J8!*e5YjBX!~BGzx9o_$2ve+%Ghv{Jj8saM(O1g z4Q*h151v9ETW!m3%W1txbFmHl`=!~!5B0pr`YsD;@&Wy|{$2bF5Y7Ly%)Sda^aN>z z6ene}_ zF~>XGsgYZmWv*>#S7eNx^w^zukYkSSiN(FoqqjxR_Ret(P;S9pqiaPCcKt<Pc zQ#pD+H3xEFF7ye~QEVt~C0=7YkU7S7v4LKmEfhG-)r^FMyP*|A4h{hW#AcBX%0I?r zISYOb&jNePtFuGlEcKZZExrx*u%^q~QZs3WS{Pjj z7>RHL^MlsGf6Qt&yJ~r!XUU)BmFg(*w)wBNM(!&$4KI|F^}3etc~9gY;gIH0n*g6p z9GU7ewMbR=VPGn^B9fz)GUkh&q#1#g zk&2QxGD=^rE|uc7NlH5ULmL$_fmgbu9ahUIYw$#38gs?opB#aASEpK={<%mNwFR7} z&w~tbyt$q)P>#YaMTWg0-$kaQ*Tq6=1lfuGLr};HrZ}03HgdIgMALu6^R(@ljuONj z`Z(Ild6Z6u2O*+y-!{hLsjqh@IG@;i!J_s6n+*=er&CXW6PVwaqr3wiC>liTsroXC zgLA0`_7B)j`Z}CtOaOmFSCMB1j{mS917eK=HCHL-mCPMDRDyV!KJl+amHmAeAN_xHcx zA4_jTd&JFLYkrS(#&SAG;9P{Xr9%A;UVJQFCWfIui1m0iIEu_RGPLI~Y4v6mG3J{$ z=#q}*o~P(j;(dbCwaLECS;#TLaTwZ*U7#A7zs#aWHLM-_NXY>`NJ-2OlPU_dm3~P- zj6xCuy@o_(uriJh=mWIY{86R7&|PZHHw-P2v!(0$C}V_h-zcJ#QZ^Vf_!Z^`bQNZj zMdUXsthZD0f!D%)DIJ(%W@63sdFo!{rMygk%kBuQ<(CRWppqsiUk2{$J%GE~DP z^NrK`3!@))N_@wrTSU&e=BUt&@E4%Cm8RYt{w_{|WO1$X*y5%oYPo^ek;!~bwvX`y zKrtJ*S8RmxWD|OX)u8o+&a{<8nwkq$8@bYA?d8DJpbC~Vu$EDeenrLMr|{ZDJ?9N9 z1({|wLX;!=quJzGo0aLeT%u0AICWcE$So2Vn@z}aU0J>!eKM#ws0w`^pSyD6rT? zd-vPw+K<}~G8Zky?k4q_vRr21cCZEX1K36sVFrSQEsEYBpfzj5%&i{&(5f%t>`Z9AUxEcyd<>f(Ilu;BZVbPGj z&^)-(9H7Ljplp+qk>)T){pW~=0pvA&9Ql9@5H+*5)pwhQmr|C(0$mDug)KJQLwV39 z<+!zXnj%$JN`-!yui$hsEUx0eX$QH+fp)-NW2Q3L+H7{>j)Zyz{uB0d{ZuF4nJ)pc z#%!Rom2Uq9=Ftu9rH~k79&?r~i)LV`I$kIfC@bW`JFNuMcB{9hpRrJWWM%Xha>syS zz(eSXx=6MddXeLyRILo)(XJMp6^8>C`SRj4X$I6Bqm=%Z^Q#2X({joRuA}x+AWp5a zo)y710S!>^;1`&axC6TB>hMNmJQe^!IA1BuS3@r8W%+QZdGLYJT$um=UM=O0S|{`^ zyhS`9?gdX6N3{LmKz$>SZcI>*$g|l)#!VCk`|Y$9WfEhG)YBu?P3z*Z8Z)B>^{Q(Or^rr967 zYj%dR>>uKW*z>IIQE%{*I$pkR&IZ~Ek~o`-<$KF%7RTbH@m4wx2FzjnLvDZs;JH|T zvo(AV*kG}%=a?aLg%Ycw@_M-(a>5+1ZPRUH&}^l9)zeUar7q_UUlnhl&mcpO)+ZZ? zI)H1-&J9VyiV;mPrObqlQ%SlzMt8OCB zBMYoPzj;_$TNt)E&U@aGC%hGz{p3DZL#Cl~Gm!%oMU%`UXbm))#@%~>#^5cBHfu0v zl#1FtrJt{`I>2+dIpe|f>YXGB5O&HGwS<(PcMVl4h;?MDW(CjeURp5K?%!VQHa!wYmEONfc# zQ)ZS{AD)5nunOlW!}U7)ck_WoR9ws~a37(zTV~L5NC$c$I1w*RAFDS>(M^Rp}+45|-%)EuTyym{kP*sJ>e5AbpUk!;`eL!Hd>e&slH! zH#lIWQp?CUv=-7|$}Xvgxd=hE8(3x6u&Ax}k47f230R_*F%zLSwoK1-e2YFyh0UKD z%I#Frq1|LJq7l4>Xp9yy??O6$l-^;TOn<2H*ivKwlx3pUZD=_6j<0Vd!3!;SM`>j~ za0sfa^f6M9DCnR?+NcJN0pDv|<-hnv%4U6;dP~?4KFq}gmGDWi2A8Uf`Wdc_*ej9} zt|!#uj&UCY#lo0YLmP=e4wvVWodzevEpUtCjGrR2oSpDnz!#DMck9>Dai{}W%B~EJ z(LbRB(eK71wVu&hX~>`Fw`=i6o?6wKE~13Xf~%mXIL!>p8RmKYy9ye^wT)O=>K(qz znl)vti8LxON3zL=loYANJ+Wq%5n{ZwlWhqPv&fc>U03OJdrN0A>@d?FPqIGAJ`BJ& zm^S#A^B1uM&NDZH!;qfZN&1PW0aM(z4z7p)qPLhS)HTN?@`SA-Jqs^mZpSUNW9(zs zR~*ow`@ijXQSLaX2!&_7(qtPcLEYzGMz-TVXd zH0SY8kn@#G{IBe*nQMhl!QKTkwV6h|)`9)WR#Zf(mO2$&hYcsZ@G$h7SyhgQry~aL zAPuw>UJmVo)wOnUTg~lM5_%oQ(FneV>IC%E_t1)K7yU2!$F`LjO`r5k^h_Y)P?q^Z zzXZ>jBtC)e%#?DLb|8pZNvEYqGnK>9~&yD6fTW8Ca$g@D3$am--+FSg|^2RxsS654A zpc%*?i+b<0*u)4_2?>J}z_r>pWT$I`{j)2|J=fF0n?;&b0+VjhijPr?h;&;ux{h_m zMB%!_jW)HW(82_0E2^;CM&owas|prNrh(+oc^zU3xa@YJzFcE5gY6ec6n_BI@QPq5 zora65dGc^RC;Ul`6{@jAjM&3Gp$&n0IbkdW*uhuiRqB@h6rM~iMHXr^!*66K*arN8-PgYu8z2X_ zN9_i6HZqXs;4@?ueGn^z?;*ROlfc`iN&n{^WxI&~VLT2T-lvTM`a>sh2YlSvhV+Cg znV*rV-~}KWstA?@_gJ$R3OLZ^SQ)G@7QxRrl89_Tp-y8n)#KK)jacc#y2L-O;m)a4 z0yV@*d&}5;^mKeLG7{bfETc4MeWEs=Zsv)an8IH$ChO<;GW=MdnYl3Up)V$TLdJ%i zq(F5xIlo^zl;6i{Ja4NM{CGN_0mm z##Pb2%tj#|v$nMX9BvYFcQM=e*J=@5DtFNVfVb}Z|0pwcA74CVgHhrb(h<1}@5PU6 z&Di^3fAk4FS$-z8wrJ9YfsyD$cs`nnEW!^`-|;x|Ahgt=@!5D&9D;o2RHTV|#<0^r= zwAFl}UNwiwZ;aA#w%Jc>D;TPk>|sTrMdY8ra$iPhirS7F&z;gA$?xS{uBGrE%hx(^ z-<5gFBg=W*mu_QYp><|Ays!J5^Qrwtl;sDuKlKduEQy{*^il_6!^uas%?wDCkIIex z;+bVXW2@qL$D}#8$7IAej4E$2mWw$PsYXm!>;2_LuV}lmALw$e5zyC&7)#~8k)n~< z$h>f&z@kVUK1(R0w$wtvIII_Ngp6Yha5W+Tt;nx2JxIpN=B%Yk5({7k$MI*#M2n^s zi~ZE@2S$j9Fu-^Q-3B{2%jiGC5A~n&H|c=ojx^L?f#cZ)xpVUyTYcK`zORup>|feu ztF2{?32UpNN8;jeQ=SS}6y^xm!kzgwawVx+g!O~mKDjcR!X1?xD4&E>t*E|1O|ouo z`;DLKdG?H+0Ji~(iE|=1^&tqZURR!hTi^+jD}0AfQLdwm&^Yo8s3-OiKS^7ZUud=} zM`SUUZzjoF7X-EXs8bX>c%PhrOo)V`AJloRzPL&ztvl8M<1N;kSPwJcYG4k&6h5F` z13$~xm8W0`JZwyrD(Y{+6Ho_$gh~=k!7R&V5HdHx``}h+Kkqum3;FRI)SBohmueTB zWtr>LH?Y2y`d&qLAP!qQB?;fhdDJh^AhDJ1km{Ow%n#$e0pm0D9C=T!M9Zoz$Q?`x_%6Je7~^h6?1e5enYQNE&TBc{fSdwfHYcEM2!}dK zeMoO*_Mo58MQ}@^CtM%sXJ1D42QQ(I=t;Cr^uVIwvczAAEVq=sVm)yO6ax-L+Tag_ z5@KDmy7E-Zl%n|vT{H8I`QRI%BD4oTu1pY5$}^-p>MyyD zUQT-|r>QHHc}7=byRy$1Zu~K>LoCQ*$;bqtiy_Ld(7EQgP*46VU&F`+lhst}0oqM$ zu0An_BF6wly^7@_r_@P8HH&`VOYxc=VO`gheBK3}pw>y_A`kg}!GM2oL8{2;i{u01 zA9V|qqyEDd=hEai2&`4NHh=>yZo=xwW1)z0lr1UDceWNFLloRfwW^tX|T} zwC1Db0lWAU8cy^8ia@z=kX}j-0jgkgiP!iLrCT^gxG7GO-vblC?}QhxY0c@!*^*o$ zR78o^S1ND$y=t^LB>bCC)%WR6O|yEAB)uJ)iq-|Y>6L|&&}C{5{vIwRZj_&^#bvKn z3u+9W(B~U3;W(x{ep8(T6s5XA67UL3CstxUellN0WI{3FHR4n1H@;TA36-Ijke{LZ z#0b|4cP2wxt@Qgmz34i4X?Ha|8?30=jjl`&x`)LnYm5~}cS0VBgDs|x9t+(j)>-+^ zVNgSTiunh=qP$1Gppoe3JGQ zEKnL6KcMmIIP;fUPyJV(By_VHUVcdx6sIV0!_~T45A&YdTHGct)(g}TzBF#IST0aD zFVw&5&x!Q_KWp5IPBON2Y?~iEi`-^b-1< zyl64#pCb#f@!lNo4QDg#wbl`CZ`?B`VgE6QEhRG*Y;I`_JGhC$c735XLRuotGt0B9 zA`PXcs#7Z~#7iTT(c&Lv2{sC!M=ZirJk{|QtOES7+g*pKu4Xgr7V{VffHy#OcpKD( zy(br7etj5!AoLSTz)PA%fk9dx`pWRjso*rAyBrj8V=tJijSlzXRw(^cQ;y>fD?z?I zYjQK?BT8rg{LnPEg~$uH3U;xV6ijwXH?*$6Ij9V{pLj(~u~64-e$s zA<#&P3k|e-28o<)O9t_jAZ9^sv$NV(@mrmy--Jo* zaDIjULvN;jaRyCNUpQahQuaTrM#CGh0mdEN!GqkZfi>svjQKxZNEF{)6<^k2A z5A?og)Y6cV$PBUwUIy+!u3(bM%2<1>GLdGBqw}bWR84Xx5(iZvQ!x|y4Yg5ANAF>>AO-f-H|q1vT1X~x+?vqN znv=k7me)SfsDWIBKcIW5`f-Boz5nQ+q0vCVnMw~GM~fSL#rZ*ybz@FsT@x} zAAZcDe6sLPEgll{{_qXu>Dn?S%-_>;!RJb%27?RCLi#PS0BA*(#z=Sy5R1OVUTNRu z23EJl#mF!A0~iaYD=6PYP{A=8V{sg==+}*2!Y;WnAn87_zS0~A@qaC+LeS#SZILI3 z8br2Rp5Xx&hnhe{kPgsHbSUwS8b>d-HF9ZI ze|1xQqFLjA6kTPYRMi&VadKvE(MWfvfJlRMcS&Aay18_BNJw{gNtbj;cSs}Y<<`Wh z9dEs#{t+F{-g~Vt#J$B7qh)z#aH&thBOOw3BPbZkQ^d`-wOE> zM|juJE$e_a-)|Tn_6cHYG?eP`GKYn z@0AH~OZ-4y6Gg0-w;?lUR&2Atji`xnFJgX+3ey?BYU%B$dfH82U*Gtsb+L}GwAorO z1Gm~nF^Dv$djll;NPxkPdM0KQpl@Bo6JFRkfC}-BvZF`})r?etj@cC8z(+e%!>{dt zeNGGvJq<1i1|p?#dr%fJ@|b_N>(cyzGQPsZ4exiy^Xa0OD9UcK(vHGPqS{7zf1J@@ znW)b*?*-zc8Y+d1s%l%cqhS)PY}InncvKN zTVMW2-V*xt`+EB#RdHRG9O{Sa!TzJl=Det$Pc#Z0cUsZ1zMt`7_af)w1d5Yyju5koBV$S8k(sn)>%!j7zREk536^Lzwy7Q4_ibpYpYp`jAI96 z54qTGZLRXUqYyY3@}j5s9SU=BTZqFBX7#meN;Wk=FJ{kxbdoUiGgZ}h$3}c7cx_;< zNBRE3e>els9r#;p$#&|+GD>qN>d$ABg@JtNEoy8o)qca3*&!#Mf8hDU%zokA3ZIGO z;-%$hw#nKaHW8DbBYC{#w2M04iB0*%86v^46B?0LFS6gYoq#jM-e#|Zq#i|{cJ{kd zyuwZ}av}9;WGL$n>YEtox8K8#rw;h8f%m3Ay@0#3%yJ+#w6T6GW@}W@=-Po+YFT^} zRnb%YMf6wEQ_|(|)u4Z)0;rivv@Pzt~j?SjvgxSlz)H$cIaIl5;zsWu+1sH-+bA%IOwlx5PgpLSS9vN zi;B$|7~$&{Q^yxWhtO#6t2j<)h+OHb|>uY{a>|5~44-BQsk(txC8&@M7uG7V&hvbZAk^{BMoF zPfD)!tz*ix;Iy=B;acz|9shRi+i<8V@Lbo<6TENraes6g+YcB5m-MgR5tJVVaF|V@ zo1z5tZl%*QYE|iC+ZTANRg(uQhXVuQP&G&!ey6a($1cG#T*8};+>IQwsT&;B)azWbZ}BFge3 zR3VFzX*G7b$SmN*TI?-#FL@kTkRMSN)=^I2i{&g(FFnR($u{uZ{p9^AKC>@w$Z5*s z%>@BHW>VBiEh8G`ZM2evh8D?&dKtMF&D2l$^QS)$U0Z)e8jw__mg<>*t06;G*HIf% zAcvZ(l+Ca$tw80(pYE^W1)+7Jf5W%!Do#%Cj+52h8Qz~7=ayo*z3R>;7hyj=;_Qz6 z9vYGC+QZ-_$zq*%Kk)NzQE00?f}fLFk{L0QfoE)h^)m8?WtR!+SNgAg(7k}(7%hnB z)c5v~IDb~H0;%E4>6-){4eMCI-y_D*OuZd2@uNr<5l@$h)AC2JEBlR?ckYX;S_RDk zg|eng<02sb-|=V!;m&qGU59J&#ioRVtif@%6X%o@|Q9J+y4C~>ra^WGWf z&IHWyD8tYpc|sIoM?&-LmVjAW%46J58%=w&BVIkUi{wG0c#_P7YTDJ@F?c(A?R^xZ z)ImylT1qQntX3NG;a&~?kv}D$pkeU2m?$;Q*bGsd$QVz;G#7}ZMeX6*G94+!lP?dmHNAm$b$MM=g})Q9HRm`VOu+Faw4@dldjYVxrp zjD|P|lgmb$qdMGTO~qc)0~L1OT3t~g`jsD+E7W*mvr*!#nonPW62pI4%b_>3O*oC0 zM8`xUx0{%(F3~=dv3#yf&$hFAD2oy?ON$sg4vke-p%c8SysIq+m2+iqJr=>o?XGTZ zZI^xw%|ZL=XjC2&JNnXt{!YpPGJ@_@rSeVgP@3pdl(WKNDN0Z64UTm})+^Q-on+CD z#RhpL_|MSPJBVauj$7WF=q5VFBTr#+tBps?fLj%kniK49k&@76xywV|6}y?6$JrTf zAJO=Aqo$hCT4S$<|F(G4*3H0cp!cE&>{EsCd6dWB@!qg%>8O>D|n@2$(mBTkFwxn-7zD(CgA4{JYmn|ww%+09D z>PvFacp5h{?r3baz%$dQOvA6V9)V|3*yvz(G&}mnLsRcL^|rs1u^?(eOghu@-_dg$ z`TY@pwV0A-Cg`8HiSh52{VdpsQ?7+6MQ9a>H0d;#maM;N85cqK95Hrlx*E?iaK9 zNzvbS-5T;b3s_OXME8uB68_WOEwgz=L+4VB@Ep5j;@a<7?HmH}p~1oKV3SPnLoJj5^2Y?;hTxPPbIOj;bQnGy&dhvc_^c^@m{HSyYcEk(M}gOoPG zL-shYL8Mx!Q(E(+2H%^1EtSMmmVL?neMESfJ<^(CRk!}%QQW{uz~ALm1Kr`8@`Ase@2eVStLY(iCOb{;XnlaID8R}qef5U43AJ%oTGPpx zb`d>Ojw!$`+LowEj^L5F0v}9?`LDX$sP3cwK4z-%d%#kBXg7YSpN`6h7b(Nd&;Q5c zMTk;zoDFeJuLE#kwZ%$&P&uJxGB?RvqJmNl{4`%lIVH)6Arv^>PtjRpeA;New|NGV zzUP`Pqw587Xm^Zbf$Qli#&n44W!%z#4_sD)sJmQeeN7pcd@n3z9_L;P125IQNU4<5 zp&7Wa8+LD6Z`nq&!ye3gifFgFGdB5Fu(!Q6%?xEtd6`@2YJ)O*x20D_@mD z=oL7QZeid2A)m6c}74K*5OgmDN`y_IgtRWF}C z-M*f-%g)Yx_C_x;xFXccvz)_XkyR&xz2cB~JBc+yak!;>JhBgZFpyFLO{S*)K=xn* z*;M+g(GIKHO5g?0n)&n&eyYwOB}pTBPd=2ti8z!Q6(P&y7|$g4J(~?>sVuW^BTkit z)JjTecymnUXQL2>202lmzZGLV*ZV4`i4k-b@CnU9gSZvVVL!^haa;Gc9g$P%emN6f z_hju5-69$S*K;PgG$S9_!IUKaqDh)A3skf>eZ;9$E&CCH*pwJ zICC3^Im0WI9{38GD7u=^C8IZpY8n^s+iRXv?IS-uA$%22Aielvx0L!$FX?lAMf5&;Biau~STlJOLED*g-^qtdn3c70#s^;_Is!hA zLh3+su)Iy5;`Q`_FHS%0f2p<=4Nzm5D1Lz#;#Z+MfAZ!uhjR^g!v8>vOl-K8lg}$+ z2gC*3hu#9bu04z4>Ac}088ws#L^1LMxy|!q!n&~4;7=S)$C7%=3tzdYT;@CVw0_R4 zXnqRZk3AOsD9Q``6#c^22FIH|qrQKP@0ju~x~H#&`b~X;=Fryk6zdhKn&#MwvofuB zxP+aWhR+f6!PW(4tiT{NEQi58G!fuR@VO9+u`hdtf%n})KN8R=g8HhRUC@2Z z+v2yph_#6RO4pN@crMEAn`BJI<>=2^cfFu?T5Insra#16&^f$AEkN#KCI|DXFbSQ; z>9hy5E}O|7^6Y3UQQ`ZqERHe7d2XHbX7W9vlvB*g7fEFv>R@vx*;(yGJIkG~Y$v-X z3(^Jz+iODy93MLYuGaqUMi%ewfnMOT0(nEk1bcpPot4e0$--z4oQ|>LGqj{`LKjI9 zT1=g*{sx#^*yv=gRcnhYMx&_tf%$%^6$C~)K_WU&y#cwF^XMBbo!(8cl$q!zoXz#x zk94;iKZ{WL_#4pLM>NNabi&y{l zM!D_fI`wY@P!p|)Kcn)542COZ{fQr1|MIw4TJv`;hxIL(O80S3Norlu^Nt zNx&n#wQ@Ue&bE*ybeb_Cs-SU#u2UM}()_A;i`U{>q88Z=Jub2#%R zXJ3QH$5QSnHjdY%ziIQ07ci6k;_GN;Rx9h{j5VM>!D?Y$Q>#UV1M_{Q)0Hw@x+_Zfs)o0ey7TbiE%|l{PXR zdd~lK-?7J`4NhU_dumE#LFm18Og40W4zCXX70enO6Uk|f3crptb(KiNv{S+7p^jc2 zUY+md@2tnLN3~_`_!6sRc^`?Gw|(jMj%~VSklCML<3V$x3oN{?j|) zO7AjoPLHhT;rFZ+evQ-9S?VhI4rhsK>^kqvf9GXog4Zgz)LQ5ivQ9-}QhQonkNTmrR5%TNJ!TShr&LXNlJE5rK1 zJ~Evp@rS_nWb^8HgT+qLUCpRDdTphwx?M}ue^fm(6d%STm9tt2Qdee>myszephx7J z`J;K1?!)!y4PUHwf%xFNSx2VG{Op>$Cfv)~7y1zF$r{;}AOk~*)CMNJ1n>ZT5Rpl^ zftrQHqw3(HY(!J&Y9*^4hWlrakrL==76K*pBHuUTzFaP|Vyw&|71gQ!Nxovfrb=~r z62)2N(r{$BWrW5D??m7xx8kj>sWnp$21VM$P>qNe@wq4ETDTW(vP<$2i6VKlNA#>5 z!7}l>kX=$zPLaQmw}|pL>L0*0&*dZBR^ZYsf<_rvw7)KbqhDogr;Uhv{Rq!r;u$5igt_qMBEd|E`aw=g*m7B^Y{Hth-a*2BGXHm~N6K3A#aEi5_O$y%$AG5!CW}lvHrZOfQqzN@IgBzZ9sG&@Qi0lLvRc3_5AKnB&@0sm z^+0F!Wc5e#UdxPL=+(5KQ1Awrl5Fwa=|I!e1+20=+8*w_@(g>hl^FUrv^G^q`N#SM zf7T}6BizmTC8PyIyrTUlA1bS`7Q`0kNM=w-^fFFSgRC>osW2mHgS25>IxBI1G0Ish z-mz%dI*+DZbL)B!`5sgdCho#)q}7q_;RoDn{JfGI9}(kad)xLdkj=a_AOJO$G0H!3 zrly#c@h)|P@f#?j3!@ycTh)Rvkhx|7_6b&){rJ&9+Z_vw%)jFk%Wdby3gO3qX#w{sAcMF@4p``H2edZ>NclW-+aVBLak z=@Qv1_lWK24B3x2h1-U=y7hzYt(?3M%j7+G7P!C2`3#bn#b;tF!|=~!3fcilLQiEI zwH}I=Z}3$#N1LiR;Eq44z6IswQ5;RHk<;Rd_nm#EKdA|jB%hTQQY7$H2V?6S4YccO zJ^Blg_?W)TU)7jtepF)7YP^k^$ha6^l?!;1=_+JMM0ln`M)k5p~zI zWo*CqoM*8IhTEs@vwUtlr>)59-LvEElGb1DS_j#m6$6_zaM`s!ml_JY@@VJs_UWEGa z3UHMtf%fe^dCOLcIDLarh~#CnWkB?>#rn&pTrI~$r{evMOH;- zd#Z3iAzo9-h2G;T{7B>%F^d?olbhcbUJH9tWGY+c8lVIDGt$hxYyTR~;&g@+H#71r zG}x^Uo~|Rj9UU5I8Q4y*=rPe#ViwT8xR`cW&7qd@ZYk+C+uPa0B=*YP8n%kID{ zgT7+A)*JLx8+qACu5bo+Sr&3X!nwR0%>KFcmz9ZALT^&1rmPD+3;!5Cn36m4I(*t5 z6^W!Y72J(|UL9#;2X$HAN7L~twTjcL- zraVJJs106;EK(5?TgvfvECSu!4(_WmJlZ1sFOkoC>?S!M`B!0}mh2d*LZg^X|E3w( zLDrkcc}@qtylM~!@&&N^KgB87d22c}(vVf+d)XUE2WnktQHdyt39LP$}k7x*jk={2S1W zZt6h)%s^p0OLpXYl()X>{_5%jaf810wgUp%g$Nhua3PTJvlK-Rb$nCfHyfqMV4ai=auqFJNP^_XeLr3eOaGr?bd<&dY;>avEx; zOhd)k3SLC{Ngc#CxG|0kTD!DhS!gQU;v@u7q}v5{*(leX8waRJ< zeK+LtV8hgV%4)2aG)OP~XKkFiT=QZ|nB$F&#zr-}T2MZrlW{}bgZtcXa**f`ZA{ex zYidd^v8wJXGE}*ttn-jI$k;^lkv`&>d4sNl43SdW6SXE_O!0CoP3AR#TYsbuQ>SWm zd2$Trhzo25eMDBOJJfjZ0IKV>r=+{>udnteZ~S?11$>SE4jCB&nz$N7x&@v8MyE^!ztJ|UVi0*d-R~klKaCfu z1>_iI5*Rnn;$m6Nm* zEd=*u9y}G2j^2E6 z@GaHWhpAE>O#0&ufn0$EpJ{CIck**Jv)YrSK+D2s{uR}cbF z^_eA0f;&?|u8|kKiw*4JxK#^8*AtP*@m%LiFm zSI}YbS1%VYBVpDGb(V*$JCQK25NRGhl6onUYL80Y4hY`wbd7#ey`%L~9?%@*4Bmu_ z00a3i>(&kC$_&ft#f}IwrG`%8m_sQl16kNveS1tzKj-gY_A`D`J85lzfnPyRX+w?W z@Ou|A>-qoi&G7AwYCw-b*VSC_p}WDw_A_1!w$K~ST`w7}j`U-3Y&V-juJIsnlJi9) zaRRR;)fuu&JCoHHq@A||c7&d&u(g`K#zHp25l;QcVjeB82;FTQ4%VN{=`@n^{JW;oH|hu(ZVM=tVyXR6W?y#K$7yfh8coQ8XYNN+j^ zc-i?%YhyJp4Gj$Woz4-KcFtK(uX;5@Zpg+>ali_?S-}Z(RF)nBxzSK6^*~ zD$lDk)Umj!IOVo>yF0a5F8iu;8s?O}l;HgMN4x~*qPLVC!uBnMAp+X;BNc}(04^C(ei|>Ah$EaIvbwp zR$)WJ>+CUhdHaOh-rgh{vXC9^t(O;Is(Q^{h|8pw%*@}(rYNIx*`4Svb*rP%ULG-k z{S<0zZ}l$oFw9=ZaA{>W4J&Q*&c5WpEOU~-yPp_c$qM?XIReMZ1~fsLro6!Y(Ie%a zOmt84$Edh=0Q3O0{CiD{WcB*W#a@56oV^;j;QrxsX&s?=Co22^^eH0JG_o}K)ESJP zqp`9M8|l6CYRL(7y^@{m5SP?w=oQEVvrAprEl=@X)JMnj+<JZvZEw8N9g5C}4z-Zq!$pXgn!jsG|GIJpngM<1_4>b&H#X$#XawT z;z9}T1!t-ABr?Q0fp_!f-Z0b*4HR?uIX0U=Cm(qcZwkN6O38VsH)%mL&;iSg7I7>AqSWIUa;<5%^{T4}M2Ut={v z1=LPbK=DVoeZ6tmk_(lgyfoV`D%#tuRqhP%BzA*b)OF;PuP#!>Y}KSA*Z`*yi$M#$ z*Wpxaw6~OR@J@(z(jjN0k3Aqa*cj)!JI*#Ef7?F<_oUUZDn=H2qtmh`my4WFofZ1g z+RZEBO<1BFB7$}^hi4Lp#4BFGX>Zkp`~I2-b2_M_uF7S+nVh3&)R9H#UuXj)PfbyO z@nry{E7=?w=Z~uEo1$e`>qfhDik1+_;5+5dNXDx>j8zcz_!RERmpD$GcjmY+U=vxv z8sN)H5pswur#~2-^!lW;9E>u78slsDTcjm=%v;zY)qx0H6 z%bUA>!iAkdpi{BKwH?rZ%QPX}Kg3~GQ+}b_^{)Cj*f2VP(*CH@*H=lOrIphUM$Pay zRln-_Kzlg?nye;kPqiYv4_84k(p!0l`YHqUy-IVVgG}TQDVRJ6Y+gJ^qKCH7S2_BV7>THT%o zmUxHL3@<|0yguR~|5fqPE6^OOkP_$sd*VI=Uf7gPa4~d}w2+DTsJ0t$`dIN^Ceqb1 zBY!}b(UlmJ>!bv&L~4_AXagT)y-H=)B=;XwndkGaC_SK&>Q_4p;99fYsK{BTyY(!s zXKLw`qRuT|o?pW`d8_}k>F6)HP(~@E#T_p{PkFeaH2>AUhv57F8LA+E) z8c&SQG=tGRDuXX*PNAcGjiUCbtMxbF+-dH=OC~Dg%_2J1S}SFIkS?tJsLWJ`0T$Fs zN%r>)EP-ssyfQa0$D7&dSo?6+wCz?@s0CoRuiXoBt{hH#10J6YyXn8yfM6UXgnp5U zJ|`AO079ii|Alqv=JPtG@0}C=54eU%6LY($s*xJf)0Uuh zcsC$`!Ui$n=nlHOX#_ip#^|g)KpiJlSo>8sSFTX7o?Empcdv>36f*AJI*k z=#};|z@&3mZnJKP#;m7vf%g!1jeF`=n7)!w9c`jKz~Z6%@QK^jo9fk|L1d?hntzGrRR`nu8YhKy&(xFPHVjF31m>W|Svil`XiL@={-m ze=vNcEPkcdh5myQq9<;uj?;3QUFjvYm%`Xe?>#z$I)g{}x`-oR-LSVEZ`N)p&jCC6 z3lWrsu0(OlO5EQ2jXig_vVXnfb{6MKq$DqgT=9!&Y-M3%cma1daEa$h1zKEY<8#Ow zJODCE?x~-&m*^IrA=aXYxJ-B#qydg)(y_p0H%V@VjO>F(b3Im^5?Lr!H!7<|Z_%B6 zK@`*}Wd#?CogQ?x^Svo<*>J@5xxMX?BD=iI&!UI!E-$B>Y)xPr?4vR(Kj`{!yfmZlEB?(RZ9S#kf^7S31&wBH?y4CjJ(mGncws! z{@T8VF$sazir+}5Z#B~6H>^4SMc$Tm0Czpf6TBt7nA`@;`YH0wyXuUNMA$pJQ_e@x ztiI^OPdKgN`@BmZp(pNb+Exzm+H>gDgbey~;aSdjw*%kBn)7i;x3@;>1+PXfv$a+i zr!}A#>DjN=ZKng^3Z2~T)^~fRGb#L!H^$rV0LIDg;DMeJSqRA97ctFyA#0d7@Ga?} z-f}JJ0&1QnfMWe2v3Hu6#Z6#OTtd>(nRKlfFIJ0_a1ZF>l)M3WxQA8n1)dd_n@3df zrn9^-Gu*+G+?#w7D&S4PBY82v0M5JF(L8aCH)j8M*U>9#%BpxWJ}Ul}gdLWRcq33f z*8z=9h&;s&s0+KIBrk9eWsN+Kzo^e~G_EZ(kSO$p_4WopdzEfAiXceu>+XH#Hz7f* zgebf}uu!~$1jlHkDi+jgifbK$1Kr`Hu zf1wTNOqs?TBgoXn2hli^S1BUPLom)#V}X*wuQDcjk=NY9F_0D)hg_ZyQX_Vfv+7AP zL^J~Zl$2E

G2Vv10fweu{onD$uEVdtkQ8oA(W$!L_xZP241&KtjxJwF&7bZS*&d zrFlsqNUMq9_1+n=L-yd7x-7R9|aQO17k;`svudQ2+|3EcYmrF&WmqWDiY(>#ODwHIu`Sn`RjawP?OMJrlaBH=tUIfRI^jc7z zNhErWifK7;Bku_~XBP4)puk(h`r)7O5_dXy%p-gQs|OQads4%(>^;CMb^>-_tL!Tl zdQeu8R^GiF>K^PCc@+BMth84~+RMx&1Iy3vxL;T!=R&ZRSDin=nq9t|UzR3)H;CH>4Hc!d#i^GNSd^$v_M*l2&BL{!2Ci7sY)(7n*c0$!?;RY~ZYcEvzmrp=9KO)rLF&q*%a9$rvps%HWLS zjpb+ZiR@G6n2E+P@=^V$FVm;1iTDG2f%`~KQCdq>_PCX`o{&>~507*H&?f>5Zj#xM zGtJ!N?nb{xK9VhNZ&B4BNxJV+QY2+3PM17SG>FQUTAO}Fe~{v4Qfd=zk@9=woqE>! zU>?TF!2KQKDD zE~;MC4f}o!kt<^w`^u)YNLSjpL%thbojkESltE4f-&^mEdf(}nbY1C^(${KlXAes4 zSqif1po5XA_)@T=OXUy$0ej-sa7!yYz8@DYyfZ01al3F+GRl6FlEJL*tRz$EKwdO% ztM!c?^kuOIo6*ig_ifa>eId3#uV>ROer4@iRh_XC-bsFLPOJg z<|w()U%{;zRn8rkx;v^EJE5#*kGx}1t3$uL`*;R+C+byX9R5vTlRAZFkM!j6dX>Z| zrI`07v|me~b^?&NL8-@Zu2558a&V|Z)Fy8$|E9IKK1Ig^y8AHJ?@lmF$}PM|)R2e* zI@|~Bt7*9L#sFiTUB^6$7wMhUrlDX|YyR9@Ln}qL#$IkHlzWhEKu!!=MT4ZfYN;Mrzr#pEwJ)7gd9&tQOkV z)ZIKEAI&rSx`*>>?fgH=4E}bamu8t`Sb0!Ij8OX+>RB0f>*+-~oO~@ia`f};q}WJvgzmAGw#UaQ#Ul|^ z5p+8Txf^W4p7QAMeYdUE3XP=S?H_>k`HO6zjqO#CX0!>I-h6VMFC%0h{fQIM0j(Av z$PKl(5M&l`vwfh?uPXnSv}Qpv)Y&L@<42GuI@4LjbCC~Rp*3hR(8-UHC)94_DL-i3 z!VBa*anDWx9ou@82bDu-l+oTCULRB>B?%KrC`|!mQ5&z8(x>|Gc|Fi+G~D_kvU`AN zh)?cVQ4{#BcJ2w+rj5lr=LMb*+PxjDzjF$2b33v|A|vmse3zTWP35^V1hvJrX@5mi zC&J9tS5Ng%HZns>>gAZi=C68{KyGCUIZC=g2mF5EUNSl(?c(lDZ#-+}1?_@zq?m8b zV#13P-Pm+%uAI(KiyqL2d|bIkR>;lDGe`=VjJrZ&RDO6356CJwuht#4C+CgFW=X9& za0A218~hy{qAisV=x4S@OvFVww)XK=xSadR-sc{7R=Vp#Wy5LWZ&ud(#V+adpoT;wi-eHHGy5T?Ub6$2kzq6PR z<74C|_Z*)ferNsUzs>^Lg-^CN$q#a}yet=rW4Jz3f&0y@#|3u zF{^xk2kx7B^ssqM$!;Vn``IKOV2Nmyn>$p^Tjwr=Gt)T~z+c%j$hc@{Ut!9X zEz#M&5;+5zlu2QKa4M_daDCP%m!2}V+KcklVZ0){zEbt>BH-8#SjIz-g z14T{jn{Ql&+}C8i5$M@E#a#Ahj{PNOomM@-3_XxJrld01e5#+&()`Cr1$8EU;T^|? z?DNhSRyTZ2)BrwvA?Q#>uq%<+&>DV^9hHBv#iE0{$r-{1%ZK75wIkSljsAmn^_tdE z?s?B67l3h&l`rKiZ?sZPG-quQaVW4uFou!jli|_Q)Wixs&QP|uAWe5%f6%z`w^F*%_A4l z5ci?m3NMP}qTiMJULsl#JDWgTyahB~4kDRQX6KTYmp!tFvQV%-{*84EZzGMI%-nDf zSz~A>Z=$dzar4pxZUGhp?(XT@fADSGBAetjwV&8bb7%|1QEeew07!6C?>t#Tce2XL zKsk)GRokL2&>!)Uwvm=q7F*$=-X7d6@(bSYyp1rvDKyZMk&mIFtgTalzvZp05dH(^ zrq8sY)0G}z-NElk92NKG$K*t9f!mayb?bN`B_5`{65@e7ngqluZI{0_^e^sHmj#BH zb@(mqF#1L2QuXj$z!H+Z`|3RS4e}{B-641atFKq3yPc$QP<4ftd}|m zdS23^uE;U|CHi^%0{7%YqVAc~Xcy8RA2uJLs`wkQyWjLlEZ*F&8zh(3%GqjKz73J3 z3KauIjD9mXM;^c{lLmO*pogWa@l#46=vizgADVL$9{`slf{!V4zR@DSi*^Ih@YO|y z1jW= zSIW-fqkD{Ja%;AMjJ2MShTksOs+^NF z6J>>7RW+(lT6TO0IHT(Rg;qs2Gb(2o6P2FfH=++Zpe&8Ltpt26MZ9lp)P51K6vv~D zv_L6fLJs9K+EKeps&OI!pF3Q|K)Yw zSwE##G%KYHWmzC8{h9vIJ>=Ffr^5e9HayNdt~yr5aCSL4bP%m{{cdjUTCkCOLS}Jq z^OfOO-VW$-i-VoKsxpO7q1fH$+$TrVVj_1$8}}*pMNT`Xjn7q;8@vMGy zPT`Af0NJL4)4yb4qpEpFZJe$O^cqz2?WCQ}Cxj64# zZ1|jYKX4jU4eiwy))(!u)yZC|XAC8HcbzBJBxO7}_&U++(xS`oF455VjU=I!%38I) zIfML3-x)#USF%AK)CC|q4QU5*F?s@I^=zaY1c@CF-9Lo_1-*@`CNtRGe28OjEIJ#? zfc^^qk<8UbEKaG&?O-Fdt~JJSWncS_mXnQjqVO5c0XeNpYxzyBmuSuhqDs(H-w)hX zpphcCAip235WTzJ4;3)h01}+voPvJv4OKI+PcZ{jQ|qe7u#wstFWJdUasiWm3zQsj zzEAQZzXMb2Bj0@57MQ|V)JPBNx-4SM!`)?q_{Lhwoi+gPc2i!|tqmIBKiDFa)opC$ z=k3`^R>NChkHU?he`+ipgSOHkB-P0R{mEa&9A$yq1@hJBTDeqBoYNw7Kxh#iCC_kA zKPPVM#H=sJ`DU2gjPaoTF0PgUo!3e7Mm&L6G@4XGC7idYlsw71h@oNtByV&SX|k-m zOa{8MSPs$5Z6m_o1OA9K1TJs56S4B+rq(9=1xpAYMuTi&rHOFpfM_doI<3W|h-BYs zHog(n03}m7@|E?K``A{mJ^Gzxl(+FK-dxs##DY1{rq{sz58PhQ_!I9PFau2cDwoI+ zMrmlxdx$ckep)Nn;hj)%;6Z1?_V!GBfe5b453y2u0g)4YNE2BiN#Zr|4ZWG%OLl-a zc9&WNxSQ9c82TMAb{l!U@k8jhYs@!5a#}e^-cLkTa0==t-a+EjIZ_q4w=?<%xTn6M zi}E(<0jjb=JQWg$w%D=!Z!&{zR_>^El>yo>ERKK2`9WEE89JMGXur4_y{&*nbcPI@ z4D6jqfVRw;kxFc{%oTYZ$>Nk1pXF0;FA0#PD2djTwN<1wmka3_wS&5m9^gqhfgS-j zRdv)?pQLDj80LlC^gL3^w&XfAOs)rAS3Pj#9H0@hLP;ZMAk%C-@bW!qM6{7DXfE`I znrIv?qUM(&@;{EQ0y?T>+n%brw>t?0cXxMpcXxLUt`B#2cXxMpcMBR^0|X~PlJ35@ z7K@~TB=@w^|6ngNr5Q$ zofGCyB~t{7`D^OE+AlvqPmo>?Q&Hgj1WBgPqp!>eUH=GA7tzE!C-}IXjJtfiJv8W> z=Y=RwYwRu|l|5BMzQ?cYJ?&Ww#>jH3DU0Fpt!cq!g9eD=R!2J^?uip%cGb7ro3gAD zdXFR47d{?BpxGPnFK+xdFv<0>_F{3G3$ET2_KUgQ@1*~i8P4GzgB&Uj9m zmn@g}x)@>~5wESQ-UoakUm;pzCpOtr51FY=DO4swobz+qZ%(@8eFbGn30mz|VJF3A zQ-dFe25z;TL1h!`S(xvqwNUY&X|~oa$sO_Y%5b199uA6 zeT!6n_hVo@{gORoKX%u@g-)s6PEi)?E-x-Yy* z={k)R=;M`Rnz>!fQe^E-Hk;hqyefspj^=6Ad4j&spGDj;yPS$0`2V801v>jTU9ez~0|w!X;Bc7Agn ze7l9vI!CE&G*o=G=2I@KhUp_m1pAzG+_BQhVhOi84c$m@KDe_djD3kJw<_+Ws_29e zJT`T}-KO_h?P4=~zx%7%gG0+i->@c{verSqz?AnM&|O$ASHQhxfZFTyQHeZP{!R=Y z6z~M%CBFLS8?#Pfzq@rRsB9uY77ugLt`P#;K!0vEO{o zi@-D!pKeKGWl^swR@6szsV$DV!&HRV>u(W1DJ2P9Nc_^b)+xe1%2)P8UBk|4!c=#A zff;KSqaLmBp)v zy!U?$-1pYzd*e4`pZPC4l}ZS_CX;^490S}Z$f1{>e%KX71vOE>p65H%y_G!xwxdErg^5PMHZql<*I>MAa(r_qK(y$I}zb<4x%1`PO^bcR0 z>~NV+tH$$k{_ogpkCUIlT`I>5K(*V;x+aRVbl!^Wj#WFP10NOikrgymJo}uoIu9+? z*DXsmc}j#CF+!CvhBiB38;u!THki`y6M?@*cw&zln> z6+M>EbSHKhv+_jv!^hA|_mJMDi|FiNR1{((SZ}9=Z&nBCy$kj&yN>{lV^#DqM24{*;zGJ<@g#vcRhTS;_e2%M1S&ah8^}P zBQNT9X1uv)rkSkZaGd7tc#!G_Mtm_oPi&(Lc53sOj>7}x6r?Bu~I znaaJy7CYhcx?W;V@+_ttyeShvy>gn@Q?00$PD)Qad1(*-$U0j|yutP$(OUd~@?jVs zq8o$%wMX>@v$BoJDu+8W+{x;e?>)S1clj>4i(~uyz^I3+CXxIhJ0R7mhUzYs^NOOh z_NoVBFS4^%LA`&OzSC}Vi7v_OYL{9Y7|8#b7wVM0>i=W%YJ&enXKT5)qCK7Fkzp}Wk-Dh3Y7-EuB97Pt6SlHxM5ax%cj^n&NBI1O*qz7*rxNcGJnvD{t>eenf) z2d;`TmyrpRnZ5H0@WeJ+kL>;4XzvMYTW~R?5jXQxrOBS;BDF~_2J=q*5YU=V=9DM{ zcem>D1HA6Dt3l{ZEpt-bkb|+?wE{!k8G#UZytD|U3-t3l(90K(TNUf^d3?LoU6}`3 zi{_>-l4*Pyl)c<$>-cC~G!aT|HYv ziit%gKD*3o(+hnT4*d_@c)s*%AAMqH;q&jXR5;0VI{Do?P&+QugK4$7XeYLMU_<+g zb?5E*J9d^2m#Jk8zQsiAmZ~j3s?NH#Y#DeV2g+FFQ{OdLSWfP7zq4G{NPf}I$}GDZ zc1X9_4$}~waXPn_`s9w)o%AKjXx#@>bh6#v4)yM}^4SmLg<9=JPOx;(dm8Z;rWfAs z_2z$W9kp0T_|EFm*p2n@JY85pUEBID>iO9p|io(3Qox|#HZ4_bX82*`! zNJU^cwfFHQd@i;f+u027VS5Pg#8N`b{e&%G!B$=9`n4&BY}XeuM5m`Z`jVAceZoHG zGqYK5dPFbWxVRerW_Vh=LW7XYC_dLD1plD4{_DPrd!UP}s*c}D6xeGPngKGkN@fP& zn|9Tuj8t#T0@YS?xG{%wMf)kKD4`SU1gfEmWDUS1nTMRldS;W1lMCRokPu#T2w!Lpf~Dl7luO@eycS7oOYRtZ`n zi2BfQGsr!qQmW;YP2V+@*a5bXuCNkTjJK*iie9m>JF-udvK4 zm58?1@^@;KyIy70MQMP3g07;j93mac%Es{*x}}O^rEvU#C5lac7Wba>Rvnce0tw;< zxQFFBIfb=m8=>;K!?Fl3?c^_vjFzQH! zSOwKeMNL9x% z-iSSVu`CEL$|?9WK0)6htv$RvwHFojM|Fa_fFU)9Rn)Js{hbZfOEl)jQqV~GcqcO0 z(>>7bz+9W@EP#e=t2(XL%1){?I{U{^S{%};7lL;7n#j19-qB4yD+)zupPUHebs(tm$fchS*&ToMZKKHzluaWyE?A+Fk_I# zsJFVG{F&p5#^#EB7Bk@QNxwI+6<4vl6RxhS%Bq0#J&+;LRSuSiB={#toVkEJnal8_ zdZx#lzV=YNF5N=9by@b^GgQD~oTsKZ@rthmPvB!vhMaZUreUoPZH@TB00 zL3xAy-d}c4_$nu|`{ER?fDCkx=qHle`M`;;kMpCpn9oy*?)o4>#!X4#N0-wyG7nWB zy_Uwwve47+aMQTs{L^F&%0V-%Z1zWMzjaYJ1mEhtzAs~aUN?=5ba%C zCr?C2Ob6=2HU>?wld}b4znJX_v%7<3Ge(pF%ln|IXd1F1?m$)8tR}Ai7dWIs*iO@0 z%~iL|W2+6^K!4~Xfic>Z_2FW(LV5Kp=P8sB&)niFF+3wzQ!0H=h4ST4Wglm~R6+Gp zcQC)fQJLgEGfRM3-*!jI;ozOLG(mcRsqQrQh5D;IA?_GoRkwtU{QlG$U zt7y`L2e`uBp(kq#IeVo{af;^@boV%OSt*eMKAIij+_e{{z+yIobDdRvb85&u@+8s- zYpKjEJtn_LaH3uSpO~d0l#PHJ+;Qq{xmHI{YIs+6_T~zD<_Wh(2FnE!sT6ivsYvP}^U3?WYMKabzl*0L6lZu$D^gzbA zP2C4WHqO;wDNoz4jqKUl}J$yZHkmo3m5aaDm)-8K45?0TM{FGVkfNMrSSI`O1$# z#dVc`w8D_na)$XW5u75ZlBcY;cxthcB3Ut+iCVD?ZV-B#PAoe+E7yY$!E|a?oKo2l z)*d)~R2Q>6d96`ApM{pieJIZ0*$L*0bby!A6Z8#JOOA5y$JKC`s|@Z6RaVyJSJ^DN z7_LkQk!|xaaIO$>5IlQO4JC))_00P%N!Jtw%bi z-2-j{r!Mx1^^k}&iKcnlSxLn~_zT<+=k+CbCAhoL&FC+(r}c_Rt%UbpQ*lfFQJvU0 zFzjBd4Cbco6N^P=(aO5)ZD!V)!QKnNCXe9X--O=u4mF|UA~hSK#;YItG`-Q81G&|0 zeF2<~q|PE;TTj(T*+Z3{Hpqc)jP4hh20z11E;Jj|6};*48hUB2_`w~ zS$#R1rirP1kf*&qsic@o7g#J9lx5H%?Uq`-($&p~z*A^K;0!={fTr)Yd$Dtr6X?kg zeuW2%NGJdcXgEJvC)HTDj}CWIn9go`cMB^etAVL|QpM>G&J{M?ZpYu*=YcAgv@*iw z`v~~e*>!`!1j-L}NjM!fC0GPItdHw(7YVC0+!?4ZK>1;r2xpVJBc~u^#xdbma&T%7 zF^@@VO^4T92i=Ss^Hrvi!`VLmfPY5qY$uwyXWibWfC#ZFIWcZ1HG{8>4?E3~;*t47 zY54{k!G`$`xX*QIrx_-O-r}g|zIfv$JGJK?5Vd?zg1m5-p!=`Se*z&H8Z-{hI^CeS zn2u^v*qY?Ig*<^DP~*P=!@Pv4qZgR09v{oevYKMhW}OG~Xgbt+pRB4>-pX#L5_NfV zboPnGGIhWm>kjArJ=JtoUYT3GhFzI#ywg6lPr0%a)zAs!u1O((U?LB$>**JRVN!lwg@ZGZg~YocO*0e>eHI2Rv#B+}1+eUhW&`j3Ip)`ltti zI98rtWUJLH@SXo>j-eN2G*7(OW7Qwj-nR5fzhqmzU#zwE8avKzOl}YnzU-F7Vpy2_(NivrJZzPAycHUT*>-sfN3kX{Ot-^HBK2=uhqo z9gOZCPY_VUth%Az%Qur=eRIJh9)D2a2R??i({#RX~j!A#PczuvcsWrr23K0na0{ ziW_>8zM+okr_@4@QKjW&x0d@>SLCf}9(uN#G6Fk`hdLg#24k%*NG7gf#UihuF&#G5 z%p+%#(-@pQrMJUjj(alGU~I`!vUKdIxD29x}zRe^^h%X+GsZCisitb=%?PHcFXp%2wl>>u_?b!`SE7%)>G&&+bQ0P@%)EK$U1T+KG=_~ zn)DvYZaIul6P=}$kk-&XTB#575^SHzWr~`j)X}}}-=%)($<&G#t9NX(`X4k91>D0d z1l?Z_QIsX-CG;-Uhwp^XM{a!DHApAU4=>5e?1I%mFNTx$0&G7ny6x2)k;Ambw`~oM zZW?u4HHAK`J6otDm|r}j&+Lr;N^LZNRk(CrgMN9v?!jkU6>Mhr6Bq4=;G3`Ua_fV= zkl*H61)OA!G$+jmHqyPT+L{9TE|jVPo!UGKJOs|s-&7Z;Xs(E`o{FZ{ZWAr`SeeWL zmQIZ_%~)Mso{!-{l$NDclUY_PA*F^p*j&C841iqbrQ!6?oIpR%Fx9_NAHnfl9mp4m zbNukW_Tc{w!B!=Meh2pHOZaJSK@Z(TWul`P6z*3c>$ktF!gZ0W13CnexgijJM<-A^<-9tssNqd=q^)I9R&t-%3Tip zuW6tv-peuc11Qxr#xdh*BvTCY7JzHU1*^1(Z_QzwSZTYo=m>30615G={Dr8K8)&CJ zn^zUxy#1_Rc5yzGM_^Od$N2OixUi1I8Gs3!W#hr%F`lIC`UP0S^(YawccNXNs(`B9 z554(L*K^O%7KBg3BVkZzMCci(7}}IM&K~*S3jI{vK{svQ>cQ<3JmKe zUDk`-S*EHQM~)Z`cbp}>GxTqVc|$1sx5A%t68Y&i?&D%?&K=C*=Xnzz!z+8M@uPIf z?k>7{J|fYmiT5$E-G_V?ow9~dD>H+I$hP_%kfeqplq~4L$~v2vkf+RUdL-*wt?;QP z^JMBQ&a+OsxhSU_QA?H$UY%INwe5lt}A#fKiBolQU6S}>|cD{%rnK=1XbG;KF&TPLqn26hqO|Zkjce< z%tw1YacV!mYW#sVo~N=HFYo!{X7sx1k8TyxSB2Y6fH+hN${r{~k~i1mJ&glJEF>2O ze4cUoD)x!tzE&aic$8XW-*7H?+L?2KR-U5pJ1FQTit9*&W3B~$sQ!VER{g*@Q$n0@ zGg&{~1ZJrxk1vdQ)J0v)>Kpfyw(DE|i~3t&opnu3@+nU}848s`896#6um6->XC?N9 z1Fwzmj25JdRH37zVaw`5@}uKSg4&{x}FyD zKGpaB3Pg(>x{zG$Sr)K(1`(sWS{t2**0Z1_x*VKoz1C@K0N9(2!DRRazR z2ly`Ou)tn-teGFvOrLW<##VKE$K(NK)XbkpG?pdZNPWP6Oa1WgccR%SbswCqLTrdV zTpbtr;KN+bnkfZ5#p1K}o&qMl4gH=0zGi$phTWFAJRTOuda}%NueT-ANv3(KV&5AF zq$5f2EsAeF_Fm-ugZDCNcMYyjhpbl66~u@I@+Z%#!g02*iaVv}>ZMLW4gVnU-%|RQ z;QU=c{pow)D;)z~_YghjA~sjILHAlA&;m}^-~BJxXH||S>WDz3IB4>bjqF)D~o~?sFf<%mGtBbKtwv+qa4(kjtGgMlyvy z;|_B2vzxM{T&K=E)hL(h=Uy|P)HIfelB%xk0X$LXL9x=<`e)s?uOI^f$^JKV*`!hXxM1RNt8mY@vXz#7CIQ>?lr&fzV+O zXFceKPKB*$GjpC&n8fUa*=&;IPcDfBa|<{{v`(lm61+LV0G`ZJa)r#dn))hqU^CF; zJkaso3jQ~6o$aM7s+y*uP9)liq;QxmfsBUowAb|ECF!flhn)8FqO2~VlItU^BlVK+ z)idx}|C-U}C5-Q$RTot%1YeF5qNTm)e#*DX7{xH{p;tw>p z-M`2N{!UN$FE$X_7CWuvz;?5E(^>~uxYZS%`3N=z9s3}<0N;WAB=m82fj+~M=t0h2 zw-CC&%qAN)HAxJ2+bRY;vY@Gp#H0(@KxB~l)IWJ22*#Aa9WW{j%YQicn$RO%m|qr$ zu(Q1@PC^F~gA}ohc1J4&{c{*Rs&koj>?Zpo{-FoU&ks;NE4{dHWwj&OL92mCOAp0E zT4kmHJY9_UgD)?74V8ep z>!U!i_CU8>!|mc8kfA0g&7gDeSuDn`QD^Xil3T@CfDTY^ctU0|FQ^gp1ewfi^_g>c z?M;Vk+YdU$60^s2Ut<@@8|Z|52=>=!#SA^m>QBEh_sfDRfQ+jVeFj9tX9~+#5?np zwWsG+CTp`*GN`$=-x~#1L(1Sp?4LLtw2M~S;o=kjBMRzaLV8-aQHAs9UGp~yXg zz1v$g-!98N$XTgNFM%mvHQlWUJrZ1%iE69eRr|yPJD_KZ2>K+(*o$~%@FeeL*2>Ny zPJ3DeCFcu0d-+-xi)W^Rr!=O70!*?|o?+;|_kjuV!j3Z)?1OeK)7_g|M~Wk!0{(GO zd6&UX$TiH9$Gcf2JCH0I9X+>dnVV=Xbz2%W~80v{f zLp^mBS(oikf#ZC*>8Hnuqk-nEq)?7e6bm$h!sA-Z7a+64Wf6TQW}54F6FDti*Eil| zcX!5wgMpadMCuI`#!h1rI0^l1XZ9V>*bF^f9pRk zWpxikz+cUFi+INbZkhlT`*D0#;Hw*t=EV8b0BoLSd*-{hO)LU~K z**{@H%Vn%CV11V+U{AJlOZ3Rlv z51G$%Ru53$>;*K#lSv;Z?Rl)iDTVj9ZU-G%7Po8gaQzZqcDtREAxmV8Zop2$~mjbWXlNDmvr-BtJF+9eJFIpf#ve^Z6iX=zD{AR)-&8VWOvX%1R8! zqw~S%#511WDx|M^ubAR2zKzr{tBktjKIVhmVuABWoY}`x%bu~{b^N$`W{;D>-<#i! zz328(>0~N47kccwNYMOca?n>c*#05rux=(5?lJb$>^>&d4^}OC6@PsQM4=VC>@7q^ z-BMxzd+5n5#>#BoL97JLv%aaSLc!^*jqy8mOc}SCZvuM&m;HQlyKk&@l~oBWW7+?6 zeFx&eJO%k`Dx~MKvgnd_%Qo0rU4b%H%aO<}tjuCiEhk_G$_CFEkDb=;uQP}q;QD;z zkxoAZjfFzn8swG&udI!;h3C+HsHCavW`)}AsC*z^s3H6`u2ChC)mYX5wo=VvQ!(dF z&^5qnE~7*A99981;?# z7+59Ou&EtEYfMYJMcd%m9vZl+>VQ|A+I{ICfSMw;4_ox@CZqmBBSbopf)%zC^QU%U zI}}gp5csA(F)MUdvtC^gL-Y_mmi6Mj_*FgAeE}zg36#f5rw_nQXD6K$$;@NVHT-HA zzi%e6W2%E%!^=aza|zzY%i$LuYu0&-QEBTbROeUNICYHo*ZElp&!aoaJ7Bi1Ckrg{ z?ex;LmJi)@?j~yEj8NO02>2k^l}pSZ=`|})d8OlpOudN+{pESto!JUbCC1 z%kX+{$R7gRTInrfKEjhM%FbcGgD=`UdjT)O(^wAn1|dM?2Z-(HeZyEnQIK|-MRW#U z=r?Jsp6)!Rp}IUg9=_|J6r}P)x!_|jRTp;=y!g`V_~7m)K>l_)IJ8E~wemWpR+H(W zBWXHwbY^R>JR`pInS_)ha~zoQ3z38871i`W+Qe@1OTg6Aixyy><+LY@EO=il+nKFF zovG`^u-*6$9I_iz%EHg&w

}Fu0xkp~-BZ^~C)3T+}~ktY?lGWV>_% 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 literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/cries/kleavor.aif b/sound/direct_sound_samples/cries/kleavor.aif new file mode 100644 index 0000000000000000000000000000000000000000..1052cabd3a570ac77529f99bc69c3f5f6c35f9c8 GIT binary patch literal 66940 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 literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/cries/overqwil.aif b/sound/direct_sound_samples/cries/overqwil.aif new file mode 100644 index 0000000000000000000000000000000000000000..56b3d97558e473a68ca83db893f2800830475b4a GIT binary patch literal 50784 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 literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/cries/ursaluna.aif b/sound/direct_sound_samples/cries/ursaluna.aif new file mode 100644 index 0000000000000000000000000000000000000000..7f054dc5cb433cffeeb5c786b91daf1171b2469c GIT binary patch literal 59604 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 literal 0 HcmV?d00001 From a870ec3c2295cdb11afac73a17308d70ed8286f6 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 23 Feb 2023 15:20:12 +0100 Subject: [PATCH 021/129] enamorus_t cry, basculegionf sprite, new typhlosion back sprite --- graphics/pokemon/basculegion/female/back.png | Bin 0 -> 633 bytes graphics/pokemon/basculegion/female/front.png | Bin 0 -> 928 bytes .../{iconf.png => female/icon.png} | Bin .../pokemon/basculegion/female/normal.pal | 19 +++ graphics/pokemon/basculegion/female/shiny.pal | 19 +++ graphics/pokemon/typhlosion/hisuian/back.png | Bin 767 -> 932 bytes include/constants/species.h | 5 +- include/graphics.h | 10 +- sound/cry_tables.inc | 4 +- sound/direct_sound_data.inc | 3 +- .../cries/enamorus_therian.aif | Bin 0 -> 178022 bytes src/data/graphics/pokemon.h | 12 +- .../pokemon/form_species_table_pointers.h | 3 + src/data/pokemon/form_species_tables.h | 6 + src/data/pokemon/level_up_learnset_pointers.h | 1 + src/data/pokemon/species_info.h | 25 +++- .../pokemon/teachable_learnset_pointers.h | 1 + .../pokemon_graphics/back_pic_coordinates.h | 4 +- src/data/pokemon_graphics/back_pic_table.h | 2 +- src/data/pokemon_graphics/front_pic_anims.h | 1 + .../pokemon_graphics/front_pic_coordinates.h | 134 +++++++++--------- src/data/pokemon_graphics/front_pic_table.h | 2 +- src/data/pokemon_graphics/palette_table.h | 2 +- .../pokemon_graphics/shiny_palette_table.h | 4 +- src/data/text/species_names.h | 1 + src/pokemon.c | 1 + src/pokemon_icon.c | 4 +- 27 files changed, 172 insertions(+), 91 deletions(-) create mode 100755 graphics/pokemon/basculegion/female/back.png create mode 100755 graphics/pokemon/basculegion/female/front.png rename graphics/pokemon/basculegion/{iconf.png => female/icon.png} (100%) create mode 100755 graphics/pokemon/basculegion/female/normal.pal create mode 100755 graphics/pokemon/basculegion/female/shiny.pal mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/back.png create mode 100644 sound/direct_sound_samples/cries/enamorus_therian.aif diff --git a/graphics/pokemon/basculegion/female/back.png b/graphics/pokemon/basculegion/female/back.png new file mode 100755 index 0000000000000000000000000000000000000000..a652e2fa53525cb97b3484ca6d63b62320d56980 GIT binary patch literal 633 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 z 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
  • 8X~RQFZ2+bGB3JOZ6pL=^CZ#sb-0Gje3{vrR|I7PPh~J*6XtFwX*Fh z#}OOC>NjguYh)pnM1wQ{?AJW!z4LABHBS_0)PLI!1y+TJKyJg|1}9pzwhHgT;Mc&? z@H+5iumf?6aFUY5*vO;Bk560??+`4HP9e*Zt??=*7`F)=0(`@)W-my5meDt(SNf>r zuY&BP)hUY-uO_VG&Lpfu2q6WKHz++Zn|uSq0Pl%52t9QdIUc&l25TUj;q#$uLyKMC z9ABf1szG{^PNl3C&l7Q^2ekc7KWs|N1^p2vwqta?wre_yn{_6OpZuWK0?p8KN>n_?P-IpW>Wpw#C9=#`mE-)KkX8c0#obw>?1f5B8?Gk2szfXP7Kr zNl+e8d4+bgalMA6f@vOT(lrOvSt7SkE3Y?2+&2Q7z{|1ei1ui|_$okQ

    Oi^b52O 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%0D7RT!r%teDz#*_4 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 PU+ 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 xd=>_fO~*!fLw{APJXXwELL Date: Thu, 23 Feb 2023 11:43:40 -0300 Subject: [PATCH 022/129] Document the 2 different sText_GotchaPkmnCaught --- data/battle_scripts_2.s | 4 ++-- include/constants/battle_string_ids.h | 4 ++-- src/battle_message.c | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index b7f0f693f..954509cf5 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -65,7 +65,7 @@ BattleScript_SuccessBallThrow:: jumpifhalfword CMP_EQUAL, gLastUsedItem, ITEM_SAFARI_BALL, BattleScript_PrintCaughtMonInfo incrementgamestat GAME_STAT_POKEMON_CAPTURES BattleScript_PrintCaughtMonInfo:: - printstring STRINGID_GOTCHAPKMNCAUGHT + printstring STRINGID_GOTCHAPKMNCAUGHTPLAYER trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon printstring STRINGID_PKMNDATAADDEDTODEX waitstate @@ -87,7 +87,7 @@ BattleScript_SuccessBallThrowEnd:: finishturn BattleScript_WallyBallThrow:: - printstring STRINGID_GOTCHAPKMNCAUGHT2 + printstring STRINGID_GOTCHAPKMNCAUGHTWALLY setbyte gBattleOutcome, B_OUTCOME_CAUGHT finishturn diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index ae18b61ef..b34cf6ce1 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -264,8 +264,8 @@ #define STRINGID_ITAPPEAREDCAUGHT 264 #define STRINGID_AARGHALMOSTHADIT 265 #define STRINGID_SHOOTSOCLOSE 266 -#define STRINGID_GOTCHAPKMNCAUGHT 267 -#define STRINGID_GOTCHAPKMNCAUGHT2 268 +#define STRINGID_GOTCHAPKMNCAUGHTPLAYER 267 +#define STRINGID_GOTCHAPKMNCAUGHTWALLY 268 #define STRINGID_GIVENICKNAMECAPTURED 269 #define STRINGID_PKMNSENTTOPC 270 #define STRINGID_PKMNDATAADDEDTODEX 271 diff --git a/src/battle_message.c b/src/battle_message.c index 586fdd268..f02e38f13 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -469,8 +469,8 @@ static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!"); static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!"); -static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); -static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); +static const u8 sText_GotchaPkmnCaughtPlayer[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); +static const u8 sText_GotchaPkmnCaughtWally[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?"); static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); static const u8 sText_Someones[] = _("someone's"); @@ -771,8 +771,8 @@ const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_S [STRINGID_ITAPPEAREDCAUGHT - BATTLESTRINGS_TABLE_START] = sText_ItAppearedCaught, [STRINGID_AARGHALMOSTHADIT - BATTLESTRINGS_TABLE_START] = sText_AarghAlmostHadIt, [STRINGID_SHOOTSOCLOSE - BATTLESTRINGS_TABLE_START] = sText_ShootSoClose, - [STRINGID_GOTCHAPKMNCAUGHT - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaught, - [STRINGID_GOTCHAPKMNCAUGHT2 - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaught2, + [STRINGID_GOTCHAPKMNCAUGHTPLAYER - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaughtPlayer, + [STRINGID_GOTCHAPKMNCAUGHTWALLY - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaughtWally, [STRINGID_GIVENICKNAMECAPTURED - BATTLESTRINGS_TABLE_START] = sText_GiveNicknameCaptured, [STRINGID_PKMNSENTTOPC - BATTLESTRINGS_TABLE_START] = sText_PkmnSentToPC, [STRINGID_PKMNDATAADDEDTODEX - BATTLESTRINGS_TABLE_START] = sText_PkmnDataAddedToDex, From d330ca051a80899fcdde8e4c884fa79802fd57ad Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 23 Feb 2023 11:44:23 -0300 Subject: [PATCH 023/129] Document music usage to make it easier to search for a specific track --- charmap.txt | 2 +- data/maps/Route111/scripts.inc | 2 +- include/constants/songs.h | 98 +++++++++++++++++----------------- src/overworld.c | 2 +- 4 files changed, 52 insertions(+), 52 deletions(-) diff --git a/charmap.txt b/charmap.txt index 725f5d1b9..8c886bdf0 100644 --- a/charmap.txt +++ b/charmap.txt @@ -795,7 +795,7 @@ MUS_LITTLEROOT = 95 01 MUS_MT_CHIMNEY = 96 01 MUS_ENCOUNTER_FEMALE = 97 01 MUS_LILYCOVE = 98 01 -MUS_ROUTE111 = 99 01 +MUS_ROUTE111_DESERT = 99 01 MUS_HELP = 9A 01 MUS_UNDERWATER = 9B 01 MUS_VICTORY_TRAINER = 9C 01 diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc index f97326c54..44372da37 100644 --- a/data/maps/Route111/scripts.inc +++ b/data/maps/Route111/scripts.inc @@ -260,7 +260,7 @@ Route111_EventScript_SunTrigger:: Route111_EventScript_SandstormTrigger:: setweather WEATHER_SANDSTORM - fadenewbgm MUS_ROUTE111 + fadenewbgm MUS_ROUTE111_DESERT doweather end diff --git a/include/constants/songs.h b/include/constants/songs.h index d6a418495..ffa5c3df0 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -278,47 +278,47 @@ #define SE_SUDOWOODO_SHAKE 269 // SE_USSOKI // Music -#define MUS_LITTLEROOT_TEST 350 // MUS_TETSUJI -#define MUS_GSC_ROUTE38 351 // MUS_FIELD13 +#define MUS_LITTLEROOT_TEST 350 // MUS_TETSUJI // Unused, likely a test track. +#define MUS_GSC_ROUTE38 351 // MUS_FIELD13 // Unused, likely a test track. #define MUS_CAUGHT 352 // MUS_KACHI22 #define MUS_VICTORY_WILD 353 // MUS_KACHI2 -#define MUS_VICTORY_GYM_LEADER 354 // MUS_KACHI3 +#define MUS_VICTORY_GYM_LEADER 354 // MUS_KACHI3 // Also used in Frontier Brain victories. #define MUS_VICTORY_LEAGUE 355 // MUS_KACHI5 -#define MUS_C_COMM_CENTER 356 // MUS_PCC -#define MUS_GSC_PEWTER 357 // MUS_NIBI -#define MUS_C_VS_LEGEND_BEAST 358 // MUS_SUIKUN -#define MUS_ROUTE101 359 // MUS_DOORO1 -#define MUS_ROUTE110 360 // MUS_DOORO_X1 -#define MUS_ROUTE120 361 // MUS_DOORO_X3 -#define MUS_PETALBURG 362 // MUS_MACHI_S2 -#define MUS_OLDALE 363 // MUS_MACHI_S4 +#define MUS_C_COMM_CENTER 356 // MUS_PCC // Unused, likely a test track. +#define MUS_GSC_PEWTER 357 // MUS_NIBI // Used in unused Contest Halls. +#define MUS_C_VS_LEGEND_BEAST 358 // MUS_SUIKUN // Unused, likely a test track. +#define MUS_ROUTE101 359 // MUS_DOORO1 // Also used in Routes 102 and 103. +#define MUS_ROUTE110 360 // MUS_DOORO_X1 // Also used in Routes 112, 114, 117, 111's non-desert section and 118's west half. +#define MUS_ROUTE120 361 // MUS_DOORO_X3 // Also used in Routes 121, 124, 125, 126, 127 and 128. +#define MUS_PETALBURG 362 // MUS_MACHI_S2 // Also used in Mr. Briney's House and Pretty Petal Flower Shop. +#define MUS_OLDALE 363 // MUS_MACHI_S4 // Also used in Lavaridge Town. #define MUS_GYM 364 // MUS_GIM #define MUS_SURF 365 // MUS_NAMINORI -#define MUS_PETALBURG_WOODS 366 // MUS_DAN01 +#define MUS_PETALBURG_WOODS 366 // MUS_DAN01 // Also used in Artisan Cave, Fiery Path, Granite Cave, Jagged Pass, Marine Cave, Rusturf Tunnel, Scorched Slab and Terra Cave. #define MUS_LEVEL_UP 367 // MUS_FANFA1 #define MUS_HEAL 368 // MUS_ME_ASA #define MUS_OBTAIN_BADGE 369 // MUS_ME_BACHI #define MUS_OBTAIN_ITEM 370 // MUS_FANFA4 -#define MUS_EVOLVED 371 // MUS_FANFA5 +#define MUS_EVOLVED 371 // MUS_FANFA5 // Also used in egg hatching, trades and upon catching. #define MUS_OBTAIN_TMHM 372 // MUS_ME_WAZA -#define MUS_LILYCOVE_MUSEUM 373 // MUS_BIJYUTU -#define MUS_ROUTE122 374 // MUS_DOORO_X4 +#define MUS_LILYCOVE_MUSEUM 373 // MUS_BIJYUTU // Also used in the Battle Frontier's Ranking Hall. +#define MUS_ROUTE122 374 // MUS_DOORO_X4 // Also used in Route 123 and Birch's intro speech. #define MUS_OCEANIC_MUSEUM 375 // MUS_FUNE_KAN -#define MUS_EVOLUTION_INTRO 376 // MUS_ME_SHINKA -#define MUS_EVOLUTION 377 // MUS_SHINKA +#define MUS_EVOLUTION_INTRO 376 // MUS_ME_SHINKA // Also used in egg hatching. +#define MUS_EVOLUTION 377 // MUS_SHINKA // Also used in egg hatching and trades. #define MUS_MOVE_DELETED 378 // MUS_ME_WASURE #define MUS_ENCOUNTER_GIRL 379 // MUS_SYOUJOEYE #define MUS_ENCOUNTER_MALE 380 // MUS_BOYEYE -#define MUS_ABANDONED_SHIP 381 // MUS_DAN02 -#define MUS_FORTREE 382 // MUS_MACHI_S3 +#define MUS_ABANDONED_SHIP 381 // MUS_DAN02 // Also used in Faraway and Southern Islands. +#define MUS_FORTREE 382 // MUS_MACHI_S3 // Also used in Secret Bases and the Safari Zone's entrance. #define MUS_BIRCH_LAB 383 // MUS_ODAMAKI -#define MUS_B_TOWER_RS 384 // MUS_B_TOWER +#define MUS_B_TOWER_RS 384 // MUS_B_TOWER // Used in Battle Tents, Trainer Hill and Battle Frontier's lounges and Exchange Service Corner. #define MUS_ENCOUNTER_SWIMMER 385 // MUS_SWIMEYE -#define MUS_CAVE_OF_ORIGIN 386 // MUS_DAN03 +#define MUS_CAVE_OF_ORIGIN 386 // MUS_DAN03 // Also used in Meteor Falls. #define MUS_OBTAIN_BERRY 387 // MUS_ME_KINOMI #define MUS_AWAKEN_LEGEND 388 // MUS_ME_TAMA -#define MUS_SLOTS_JACKPOT 389 // MUS_ME_B_BIG -#define MUS_SLOTS_WIN 390 // MUS_ME_B_SMALL +#define MUS_SLOTS_JACKPOT 389 // MUS_ME_B_BIG // Also used in the Roulette. +#define MUS_SLOTS_WIN 390 // MUS_ME_B_SMALL // Also used in the Roulette. #define MUS_TOO_BAD 391 // MUS_ME_ZANNEN #define MUS_ROULETTE 392 // MUS_BD_TIME #define MUS_LINK_CONTEST_P1 393 // MUS_TEST1 @@ -327,17 +327,17 @@ #define MUS_LINK_CONTEST_P4 396 // MUS_TEST4 #define MUS_ENCOUNTER_RICH 397 // MUS_TEST #define MUS_VERDANTURF 398 // MUS_GOMACHI0 -#define MUS_RUSTBORO 399 // MUS_GOTOWN -#define MUS_POKE_CENTER 400 // MUS_POKECEN -#define MUS_ROUTE104 401 // MUS_NEXTROAD -#define MUS_ROUTE119 402 // MUS_GRANROAD +#define MUS_RUSTBORO 399 // MUS_GOTOWN // Also used in Mauville City, Mossdeep City, Daycare, Weather Institute and several Route houses. +#define MUS_POKE_CENTER 400 // MUS_POKECEN // Also used in the Pokémon League's lobby. +#define MUS_ROUTE104 401 // MUS_NEXTROAD // Also used in Routes 105, 106, 107, 108, 109, 115 and 116. +#define MUS_ROUTE119 402 // MUS_GRANROAD // Also used in Routes 129, 130, 131, 132, 133, 134 and 118's east half. #define MUS_CYCLING 403 // MUS_CYCLING -#define MUS_POKE_MART 404 // MUS_FRIENDLY +#define MUS_POKE_MART 404 // MUS_FRIENDLY // Also used in Lilycove's Department Store. #define MUS_LITTLEROOT 405 // MUS_MISHIRO -#define MUS_MT_CHIMNEY 406 // MUS_TOZAN +#define MUS_MT_CHIMNEY 406 // MUS_TOZAN // Also used in Desert Underpass, Mirage Tower, Seafloor Cavern and Sky Pillar. #define MUS_ENCOUNTER_FEMALE 407 // MUS_GIRLEYE -#define MUS_LILYCOVE 408 // MUS_MINAMO -#define MUS_ROUTE111 409 // MUS_ASHROAD +#define MUS_LILYCOVE 408 // MUS_MINAMO // Also used in Pacifidlog Town and the Diving Treasure Hunter's house. +#define MUS_ROUTE111_DESERT 409 // MUS_ASHROAD #define MUS_HELP 410 // MUS_EVENT0 #define MUS_UNDERWATER 411 // MUS_DEEPDEEP #define MUS_VICTORY_TRAINER 412 // MUS_KACHI1 @@ -350,29 +350,29 @@ #define MUS_ENCOUNTER_AQUA 419 // MUS_AQA_0 #define MUS_FOLLOW_ME 420 // MUS_TSURETEK #define MUS_ENCOUNTER_BRENDAN 421 // MUS_BOY_SUP -#define MUS_EVER_GRANDE 422 // MUS_RAINBOW +#define MUS_EVER_GRANDE 422 // MUS_RAINBOW // Also used in link rooms. #define MUS_ENCOUNTER_SUSPICIOUS 423 // MUS_AYASII #define MUS_VICTORY_AQUA_MAGMA 424 // MUS_KACHI4 #define MUS_CABLE_CAR 425 // MUS_ROPEWAY #define MUS_GAME_CORNER 426 // MUS_CASINO -#define MUS_DEWFORD 427 // MUS_HIGHTOWN +#define MUS_DEWFORD 427 // MUS_HIGHTOWN // Also used in Route 109's Seashore house. #define MUS_SAFARI_ZONE 428 // MUS_SAFARI -#define MUS_VICTORY_ROAD 429 // MUS_C_ROAD +#define MUS_VICTORY_ROAD 429 // MUS_C_ROAD // Also used in Pokémon League's E4/Champion rooms and halls. #define MUS_AQUA_MAGMA_HIDEOUT 430 // MUS_AJITO #define MUS_SAILING 431 // MUS_M_BOAT -#define MUS_MT_PYRE 432 // MUS_M_DUNGON -#define MUS_SLATEPORT 433 // MUS_FINECITY +#define MUS_MT_PYRE 432 // MUS_M_DUNGON // Also used in New Mauville and Shoal Cave. +#define MUS_SLATEPORT 433 // MUS_FINECITY // Also used in Cycling Road's entrances. #define MUS_MT_PYRE_EXTERIOR 434 // MUS_MACHUPI #define MUS_SCHOOL 435 // MUS_P_SCHOOL #define MUS_HALL_OF_FAME 436 // MUS_DENDOU -#define MUS_FALLARBOR 437 // MUS_TONEKUSA -#define MUS_SEALED_CHAMBER 438 // MUS_MABOROSI +#define MUS_FALLARBOR 437 // MUS_TONEKUSA // Also used in Route 114's houses. +#define MUS_SEALED_CHAMBER 438 // MUS_MABOROSI // Also used in Ancient Tomb, Desert Ruins and Island Cave. #define MUS_CONTEST_WINNER 439 // MUS_CON_FAN #define MUS_CONTEST 440 // MUS_CONTEST0 #define MUS_ENCOUNTER_MAGMA 441 // MUS_MGM0 #define MUS_INTRO_BATTLE 442 // MUS_T_BATTLE -#define MUS_ABNORMAL_WEATHER 443 // MUS_OOAME (Replaces MUS_WEATHER_KYOGRE from R/S) -#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI (Unused, from R/S) +#define MUS_ABNORMAL_WEATHER 443 // MUS_OOAME // Replaces MUS_WEATHER_KYOGRE from R/S. +#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI // Unused from R/S. #define MUS_SOOTOPOLIS 445 // MUS_RUNECITY #define MUS_CONTEST_RESULTS 446 // MUS_CON_K #define MUS_HALL_OF_FAME_ROOM 447 // MUS_EIKOU_R @@ -381,7 +381,7 @@ #define MUS_ENCOUNTER_ELITE_FOUR 450 // MUS_SITENNOU #define MUS_ENCOUNTER_HIKER 451 // MUS_YAMA_EYE #define MUS_CONTEST_LOBBY 452 // MUS_CONLOBBY -#define MUS_ENCOUNTER_INTERVIEWER 453 // MUS_INTER_V +#define MUS_ENCOUNTER_INTERVIEWER 453 // MUS_INTER_V // Also used during Petalburg City report at the beginning of the game. #define MUS_ENCOUNTER_CHAMPION 454 // MUS_DAIGO #define MUS_CREDITS 455 // MUS_THANKFOR #define MUS_END 456 // MUS_END @@ -398,7 +398,7 @@ #define MUS_B_DOME 467 // MUS_B_DOME #define MUS_B_PIKE 468 // MUS_B_TUBE #define MUS_B_FACTORY 469 // MUS_B_FACTORY -#define MUS_VS_RAYQUAZA 470 // MUS_VS_REKKU (Identical to MUS_VS_KYOGRE_GROUDON) +#define MUS_VS_RAYQUAZA 470 // MUS_VS_REKKU // Identical to MUS_VS_KYOGRE_GROUDON. #define MUS_VS_FRONTIER_BRAIN 471 // MUS_VS_FRONT #define MUS_VS_MEW 472 // MUS_VS_MEW #define MUS_B_DOME_LOBBY 473 // MUS_B_DOME1 @@ -451,9 +451,9 @@ #define MUS_RG_SILPH 519 // MUS_RG_SHIRUHU #define MUS_RG_FUCHSIA 520 // MUS_RG_HANADA #define MUS_RG_CELADON 521 // MUS_RG_TAMAMUSI -#define MUS_RG_VICTORY_TRAINER 522 // MUS_RG_WIN_TRE (Identical to MUS_VICTORY_TRAINER) -#define MUS_RG_VICTORY_WILD 523 // MUS_RG_WIN_YASEI (Identical to MUS_VICTORY_WILD) -#define MUS_RG_VICTORY_GYM_LEADER 524 // MUS_RG_WIN_GYM (Identical to MUS_VICTORY_GYM_LEADER) +#define MUS_RG_VICTORY_TRAINER 522 // MUS_RG_WIN_TRE // Identical to MUS_VICTORY_TRAINER. +#define MUS_RG_VICTORY_WILD 523 // MUS_RG_WIN_YASEI // Identical to MUS_VICTORY_WILD. +#define MUS_RG_VICTORY_GYM_LEADER 524 // MUS_RG_WIN_GYM // Identical to MUS_VICTORY_GYM_LEADER. #define MUS_RG_VERMILLION 525 // MUS_RG_KUCHIBA #define MUS_RG_PEWTER 526 // MUS_RG_NIBI #define MUS_RG_ENCOUNTER_RIVAL 527 // MUS_RG_RIVAL1 @@ -472,11 +472,11 @@ #define MUS_RG_NET_CENTER 540 // MUS_RG_NETWORK #define MUS_RG_MYSTERY_GIFT 541 // MUS_RG_OKURIMONO #define MUS_RG_BERRY_PICK 542 // MUS_RG_KINOMIKUI -#define MUS_RG_SEVII_CAVE 543 // MUS_RG_NANADUNGEON (Identical to MUS_RG_MT_MOON) -#define MUS_RG_TEACHY_TV_SHOW 544 // MUS_RG_OSHIE_TV (Identical to MUS_RG_FOLLOW_ME) +#define MUS_RG_SEVII_CAVE 543 // MUS_RG_NANADUNGEON // Identical to MUS_RG_MT_MOON. +#define MUS_RG_TEACHY_TV_SHOW 544 // MUS_RG_OSHIE_TV // Identical to MUS_RG_FOLLOW_ME. #define MUS_RG_SEVII_ROUTE 545 // MUS_RG_NANASHIMA -#define MUS_RG_SEVII_DUNGEON 546 // MUS_RG_NANAISEKI (Identical to MUS_RG_VIRIDIAN_FOREST) -#define MUS_RG_SEVII_123 547 // MUS_RG_NANA123 (Identical to MUS_RG_PEWTER) +#define MUS_RG_SEVII_DUNGEON 546 // MUS_RG_NANAISEKI // Identical to MUS_RG_VIRIDIAN_FOREST. +#define MUS_RG_SEVII_123 547 // MUS_RG_NANA123 // Identical to MUS_RG_PEWTER #define MUS_RG_SEVII_45 548 // MUS_RG_NANA45 #define MUS_RG_SEVII_67 549 // MUS_RG_NANA67 #define MUS_RG_POKE_FLUTE 550 // MUS_RG_POKEFUE diff --git a/src/overworld.c b/src/overworld.c index c3ce7c912..c9258e05e 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1104,7 +1104,7 @@ u16 GetCurrLocationDefaultMusic(void) if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE111) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE111) && GetSavedWeather() == WEATHER_SANDSTORM) - return MUS_ROUTE111; + return MUS_ROUTE111_DESERT; music = GetLocationMusic(&gSaveBlock1Ptr->location); if (music != MUS_ROUTE118) From 48391d8eff187fca92135106680cbc7961a89ca5 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 24 Feb 2023 08:46:34 +0100 Subject: [PATCH 024/129] Basculegion female form --- graphics/pokemon/basculegion/female/back.png | Bin 633 -> 628 bytes graphics/pokemon/basculegion/female/front.png | Bin 928 -> 939 bytes .../pokemon/basculegion/female/normal.pal | 28 +++++++++--------- graphics/pokemon/basculegion/female/shiny.pal | 28 +++++++++--------- include/graphics.h | 16 +++++----- src/data/graphics/pokemon.h | 16 +++++----- .../pokemon_graphics/back_pic_coordinates.h | 2 +- src/data/pokemon_graphics/back_pic_table.h | 7 ++--- src/data/pokemon_graphics/front_pic_table.h | 7 ++--- src/data/pokemon_graphics/palette_table.h | 6 ++-- .../pokemon_graphics/shiny_palette_table.h | 5 ++-- src/pokemon_icon.c | 7 ++--- 12 files changed, 57 insertions(+), 65 deletions(-) diff --git a/graphics/pokemon/basculegion/female/back.png b/graphics/pokemon/basculegion/female/back.png index a652e2fa53525cb97b3484ca6d63b62320d56980..a1ce4263e250b63b02498d1a56e73369096fc024 100755 GIT binary patch delta 515 zcmV+e0{s2?1oQ-uEe8`c9xvW*VUaXae_~={5D*Y9TzISA;O6G$xA|hZt5D*e$J}K`FuFwDg00Cl4M@0Xn2lB-L00EduL_t(|ob8gaPQx$| zhMh2VD=Y}6(gnd($qX)nDIUU@A!6Yn=umZG!Wk|DQfZgCqEn~jF<7cd>C~xGfA3v5 zJ0%h{nXAtu@Sb z0kUt6I&MJ5L299HYlM<7fT9b?_Ii}uR8ak*DDvOJH`l;Fh-1>L=c$Z~rFvSS=+*NG zw##Aoglk2Dv&S>=5sT%^3fHj_f7(0V{pN{$Lo!x~;+=+c2BqOFc0O9hGYzOJJ5+CzS$*}ae!%$xffP= zv?WrIF->RhlL7IDgyYjnNRvqVce%x}#w4D9j+r|+HbP*3sSuG=B+!4IBj$7bWbAS@ zGE)xdOi$HDL|(3SfxBgND&fosLg5tr`@(YEc30aD`vPdQHJesDJ+J@(002ovPDHLk FV1g#*@I3$k delta 520 zcmV+j0{8v&1o;GzEe8xb88|~S0g*IPe=v+#5D*X$Kp=Ris6bFq=;W|qJSZSAIH=s< zAYeFPU|`_n;Gm?SC|r2p@aU3f!ju3200Cl4M@0Xn2lB-L00EszL_t(|ob8e^Yr;Sj z$B#@xpr1j6LZNgqiwG{|4M~UF0-5|QVj~>dL zF_iS(#Rghqzd-$u_xs&@k9)`1DW{xr%0J7Q-ux{9a8VPYcih+sF$lv*9FuBd&<&&x zDN&_it}Bo`YgBOqLJd+V{#qdvybBcJL3q%k;HCoKd7jt$EqrqU`j$Axn`$0O-|O&? zHmXfE4`AF`=N~xbB)A7Wgapy+f4sDD>KkFU=Z$Y3%Nr!4ji~NuNOxHnPFOZb(MAjC zEl5~rRyZ#kr0)fnJKq3zozH$YDEK6Sd;1FRD$i!j8T@LX6@XuN7goqKc2O2c_14xm zLZe?Vg#4i_pxZR~x1jTU#$-8GcjvMW9oqYj2b0OiebKMjG0000< KMNUMnLSTY+Na?o# diff --git a/graphics/pokemon/basculegion/female/front.png b/graphics/pokemon/basculegion/female/front.png index 19275b7697eab3f4e0bcd5c29f34584d474784a1..5b91d3a84c4564ecdc6ae9f9fd3ac67f871cb5d6 100755 GIT binary patch delta 829 zcmV-D1H$~E2df8=Ee8`cDVJl*Zjm%ne_~={5D*Y9TzISA;O6G$xA|hZt5D*e$J}K`FuFwDg00Cl4M@0Xn2lB-L00PfRL_t(|obA%RYui8+ z0Pu5^p;;2gU_4e)V{C9rOmq~LQYfd_a$s7BgXlj{O4cLxZDxETVmOxh)xT<9NA_nrK0XXskU4MOmK??dlI$o=_WPs|*?+4`|K2a-czK;Foc zS1)D@cxGY;N@mo;v8y)5o%N`IK9-}ioxzZXET6ENpzI7P{rDE{0Kvit zR4LnXA=eaKfzlm#Ae|B+)?fwY8gVtY1QWj=>e{VG7(WlA+zng$Tk{W;{Ry zgj^RvQ#H?E4%vvRKm`UKLFd)4aiLw|MN!YN3`8^RAL$|<1SU>IyMA}(KU@h zMRf>C>BI#uLFUdaD_5QCAt=tr$#S=gaT1Gwc?Y;Z|8V{SnR8HrE%`V&00000NkvXX Hu0mjfsGoD{ delta 818 zcmV-21I_%a2cQR#Ee8xYEZbg)Z;>=oe=v+#5D*X$Kp=Ris6bFq=;W|qJSZSAIH=s< zAYeFPU|`_n;Gm?SC|r2p@aU3f!ju3200Cl4M@0Xn2lB-L00P8GL_t(|obA%RYui8+ z0Pw>Ul3)-V&0-Hhz8FGkyWnQ)W^scrgQj}ul0PDg{{lmxOMTq(N>PcOB^rwHf07~g z;x%f9tcijfH1s;COO{UUJNZNY$k4Tr8-(Ef-iO|akmvKio~%84i_K$e4Gd<$g0VFw zUp}rD2<-k0c-npnlt!dK0RT3(SP_F@Fv{K}uUbem#P3ybcOBml3n$SIKKM$7Y!Cz* z9*DMMVo580@whfZa1G$SmgXBke?#=RwFd5igO-*gmZvoQS^10s0)?59XjXKU2fx<9 zw@@Q+W1*A_p3n;)VOD$cVHn=WfCNDBIC8BNSS~p^X*Avm0PbR3DbBe|#`Abo$8ZC~ zic+nFsld6NHi+u2X*xw96uy`O>2>}vaZImKnrmwTT5*@V@#MBFLN=#ye@r((8Q_>6 z35do?+|wqXwkh2K4?7@m?4(5$w_=P(`$++FSY)!J>5vw$AIXN$avN%s_yg_$L1qqG zT0VGCs0u}anhwh4kwXZZuAtt~p4gBp&t_{?wvkBVF9>zD3XpfA9MCFcXfMS}8|6J#!|7R% zWDo?s>@p}{R2bCE^iy!P+<;UV{^$8lDcNp0DX|PPxJ#P1vop}2UsDQdv_r_yBxZs> wSvy5VJN68W*5f3@Ad;fl1lUi2=kpKeFSjpr%tD>0wg3PC07*qoM6N<$g75}_!~g&Q diff --git a/graphics/pokemon/basculegion/female/normal.pal b/graphics/pokemon/basculegion/female/normal.pal index e67011cea..b5b76f062 100755 --- a/graphics/pokemon/basculegion/female/normal.pal +++ b/graphics/pokemon/basculegion/female/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 140 88 +98 98 98 16 16 16 -16 64 32 -120 168 168 -64 80 80 -232 228 176 -96 60 40 -32 48 56 -168 220 224 -32 96 56 -96 96 96 -224 228 224 -160 164 160 -40 92 120 -224 240 232 +46 92 120 +171 222 224 +230 230 230 +227 242 239 +164 164 164 +122 168 175 +32 49 57 +65 82 82 +55 140 89 +21 64 34 +34 96 61 +16 16 18 +99 62 41 diff --git a/graphics/pokemon/basculegion/female/shiny.pal b/graphics/pokemon/basculegion/female/shiny.pal index 815fa8564..863a0f773 100755 --- a/graphics/pokemon/basculegion/female/shiny.pal +++ b/graphics/pokemon/basculegion/female/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 147 49 +98 98 98 16 16 16 -16 64 32 -164 152 77 -79 108 60 -232 228 176 -96 60 40 -32 48 56 -222 208 114 -79 108 60 -96 96 96 -224 228 224 -160 164 160 -115 99 68 -249 236 166 +112 96 64 +216 208 112 +230 230 230 +248 236 160 +164 164 164 +160 152 72 +32 49 57 +64 80 80 +96 144 48 +21 64 34 +72 108 56 +16 16 18 +99 62 41 diff --git a/include/graphics.h b/include/graphics.h index 2f6b4290d..b81d9951a 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -990,7 +990,6 @@ extern const u32 gMonFrontPic_Wyrdeer[]; extern const u32 gMonFrontPic_Kleavor[]; extern const u32 gMonFrontPic_Ursaluna[]; extern const u32 gMonFrontPic_Basculegion[]; -extern const u32 gMonFrontPic_BasculegionF[]; extern const u32 gMonFrontPic_Sneasler[]; extern const u32 gMonFrontPic_Overqwil[]; extern const u32 gMonFrontPic_Enamorus[]; @@ -1276,7 +1275,8 @@ extern const u32 gMonFrontPic_UrshifuRapidStrikeStyle[]; extern const u32 gMonFrontPic_ZarudeDada[]; extern const u32 gMonFrontPic_CalyrexIceRider[]; extern const u32 gMonFrontPic_CalyrexShadowRider[]; -//extern const u32 gMonFrontPic_EnamorusTherian[]; +extern const u32 gMonFrontPic_EnamorusTherian[]; +extern const u32 gMonFrontPic_BasculegionFemale[]; #endif extern const u32 gMonFrontPic_Egg[]; @@ -2204,7 +2204,6 @@ extern const u32 gMonBackPic_Wyrdeer[]; extern const u32 gMonBackPic_Kleavor[]; extern const u32 gMonBackPic_Ursaluna[]; extern const u32 gMonBackPic_Basculegion[]; -extern const u32 gMonBackPic_BasculegionF[]; extern const u32 gMonBackPic_Sneasler[]; extern const u32 gMonBackPic_Overqwil[]; extern const u32 gMonBackPic_Enamorus[]; @@ -2488,7 +2487,8 @@ extern const u32 gMonBackPic_UrshifuRapidStrikeStyle[]; extern const u32 gMonBackPic_ZarudeDada[]; extern const u32 gMonBackPic_CalyrexIceRider[]; extern const u32 gMonBackPic_CalyrexShadowRider[]; -//extern const u32 gMonBackPic_EnamorusTherian[]; +extern const u32 gMonBackPic_EnamorusTherian[]; +extern const u32 gMonBackPic_BasculegionFemale[]; #endif extern const u32 gMonPalette_CircledQuestionMark[]; @@ -3410,7 +3410,6 @@ extern const u32 gMonPalette_Wyrdeer[]; extern const u32 gMonPalette_Kleavor[]; extern const u32 gMonPalette_Ursaluna[]; extern const u32 gMonPalette_Basculegion[]; -extern const u32 gMonPalette_BasculegionF[]; extern const u32 gMonPalette_Sneasler[]; extern const u32 gMonPalette_Overqwil[]; extern const u32 gMonPalette_Enamorus[]; @@ -3720,7 +3719,8 @@ extern const u32 gMonPalette_UrshifuRapidStrikeStyle[]; extern const u32 gMonPalette_ZarudeDada[]; extern const u32 gMonPalette_CalyrexIceRider[]; extern const u32 gMonPalette_CalyrexShadowRider[]; -//extern const u32 gMonPalette_EnamorusTherian[]; +extern const u32 gMonPalette_EnamorusTherian[]; +extern const u32 gMonPalette_BasculegionFemale[]; #endif extern const u32 gMonPalette_Egg[]; @@ -4643,7 +4643,6 @@ extern const u32 gMonShinyPalette_Wyrdeer[]; extern const u32 gMonShinyPalette_Kleavor[]; extern const u32 gMonShinyPalette_Ursaluna[]; extern const u32 gMonShinyPalette_Basculegion[]; -extern const u32 gMonShinyPalette_BasculegionF[]; extern const u32 gMonShinyPalette_Sneasler[]; extern const u32 gMonShinyPalette_Overqwil[]; extern const u32 gMonShinyPalette_Enamorus[]; @@ -4948,6 +4947,7 @@ extern const u32 gMonShinyPalette_ZarudeDada[]; extern const u32 gMonShinyPalette_CalyrexIceRider[]; extern const u32 gMonShinyPalette_CalyrexShadowRider[]; extern const u32 gMonShinyPalette_EnamorusTherian[]; +extern const u32 gMonShinyPalette_BasculegionFemale[]; #endif extern const u8 gMonIcon_QuestionMark[]; @@ -5870,7 +5870,6 @@ extern const u8 gMonIcon_Wyrdeer[]; extern const u8 gMonIcon_Kleavor[]; extern const u8 gMonIcon_Ursaluna[]; extern const u8 gMonIcon_Basculegion[]; -extern const u8 gMonIcon_BasculegionF[]; extern const u8 gMonIcon_Sneasler[]; extern const u8 gMonIcon_Overqwil[]; extern const u8 gMonIcon_Enamorus[]; @@ -6168,6 +6167,7 @@ extern const u8 gMonIcon_ZarudeDada[]; extern const u8 gMonIcon_CalyrexIceRider[]; extern const u8 gMonIcon_CalyrexShadowRider[]; extern const u8 gMonIcon_EnamorusTherian[]; +extern const u8 gMonIcon_BasculegionFemale[]; #endif extern const u8 gMonIcon_Egg[]; diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 41eb1265f..20ecc500d 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -923,7 +923,6 @@ const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4b const u32 gMonFrontPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/front.4bpp.lz"); const u32 gMonFrontPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/front.4bpp.lz"); const u32 gMonFrontPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); -const u32 gMonFrontPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/front.4bpp.lz"); const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); const u32 gMonFrontPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/front.4bpp.lz"); const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); @@ -1207,7 +1206,8 @@ const u32 gMonFrontPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/ const u32 gMonFrontPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/front.4bpp.lz"); const u32 gMonFrontPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/front.4bpp.lz"); const u32 gMonFrontPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/front.4bpp.lz"); -//const u32 gMonFrontPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/front.4bpp.lz"); +const u32 gMonFrontPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/front.4bpp.lz"); +const u32 gMonFrontPic_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/front.4bpp.lz"); #endif const u32 gMonFrontPic_Egg[] = INCBIN_U32("graphics/pokemon/egg/anim_front.4bpp.lz"); @@ -2135,7 +2135,6 @@ const u32 gMonBackPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/back.4bpp const u32 gMonBackPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/back.4bpp.lz"); const u32 gMonBackPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/back.4bpp.lz"); const u32 gMonBackPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); -const u32 gMonBackPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/back.4bpp.lz"); const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz"); const u32 gMonBackPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/back.4bpp.lz"); const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); @@ -2419,7 +2418,8 @@ const u32 gMonBackPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/u const u32 gMonBackPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/back.4bpp.lz"); const u32 gMonBackPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/back.4bpp.lz"); const u32 gMonBackPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/back.4bpp.lz"); -//const u32 gMonBackPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/back.4bpp.lz"); +const u32 gMonBackPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/back.4bpp.lz"); +const u32 gMonBackPic_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/back.4bpp.lz"); #endif const u32 gMonPalette_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/normal.gbapal.lz"); @@ -3341,7 +3341,6 @@ const u32 gMonPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/normal.gb const u32 gMonPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/normal.gbapal.lz"); const u32 gMonPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/normal.gbapal.lz"); const u32 gMonPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); -const u32 gMonPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/normal.gbapal.lz"); const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); const u32 gMonPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/normal.gbapal.lz"); const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); @@ -3651,7 +3650,8 @@ const u32 gMonPalette_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/u const u32 gMonPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/normal.gbapal.lz"); const u32 gMonPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/normal.gbapal.lz"); const u32 gMonPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/normal.gbapal.lz"); -//const u32 gMonPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/normal.gbapal.lz"); +const u32 gMonPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/normal.gbapal.lz"); +const u32 gMonPalette_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/normal.gbapal.lz"); #endif const u32 gMonPalette_Egg[] = INCBIN_U32("graphics/pokemon/egg/normal.gbapal.lz"); @@ -4574,7 +4574,6 @@ const u32 gMonShinyPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/shin const u32 gMonShinyPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/shiny.gbapal.lz"); const u32 gMonShinyPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/shiny.gbapal.lz"); const u32 gMonShinyPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); -const u32 gMonShinyPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/shiny.gbapal.lz"); const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz"); const u32 gMonShinyPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/shiny.gbapal.lz"); const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); @@ -4879,6 +4878,7 @@ const u32 gMonShinyPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/da const u32 gMonShinyPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/shiny.gbapal.lz"); const u32 gMonShinyPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/shiny.gbapal.lz"); const u32 gMonShinyPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/shiny.gbapal.lz"); #endif const u8 gMonIcon_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mark/icon.4bpp"); @@ -5801,7 +5801,6 @@ const u8 gMonIcon_Wyrdeer[] = INCBIN_U8("graphics/pokemon/wyrdeer/icon.4bpp"); const u8 gMonIcon_Kleavor[] = INCBIN_U8("graphics/pokemon/kleavor/icon.4bpp"); const u8 gMonIcon_Ursaluna[] = INCBIN_U8("graphics/pokemon/ursaluna/icon.4bpp"); const u8 gMonIcon_Basculegion[] = INCBIN_U8("graphics/pokemon/basculegion/icon.4bpp"); -const u8 gMonIcon_BasculegionF[] = INCBIN_U8("graphics/pokemon/basculegion/female/icon.4bpp"); const u8 gMonIcon_Sneasler[] = INCBIN_U8("graphics/pokemon/sneasler/icon.4bpp"); const u8 gMonIcon_Overqwil[] = INCBIN_U8("graphics/pokemon/overqwil/icon.4bpp"); const u8 gMonIcon_Enamorus[] = INCBIN_U8("graphics/pokemon/enamorus/icon.4bpp"); @@ -6099,6 +6098,7 @@ const u8 gMonIcon_ZarudeDada[] = INCBIN_U8("graphics/pokemon/zarude/dada/icon.4b const u8 gMonIcon_CalyrexIceRider[] = INCBIN_U8("graphics/pokemon/calyrex/ice_rider/icon.4bpp"); const u8 gMonIcon_CalyrexShadowRider[] = INCBIN_U8("graphics/pokemon/calyrex/shadow_rider/icon.4bpp"); const u8 gMonIcon_EnamorusTherian[] = INCBIN_U8("graphics/pokemon/enamorus/therian/icon.4bpp"); +const u8 gMonIcon_BasculegionFemale[] = INCBIN_U8("graphics/pokemon/basculegion/female/icon.4bpp"); #endif const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp"); diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h index 8f9dd8ee8..39caae2da 100644 --- a/src/data/pokemon_graphics/back_pic_coordinates.h +++ b/src/data/pokemon_graphics/back_pic_coordinates.h @@ -1042,7 +1042,7 @@ const struct MonCoords gMonBackPicCoords[] = [SPECIES_ARCANINE_HISUIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_VOLTORB_HISUIAN] = { .size = MON_COORDS_SIZE(48, 32), .y_offset = 10 }, [SPECIES_ELECTRODE_HISUIAN] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 7 }, - [SPECIES_TYPHLOSION_HISUIAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 3 }, + [SPECIES_TYPHLOSION_HISUIAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 0 }, [SPECIES_QWILFISH_HISUIAN] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 6 }, [SPECIES_SNEASEL_HISUIAN] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 3 }, #if P_GEN_5_POKEMON == TRUE diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index 15c176c92..78bcc2598 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -1331,7 +1331,9 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(CALYREX_ICE_RIDER, gMonBackPic_CalyrexIceRider), SPECIES_SPRITE(CALYREX_SHADOW_RIDER, gMonBackPic_CalyrexShadowRider), - SPECIES_SPRITE(ENAMORUS_THERIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_EnamorusTherian), + SPECIES_SPRITE(ENAMORUS_THERIAN, gMonBackPic_EnamorusTherian), + + SPECIES_SPRITE(BASCULEGION_FEMALE, gMonBackPic_BasculegionFemale), #endif SPECIES_SPRITE(EGG, gMonFrontPic_Egg), }; @@ -1359,7 +1361,4 @@ const struct CompressedSpriteSheet gMonBackPicTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_SPRITE(PYROAR, gMonBackPic_PyroarF), #endif -#if P_GEN_8_POKEMON == TRUE - SPECIES_SPRITE(BASCULEGION, gMonBackPic_BasculegionF), -#endif }; diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index ff9fa3316..411a2ba37 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -1330,7 +1330,9 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(CALYREX_ICE_RIDER, gMonFrontPic_CalyrexIceRider), SPECIES_SPRITE(CALYREX_SHADOW_RIDER, gMonFrontPic_CalyrexShadowRider), - SPECIES_SPRITE(ENAMORUS_THERIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_EnamorusTherian), + SPECIES_SPRITE(ENAMORUS_THERIAN, gMonFrontPic_EnamorusTherian), + + SPECIES_SPRITE(BASCULEGION_FEMALE, gMonFrontPic_BasculegionFemale), #endif SPECIES_SPRITE(EGG, gMonFrontPic_Egg), }; @@ -1358,7 +1360,4 @@ const struct CompressedSpriteSheet gMonFrontPicTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_SPRITE(PYROAR, gMonFrontPic_PyroarF), #endif -#if P_GEN_7_POKEMON == TRUE - SPECIES_SPRITE(BASCULEGION, gMonFrontPic_BasculegionF), -#endif }; diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index ee390c1e0..b47a74db4 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -1330,7 +1330,8 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(CALYREX_ICE_RIDER, gMonPalette_CalyrexIceRider), SPECIES_PAL(CALYREX_SHADOW_RIDER, gMonPalette_CalyrexShadowRider), - SPECIES_PAL(ENAMORUS_THERIAN, gMonPalette_CircledQuestionMark), // gMonPalette_EnamorusTherian), + SPECIES_PAL(ENAMORUS_THERIAN, gMonPalette_EnamorusTherian), + SPECIES_PAL(BASCULEGION_FEMALE, gMonPalette_BasculegionFemale), #endif SPECIES_PAL(EGG, gMonPalette_Egg), }; @@ -1358,7 +1359,4 @@ const struct CompressedSpritePalette gMonPaletteTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_PAL(PYROAR, gMonPalette_Pyroar), #endif -#if P_GEN_8_POKEMON == TRUE - SPECIES_PAL(BASCULEGION, gMonPalette_BasculegionF), -#endif }; diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 78ce1d23b..350155646 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -1330,6 +1330,8 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(CALYREX_SHADOW_RIDER, gMonShinyPalette_CalyrexShadowRider), SPECIES_SHINY_PAL(ENAMORUS_THERIAN, gMonShinyPalette_EnamorusTherian), + + SPECIES_SHINY_PAL(BASCULEGION_FEMALE, gMonShinyPalette_BasculegionFemale), #endif SPECIES_SHINY_PAL(EGG, gMonPalette_Egg), }; @@ -1357,7 +1359,4 @@ const struct CompressedSpritePalette gMonShinyPaletteTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_SHINY_PAL(PYROAR, gMonShinyPalette_Pyroar), #endif -#if P_GEN_8_POKEMON == TRUE - SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_BasculegionF), -#endif }; diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index f8851d4e2..f911f6e44 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1293,7 +1293,7 @@ const u8 *const gMonIconTable[] = [SPECIES_CALYREX_ICE_RIDER] = gMonIcon_CalyrexIceRider, [SPECIES_CALYREX_SHADOW_RIDER] = gMonIcon_CalyrexShadowRider, [SPECIES_ENAMORUS_THERIAN] = gMonIcon_EnamorusTherian, - [SPECIES_BASCULEGION_FEMALE] = gMonIcon_BasculegionF, + [SPECIES_BASCULEGION_FEMALE] = gMonIcon_BasculegionFemale, #endif [SPECIES_EGG] = gMonIcon_Egg, }; @@ -1326,9 +1326,6 @@ const u8 *const gMonIconTableFemale[] = #if P_GEN_6_POKEMON == TRUE [SPECIES_PYROAR] = gMonIcon_PyroarF, #endif -#if P_GEN_8_POKEMON == TRUE - [SPECIES_BASCULEGION] = gMonIcon_Basculegion, -#endif }; const u8 gMonIconPaletteIndices[] = @@ -2543,7 +2540,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_CALYREX_ICE_RIDER] = 0, [SPECIES_CALYREX_SHADOW_RIDER] = 0, [SPECIES_ENAMORUS_THERIAN] = 1, - [SPECIES_BASCULEGION_FEMALE] = 1, + [SPECIES_BASCULEGION_FEMALE] = 0, #endif [SPECIES_EGG] = 1, }; From fe74dd938b3a6a4547d9f3fbc1fdd6b7396b16c6 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 1 Mar 2023 04:00:19 -0300 Subject: [PATCH 025/129] Small corrections --- data/battle_scripts_1.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 70730d2a9..2556d60e1 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,7 +417,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY - .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE @@ -524,7 +524,7 @@ BattleScript_EffectAttackUpUserAlly_AllyAnim: playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG - goto BattleScript_EffectAttackUpUserAlly_Ends + goto BattleScript_EffectAttackUpUserAlly_End BattleScript_EffectTeatime:: attackcanceler From fe735f9700262fe0baf103ba77af83c9cf6c59f7 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 1 Mar 2023 20:03:27 -0300 Subject: [PATCH 026/129] Applied review suggestions -Merged EFFECT_CEASELESS_EDGE and EFFECT_STONE_AXE into EFFECT_HIT_SET_ENTRY_HAZARD -Updated gDmgHazardsStringIds and relevant battle scripts. Can't say that I like it at all. String tables are stupid imo. -Coupled Barb Barrage's effect in CalcMoveBasePower with Venoshock's --- data/battle_scripts_1.s | 36 ++++--------------------- include/constants/battle_move_effects.h | 7 +++-- include/constants/battle_string_ids.h | 6 +++++ src/battle_ai_main.c | 5 ++-- src/battle_message.c | 5 +++- src/battle_script_commands.c | 6 +++-- src/battle_util.c | 5 +--- src/data/battle_moves.h | 6 +++-- 8 files changed, 29 insertions(+), 47 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 2556d60e1..425834b7e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -418,39 +418,13 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP - .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE + .4byte BattleScript_EffectHitSetEntryHazard @ EFFECT_HIT_SET_ENTRY_HAZARD .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW - .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE -BattleScript_EffectStoneAxe:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET - setmoveeffect MOVE_EFFECT_STEALTH_ROCK - seteffectprimary - moveendall - end - BattleScript_StealthRockActivates:: setstealthrock BattleScript_MoveEnd - printstring STRINGID_POINTEDSTONESFLOAT + printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -458,7 +432,7 @@ BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit -BattleScript_EffectCeaselessEdge:: +BattleScript_EffectHitSetEntryHazard:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring @@ -478,14 +452,14 @@ BattleScript_EffectCeaselessEdge:: resultmessage waitmessage B_WAIT_TIME_LONG tryfaintmon BS_TARGET - setmoveeffect MOVE_EFFECT_SPIKES + argumenttomoveeffect seteffectprimary moveendall end BattleScript_SpikesActivate:: trysetspikes BattleScript_MoveEnd - printstring STRINGID_SPIKESSCATTERED + printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 0adee76c9..ad589211c 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -399,11 +399,10 @@ #define EFFECT_TEATIME 393 #define EFFECT_ATTACK_UP_USER_ALLY 394 // Howl 8th Gen #define EFFECT_SHELL_TRAP 395 -#define EFFECT_CEASELESS_EDGE 396 +#define EFFECT_HIT_SET_ENTRY_HAZARD 396 #define EFFECT_DIRE_CLAW 397 -#define EFFECT_STONE_AXE 398 -#define EFFECT_BARB_BARRAGE 399 +#define EFFECT_BARB_BARRAGE 398 -#define NUM_BATTLE_MOVE_EFFECTS 400 +#define NUM_BATTLE_MOVE_EFFECTS 399 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index f3e702ec4..01065e047 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -921,4 +921,10 @@ #define B_MSG_Z_STAT_UP 5 #define B_MSG_Z_HP_TRAP 6 +// gDmgHazardsStringIds +#define B_MSG_PKMNHURTBYSPIKES 0 +#define B_MSG_STEALTHROCKDMG 1 +#define B_MSG_POINTEDSTONESFLOAT 2 +#define B_MSG_SPIKESSCATTERED 3 + #endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index bbc1660fa..f61dc49a8 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3872,9 +3872,8 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_SPIKES: - case EFFECT_CEASELESS_EDGE: + case EFFECT_HIT_SET_ENTRY_HAZARD: case EFFECT_STEALTH_ROCK: - case EFFECT_STONE_AXE: case EFFECT_STICKY_WEB: case EFFECT_TOXIC_SPIKES: if (AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE || CountUsablePartyMons(battlerDef) == 0) @@ -4910,7 +4909,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_HAIL: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: - case EFFECT_STONE_AXE: + case EFFECT_HIT_SET_ENTRY_HAZARD: score += 2; break; default: diff --git a/src/battle_message.c b/src/battle_message.c index 29580ded0..99f88f53b 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1462,7 +1462,10 @@ const u16 gHealingWishStringIds[] = const u16 gDmgHazardsStringIds[] = { - STRINGID_PKMNHURTBYSPIKES, STRINGID_STEALTHROCKDMG + [B_MSG_PKMNHURTBYSPIKES] = STRINGID_PKMNHURTBYSPIKES, + [B_MSG_STEALTHROCKDMG] = STRINGID_STEALTHROCKDMG, + [B_MSG_POINTEDSTONESFLOAT] = STRINGID_POINTEDSTONESFLOAT, + [B_MSG_SPIKESSCATTERED] = STRINGID_SPIKESSCATTERED }; const u16 gSwitchInAbilityStringIds[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a445786ce..0799cf2f3 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3768,6 +3768,7 @@ void SetMoveEffect(bool32 primary, u32 certain) case MOVE_EFFECT_STEALTH_ROCK: if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_STEALTH_ROCK)) { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_POINTEDSTONESFLOAT; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StealthRockActivates; } @@ -3775,6 +3776,7 @@ void SetMoveEffect(bool32 primary, u32 certain) case MOVE_EFFECT_SPIKES: if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SPIKES)) { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SPIKESSCATTERED; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_SpikesActivate; } @@ -7045,7 +7047,7 @@ static void Cmd_switchineffects(void) gBattleMoveDamage = 1; gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_SPIKES_DAMAGED; - SetDmgHazardsBattlescript(gActiveBattler, 0); + SetDmgHazardsBattlescript(gActiveBattler, B_MSG_PKMNHURTBYSPIKES); } else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STEALTH_ROCK_DAMAGED) && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STEALTH_ROCK) @@ -7056,7 +7058,7 @@ static void Cmd_switchineffects(void) gBattleMoveDamage = GetStealthHazardDamage(gBattleMoves[MOVE_STEALTH_ROCK].type, gActiveBattler); if (gBattleMoveDamage != 0) - SetDmgHazardsBattlescript(gActiveBattler, 1); + SetDmgHazardsBattlescript(gActiveBattler, B_MSG_STEALTHROCKDMG); } else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_TOXIC_SPIKES_DAMAGED) && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_TOXIC_SPIKES) diff --git a/src/battle_util.c b/src/battle_util.c index a94467085..9b3a39406 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8761,10 +8761,6 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower = CalcBeatUpPower(); #endif break; - case EFFECT_BARB_BARRAGE: - if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) - basePower *= 2; - break; } // Move-specific base power changes @@ -9130,6 +9126,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe if (gBattleMons[battlerDef].hp <= (gBattleMons[battlerDef].maxHP / 2)) MulModifier(&modifier, UQ_4_12(2.0)); break; + case EFFECT_BARB_BARRAGE: case EFFECT_VENOSHOCK: if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) MulModifier(&modifier, UQ_4_12(2.0)); diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index cc4e322f2..530dacd13 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13323,7 +13323,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_STONE_AXE] = { - .effect = EFFECT_STONE_AXE, + .effect = EFFECT_HIT_SET_ENTRY_HAZARD, .power = 65, .type = TYPE_ROCK, .accuracy = 90, @@ -13335,6 +13335,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, + .argument = MOVE_EFFECT_STEALTH_ROCK, }, [MOVE_SPRINGTIDE_STORM] = @@ -13599,7 +13600,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_CEASELESS_EDGE] = { - .effect = EFFECT_CEASELESS_EDGE, + .effect = EFFECT_HIT_SET_ENTRY_HAZARD, .power = 65, .type = TYPE_DARK, .accuracy = 90, @@ -13611,6 +13612,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, + .argument = MOVE_EFFECT_SPIKES, }, [MOVE_BLEAKWIND_STORM] = From 58b408cbbf0760ff34e5136777f42e11014decd2 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 2 Mar 2023 17:04:24 +0100 Subject: [PATCH 027/129] some new sprites --- graphics/pokemon/arcanine/hisuian/back.png | Bin 902 -> 923 bytes graphics/pokemon/arcanine/hisuian/front.png | Bin 1137 -> 1138 bytes graphics/pokemon/arcanine/hisuian/normal.pal | 22 +- graphics/pokemon/arcanine/hisuian/shiny.pal | 22 +- graphics/pokemon/avalugg/hisuian/back.png | Bin 528 -> 654 bytes graphics/pokemon/avalugg/hisuian/front.png | Bin 809 -> 947 bytes graphics/pokemon/avalugg/hisuian/normal.pal | 26 +- graphics/pokemon/avalugg/hisuian/shiny.pal | 28 +- graphics/pokemon/braviary/hisuian/back.png | Bin 786 -> 1616 bytes graphics/pokemon/braviary/hisuian/front.png | Bin 978 -> 1831 bytes graphics/pokemon/braviary/hisuian/normal.pal | 266 ++++++++++++++++- graphics/pokemon/braviary/hisuian/shiny.pal | 272 ++++++++++++++++-- graphics/pokemon/goodra/hisuian/back.png | Bin 882 -> 931 bytes graphics/pokemon/goodra/hisuian/front.png | Bin 924 -> 995 bytes graphics/pokemon/goodra/hisuian/normal.pal | 30 +- graphics/pokemon/goodra/hisuian/shiny.pal | 28 +- graphics/pokemon/growlithe/hisuian/back.png | Bin 678 -> 799 bytes graphics/pokemon/growlithe/hisuian/front.png | Bin 701 -> 775 bytes graphics/pokemon/growlithe/hisuian/normal.pal | 28 +- graphics/pokemon/growlithe/hisuian/shiny.pal | 28 +- graphics/pokemon/sliggoo/hisuian/back.png | Bin 606 -> 600 bytes graphics/pokemon/sliggoo/hisuian/front.png | Bin 659 -> 667 bytes graphics/pokemon/sliggoo/hisuian/normal.pal | 30 +- graphics/pokemon/sliggoo/hisuian/shiny.pal | 32 +-- graphics/pokemon/sneasel/hisuian/back.png | Bin 591 -> 744 bytes graphics/pokemon/sneasel/hisuian/front.png | Bin 682 -> 783 bytes graphics/pokemon/sneasel/hisuian/normal.pal | 28 +- graphics/pokemon/sneasel/hisuian/shiny.pal | 28 +- graphics/pokemon/typhlosion/hisuian/back.png | Bin 932 -> 888 bytes graphics/pokemon/typhlosion/hisuian/front.png | Bin 872 -> 995 bytes .../typhlosion/hisuian/front_shiny.png | Bin 0 -> 996 bytes .../pokemon/typhlosion/hisuian/normal.pal | 28 +- graphics/pokemon/typhlosion/hisuian/pal.pal | 19 ++ graphics/pokemon/typhlosion/hisuian/shiny.pal | 28 +- .../pokemon_graphics/back_pic_coordinates.h | 6 +- 35 files changed, 724 insertions(+), 225 deletions(-) mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/front.png create mode 100755 graphics/pokemon/typhlosion/hisuian/front_shiny.png mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/normal.pal create mode 100755 graphics/pokemon/typhlosion/hisuian/pal.pal mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/shiny.pal diff --git a/graphics/pokemon/arcanine/hisuian/back.png b/graphics/pokemon/arcanine/hisuian/back.png old mode 100644 new mode 100755 index a6fdca501ad80a47b717c7e55e47b0349eae3292..cf835c6f1d0334647fdd6486341e21299602906e GIT binary patch delta 900 zcmV-~1AF|22b%|wB!35VNliru=K}%{EDMi=#@YY?02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_AS@_=jDQdj5Kv@bT0s!!xGCqjDYbq8xU{hN_<#5S000000000000000 z006Pb!AJlA00Cl4M@0Xn2lB-L00O^BL_t(|oVAoaZ`&{sh9#&&M^Pe*tUPnbXhlqc zZYFsMGzLu?bPW&)`5Qs(fNTG8k4NgmZj1~;xlqzQy3dy^iqrMwpD!n?*?k(&p9bKA z7#TQE8Hh2;Gk<}05m4uW_}Ksm`2o;qA>6x3l&~v}g9bpI0bJJ*K+8CL1^|f(*wpU; z#x@gx8}%*#8X1tN;Kaq(KtQtq0Eb^kz}pxifCtAJ=f27Zs> zl^UQi*)Pfde79W#A-uq{F2`{UKl>GM9bTHnuA_qksDD)@RbabLc6=ZQ2M4Pd)g4=8 z%#lioDcz%6C()A$J?2FzUDLL1Rz>gDOu$8SfPPz)VsU}C#|5|}_{X-mf{7?~-$OQA zw1;qyp31D;L^O&gkpXvcK;#rVm&ew~*^V?TCDAfaNtSU@X_@}b04U+J2$G9Rn`Da1 z@I-R#4u9E2g%M~m13c3@*Pj7uQk(nWqbfAkHUTMy!M>mRT-)y4BO0Qq9_PYO`QQxicNqR_Nb!QJt%@U8L+)*d*0=+cbmw*IpRq6W=h!# zdhgH-=u8BLCusX^&M~DWNDhJk`qMBVZ7~B}{kQRv+~9`gKrv)Ic}LBsBTs5HNl}AS z?tKKn@6X{iRTEw8RlH4)fHn}oU!q>1Fka@V5|^xHwh3N!*zU0PcQWU avi<^a>L!N9J^3C000003Emnj885y!g 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 P00000NkvXXu0mjfaw<`S;@&fj(=XcLJ zUr4F6&_e%2Mq2Efggh7f9Vh}!a!jHEz#u3<1FN}|>Gm!G^oBGKFbQ_tt_BRA2M}xv zdO_95RenG3M~GDbheoO)2Z#=_LjXPmRRNrD&mM4y@&bT}P!%u-7(0mj&{!iBB;eif znUzKbu_mDWC4UrPaC?(GQwPfT$8NW=HCi7j;D&AT+sS!UsHP!&r_ zvz17NapGsJ`l-@?fm;Q{r@mBB59{@2#;!S2vTWT^RryWj`_LL{fO&VUZ)=F@hWJGL s0o3Dgn5yR<+c+8%gPb2`p@jOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_P+(}V;P8mBzz`4+XjDMx^!QLbFi0#Qka%ElaDQ;PytwG-=#WGp@VH0- z002i6@mBx<00Cl4M@0Xn2lB-L00P%ZL_t(|ob8jbPuoBg#vRE+#Aed8TcwzgJvlc* zlp#&dQZj%9_;kq{kkz^3WR`ANBof)M%>4mfQZKBSr3wRTZnVVYq5nzWokK~0WJl^7 z{r%o|-+On~w15Bgwkv0>lnrAYHCE{drnzA)A##Rcn45$kWWC;8B&I4t$ZHlkvjS30 z5@7KPv2OO^cycI-jhBby3^1sG_KB!^F-h^D(w7#JKnM}yJnx6}g)Ac+0EM5OZ&q9+ ztq*I8DB}eO{Qz_qPS{Wh_G@LEEo9J%S8>gXim)jWn}0srgw3e;&7DOs%a~Dewg^yY z^Sp1F-tif6{P~pf64dnAEH}%Y005iLr+DwWePBKS(YfsK5d3UHpXSH`U_yeDQS9{s z9$Zo4fZfSI;K#n(uk?$sUyJjAhh5mCH|MZss2!BZp#*xI5k|q`Y0{qsFfdDnBHHQ% z3LvxrgMXjSfblPR#iau5|6+LM^B%_VV0H&yszR)d#dROHTc{dn>-PTQo)0){JDQ%R z0~I0?G0affukQUZ#_??=29Od?*U33in~0_W^b3WLdj^Vr$2UR@dlJYK+s}ab8gzuJ zhJ~Za=dlp?JOIUKu&NmVx`mO|+7|UAAp{x*p?{kMnE;k2SnXNH=LH18~(Thx?od@&KHr61bD^R6h?Hn|n?01t-M8aBFv} zO{by9{CNQ45@?MwUCUE&IQ1HfgzTJsvOUg|?r0I1ul9EyBy@DL6tGhkJ`kEL1^mPd z)AkBLhgGMxvpj>A=ix5H%XLi~4D^-y+ZL<8#dKAKFSk>MF`k=@C=eDZ*>|>_Hn%66qDx9t<;52RO_k zL1DARmQsf(ypIe3rAM0pIcQ;8w5Wr!4{zRY02#vKbi@#vF}myHsp|8n0R=GyrC>N~ z4HzRO72d^X$bY=8Yg`+gt^rNLm>MJO2n^0O7_0!0BL~P3^+khW56$348Thh9>Luoy z`-BwJT<=340nG+j0y%~SNGV&)*0|T#xnb}!7Ah|RoS;ccUY6Dj1PoN!0B{#0Mt(63 z>aoK;0M9Esj$vM0t`;B)rL|C z&o49g0S;A~yHUsEabeWgbOZ+5;C-O-?W7Xj*3vzX0f zm79Exju9BefUUv(OaSWis+gsjT^zB%BEs$?0QQVWKx#Uj;O{^m9 zFU&#$d~{vQ|2@DvuokaH?#kT+7~$ZSuSbBt`oEb2t{BXv`OPH0{d?~f&KOp%p{=d~9)0=YPmf^fP Q01E&B07*qoM6N<$f;@(F3;+NC diff --git a/graphics/pokemon/avalugg/hisuian/normal.pal b/graphics/pokemon/avalugg/hisuian/normal.pal old mode 100644 new mode 100755 index 8055ef92a..f64e40434 --- a/graphics/pokemon/avalugg/hisuian/normal.pal +++ b/graphics/pokemon/avalugg/hisuian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 168 208 -80 112 144 -184 240 248 -104 80 64 -128 208 240 -248 248 248 -80 40 24 -8 8 8 +80 96 104 +176 224 240 +136 176 192 +16 16 16 +104 84 64 +232 244 248 +80 60 48 +72 44 32 144 120 96 -144 64 32 -200 200 216 -144 152 168 -248 192 0 -88 56 56 +112 112 112 +184 188 184 +232 232 232 +144 68 32 +240 184 72 0 0 0 diff --git a/graphics/pokemon/avalugg/hisuian/shiny.pal b/graphics/pokemon/avalugg/hisuian/shiny.pal old mode 100644 new mode 100755 index 9e547358c..9fd2d0e18 --- a/graphics/pokemon/avalugg/hisuian/shiny.pal +++ b/graphics/pokemon/avalugg/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 152 208 -80 96 168 -184 232 248 -200 160 144 -128 192 240 -248 248 248 -112 80 72 -8 8 8 -232 192 176 -248 176 24 -248 176 120 -248 136 88 -248 176 24 -160 128 120 +80 96 104 +176 224 240 +136 176 192 +16 16 16 +104 84 64 +232 244 248 +80 60 48 +72 44 32 +144 120 96 +112 112 112 +184 188 184 +249 131 79 +164 100 16 +240 184 72 0 0 0 diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisuian/back.png old mode 100644 new mode 100755 index e314179b2b445519449d874662f40ce28d50c66f..211a5a04693bc752860fd9cdb55050a2fe0df53d GIT binary patch literal 1616 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!*h@TpUD=;AGx3@jo)8F*2MURo zxJHx&=ckpFCl;kLxcj&OjZr8|EmAPnGbwCc@(`$mqolyk9VlZAWHWd*XvzaAmUKs7 zM+SzC{oH>NSs56Z83KGlTxVQZAOHsLPWHN*Y6d0_QQ;ZJTW(gp`uy_WpLM@~C)iKB zu)yu}_3nfKg$GX_fXo{OqaiR{Lg1vU>lC107?Zr+UH&g+|8$grfoX}Si(^Q|oVQbN zZ(6J%;QCU`L{07a|NURC#4ueJmkKZ}e3rXvll&E@@0;>h6wB9M5k6pl>kLP8oZsd9 zGftXqnE3SRCEw|nIZ~K!hsZr~U~!t0yx`_0hsTPCJlU>Y-`?aYkS=k9mB(2v=HB$h z?laWvV*Hc@64)QySpHIm>D#|&Z&?d->@^%Wp8H($R=DDsz+CTC)k{sW)zaA>e8Mi% z>%K7L7`Vv<6>n#lu+wCHq5lT;1HY|Yeycp2b5gJS57)UvmpX3T*)CzQbk1qDHlgHA zXRh+M88fMzH9Z<9w1@q(Mf0=3c5D7arRUDhC|^54ca7Aid2-iU1=xhwx!hn-c)orU z-djF;>G22Qu#;$N(}=zk=q#*rU2+Y$p$dRlI}ztYd`(QApj z64ycx1U1fkar)A`6`T*scI%#=RnT+c;HO}*y4v329lGCtZ%RwJ-FfYP%;#99GtM04 z*SID+e~>btR?jrq!I^R6lIx+PY~+#~QZp?TuFdm@=X#GqQes@pEsPPt1nQ+z2O! zX-b>wFCR7&Vs!BBWRPn7cFE{~FE7u7RLO_ZG-n@L9b2OE?LXd6YmK}fCH|#vTHU9O5<^@+4GFVOWiGAJ9%h1g9tB$wp z`{uWqpOgFKni>8G9ynR&lD#a+Vol&8{wMY946pb(y>(x>)I}-eaIjT8m$&3Pc*0Zc zm|@5v!2^FHoibHerU=dbl)=3_VBW`9?y4Ab-n-iF~h0tQvGlCOn^pu BmSX?_ delta 774 zcmV+h1Nr>W43Y+r7=Hu<00013M{Ml?001yhOjJdf(4ZI?7zhXmKtMPsC?GgEKu}m% zFtFHo=;q`? zXGz(TOy&Z~g57`o^JjKQ$N7K$#UthH@4!qgr2J8@x80dii=^JA&x5m{N@@AEQto_c za$hi*B(f6e`|gkn0h8}qC-Q}U(dXO;AOvGlYkfd8Iy~Uq>OzD{0%`97O?n*>pb9x7 zgS&ORMV)OquYZsM$c3hJw_dN>PCL&_qUn|XB7~YE=6bbWL(lV8(IkHc(kufpdG~rn zdVXJI+yXM5LC$nCW$ibln@!7REP+tXmw0`tC(L_$@{s4hjkzx}79ryWL;&gZGUypt z7-Jraj39g%XxIZt#Ft-Jg@JjbIZ}<`FoZ#x5}>Ev$A6Oz444I8kq(D=t~7N3m)lPl z1_o}InXcm;S%9C*X}nm{7*ain1{>&uu7k&6d{}s33QHthqRnVv^2Y&QXEY}Uk8jjz ztg~g7!X=4%#vPc4R(YH7pPyq)3!P;dHIhW1P1!*Sa4Dy@OBm2yM5tjXpglI_6a@&N zN8c7eS%1M{eVVmYG=i)&KnOd;^19(cbGC%G1{9+81T?IJwXg@k=<39M-nk>JT!=1J zu}{f(gu|R&13~v4%eVkYzuH||CJ2zB2(85p>0M{{uyW%N6rV8ZY)^MOTRKE~JUK;$L*1qn!lSjlxvtPbKz|E75s0(Vb(Ic_fO!Bsxj%p%q8kV% zJomJ+Kv^URE=F|*)Tkfyjz_fy4Ih7?<70@fb+^8w`x7}cIGjv*Cu z)`mAuTdcri!nmqBd*}cE*Q4|%H#A+Cx7T*w*04DzQ-nU0&iZ#;;n{h^v;5B;9OW-e zNaoJH*y@-!VfPvqMPpt`6XPA(Jl6LEy7Z#CS|1|t#XF1b;Z|%;W!|w}%Bc~RVBT;FnDp~8Gq&T`D~gQzNxHcRRinLndwzPf8#F|t49Bml$rrA&37?!}e@oeBBpIaX4 z9QQ6WFI;|nS&;&RZw<%96|?tpl$vQSd?C8|)9Z=yCv!D-PEqs<+7!x^Sa7mML2}~u zT%VKT6ECR>6&IgZuGU(rnffDY2}6AR{tvdv!AFdCOue_cv3lFxThp|!+G{*(-M@9p zXWqTd;>yJu1z}8DJd*d;JfC^}{rl8s`izNB8Taw$sfzqqDf{kY^*>&we)G*|!gwk@ z0{^_2+bsD0``3ML2aT)KZ~gFTXwc7c3fT-%Bi8C5!`S}{$jQ%{w2g(_bh5lLdVUzktKZCuFj}wn=T=%MJ>g2^a+BSFm*jQGiP7%5G z#;RL!()sSc843ytf24|ikMtcVk}Qpl5n7-g5Mj-7R@1|6`iE4PiWArTA51uP;Kb=4 z3WA#@GMP>$>|MQeI;X(aYnvCHwEvZVi|w)L`bqV&+q~)xk~-{#1rD8O*^~SCCI9mL Vc;;F4A7w!0i>Irf%Q~loCIBx7_&xvt delta 968 zcmV;(12_Dq4$=pZ7=Hu<00013M{Ml?001yhOjJdf(4c5oPzVSJ=;+|Mu&6jVKu}m% zm_VqgV7MSCD3F-AP`IF|7#Q&Q_~5`uxPUma8T7>f00Uh~L_t(YiH(%MYui8+$0gCF zn;nTlmsmMRhAc7iJL4`LWL;W1R?Qi*w8h{9&!$Asv4ain(0`gHkiVdTY|W6+{sCP| z|A%BN1&4Sm6x?@rQmh|o>07M3_qp%)y?2rg<3FS7mbT1FHV?M|t;{pDidlCB;Imy4 zz^s{W+O7$I0dyI*YnL2U7Fx>1gpIO*1neAO77%*{*igqOy9D?-pwtEesB3E=1X`>T z`zio#39tc+OMii|?0|qaMiwAc4kRl;wMhbik3(Bsm}x6OwoyremK^|fR|cRpuzL+u zeH$zBD>ndUL#dGf)K-UlKche)>0YiFo|m;|0l7{A8iabsPkTti)d1^)PbH&oWCgVJ zlCe72+QdyAv}7d#2+kyg3_yYMX8?hAlmfn=j3aRf+kYae1L)a02!vFZP1S5Ew0lDI zNpiMBwfb#JhmF~#*NEV1O+e!gzAK(E(oqdRDOBaw8Fsv9eBk07F{c+fWo=S_G z5;0E3oqx%wGr@QRbzLA|m56bE9#6&(re8iEk7)go7MNuO%y^1Gd_I{@M#`Zl_Ob?s z_4wrDWIR1N{yc{6E|&s*BNxu=2xct#yhwZIAz)%K_LtF_YszIu9yyMILq=jr_7XInTz z!(3Pk`GaHR909S309(rt#6kgbKsd%xV*dVj2kyb8 zSVUfgpC#D{vH+>ot`|JIE26>m_GKj1t&NNaF`CQeVn(d~+N^f5_@LCS)nBJvArKjc zOPaOXFe>(_2EM$%C+D$T9!7k#I3@{HT|p(;Tzcf_{VfvKKp(QMh(WN;GLXFO)-{5; qFCzt#JufQfa^c-_I2UE}f5jh|J~46wuumTV0000OV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_jcYQvi$~X{WMxnz5D*YpL|DM6$mrDQh-{EVHh&fP{P_6z_&_{ZZex>> zgvfEV>{I{%00Cl4M@0Xn2lB-L00PHJL_t(|oSl?0Z__{+h7YN>l+nf&bK3raHh-W& zMwJ*USHeMTLBbas37C9eQmKs1W$V%;-Ya$NU*Q+P0&AIAkidN3-PyS~P6ocJahvzK z_kHhr4P*Z|bAQgWEt1PQXY-|$6W+dbB;}NJd<@&xFHpHwx|E^?AYG>T4KS9on@s~+ zdyVb@L~Ldh+Cb?@6dM4U&z5qm0l04J9i1?p8VkYP^%R%d30XT#Zc;Sqtda_9U&zV; zAY10lO=V3`J&{T>kK;G^;8O%(JX-+(w<)b3fN+q=Ab)4C0pv|pVG5IIi9o)9$xE33CQTkt7I2jKl3f={#GY z0V^oM$qJlgL4ZT=()v`+(1774M1<>+E;51U&IocO+yr+skMOjokfVV0F8v;dC$y2_>3YN zKyX;;y_18ZGyEI~PPgd2W6wt--`}p|9G$HJdrwz-uj?t|g$?u%HvlhuWf}OE-t){@ z$A55PC!AD3Q0tCoCmdIRS8wyeYpH;QG*jxSD#c2?yx`G+sZ#qy31qA)35{7*PsOS0jrfwDm jy5sp{0|=^@efAHjtf(08z+>wG0000~xsu delta 859 zcmV-h1El<;2l57xB!4haOjJdf(4c@|aM-}mcxX5X2ng`-@W`-OsF2BSV2PpKSFoP=76a!8!uy5ts)2URDZ+7U5@-a=(Ak} lR(!?`25EUt?gaHS@CV-9eAEM%-AMod002ovPDHLkV1nGTi7NmA diff --git a/graphics/pokemon/goodra/hisuian/front.png b/graphics/pokemon/goodra/hisuian/front.png old mode 100644 new mode 100755 index edd5e3c3abd5da6cdb9062eeb198351cab4f4b2b..1b53bfacf35c94104a2deaee0c196deaa464f67c GIT binary patch delta 973 zcmV;;12X)a2jd5jB!35VNliru=K}%`0W$G!ehL5p02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_h?Jj%dJfop zNx%aH!-%R<(X2KhdUtaKC=r^?J)*l1ZmBJl2%B@h?gBul1{4t*);ZR>4_j(|7$Lwm z);WieO#=Oy&9@yFA_V>@NPD=U&D{_KJj>>=Sq69)L4U;8SZy509y)Zv1vm0OGG_Zj zKr02wB!1tqf&2NAa2x{Vg4vcIDc68A^>;X=(5!PTM1+0;QQ-B{y zau8pgVt=*`T`Ns65ttI3#c^_(T%RS^vIjsqg9P^knC&OMtDECl1lYskUPo?I04f2Q z?IkxoLi&m5A$OSpGXrEUu2dy}PW~uNBn?Uzv$x$8=cJE4g5iUttZELy46EQbB8Dg; z@JZ1LfIW%`W~e~y_ca0^tYMD@N{vDG+KQ8^zkg4XpZIR40{g2#)ExxZ2%?TGQ_*3r zT>zIO_zmDguqy8m44|z7=#kS;5)5zvJemcJfE@%F5ZU-JFv1W4#--8$5MV%n=MN)f zePl)#f<6X-$MH|l#QOa&v~^s7r4&StFWz7==6=(Nl}#+|1byuA)_?-Eln!KJ?-PO@ zYJcD{!XB8vzZ{<^pt0C~3xB!4haOjJbxu;_qbaM-}mh=_;?2ng`-@W{x>sFtr*!CBZ1R5h-n+9-k);0=vNHOjDD!~|nPDDau8;vV%$Iw1<86%pu)f zAf@@FDMCun+LH?Rj(p}9m48E8gbDrK-hwQ5roWkTM^OXR4dJ+ZOF zLAAPvB8&T2o377DHdQo@cR*0xv#hdrRQIRgm6UcIRo62^P{rlzeh?I=n^0sG)KU&N zhci@P6H;Ffj)UnCGT_hT4gukLQacrZ#1GMR^K^L17=PZ!x*trZl+w`;4SaLM@DZ$k zki-%+4o+*{aUAe-hTPi;@XT7!@k?M4)Q<9sbm);~p(T+@%UxR?_e_Fzn&AjpQcsJM6xsJsyF= znPI#afSKK7?7rLpz7Mb6G7=-CNP{u7(Om}!~_qUCMlT0H3P za|GRPV-;W<^M&5Vm5^WPVxINL#pM`;;*4$tej~uQkx^(N5Jp&lr+q$Tjp1qPM(6Ch zm*@b%0o!C>BXE9mB6d&#?pPFf-1+U!c_?-e0aOr(9T3oFl)vYfxbo#BQ9zRE2wX)V zOnw&NfZj6JAJ`+1D8TP7#Xk@Fwu?hnW(wfl#2$D%2R3!V3BS!0z?+9XP+%q6oR>$D zdp82vxp_Y4OPn6T{5-zSDYY!@)SREk$DUezSm%KPX)SN@PaFTW%#W=oFWJsRGmI;Z b;6KM7{_(H7a9UX000000NkvXXu0mjfgc+s$ diff --git a/graphics/pokemon/goodra/hisuian/normal.pal b/graphics/pokemon/goodra/hisuian/normal.pal old mode 100644 new mode 100755 index 28da385cb..846d1b0e2 --- a/graphics/pokemon/goodra/hisuian/normal.pal +++ b/graphics/pokemon/goodra/hisuian/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 -128 96 112 -216 192 208 -136 136 136 -8 8 8 -240 240 240 -200 200 200 -168 152 168 -64 64 64 -176 176 176 -96 96 104 -136 104 168 -64 56 88 -168 152 192 -232 208 232 +152 208 160 +136 148 168 +192 204 224 +224 228 240 +80 96 112 16 16 16 +88 68 88 +192 168 200 +232 212 232 +136 108 144 +48 64 72 +248 252 248 +248 248 248 +64 60 88 +104 96 144 +144 132 200 diff --git a/graphics/pokemon/goodra/hisuian/shiny.pal b/graphics/pokemon/goodra/hisuian/shiny.pal old mode 100644 new mode 100755 index 73fd87e71..93612e407 --- a/graphics/pokemon/goodra/hisuian/shiny.pal +++ b/graphics/pokemon/goodra/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 96 112 -216 192 208 -120 104 56 -8 8 8 -240 240 240 -200 176 88 -168 152 168 -56 40 32 -160 136 72 -80 64 40 -136 104 168 -64 56 88 -168 152 192 -232 208 232 +141 107 50 +184 139 71 +215 166 100 +101 80 35 16 16 16 +88 68 88 +192 168 200 +232 212 232 +136 108 144 +68 54 21 +248 252 248 +248 248 248 +64 60 88 +110 99 147 +144 132 200 diff --git a/graphics/pokemon/growlithe/hisuian/back.png b/graphics/pokemon/growlithe/hisuian/back.png old mode 100644 new mode 100755 index 0ed279c6a54ab7fb6befb65c3c4eb30501480927..16dcaefc38463471f85b7b092cf95fbc715f0252 GIT binary patch delta 776 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 LNkvXXu0mjf;#Wb* diff --git a/graphics/pokemon/growlithe/hisuian/normal.pal b/graphics/pokemon/growlithe/hisuian/normal.pal old mode 100644 new mode 100755 index e6d97462b..da791d1d6 --- a/graphics/pokemon/growlithe/hisuian/normal.pal +++ b/graphics/pokemon/growlithe/hisuian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 72 88 -200 192 184 +88 72 64 +240 232 224 +208 208 200 +168 156 144 16 16 16 -120 104 128 -104 16 8 -248 80 48 -184 32 32 -160 144 160 -112 96 32 -208 128 112 -184 152 120 -224 200 160 -72 72 72 -0 0 0 -16 0 0 +184 176 168 +184 64 56 +120 48 8 +208 104 64 +112 84 56 +48 60 64 +192 160 120 +248 252 240 +232 208 176 +216 220 208 diff --git a/graphics/pokemon/growlithe/hisuian/shiny.pal b/graphics/pokemon/growlithe/hisuian/shiny.pal old mode 100644 new mode 100755 index 3406fee67..e61a65a7a --- a/graphics/pokemon/growlithe/hisuian/shiny.pal +++ b/graphics/pokemon/growlithe/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 104 96 -232 232 232 +88 72 64 +240 232 224 +208 208 200 +168 156 144 16 16 16 -160 152 144 -88 72 40 -232 184 128 -168 136 48 -208 200 192 -112 96 32 -208 128 112 -184 152 120 -224 200 160 -72 72 72 -0 0 0 -16 0 0 +184 176 168 +189 110 57 +120 48 8 +226 163 52 +112 84 56 +48 60 64 +192 160 120 +248 252 240 +232 208 176 +216 220 208 diff --git a/graphics/pokemon/sliggoo/hisuian/back.png b/graphics/pokemon/sliggoo/hisuian/back.png old mode 100644 new mode 100755 index ad4289b1b2c32ac4f7d7c5aabd3d94b49b89608b..276ac9915232a77b9df4f2faaab7e3694d4001ee GIT binary patch delta 575 zcmV-F0>J&=1lROV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_Wl3DcqQwvp5bfISka&oOd`GIQV1{8nNK8nznSW=<$jE?Pn5cljSTJA! z000@C+Gqd(00Cl4M@0Xn2lB-L00DeSL_t(|oTZd8Qo}G1MWxXNERzd(ZBhrDf;K@1 zpy2>egqjAol(s8oXb30p_>@R%S#iRyJemCVzx}(GR}$g^Nv(Af^HXC?79m!~DI-0b zErbgI04hRTM}H?0P(*~p$}Fj>3do3AX;lK`|0AlAaHYx;8-l=a?5;?_r=U|(Jv@;| z0pYu|Jtl_-rtp#l)Y1?bE)xf6uE$2Cxeby#x=R374B%=30cOqsa9^q*v#WCx0W!CC zxdoWj#I+p}(ih&h3q}KS^39GusML&`WeIXdS%6o;0Dn6O1PPRI)OHCVFW?2h9t!Ft z1F)`Na9pg_! zu)gmRd#(}SUIzs1#z%pByjM%WBk#*%0Z`^zKqIi_&!HTzHuonELA3qT4PJdqAm77W z{o(7}?>L52wWoyo#kvMHvhC*_ciA8G&q N002ovPDHLkV1iyq@DTt2 delta 581 zcmV-L0=oU!1l|OYB!4haOjJea;IM#TaPaW(*uc=Jn5YN{2zY2XNSIK_uvj=KAXvyy zpomDQn7}|dScqt-Xkch>WtA!b00HSqL_t(YiItQ)PQySDhLa)%g+&rlAyIf;(^y;y40)(W^=vZ#+SI%{izG5}P0sJp@$=m<*~T@jrIDj&F%02an4 zraO)J9vNeWdJFrIzdOlr9{?N7S|j0m2!L9>28{QqphVa0>bPBtngD*S zg9NHw>QFfyV40q@0SdF^WimzvrM{cQ_0l~;5UIymz<*&CUQpeF3*LUke*z(JY}-{b zh6ivGm^h$rB@oYf4siSjfK$ZZ(*v$aV07>Iuo?v5@PvVWS_^O-q9zLT9ysMQrS~Nei1bE=19H;Zjem~JTy&AtcL)JY<%DkS-~<@ T5;0aL00000NkvXXu0mjfB6#}; diff --git a/graphics/pokemon/sliggoo/hisuian/front.png b/graphics/pokemon/sliggoo/hisuian/front.png old mode 100644 new mode 100755 index 81322c48564d49365fa00d0417a205436082451f..3b9edc41cfba4c1c9a185f25ff35616f10150b9f GIT binary patch delta 642 zcmV-|0)73H1)BwsB!35VNliru=K}%`2o&<6K)wI~02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_U`SZNpui9i5a`(Gka&ndY+zuVkbr=INK8nmsDG%)$jE?Pn5cljSTJA! z0090QSJeOj00Cl4M@0Xn2lB-L00F;AL_t(|oaK};Zo)7Wh7(mCx-}7W>QX1_Oq&Hp zf{E0fo}dU0(18Q6m<*j`qzzMTJ6mX9x7$&u>dcbdVsapdWHl+jV<2@J+npY3i&s|FWI-m)!_u)b_u7)%i z4ROF6126#qo8#9&@Pq*YG&pkU_!$G#D$v0gokFeCBY&+2`go5jqd%adns3L3y$U8Z zn`Jhse~Zmf5F|hIP0|+KkPX0K6Rob0MzfPG!s!Av6mx5Sf%~+T&4fpaEd8k}|iLi=w6)@CATe`_%v> zthQU3%6pH85{NYbI*=Q=;~@&{US*bkMr8s!0z#3cGoGb9TowjQn_{((0VoY(b_}%D zr==yG+u|vgim2McFAA(J*Pm~uGvWNU=A;qgd cvVXX~0g;pKxGAvaB>(^b07*qoM6N<$f)-c>EC2ui delta 634 zcmV-=0)_pX1(OAkB!4haOjJea;IM#TaPaW(*uc=Jn5YN{2#AP?NSIK_$jCrIKv>97 zu&}VGn7}|dScqt-Xkci?+%swb00JIKL_t(YiS3g=Yui8=#^oV}Y!!;3g)UVHbah^d zEL}upx+cUYWcr6LK5R^;42EtgB)maOJ6Onset~`fqjGc#-GAin1=CLu@)`P`&Tb^- z&d{wxA27yxe)l|g?^%}hUw<$A;by<(KHUsDZlL@%cn^TX(g(MzZvbC?fp=&Cx+=$O zZ)%_bU+>=m`T_#VYR4F0^+E|8gZ>DVy(fXzp0QyK1g3@-^eEi%O$`zVY#X{pfELq? zpl7~O2ljUXdVi)pQpXF|g-*Bu*e3vtW3a5Y0*r&S+TiZ`bk`Aor*D|Z@b+6LplZKc|9U?T|{PwA%8WHvLs0~0G_j*So)VkA@aQ1 zv5i!Lc;g9;FpkB;Q1f=B`5aSf2oUyq&_*U(V_ZzOODJSmFe+J9C0q}nk#5#Pwa zS@@JTmvcU^{=c{Aw^$axZkLPiDPO4x@a5v|?d#&_+OKYb&dK>n(P!*U5$OSXd~y>_ z+2=c;{))*CCYSw)v;k#ADW(sgh(FOvQ>&>uao?{KI-dx})R3l3>#rD+(f(KU8|l{; UJwg0beE0x$i~1n32jB!35VNliru=K}%`6*sS{UC;mk02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_9Ehk*YH3JFNDvSZ-rh%f#o5f8C@3IEb(NL4ynnz{OKU(nQ1JBlcU&>+ z$y6+>Pj>(S00Cl4M@0Xn2lB-L00In2L_t(|oVAp(YQr!PhCLYCA><*1AvMj=7bt{s z5DaeeDjf{k;x$7jZ=zZI0;O9#gp#F1W4mVvWNVf{HmfJePAx~VvQ(4dKK=jsPIsPn z>7gzlbrGp}a(@8_7vPXUpk3lh2(fkn69;ghtrEKfZ3niL(pC=%v`Y9F0j(ZGmxL2g z9*N6iGSJ_g+ax5Rftby#CP*Y5&N(m^*wYx%_>(bU8Lq=GE4}!0VF%d$$zcIqf^?e17HD2?F6rBXwOk(RIV@|1NDrrgQK@SE7#_I+XbJzL2K2o;Q0@*R2@@zzJZcVV zd1#6F7&m%_Ksj@MWfBZb;5c)d=z|eg%cC58e}%WrR$o!7wu|<7#<^DYe6=tExqA{^ z3?X~LAc;BYH%vxUN<=tUIe#O7Jv9irfsvGm^xOujr?pyA-0~YhiAc|FQ1-NdbyX+q z#00iURL=cEKZ{;ktgAZ7^#`CA2N^C@$0(s`p-D>Cm4Asjln)Jth3Y94;ztOTNLRKh zIleYXQQ3!{B*uGP2LKrSJ;$+nen_Mu**6>aALkbwa57!WzDnN!0000qbO zv`{F4$au(Lw~nShMhtp|LLMgx1T=T;tMp2C5+}ZvGE_@`?tiCqu6*S~$gPXo0N+OV z$(;>|ZGc4r0JFp>Ns`b4#GVoGeV-a79^%*nP)dy+3NT8zHvvYE(k5XAv`1j`@QUVp znqm@)Xn;zrQ4=5nCrwi>M25HVL8})bxTqNp5CVI}8tOwpD%4_Z2ypUaeEn_pOB-)YXczn6+CE6 ztHVa_wm?h~Km|~+*+|L0q+DE?jG`!10TdiyH{Rs0+8vMUOr0~&PY8< z?->YW?Myu$c8-w5Dg!5aOksO1s26r5eAT1=zYO(E=Q&uOA6cmsCbjZjd3x&bJ35A9 zdq~>6yDwbDvCHR*D38HAQfCO-yHe`N=Q@~;$^2jI4*?_9vv9#{*Z=?k07*qoM6N<$ Ef-F(_%K!iX diff --git a/graphics/pokemon/sneasel/hisuian/front.png b/graphics/pokemon/sneasel/hisuian/front.png old mode 100644 new mode 100755 index 75e3872b15cc67b231ff9c701bcebf9c90cc710c..75f42547e2b1d43d8313f4d26c65fda59fd786d4 GIT binary patch delta 759 zcmV8F~a}=02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_z=#N#n8-*-NDvSZz$kF|+<0(IpeP_n*x2y6ynn!WY@k$1fbjJAP&9au zY`9O$HckKl00Cl4M@0Xn2lB-L00J{fL_t(|ob8k`ixWW<#~--G70cE_8W|QLl1?i@ zSi(r|^zQr&eglhx>2{kdf@`&;84|FuQMf`-xiDMAWl=+h2$vK#ffNVZ?ZR;oY%QR86o6S*CDAWfVTWCx_!6ORs{b_d~DFc z{xo1LPHU)fX{ayb^nDn|xKG{OCmTa22@#*ni-$_k+dfa}lK?`VGX-ZZ^wS3G zup1$Sp_oE86MB>K>k*1iJx6NARYy~8-sFdz^XB(pYQO&3yCHI(pg8?piTR*5gg)Ig z$cro09e>{c61Kl#xmT2K7|0E#f_5;3&%^EqM|QGl-~=KNq9ex>-e%pF<4cd;Cg2xU zrQ2;eh*stkJj~b6$~no(e6ZERxmo7tfw*1=j>Wv3$^yvM&I)h6MuQx~3W(e+*LJpX zvYbX$9hKB??yR*0Ad$mB4PW24RYG0r$h3~DsBot^K|6FvT)>IDUAI+s{ZD|s3n;g7 zM-z+k$yNZK)002ovPDHLkV1n|aT;Koz delta 658 zcmV;D0&V?|2C4;+B!4haOjJdf(4cr&uuw2)pm^9gC_tE)pb!uc*x2B>xWIs5prCj- z=)f>oIC${z_;`4D=r}+KFeHHh00K2hL_t(YiPe<9Z`wc<$6d?1xdw?j28kUmQdTM% zP^-`>M~KwH6mv8ZQJ27_dr~oU4!VkeAWHs%WF<&MZ$#PXRDZE$tGZR{^N(~m?%X*y z*qHB!@B8}QJ1pzvE;pAczjA3cOSkiszRuP?x|0EvXpvU*l2eNeXfdBRM5rG`236Os z7%C)y=eh;GP8h3M_U;=u7Z@Ti=KFTDTQKNW-xoqO&O(!Jg{X_cDKi0NBoC1ow@n6b zkL2`dDwxsXSbu)MlG8II;7ECWB@ZtcGt?kb-YunMMj)KYTPfwd9|Lx=xT65AN9 zF2dNsuTwXt5buA>9fGEvq`1sDLdl)!UCVyE5^{ILusX;0+?{N`NLTo?pd4n z=+>6)U(Ntf9KwPJ7Ab8FHW~V`4~zqkf7(^w0*Sc~fPZ@O^ik6a4s(EoMtIhJK76j-z?m)j4I8Eo=A|K#dAELY`PJ?J{;T`B|l&RRO;obQL3mstN zY2A%JIA5@tnu#h^X>yz$Apy6$rUG7xCXIK5z>#BLRl@6~{|5-*&~_&0YKC4Vtve8c zHNwtBjepT~({Gw$!~^o_LIsFheg=5djqPT33u%TiUhAx}1&|;GqI=(TG7uOgfbn=X z$FUt_8v`(i0jvM>hruER$hxHmNK(SGP9C)Y!8RoV(Hk_e&xYFZa-M{_0nuu$o*rvi s2J6P!^!f?VI9X*Sz{UTgzu@&3=G?%g93`~O01E&B07*qoM6N<$f@HBcF#rGn diff --git a/graphics/pokemon/sneasel/hisuian/normal.pal b/graphics/pokemon/sneasel/hisuian/normal.pal old mode 100644 new mode 100755 index 2e28acaac..47e254a81 --- a/graphics/pokemon/sneasel/hisuian/normal.pal +++ b/graphics/pokemon/sneasel/hisuian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 88 176 -80 48 104 -160 120 216 -56 40 64 -152 152 160 +192 136 8 +152 152 200 +72 72 72 16 16 16 -216 216 224 -184 184 192 -128 96 160 -160 120 56 -232 192 48 -88 56 120 -240 240 248 -120 120 120 -232 56 64 +192 40 112 +248 220 120 +112 76 160 +40 32 72 +216 216 240 +184 188 192 +120 108 160 +84 74 128 +240 244 248 +80 52 120 +144 108 184 diff --git a/graphics/pokemon/sneasel/hisuian/shiny.pal b/graphics/pokemon/sneasel/hisuian/shiny.pal old mode 100644 new mode 100755 index b57227c93..7d5988449 --- a/graphics/pokemon/sneasel/hisuian/shiny.pal +++ b/graphics/pokemon/sneasel/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -248 144 40 -168 72 16 -248 200 80 -32 24 32 -64 88 80 +28 136 168 +77 106 105 +72 72 72 16 16 16 -112 160 120 -88 128 104 -80 72 88 -64 112 224 -136 160 240 -48 40 48 -240 240 248 -120 120 120 -72 176 96 +222 222 71 +121 197 217 +204 155 40 +40 32 72 +117 149 149 +184 188 192 +84 75 107 +64 58 80 +240 244 248 +119 92 49 +235 201 84 diff --git a/graphics/pokemon/typhlosion/hisuian/back.png b/graphics/pokemon/typhlosion/hisuian/back.png index 0b491b9feb63b7b854ecaf0324510e41acd4dcd0..8e808ecf6b0e65d2105f4c86d3c87e1f8904fb6c 100755 GIT binary patch delta 779 zcmV+m1N8i)2lxh%D+vPv3LY15ISdbxG*W+{9LU)`=HN__+BP;pS(qpsNPuXlAwh7Y zi%S3h{}2!m)x~pYP$&QZ00000GNggJ00001VoOIv0Eh)0NB{r=oJmAMRCt`dl)rA< zFc8M2t$-JkO#%U)c+%D>s>Uvs_yQehq(z5jG5i`H0?_E3fpEO#0hBfgTxjl4R0e;t zbSPTCOYf*Z7Gujphu)yU_tW>?eWdJp|G9>Te`f4BzyNB(7d;99!=r%5K^zDCTA~+d zBz)*u0|DFW2mA&&GK8p`;$pTNu!0x2YN#j9;1=5TFOk=dx=30HLC1``#T4a(ZS%`l?pch7| z4^Li0BpIe%0}+Nn!24UZX|sqVttsU=l`=XH5in+T`#^v_6hA~j5|Bxm;2Z)0vwgF% zDGcc;)35>1rUGutGADl|5Xd3|tW79!RkKB6liRx>7)6n^K!S%7EX?oXS80LQ0579V z?f{A$0b`bbaywuOQPKf23($WMrl^9H7y%7eH6@*DEZRN-32l&cfHX`ISQfjK@W%?E z*U=$Cg(7cb#P`Px>qOQ*xQ1w6uRO+Qnu^J$oUen9du;(dZ#3Mmn8Pcr9U^uCpSOTM zsrth6yNJKm9U{X!I`X)q(E&8WJI9tD@Ae0?4xr~O(7F4MH_*@P4$gPGz@yuJcdb7s zy(3`XY%jiKUN3Nk$N2Mp+&?4Tl-0fCFnH#Gz@66*&`r6?9pG^vcyfUCKJerC5~eJR zUSLsuQe9$yO9DECyToE;Ez0tH(E}_^O_<^^V7{8B+%*2N{sObni2gVuErb97002ov JPDHLkV1mlVS7-nL delta 824 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 S7Io490000 Date: Thu, 2 Mar 2023 17:27:45 +0100 Subject: [PATCH 028/129] leftover --- graphics/pokemon/braviary/hisuian/back.png | Bin 1616 -> 835 bytes graphics/pokemon/braviary/hisuian/front.png | Bin 1831 -> 1069 bytes graphics/pokemon/braviary/hisuian/normal.pal | 266 +----------------- graphics/pokemon/braviary/hisuian/shiny.pal | 266 +----------------- .../typhlosion/hisuian/front_shiny.png | Bin 996 -> 0 bytes 5 files changed, 26 insertions(+), 506 deletions(-) delete mode 100755 graphics/pokemon/typhlosion/hisuian/front_shiny.png diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisuian/back.png index 211a5a04693bc752860fd9cdb55050a2fe0df53d..ff280fff64c57159cc3350a813897500359c18d2 100755 GIT binary patch delta 754 zcmVDfNl_nmw!MYXgW&hV(6z(2M-#0WGnbH+>>m{QWE+BN*@6S-p~L4 z|2^4GlK&MI$^X&=Y!VL1#m)IP5gY(o0TpkY@-24p=e9&Jf@w?ER*qq!45<5o9)(+kenN+cj|T5{unD zk^ri)-;N&lax)Jl5<*+EChxJq-y)Qt)}-(fy9E+a3UfCXqHYI?h1}iG!oIcwoVs1E z}E`00c&FWjIGv-bvAqQGaw-Pl;D=RnP;;vK?dEg%8tr< zBKvgvGBY`TvFviF1`N#BYI(j&yPg-l0y>6;%Ac*cu_O&?D<1gy|aMpxBVo&2LJx1GQeG+&;}s{|D8^a#hqQY2U-)Nwm_Pu z9-uCQInJWi4oC;U4`D?3VD)&l2SDO&5Yj>j6vpcD3Kd{#0e=D`P*bf6V}&8pbaHKh zNP;S8Yc&8ld3hvLbj@s=*f}1aMCCWSgE|QeBoOK(Xu&CWi*qQ79V(R3yN=?f}b!hHlwG zw{Mz#44{Ci154OT_or+?!;wH(0Q-c75sEVIW0WKkfaOsi^F|TXao-RD0-?j+9c+Nm k@~3N?1qA0B8U5?^0^m%T=g_71_y7O^07*qoM6N<$f@>>BmH+?% literal 1616 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!*h@TpUD=;AGx3@jo)8F*2MURo zxJHx&=ckpFCl;kLxcj&OjZr8|EmAPnGbwCc@(`$mqolyk9VlZAWHWd*XvzaAmUKs7 zM+SzC{oH>NSs56Z83KGlTxVQZAOHsLPWHN*Y6d0_QQ;ZJTW(gp`uy_WpLM@~C)iKB zu)yu}_3nfKg$GX_fXo{OqaiR{Lg1vU>lC107?Zr+UH&g+|8$grfoX}Si(^Q|oVQbN zZ(6J%;QCU`L{07a|NURC#4ueJmkKZ}e3rXvll&E@@0;>h6wB9M5k6pl>kLP8oZsd9 zGftXqnE3SRCEw|nIZ~K!hsZr~U~!t0yx`_0hsTPCJlU>Y-`?aYkS=k9mB(2v=HB$h z?laWvV*Hc@64)QySpHIm>D#|&Z&?d->@^%Wp8H($R=DDsz+CTC)k{sW)zaA>e8Mi% z>%K7L7`Vv<6>n#lu+wCHq5lT;1HY|Yeycp2b5gJS57)UvmpX3T*)CzQbk1qDHlgHA zXRh+M88fMzH9Z<9w1@q(Mf0=3c5D7arRUDhC|^54ca7Aid2-iU1=xhwx!hn-c)orU z-djF;>G22Qu#;$N(}=zk=q#*rU2+Y$p$dRlI}ztYd`(QApj z64ycx1U1fkar)A`6`T*scI%#=RnT+c;HO}*y4v329lGCtZ%RwJ-FfYP%;#99GtM04 z*SID+e~>btR?jrq!I^R6lIx+PY~+#~QZp?TuFdm@=X#GqQes@pEsPPt1nQ+z2O! zX-b>wFCR7&Vs!BBWRPn7cFE{~FE7u7RLO_ZG-n@L9b2OE?LXd6YmK}fCH|#vTHU9O5<^@+4GFVOWiGAJ9%h1g9tB$wp z`{uWqpOgFKni>8G9ynR&lD#a+Vol&8{wMY946pb(y>(x>)I}-eaIjT8m$&3Pc*0Zc zm|@5v!2^FHoibHerU=dbl)=3_VBW`9?y4Ab-n-iF~h0tQvGlCOn^pu BmSX?_ diff --git a/graphics/pokemon/braviary/hisuian/front.png b/graphics/pokemon/braviary/hisuian/front.png index 866ffcb069e701318a22686cdaf2146916e4c319..299793975e549661d34ac356df2ead3ebaa1217f 100755 GIT binary patch delta 990 zcmV<410npU4y_1~7#sux00013M{Ml?000McNliru=K}%|5i7}mO5u?-Nq+z^P)t-s zn9!iOoDfjFpkPoS5D*ZMJfNU3FzD1+keImS=HRGgxG*$8Xk1XZu&7v6XaE2J)RP4k z00001VoOIv0Eh)0NB{r>QAtEWRCt_)ls{|RKp4gkq6{Tkj0GLKWeVwJQraO9&gnrY zjx-buwV~bGy)=-$Q$N6ExPQc2N(JShP^gxoR%GxZIB(a%L^su&s6IpAJN=K{^u>;S zd477HyZ5~Wq5sz$|4X?pJ`#%Ujf_poS4o8C5{HZaI!6t9j2h-tzqfSs-Z3G*3a)L5M|mKu{zfGKRg`hObGCY=Cf4CV${ zYDTBD0<=EEf||urGc!gPxD((D!3qGX3nZ*6+yFkCDcm+t%`VGQU4WIxte1Wbv=T&X zt=0iyPEoGGKwY;1Ux`iz0I9sS1y;6S6bXxUplYrrR7zEfyL)WrC)hkqX0EygkY+l9 zCM+p{I$_@Eww?IUN`F_#0$3VgcHIomxcVuTMS>r72~nB4vYc*Q5_RjvOuNz)<_RnR zCeEWMB7{_pn;D&{#Kq<^#yQlgK0tAOOkWfhpo2l4g}AlD>f~Yp7ua7KgIY()ucmXZ z4v4x2D7lDeHZmu$|w+yC}X@9`jbR6hw%$9L1+JYAOdEC-9F!4F(VBwFha-)Z*LNpP4I=SGx`+TBEc9q9ke`fAu2|VZ1V7klq z1Epjh=c~*M30zNTtte)-z0di_51;q>OG$KtNO&rhGDtbi7o6|z?eTG{JPp8<7Oo*w zInC#g@IDy(%72x5ivautU;%enCB|a=(`z2QV*Wys81yiTen3VF`ka{KZV%rC$MGK~ zNu+B8Z@mf7t8Sb;o*c)^nM9+gtoZ_n`k%qp`ThRGl}ib-Dq@}jARFM^8DL8y%c>$= z={A4L=*junz(EM3m_*^o03o*E7_tV2j)o78KnsZh5Px#hMP;#dW=?Z(-Ul&6RsmQl zb*l_gVDEaK29THQpNL4SJ#=(3`qp=%2qP=YMq&M2UDnDYy(3U8au|D^M@!(TbI^ML zyFYpBbT3p{UO4Ox;4mkLLvoa7>j1QI*n5O_GLK~a{OdZP&oLO`os}2N(a%9hH5tdd_CO<_7p~VC&m|fTGWLMRX1R0*y?sC?7u}&;S4c M07*qoM6N<$g7DzPYXATM literal 1831 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!*h@TpUD=;AGx3`8rRVx91BJv( zTq8w`x7}cIGjv*Cu z)`mAuTdcri!nmqBd*}cE*Q4|%H#A+Cx7T*w*04DzQ-nU0&iZ#;;n{h^v;5B;9OW-e zNaoJH*y@-!VfPvqMPpt`6XPA(Jl6LEy7Z#CS|1|t#XF1b;Z|%;W!|w}%Bc~RVBT;FnDp~8Gq&T`D~gQzNxHcRRinLndwzPf8#F|t49Bml$rrA&37?!}e@oeBBpIaX4 z9QQ6WFI;|nS&;&RZw<%96|?tpl$vQSd?C8|)9Z=yCv!D-PEqs<+7!x^Sa7mML2}~u zT%VKT6ECR>6&IgZuGU(rnffDY2}6AR{tvdv!AFdCOue_cv3lFxThp|!+G{*(-M@9p zXWqTd;>yJu1z}8DJd*d;JfC^}{rl8s`izNB8Taw$sfzqqDf{kY^*>&we)G*|!gwk@ z0{^_2+bsD0``3ML2aT)KZ~gFTXwc7c3fT-%Bi8C5!`S}{$jQ%{w2g(_bh5lLdVUzktKZCuFj}wn=T=%MJ>g2^a+BSFm*jQGiP7%5G z#;RL!()sSc843ytf24|ikMtcVk}Qpl5n7-g5Mj-7R@1|6`iE4PiWArTA51uP;Kb=4 z3WA#@GMP>$>|MQeI;X(aYnvCHwEvZVi|w)L`bqV&+q~)xk~-{#1rD8O*^~SCCI9mL Vc;;F4A7w!0i>Irf%Q~loCIBx7_&xvt diff --git a/graphics/pokemon/braviary/hisuian/normal.pal b/graphics/pokemon/braviary/hisuian/normal.pal index 39a94fb7f..eb38d4ca3 100755 --- a/graphics/pokemon/braviary/hisuian/normal.pal +++ b/graphics/pokemon/braviary/hisuian/normal.pal @@ -1,259 +1,19 @@ JASC-PAL 0100 -256 +16 152 208 160 -104 92 80 -16 16 16 -232 232 224 -184 176 168 -48 52 64 -88 84 104 -144 60 160 -168 100 184 -80 188 160 -144 152 184 -160 48 48 184 156 16 -232 212 88 +80 188 160 96 80 32 -224 228 224 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +16 16 16 +144 60 160 +160 48 48 +232 212 88 +144 152 184 +228 230 224 +168 100 184 +48 52 64 +104 92 80 +184 176 168 +88 84 104 0 0 0 diff --git a/graphics/pokemon/braviary/hisuian/shiny.pal b/graphics/pokemon/braviary/hisuian/shiny.pal index 84e987d34..99c13ba68 100755 --- a/graphics/pokemon/braviary/hisuian/shiny.pal +++ b/graphics/pokemon/braviary/hisuian/shiny.pal @@ -1,259 +1,19 @@ JASC-PAL 0100 -256 +16 152 208 160 -16 16 16 -16 16 16 -71 66 63 -45 41 38 -48 52 64 -90 87 104 -51 180 217 -122 234 243 -233 254 252 -174 251 251 -96 63 150 208 160 70 +233 254 252 +103 74 27 +16 16 16 +51 180 217 +96 63 150 243 215 139 -96 80 32 -224 228 224 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +174 251 251 +71 66 63 +122 234 243 +48 52 64 +30 28 26 +45 41 38 +88 84 104 0 0 0 diff --git a/graphics/pokemon/typhlosion/hisuian/front_shiny.png b/graphics/pokemon/typhlosion/hisuian/front_shiny.png deleted file mode 100755 index e5cf7e835d00b49d6090902be7ddc23caf0b279b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 996 zcmVF< z2@@mcWjL+?000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP=^Bm&4 zj)}0Qfw5B|o=?h^nLjIIfl|8f`(@ut0YhEm6y<0T1Q&JRhY48ZpiJ1R<_>>c z4TPXN1L&FXX^AXXKp^xQUA8Dg4{XZ7IlWxylop`{QMNn)pvC$7CE#LgssO#a=A6#~ z;ZY4aIOp_G04GA<0}HOwAQv3n?&mp=D4zjf!IaNrj`Ggu5$BIb5q(Ubm^dzS3`fwu z0~a8-=@Pyt$Aq>x@BV4=v{Il#%C2m4tJ4L!^8xg>Er4B2)IH*96320W)aGr6(l-^m zx_;{87~YJj^|I~SbdT7_`v29d7tS{yW?)KBH9A7Y;_jYjha!ufPA?RF&&DVGX#-Fg zzuO@;9r3PsY~)8Wz~O1ExyUOzzsmpx6-Zn3HUm-A%(M_DqwwS0>u7KZL|q2P zJUzHK@vOs80IXg=T>{%e4xf7{h9*gp2%yoBkN3UMQ*;V?@*RM~V>zw+xjrX;#9vrL z-lHE4ZV|%Q_T?}8>)p;9 S7Io490000 Date: Thu, 2 Mar 2023 18:04:12 +0100 Subject: [PATCH 029/129] small braviary sprite fix --- graphics/pokemon/braviary/hisuian/back.png | Bin 835 -> 11612 bytes graphics/pokemon/braviary/hisuian/front.png | Bin 1069 -> 15390 bytes graphics/pokemon/braviary/hisuian/icon.png | Bin graphics/pokemon/braviary/hisuian/normal.pal | 2 +- graphics/pokemon/braviary/hisuian/shiny.pal | 2 +- 5 files changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/icon.png diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisuian/back.png index ff280fff64c57159cc3350a813897500359c18d2..947bc46aeb3bf10ab616a52ddc1f17892e0fb01f 100755 GIT binary patch literal 11612 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 Date: Sun, 5 Mar 2023 17:17:39 -0300 Subject: [PATCH 030/129] Review changes --- charmap.txt | 2 +- data/maps/Route111/scripts.inc | 2 +- include/constants/songs.h | 4 ++-- src/overworld.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/charmap.txt b/charmap.txt index 8c886bdf0..477448c9c 100644 --- a/charmap.txt +++ b/charmap.txt @@ -795,7 +795,7 @@ MUS_LITTLEROOT = 95 01 MUS_MT_CHIMNEY = 96 01 MUS_ENCOUNTER_FEMALE = 97 01 MUS_LILYCOVE = 98 01 -MUS_ROUTE111_DESERT = 99 01 +MUS_DESERT = 99 01 MUS_HELP = 9A 01 MUS_UNDERWATER = 9B 01 MUS_VICTORY_TRAINER = 9C 01 diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc index 44372da37..7335d0e1c 100644 --- a/data/maps/Route111/scripts.inc +++ b/data/maps/Route111/scripts.inc @@ -260,7 +260,7 @@ Route111_EventScript_SunTrigger:: Route111_EventScript_SandstormTrigger:: setweather WEATHER_SANDSTORM - fadenewbgm MUS_ROUTE111_DESERT + fadenewbgm MUS_DESERT doweather end diff --git a/include/constants/songs.h b/include/constants/songs.h index ffa5c3df0..ab6ddd62b 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -337,7 +337,7 @@ #define MUS_MT_CHIMNEY 406 // MUS_TOZAN // Also used in Desert Underpass, Mirage Tower, Seafloor Cavern and Sky Pillar. #define MUS_ENCOUNTER_FEMALE 407 // MUS_GIRLEYE #define MUS_LILYCOVE 408 // MUS_MINAMO // Also used in Pacifidlog Town and the Diving Treasure Hunter's house. -#define MUS_ROUTE111_DESERT 409 // MUS_ASHROAD +#define MUS_DESERT 409 // MUS_ASHROAD #define MUS_HELP 410 // MUS_EVENT0 #define MUS_UNDERWATER 411 // MUS_DEEPDEEP #define MUS_VICTORY_TRAINER 412 // MUS_KACHI1 @@ -372,7 +372,7 @@ #define MUS_ENCOUNTER_MAGMA 441 // MUS_MGM0 #define MUS_INTRO_BATTLE 442 // MUS_T_BATTLE #define MUS_ABNORMAL_WEATHER 443 // MUS_OOAME // Replaces MUS_WEATHER_KYOGRE from R/S. -#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI // Unused from R/S. +#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI // Unused, from R/S. #define MUS_SOOTOPOLIS 445 // MUS_RUNECITY #define MUS_CONTEST_RESULTS 446 // MUS_CON_K #define MUS_HALL_OF_FAME_ROOM 447 // MUS_EIKOU_R diff --git a/src/overworld.c b/src/overworld.c index c9258e05e..4f7cccdff 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1104,7 +1104,7 @@ u16 GetCurrLocationDefaultMusic(void) if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE111) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE111) && GetSavedWeather() == WEATHER_SANDSTORM) - return MUS_ROUTE111_DESERT; + return MUS_DESERT; music = GetLocationMusic(&gSaveBlock1Ptr->location); if (music != MUS_ROUTE118) From dbf757be886736e6a0f8f813cc8c0a544124a287 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 8 Mar 2023 11:07:44 -0500 Subject: [PATCH 031/129] Treat map data as const --- include/field_control_avatar.h | 2 +- include/fieldmap.h | 4 ++-- include/global.fieldmap.h | 22 +++++++++++----------- src/event_object_movement.c | 24 ++++++++++++------------ src/field_control_avatar.c | 24 ++++++++++++------------ src/fieldmap.c | 32 ++++++++++++++++---------------- src/item_use.c | 6 +++--- src/overworld.c | 6 +++--- src/trainer_hill.c | 3 ++- 9 files changed, 62 insertions(+), 61 deletions(-) diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index e02fcd5af..b259eb53c 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -32,7 +32,7 @@ bool8 TryDoDiveWarp(struct MapPosition *position, u16 b); int SetCableClubWarp(void); u8 TrySetDiveWarp(void); const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction); -u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); +const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); void ClearPoisonStepCounter(void); #endif // GUARD_FIELDCONTROLAVATAR_H diff --git a/include/fieldmap.h b/include/fieldmap.h index f2dbefae8..47072bd1b 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -48,8 +48,8 @@ void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout); void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout); void CopyPrimaryTilesetToVram(const struct MapLayout *); void CopySecondaryTilesetToVram(const struct MapLayout *); -struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection); -struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y); +const struct MapHeader *const GetMapHeaderFromConnection(const struct MapConnection *connection); +const struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y); void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable); // field_region_map.c diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index d8fea5b23..7461929c3 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -50,10 +50,10 @@ struct MapLayout { /*0x00*/ s32 width; /*0x04*/ s32 height; - /*0x08*/ u16 *border; - /*0x0C*/ u16 *map; - /*0x10*/ struct Tileset *primaryTileset; - /*0x14*/ struct Tileset *secondaryTileset; + /*0x08*/ const u16 *border; + /*0x0C*/ const u16 *map; + /*0x10*/ const struct Tileset *primaryTileset; + /*0x14*/ const struct Tileset *secondaryTileset; }; struct BackupMapLayout @@ -98,7 +98,7 @@ struct CoordEvent u8 elevation; u16 trigger; u16 index; - u8 *script; + const u8 *script; }; struct BgEvent @@ -107,7 +107,7 @@ struct BgEvent u8 elevation; u8 kind; // The "kind" field determines how to access bgUnion union below. union { - u8 *script; + const u8 *script; struct { u16 item; u16 hiddenItemId; @@ -122,10 +122,10 @@ struct MapEvents u8 warpCount; u8 coordEventCount; u8 bgEventCount; - struct ObjectEventTemplate *objectEvents; - struct WarpEvent *warps; - struct CoordEvent *coordEvents; - struct BgEvent *bgEvents; + const struct ObjectEventTemplate *objectEvents; + const struct WarpEvent *warps; + const struct CoordEvent *coordEvents; + const struct BgEvent *bgEvents; }; struct MapConnection @@ -139,7 +139,7 @@ struct MapConnection struct MapConnections { s32 count; - struct MapConnection *connections; + const struct MapConnection *connections; }; struct MapHeader diff --git a/src/event_object_movement.c b/src/event_object_movement.c index be0c4ce26..3025e0849 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -131,9 +131,9 @@ static void SetObjectEventDynamicGraphicsId(struct ObjectEvent *); static void RemoveObjectEventInternal(struct ObjectEvent *); static u16 GetObjectEventFlagIdByObjectEventId(u8); static void UpdateObjectEventVisibility(struct ObjectEvent *, struct Sprite *); -static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); +static void MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); static void GetObjectEventMovingCameraOffset(s16 *, s16 *); -static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); +static const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); static void LoadObjectEventPalette(u16); static void RemoveObjectEventIfOutsideView(struct ObjectEvent *); static void SpawnObjectEventOnReturnToField(u8, s16, s16); @@ -147,7 +147,7 @@ static void SpriteCB_CameraObject(struct Sprite *); static void CameraObject_0(struct Sprite *); static void CameraObject_1(struct Sprite *); static void CameraObject_2(struct Sprite *); -static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, struct ObjectEventTemplate *, u8); +static const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, const struct ObjectEventTemplate *, u8); static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *); static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8); static void SetSpriteDataForNormalStep(struct Sprite *, u8, u8); @@ -1267,7 +1267,7 @@ static u8 GetObjectEventIdByLocalId(u8 localId) return OBJECT_EVENTS_COUNT; } -static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, u8 mapNum, u8 mapGroup) +static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *template, u8 mapNum, u8 mapGroup) { struct ObjectEvent *objectEvent; u8 objectEventId; @@ -1398,7 +1398,7 @@ void RemoveAllObjectEventsExceptPlayer(void) } } -static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) +static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { u8 spriteId; u8 paletteSlot; @@ -1458,7 +1458,7 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl return objectEventId; } -static u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) +static u8 TrySpawnObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { u8 objectEventId; struct SpriteTemplate spriteTemplate; @@ -1512,7 +1512,7 @@ u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 l u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup) { - struct ObjectEventTemplate *objectEventTemplate; + const struct ObjectEventTemplate *objectEventTemplate; s16 cameraX, cameraY; objectEventTemplate = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup); @@ -1542,7 +1542,7 @@ static void CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(u16 graphics CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, sMovementTypeCallbacks[movementType], spriteTemplate, subspriteTables); } -static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) +static void MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) { CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEventTemplate->graphicsId, objectEventTemplate->movementType, spriteTemplate, subspriteTables); } @@ -2374,7 +2374,7 @@ const u8 *GetObjectEventScriptPointerByObjectEventId(u8 objectEventId) static u16 GetObjectEventFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { - struct ObjectEventTemplate *obj = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup); + const struct ObjectEventTemplate *obj = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup); #ifdef UBFIX // BUG: The function may return NULL, and attempting to read from NULL may freeze the game using modern compilers. if (obj == NULL) @@ -2421,9 +2421,9 @@ u8 GetObjectEventBerryTreeId(u8 objectEventId) return gObjectEvents[objectEventId].trainerRange_berryTreeId; } -static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +static const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { - struct ObjectEventTemplate *templates; + const struct ObjectEventTemplate *templates; const struct MapHeader *mapHeader; u8 count; @@ -2441,7 +2441,7 @@ static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 loca return FindObjectEventTemplateByLocalId(localId, templates, count); } -static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, struct ObjectEventTemplate *templates, u8 count) +static const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, const struct ObjectEventTemplate *templates, u8 count) { u8 i; diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 9c526f0f7..3a0c97e8c 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -60,8 +60,8 @@ static s8 GetWarpEventAtMapPosition(struct MapHeader *, struct MapPosition *); static void SetupWarp(struct MapHeader *, s8, struct MapPosition *); static bool8 TryDoorWarp(struct MapPosition *, u16, u8); static s8 GetWarpEventAtPosition(struct MapHeader *, u16, u16, u8); -static u8 *GetCoordEventScriptAtPosition(struct MapHeader *, u16, u16, u8); -static struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *, u16, u16, u8); +static const u8 *GetCoordEventScriptAtPosition(struct MapHeader *, u16, u16, u8); +static const struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *, u16, u16, u8); static bool8 TryStartCoordEventScript(struct MapPosition *); static bool8 TryStartWarpEventScript(struct MapPosition *, u16); static bool8 TryStartMiscWalkingScripts(u16); @@ -315,7 +315,7 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8 static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position, u8 metatileBehavior, u8 direction) { - struct BgEvent *bgEvent = GetBackgroundEventAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); + const struct BgEvent *bgEvent = GetBackgroundEventAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); if (bgEvent == NULL) return NULL; @@ -497,7 +497,7 @@ static bool8 TryStartStepBasedScript(struct MapPosition *position, u16 metatileB static bool8 TryStartCoordEventScript(struct MapPosition *position) { - u8 *script = GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); + const u8 *script = GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); if (script == NULL) return FALSE; @@ -861,7 +861,7 @@ static bool8 TryDoorWarp(struct MapPosition *position, u16 metatileBehavior, u8 static s8 GetWarpEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) { s32 i; - struct WarpEvent *warpEvent = mapHeader->events->warps; + const struct WarpEvent *warpEvent = mapHeader->events->warps; u8 warpCount = mapHeader->events->warpCount; for (i = 0; i < warpCount; i++, warpEvent++) @@ -875,7 +875,7 @@ static s8 GetWarpEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 e return WARP_ID_NONE; } -static u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent) +static const u8 *TryRunCoordEventScript(const struct CoordEvent *coordEvent) { if (coordEvent != NULL) { @@ -895,10 +895,10 @@ static u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent) return NULL; } -static u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) +static const u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) { s32 i; - struct CoordEvent *coordEvents = mapHeader->events->coordEvents; + const struct CoordEvent *coordEvents = mapHeader->events->coordEvents; u8 coordEventCount = mapHeader->events->coordEventCount; for (i = 0; i < coordEventCount; i++) @@ -907,7 +907,7 @@ static u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 { if (coordEvents[i].elevation == elevation || coordEvents[i].elevation == 0) { - u8 *script = TryRunCoordEventScript(&coordEvents[i]); + const u8 *script = TryRunCoordEventScript(&coordEvents[i]); if (script != NULL) return script; } @@ -916,15 +916,15 @@ static u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 return NULL; } -u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position) +const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position) { return GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); } -static struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) +static const struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) { u8 i; - struct BgEvent *bgEvents = mapHeader->events->bgEvents; + const struct BgEvent *bgEvents = mapHeader->events->bgEvents; u8 bgEventCount = mapHeader->events->bgEventCount; for (i = 0; i < bgEventCount; i++) diff --git a/src/fieldmap.c b/src/fieldmap.c index 89d6b602c..df4db47b5 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -36,7 +36,7 @@ struct BackupMapLayout gBackupMapLayout; static const struct ConnectionFlags sDummyConnectionFlags = {0}; static void InitMapLayoutData(struct MapHeader *mapHeader); -static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height); +static void InitBackupMapLayoutData(const u16 *map, u16 width, u16 height); static void FillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); static void FillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); static void FillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); @@ -44,14 +44,14 @@ static void FillEastConnection(struct MapHeader const *mapHeader, struct MapHead static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader); static void LoadSavedMapView(void); static bool8 SkipCopyingMetatileFromSavedMap(u16 *mapBlock, u16 mapWidth, u8 yMode); -static struct MapConnection *GetIncomingConnection(u8 direction, int x, int y); -static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, struct MapConnection *connection); +static const struct MapConnection *GetIncomingConnection(u8 direction, int x, int y); +static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, const struct MapConnection *connection); static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, int offset); #define GetBorderBlockAt(x, y)({ \ u16 block; \ int i; \ - u16 *border = gMapHeader.mapLayout->border; \ + const u16 *border = gMapHeader.mapLayout->border; /* Unused, they read it again below */ \ \ i = (x + 1) & 1; \ i += ((y + 1) & 1) * 2; \ @@ -63,7 +63,7 @@ static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, #define GetMapGridBlockAt(x, y) (AreCoordsWithinMapGridBounds(x, y) ? gBackupMapLayout.map[x + gBackupMapLayout.width * y] : GetBorderBlockAt(x, y)) -struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection) +const struct MapHeader *const GetMapHeaderFromConnection(const struct MapConnection *connection) { return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum); } @@ -116,7 +116,7 @@ static void InitMapLayoutData(struct MapHeader *mapHeader) } } -static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height) +static void InitBackupMapLayoutData(const u16 *map, u16 width, u16 height) { u16 *dest; int y; @@ -133,7 +133,7 @@ static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height) static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) { int count; - struct MapConnection *connection; + const struct MapConnection *connection; int i; if (mapHeader->connections) @@ -171,7 +171,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) static void FillConnection(int x, int y, struct MapHeader const *connectedMapHeader, int x2, int y2, int width, int height) { int i; - u16 *src; + const u16 *src; u16 *dest; int mapWidth; @@ -619,7 +619,7 @@ bool32 CanCameraMoveInDirection(int direction) return TRUE; } -static void SetPositionFromConnection(struct MapConnection *connection, int direction, int x, int y) +static void SetPositionFromConnection(const struct MapConnection *connection, int direction, int x, int y) { struct MapHeader const *mapHeader; mapHeader = GetMapHeaderFromConnection(connection); @@ -647,7 +647,7 @@ static void SetPositionFromConnection(struct MapConnection *connection, int dire bool8 CameraMove(int x, int y) { int direction; - struct MapConnection *connection; + const struct MapConnection *connection; int old_x, old_y; gCamera.active = FALSE; direction = GetPostCameraMoveMapBorderId(x, y); @@ -675,11 +675,11 @@ bool8 CameraMove(int x, int y) return gCamera.active; } -static struct MapConnection *GetIncomingConnection(u8 direction, int x, int y) +static const struct MapConnection *GetIncomingConnection(u8 direction, int x, int y) { int count; int i; - struct MapConnection *connection; + const struct MapConnection *connection; const struct MapConnections *connections = gMapHeader.connections; #ifdef UBFIX // UB: Multiple possible null dereferences @@ -696,7 +696,7 @@ static struct MapConnection *GetIncomingConnection(u8 direction, int x, int y) return NULL; } -static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, struct MapConnection *connection) +static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, const struct MapConnection *connection) { struct MapHeader const *mapHeader; mapHeader = GetMapHeaderFromConnection(connection); @@ -737,7 +737,7 @@ static int IsCoordInConnectingMap(int coord, int max) return FALSE; } -static int IsPosInConnectingMap(struct MapConnection *connection, int x, int y) +static int IsPosInConnectingMap(const struct MapConnection *connection, int x, int y) { struct MapHeader const *mapHeader; mapHeader = GetMapHeaderFromConnection(connection); @@ -753,10 +753,10 @@ static int IsPosInConnectingMap(struct MapConnection *connection, int x, int y) return FALSE; } -struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y) +const struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y) { int count; - struct MapConnection *connection; + const struct MapConnection *connection; int i; u8 direction; if (!gMapHeader.connections) diff --git a/src/item_use.c b/src/item_use.c index 41e888496..8a0282717 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -375,7 +375,7 @@ static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 ta static bool8 IsHiddenItemPresentAtCoords(const struct MapEvents *events, s16 x, s16 y) { u8 bgEventCount = events->bgEventCount; - struct BgEvent *bgEvent = events->bgEvents; + const struct BgEvent *bgEvent = events->bgEvents; int i; for (i = 0; i < bgEventCount; i++) @@ -391,7 +391,7 @@ static bool8 IsHiddenItemPresentAtCoords(const struct MapEvents *events, s16 x, return FALSE; } -static bool8 IsHiddenItemPresentInConnection(struct MapConnection *connection, int x, int y) +static bool8 IsHiddenItemPresentInConnection(const struct MapConnection *connection, int x, int y) { u16 localX, localY; @@ -456,7 +456,7 @@ static void CheckForHiddenItemsInMapConnection(u8 taskId) || var2 > y || y >= height) { - struct MapConnection *conn = GetMapConnectionAtPos(x, y); + const struct MapConnection *conn = GetMapConnectionAtPos(x, y); if (conn && IsHiddenItemPresentInConnection(conn, x, y) == TRUE) SetDistanceOfClosestHiddenItem(taskId, x - playerX, y - playerY); } diff --git a/src/overworld.c b/src/overworld.c index 4f7cccdff..70b102fd2 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -156,7 +156,7 @@ static void InitMenuBasedScript(const u8 *); static void LoadCableClubPlayer(s32, s32, struct CableClubPlayer *); static bool32 IsCableClubPlayerUnfrozen(struct CableClubPlayer *); static bool32 CanCableClubPlayerPressStart(struct CableClubPlayer *); -static u8 *TryGetTileEventScript(struct CableClubPlayer *); +static const u8 *TryGetTileEventScript(struct CableClubPlayer *); static bool32 PlayerIsAtSouthExit(struct CableClubPlayer *); static const u8 *TryInteractWithPlayer(struct CableClubPlayer *); static u16 KeyInterCB_DeferToRecvQueue(u32); @@ -482,7 +482,7 @@ void LoadObjEventTemplatesFromHeader(void) void LoadSaveblockObjEventScripts(void) { - struct ObjectEventTemplate *mapHeaderObjTemplates = gMapHeader.events->objectEvents; + const struct ObjectEventTemplate *mapHeaderObjTemplates = gMapHeader.events->objectEvents; struct ObjectEventTemplate *savObjTemplates = gSaveBlock1Ptr->objectEventTemplates; s32 i; @@ -2714,7 +2714,7 @@ static bool32 CanCableClubPlayerPressStart(struct CableClubPlayer *player) return FALSE; } -static u8 *TryGetTileEventScript(struct CableClubPlayer *player) +static const u8 *TryGetTileEventScript(struct CableClubPlayer *player) { if (player->movementMode != MOVEMENT_MODE_SCRIPTED) return FACING_NONE; diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 528ee18a4..a74270ec7 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -685,7 +685,8 @@ static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 floorWidth) // floo void GenerateTrainerHillFloorLayout(u16 *mapArg) { s32 y, x; - u16 *src, *dst; + const u16 *src; + u16 *dst; u8 mapId = GetCurrentTrainerHillMapId(); if (mapId == TRAINER_HILL_ENTRANCE) From d695c76881d10423427b6b82856b43fd99036618 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 8 Mar 2023 22:11:28 +0100 Subject: [PATCH 032/129] test for assist and removed assist array from battle struct --- include/battle.h | 1 - src/battle_script_commands.c | 47 ++++++++++++++++++++---------------- test/move_effect_assist.c | 22 +++++++++++++++++ test/test_runner_battle.c | 1 + 4 files changed, 49 insertions(+), 22 deletions(-) create mode 100644 test/move_effect_assist.c diff --git a/include/battle.h b/include/battle.h index a43fc65cd..491273b80 100644 --- a/include/battle.h +++ b/include/battle.h @@ -534,7 +534,6 @@ struct BattleStruct u8 wildVictorySong; u8 dynamicMoveType; u8 wrappedBy[MAX_BATTLERS_COUNT]; - u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // Each of mons can know max 4 moves. u8 focusPunchBattlerId; u8 battlerPreventingSwitchout; u8 moneyMultiplier:6; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd..bd1b248b2 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -23,6 +23,7 @@ #include "main.h" #include "palette.h" #include "money.h" +#include "malloc.h" #include "bg.h" #include "string_util.h" #include "pokemon_icon.h" @@ -14766,38 +14767,40 @@ static void Cmd_assistattackselect(void) s32 chooseableMovesNo = 0; struct Pokemon *party; s32 monId, moveId; - u16 *validMoves = gBattleStruct->assistPossibleMoves; + u16 *validMoves = Alloc(sizeof(u16) * PARTY_SIZE * MAX_MON_MOVES); - if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER) - party = gEnemyParty; - else - party = gPlayerParty; - - for (monId = 0; monId < PARTY_SIZE; monId++) + if (validMoves != NULL) { - if (monId == gBattlerPartyIndexes[gBattlerAttacker]) - continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) - continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) - continue; + if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER) + party = gEnemyParty; + else + party = gPlayerParty; - for (moveId = 0; moveId < MAX_MON_MOVES; moveId++) + for (monId = 0; monId < PARTY_SIZE; monId++) { - s32 i = 0; - u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId); - - if (sForbiddenMoves[move] & FORBIDDEN_ASSIST) + if (monId == gBattlerPartyIndexes[gBattlerAttacker]) + continue; + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) + continue; + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; - validMoves[chooseableMovesNo] = move; - chooseableMovesNo++; + for (moveId = 0; moveId < MAX_MON_MOVES; moveId++) + { + u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId); + + if (sForbiddenMoves[move] & FORBIDDEN_ASSIST) + continue; + + validMoves[chooseableMovesNo++] = move; + } } } + if (chooseableMovesNo) { gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; - gCalledMove = validMoves[((Random() & 0xFF) * chooseableMovesNo) >> 8]; + gCalledMove = validMoves[Random() % chooseableMovesNo]; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -14805,6 +14808,8 @@ static void Cmd_assistattackselect(void) { gBattlescriptCurrInstr = cmd->failInstr; } + + TRY_FREE_AND_SET_NULL(validMoves); } static void Cmd_trysetmagiccoat(void) diff --git a/test/move_effect_assist.c b/test/move_effect_assist.c new file mode 100644 index 000000000..e95d84654 --- /dev/null +++ b/test/move_effect_assist.c @@ -0,0 +1,22 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_ASSIST].effect == EFFECT_ASSIST); +} + +SINGLE_BATTLE_TEST("Assist fails if there are no valid moves to choose from") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Moves(MOVE_ASSIST, MOVE_CELEBRATE, MOVE_METRONOME, MOVE_ME_FIRST); } + PLAYER(SPECIES_WOBBUFFET) {Moves(MOVE_ASSIST, MOVE_ENDURE, MOVE_DRAGON_TAIL, MOVE_SPOTLIGHT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ASSIST); } + } SCENE { + MESSAGE("Wobbuffet used Assist!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ASSIST, player); + MESSAGE("But it failed!"); + } +} diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index ec7ba275c..f4b8aa4fd 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1227,6 +1227,7 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) const struct BattleMove *move = &gBattleMoves[moveId]; if (move->target == MOVE_TARGET_RANDOM || move->target == MOVE_TARGET_BOTH + || move->target == MOVE_TARGET_DEPENDS || move->target == MOVE_TARGET_FOES_AND_ALLY || move->target == MOVE_TARGET_OPPONENTS_FIELD || move->target == MOVE_TARGET_ALL_BATTLERS) From a8c930945805f3b4237be57ef320d0e416ed792a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Mon, 13 Mar 2023 05:07:29 -0300 Subject: [PATCH 033/129] Fixed Wring Out's power (#2824) Fixes #2823 --- src/data/battle_moves.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index c5375dc34..dc18893de 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -6426,7 +6426,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_WRING_OUT] = { .effect = EFFECT_WRING_OUT, - .power = 0, + .power = 1, .type = TYPE_NORMAL, .accuracy = 100, .pp = 5, From 59d5f078d272a9f9089982224d5976909819ec49 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 13 Mar 2023 17:44:25 +0100 Subject: [PATCH 034/129] samurott shiny.pal --- graphics/pokemon/samurott/shiny.pal | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100755 graphics/pokemon/samurott/shiny.pal diff --git a/graphics/pokemon/samurott/shiny.pal b/graphics/pokemon/samurott/shiny.pal deleted file mode 100755 index 5f67484f1..000000000 --- a/graphics/pokemon/samurott/shiny.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -152 208 160 -16 16 16 -120 64 48 -216 152 128 -240 184 152 -176 104 80 -72 72 72 -248 248 248 -192 184 128 -40 40 64 -32 64 104 -208 80 96 -216 216 176 -120 120 80 -24 24 40 -0 0 0 From f3810465e80d017da1fe8caa5914ff01dd1a3b29 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 13 Mar 2023 17:46:52 +0100 Subject: [PATCH 035/129] samurott shiny.pal v2 --- graphics/pokemon/samurott/shiny.pal | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 graphics/pokemon/samurott/shiny.pal diff --git a/graphics/pokemon/samurott/shiny.pal b/graphics/pokemon/samurott/shiny.pal new file mode 100644 index 000000000..5f67484f1 --- /dev/null +++ b/graphics/pokemon/samurott/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +120 64 48 +216 152 128 +240 184 152 +176 104 80 +72 72 72 +248 248 248 +192 184 128 +40 40 64 +32 64 104 +208 80 96 +216 216 176 +120 120 80 +24 24 40 +0 0 0 From 0c380862d61a9c4eccd9ed4915e12db6e7ca4310 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 13 Mar 2023 15:37:46 -0400 Subject: [PATCH 036/129] Document the trendy saying word group --- data/scripts/mauville_man.inc | 10 ++-- data/specials.inc | 4 +- include/constants/easy_chat.h | 2 +- include/constants/flags.h | 2 +- include/easy_chat.h | 4 +- include/global.h | 6 +-- src/easy_chat.c | 97 +++++++++++++++++++++-------------- src/mauville_old_man.c | 19 +++---- src/mystery_event_script.c | 2 +- 9 files changed, 83 insertions(+), 63 deletions(-) diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index eda3505bf..a33636043 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -64,9 +64,9 @@ MauvilleCity_PokemonCenter_1F_EventScript_DeclineWritingLyrics:: MauvilleCity_PokemonCenter_1F_EventScript_Hipster:: lock faceplayer - setflag FLAG_SYS_HIPSTER_MEET + setflag FLAG_UNLOCKED_TRENDY_SAYINGS msgbox MauvilleCity_PokemonCenter_1F_Text_TeachWhatsHipAndHappening, MSGBOX_DEFAULT - special GetHipsterSpokenFlag + special HasHipsterTaughtWord goto_if_eq VAR_RESULT, FALSE, MauvilleCity_PokemonCenter_1F_EventScript_TryTeachWord msgbox MauvilleCity_PokemonCenter_1F_Text_IAlreadyTaughtYou, MSGBOX_DEFAULT release @@ -80,8 +80,8 @@ MauvilleCity_PokemonCenter_1F_EventScript_TryTeachWord:: end MauvilleCity_PokemonCenter_1F_EventScript_TeachWord:: - msgbox MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfPhrase, MSGBOX_DEFAULT - special SetHipsterSpokenFlag + msgbox MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfWord, MSGBOX_DEFAULT + special SetHipsterTaughtWord release end @@ -969,7 +969,7 @@ MauvilleCity_PokemonCenter_1F_Text_IveGotNothingNewToTeach: .string "what's hip and happening.\p" .string "I've got nothing new to teach you!$" -MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfPhrase: +MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfWord: .string "Hey, have you heard about\n" .string "“{STR_VAR_1}”?\p" .string "What's it mean? Well…\n" diff --git a/data/specials.inc b/data/specials.inc index a0dbde868..52b539a80 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -111,8 +111,8 @@ gSpecials:: def_special Script_GetCurrentMauvilleMan def_special HasBardSongBeenChanged def_special SaveBardSongLyrics - def_special GetHipsterSpokenFlag - def_special SetHipsterSpokenFlag + def_special HasHipsterTaughtWord + def_special SetHipsterTaughtWord def_special HipsterTryTeachWord def_special PlayBardSong def_special SetMauvilleOldManObjEventGfx diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h index b5875b881..b1f38941f 100644 --- a/include/constants/easy_chat.h +++ b/include/constants/easy_chat.h @@ -1095,7 +1095,7 @@ #define EC_WORD_OLD ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 30) #define EC_WORD_YOUNG ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 31) #define EC_WORD_UGLY ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 32) -#define NUM_ADDITIONAL_PHRASES 33 +#define NUM_TRENDY_SAYINGS 33 // Special Berry Masters Wife phrases #define NOT_SPECIAL_PHRASE 0 diff --git a/include/constants/flags.h b/include/constants/flags.h index 99a8377a7..377f18107 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1348,7 +1348,7 @@ #define FLAG_UNUSED_0x863 (SYSTEM_FLAGS + 0x3) // Unused Flag #define FLAG_SYS_GAME_CLEAR (SYSTEM_FLAGS + 0x4) #define FLAG_SYS_CHAT_USED (SYSTEM_FLAGS + 0x5) -#define FLAG_SYS_HIPSTER_MEET (SYSTEM_FLAGS + 0x6) +#define FLAG_UNLOCKED_TRENDY_SAYINGS (SYSTEM_FLAGS + 0x6) // Badges #define FLAG_BADGE01_GET (SYSTEM_FLAGS + 0x7) diff --git a/include/easy_chat.h b/include/easy_chat.h index c9ef4428f..4bcc7389c 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -128,11 +128,11 @@ void InitializeEasyChatWordArray(u16 *words, u16 length); u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows); bool8 IsBardWordInvalid(u16 word); u16 GetRandomEasyChatWordFromGroup(u16 group); -u16 GetNewHipsterPhraseToTeach(void); +u16 UnlockRandomTrendySaying(void); u16 EasyChat_GetNumWordsInGroup(u8); u16 GetRandomEasyChatWordFromUnlockedGroup(u16); void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback, u8 displayedPersonType); void InitQuestionnaireWords(void); -void UnlockAdditionalPhrase(u8 additionalPhraseId); +void UnlockTrendySaying(u8 wordIndex); #endif // GUARD_EASYCHAT_H diff --git a/include/global.h b/include/global.h index e0ff9f0c2..9396a95f7 100644 --- a/include/global.h +++ b/include/global.h @@ -133,7 +133,7 @@ // values that don't appear in the Pokedex. NATIONAL_DEX_COUNT does not include these values. #define NUM_DEX_FLAG_BYTES ROUND_BITS_TO_BYTES(NUM_SPECIES) #define NUM_FLAG_BYTES ROUND_BITS_TO_BYTES(FLAGS_COUNT) -#define NUM_ADDITIONAL_PHRASE_BYTES ROUND_BITS_TO_BYTES(NUM_ADDITIONAL_PHRASES) +#define NUM_TRENDY_SAYING_BYTES ROUND_BITS_TO_BYTES(NUM_TRENDY_SAYINGS) // This produces an error at compile-time if expr is zero. // It looks like file.c:line: size of array `id' is negative @@ -673,7 +673,7 @@ struct MauvilleManGiddy struct MauvilleManHipster { u8 id; - bool8 alreadySpoken; + bool8 taughtWord; u8 language; }; @@ -1031,7 +1031,7 @@ struct SaveBlock1 /*0x2BC8*/ u16 easyChatBattleWon[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x2BD4*/ u16 easyChatBattleLost[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x2BE0*/ struct Mail mail[MAIL_COUNT]; - /*0x2E20*/ u8 additionalPhrases[NUM_ADDITIONAL_PHRASE_BYTES]; // bitfield for 33 additional phrases in easy chat system + /*0x2E20*/ u8 unlockedTrendySayings[NUM_TRENDY_SAYING_BYTES]; // Bitfield for unlockable Easy Chat words in EC_GROUP_TRENDY_SAYING /*0x2E25*/ //u8 padding5[3]; /*0x2E28*/ OldMan oldMan; /*0x2e64*/ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT]; diff --git a/src/easy_chat.c b/src/easy_chat.c index d08ea4b33..35ba633cf 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -5109,7 +5109,7 @@ static bool8 IsEasyChatGroupUnlocked(u8 groupId) switch (groupId) { case EC_GROUP_TRENDY_SAYING: - return FlagGet(FLAG_SYS_HIPSTER_MEET); + return FlagGet(FLAG_UNLOCKED_TRENDY_SAYINGS); case EC_GROUP_EVENTS: case EC_GROUP_MOVE_1: case EC_GROUP_MOVE_2: @@ -5425,80 +5425,99 @@ void BufferDeepLinkPhrase(void) CopyEasyChatWord(gStringVar2, easyChatWord); } -static bool8 IsAdditionalPhraseUnlocked(u8 additionalPhraseId) +/* + ### Trendy Sayings + + Not to be confused with Dewford Town's "trendy phrase". + + This is a group of easy chat words (EC_GROUP_TRENDY_SAYING) that are normally inaccessible. + They can be unlocked either through Mystery Event (where they're referred to as "rare" words) + or from the "Hipster" variety of the Mauville Old Man. The Hipster can unlock one word each + time he is received via record mixing (and once if he is the player's default Old Man). + + Which words have been unlocked is saved in the unlockedTrendySayings bitfield in SaveBlock1 + + Unlocked trendy saying words are only accessible if the flag FLAG_UNLOCKED_TRENDY_SAYINGS is set. + It's set any time the player talks to the Hipster, but is not apparently set by Mystery Event, + meaning trendy saying words unlocked via Mystery Event may not be available until the player has + talked to the Hipster. +*/ +static bool8 IsTrendySayingUnlocked(u8 wordIndex) { - int byteOffset = additionalPhraseId / 8; - int shift = additionalPhraseId % 8; - return (gSaveBlock1Ptr->additionalPhrases[byteOffset] >> shift) & 1; + int byteOffset = wordIndex / 8; + int shift = wordIndex % 8; + return (gSaveBlock1Ptr->unlockedTrendySayings[byteOffset] >> shift) & 1; } -void UnlockAdditionalPhrase(u8 additionalPhraseId) +void UnlockTrendySaying(u8 wordIndex) { - if (additionalPhraseId < NUM_ADDITIONAL_PHRASES) + if (wordIndex < NUM_TRENDY_SAYINGS) { - int byteOffset = additionalPhraseId / 8; - int shift = additionalPhraseId % 8; - gSaveBlock1Ptr->additionalPhrases[byteOffset] |= 1 << shift; + int byteOffset = wordIndex / 8; + int shift = wordIndex % 8; + gSaveBlock1Ptr->unlockedTrendySayings[byteOffset] |= 1 << shift; } } -static u8 GetNumAdditionalPhrasesUnlocked(void) +static u8 GetNumTrendySayingsUnlocked(void) { u8 i; - u8 numAdditionalPhrasesUnlocked; + u8 numUnlocked; - for (i = 0, numAdditionalPhrasesUnlocked = 0; i < NUM_ADDITIONAL_PHRASES; i++) + for (i = 0, numUnlocked = 0; i < NUM_TRENDY_SAYINGS; i++) { - if (IsAdditionalPhraseUnlocked(i)) - numAdditionalPhrasesUnlocked++; + if (IsTrendySayingUnlocked(i)) + numUnlocked++; } - return numAdditionalPhrasesUnlocked; + return numUnlocked; } -u16 GetNewHipsterPhraseToTeach(void) +u16 UnlockRandomTrendySaying(void) { u16 i; - u16 additionalPhraseId; - u8 numAdditionalPhrasesUnlocked = GetNumAdditionalPhrasesUnlocked(); - if (numAdditionalPhrasesUnlocked == NUM_ADDITIONAL_PHRASES) + u16 numToSkip; + u8 numUnlocked = GetNumTrendySayingsUnlocked(); + if (numUnlocked == NUM_TRENDY_SAYINGS) return EC_EMPTY_WORD; - additionalPhraseId = Random() % (NUM_ADDITIONAL_PHRASES - numAdditionalPhrasesUnlocked); - for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++) + numToSkip = Random() % (NUM_TRENDY_SAYINGS - numUnlocked); + for (i = 0; i < NUM_TRENDY_SAYINGS; i++) { - if (!IsAdditionalPhraseUnlocked(i)) + if (!IsTrendySayingUnlocked(i)) { - if (additionalPhraseId) + if (numToSkip) { - additionalPhraseId--; + // Skip the first n locked words, as determined by the Random call above. + numToSkip--; } else { - UnlockAdditionalPhrase(i); + UnlockTrendySaying(i); return EC_WORD(EC_GROUP_TRENDY_SAYING, i); } } } + // Would only be reached if there are no new words to teach, which is handled at the start. return EC_EMPTY_WORD; } // Unused -u16 GetRandomTaughtHipsterPhrase(void) +static u16 GetRandomUnlockedTrendySaying(void) { u16 i; - u16 additionalPhraseId = GetNumAdditionalPhrasesUnlocked(); - if (additionalPhraseId == 0) + u16 n = GetNumTrendySayingsUnlocked(); + if (n == 0) return EC_EMPTY_WORD; - additionalPhraseId = Random() % additionalPhraseId; - for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++) + n = Random() % n; + for (i = 0; i < NUM_TRENDY_SAYINGS; i++) { - if (IsAdditionalPhraseUnlocked(i)) + if (IsTrendySayingUnlocked(i)) { - if (additionalPhraseId) - additionalPhraseId--; + if (n) + n--; else return EC_WORD(EC_GROUP_TRENDY_SAYING, i); } @@ -5569,10 +5588,10 @@ void InitEasyChatPhrases(void) // Mauville old man data is corrupted, which is initialized directly after // this function is called when starting a new game. for (i = 0; i < 64; i++) - gSaveBlock1Ptr->additionalPhrases[i] = 0; + gSaveBlock1Ptr->unlockedTrendySayings[i] = 0; #else - for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->additionalPhrases); i++) - gSaveBlock1Ptr->additionalPhrases[i] = 0; + for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->unlockedTrendySayings); i++) + gSaveBlock1Ptr->unlockedTrendySayings[i] = 0; #endif } @@ -5611,7 +5630,7 @@ static void SetUnlockedEasyChatGroups(void) sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_MOVE_2; } - if (FlagGet(FLAG_SYS_HIPSTER_MEET)) + if (FlagGet(FLAG_UNLOCKED_TRENDY_SAYINGS)) sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_TRENDY_SAYING; if (IsNationalPokedexEnabled()) @@ -5800,7 +5819,7 @@ static bool8 IsEasyChatIndexAndGroupUnlocked(u16 wordIndex, u8 groupId) case EC_GROUP_MOVE_2: return TRUE; case EC_GROUP_TRENDY_SAYING: - return IsAdditionalPhraseUnlocked(wordIndex); + return IsTrendySayingUnlocked(wordIndex); default: return gEasyChatGroups[groupId].wordData.words[wordIndex].enabled; } diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 689dcf6a1..6075bd5d9 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -88,7 +88,7 @@ static void SetupHipster(void) struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; hipster->id = MAUVILLE_MAN_HIPSTER; - hipster->alreadySpoken = FALSE; + hipster->taughtWord = FALSE; hipster->language = gGameLanguage; } @@ -225,27 +225,28 @@ void PlayBardSong(void) ScriptContext_Stop(); } -void GetHipsterSpokenFlag(void) +void HasHipsterTaughtWord(void) { - gSpecialVar_Result = (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken; + gSpecialVar_Result = (&gSaveBlock1Ptr->oldMan.hipster)->taughtWord; } -void SetHipsterSpokenFlag(void) +void SetHipsterTaughtWord(void) { - (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken = TRUE; + (&gSaveBlock1Ptr->oldMan.hipster)->taughtWord = TRUE; } void HipsterTryTeachWord(void) { - u16 phrase = GetNewHipsterPhraseToTeach(); + u16 word = UnlockRandomTrendySaying(); - if (phrase == EC_EMPTY_WORD) + if (word == EC_EMPTY_WORD) { + // All words already unlocked gSpecialVar_Result = FALSE; } else { - CopyEasyChatWord(gStringVar1, phrase); + CopyEasyChatWord(gStringVar1, word); gSpecialVar_Result = TRUE; } } @@ -369,7 +370,7 @@ static void ResetBardFlag(void) static void ResetHipsterFlag(void) { - (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken = FALSE; + (&gSaveBlock1Ptr->oldMan.hipster)->taughtWord = FALSE; } static void ResetTraderFlag(void) diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index 124ababa4..b146bbab3 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -293,7 +293,7 @@ bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx) bool8 MEScrCmd_addrareword(struct ScriptContext *ctx) { - UnlockAdditionalPhrase(ScriptReadByte(ctx)); + UnlockTrendySaying(ScriptReadByte(ctx)); StringExpandPlaceholders(gStringVar4, gText_MysteryEventRareWord); ctx->mStatus = MEVENT_STATUS_SUCCESS; return FALSE; From 0a9ab96390706326c3eda11059095e7298ea88d4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 14 Mar 2023 08:54:49 -0300 Subject: [PATCH 037/129] Added STANDARD_FRIENDSHIP constant to allow easier custom adjustments --- include/constants/pokemon.h | 3 + src/data/pokemon/species_info.h | 652 ++++++++++++++++---------------- 2 files changed, 329 insertions(+), 326 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 716d5adf9..e515378d4 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -190,6 +190,9 @@ #define FRIENDSHIP_200_TO_254 5 #define FRIENDSHIP_MAX 6 +// Friendship value that the majority of species use. This was changed in Generation 8 to 50. +#define STANDARD_FRIENDSHIP 70 + #define MAX_FRIENDSHIP 255 #define MAX_SHEEN 255 #define MAX_CONDITION 255 diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 344852baf..2ef0629b5 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -57,7 +57,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -87,7 +87,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -117,7 +117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -147,7 +147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -177,7 +177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -207,7 +207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -237,7 +237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -267,7 +267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -297,7 +297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -327,7 +327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -357,7 +357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -387,7 +387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, @@ -417,7 +417,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -447,7 +447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -477,7 +477,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -507,7 +507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -537,7 +537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -567,7 +567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -597,7 +597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS}, @@ -627,7 +627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS}, @@ -657,7 +657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -687,7 +687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -717,7 +717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON }, .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, @@ -747,7 +747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON }, .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, @@ -777,7 +777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LIGHT_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -807,7 +807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -837,7 +837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, @@ -867,7 +867,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, @@ -897,7 +897,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -927,7 +927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -957,7 +957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -987,7 +987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -1017,7 +1017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -1047,7 +1047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -1137,7 +1137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, @@ -1167,7 +1167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, @@ -1197,7 +1197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -1227,7 +1227,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -1257,7 +1257,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -1287,7 +1287,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -1317,7 +1317,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -1347,7 +1347,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -1377,7 +1377,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -1407,7 +1407,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -1437,7 +1437,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -1467,7 +1467,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, @@ -1497,7 +1497,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -1527,7 +1527,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, @@ -1557,7 +1557,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, @@ -1587,7 +1587,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -1617,7 +1617,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_LIMBER, ABILITY_NONE}, @@ -1647,7 +1647,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE}, @@ -1677,7 +1677,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE}, @@ -1707,7 +1707,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, @@ -1737,7 +1737,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, @@ -1767,7 +1767,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, @@ -1797,7 +1797,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, @@ -1827,7 +1827,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -1857,7 +1857,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -1887,7 +1887,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -1917,7 +1917,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, @@ -1947,7 +1947,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, @@ -1977,7 +1977,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, @@ -2007,7 +2007,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -2037,7 +2037,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -2067,7 +2067,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -2097,7 +2097,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -2127,7 +2127,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -2157,7 +2157,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -2187,7 +2187,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE}, @@ -2217,7 +2217,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE}, @@ -2247,7 +2247,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2277,7 +2277,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2307,7 +2307,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2337,7 +2337,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE}, @@ -2367,7 +2367,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE}, @@ -2397,7 +2397,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, @@ -2427,7 +2427,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, @@ -2457,7 +2457,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, @@ -2487,7 +2487,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, @@ -2517,7 +2517,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_STICK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FIELD }, .abilities = {ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS}, @@ -2547,7 +2547,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, @@ -2577,7 +2577,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, @@ -2607,7 +2607,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -2637,7 +2637,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -2667,7 +2667,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NUGGET, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, @@ -2697,7 +2697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NUGGET, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, @@ -2727,7 +2727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, @@ -2757,7 +2757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, @@ -2787,7 +2787,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -2817,7 +2817,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -2847,7 +2847,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -2877,7 +2877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2907,7 +2907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, @@ -2937,7 +2937,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, @@ -2967,7 +2967,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -2997,7 +2997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -3027,7 +3027,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, @@ -3057,7 +3057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, @@ -3087,7 +3087,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -3117,7 +3117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -3147,7 +3147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD}, @@ -3177,7 +3177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD}, @@ -3207,7 +3207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_LIMBER, ABILITY_NONE}, @@ -3237,7 +3237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -3267,7 +3267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_OWN_TEMPO, ABILITY_OBLIVIOUS}, @@ -3297,7 +3297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SMOKE_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -3327,7 +3327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SMOKE_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -3357,7 +3357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, @@ -3387,7 +3387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, @@ -3447,7 +3447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -3477,7 +3477,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_EARLY_BIRD, ABILITY_NONE}, @@ -3507,7 +3507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -3537,7 +3537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -3567,7 +3567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL}, @@ -3597,7 +3597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL}, @@ -3627,7 +3627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, @@ -3657,7 +3657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, @@ -3687,7 +3687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -3717,7 +3717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -3747,7 +3747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ASPEAR_BERRY, .genderRatio = MON_FEMALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -3777,7 +3777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -3807,7 +3807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, @@ -3837,7 +3837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_NONE}, @@ -3867,7 +3867,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -3897,7 +3897,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 5, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -3927,7 +3927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 5, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -3957,7 +3957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR}, @@ -3987,7 +3987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_POWDER, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_DITTO, EGG_GROUP_DITTO }, .abilities = {ABILITY_LIMBER, ABILITY_NONE}, @@ -4017,7 +4017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, @@ -4047,7 +4047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_NONE}, @@ -4077,7 +4077,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NONE}, @@ -4107,7 +4107,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, @@ -4137,7 +4137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_TRACE, ABILITY_NONE}, @@ -4167,7 +4167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, @@ -4197,7 +4197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, @@ -4227,7 +4227,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, @@ -4257,7 +4257,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, @@ -4287,7 +4287,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_PRESSURE}, @@ -4317,7 +4317,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEFTOVERS, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_IMMUNITY, ABILITY_THICK_FAT}, @@ -4587,7 +4587,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -4617,7 +4617,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -4647,7 +4647,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -4677,7 +4677,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -4707,7 +4707,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -4737,7 +4737,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -4767,7 +4767,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -4797,7 +4797,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -4827,7 +4827,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -4857,7 +4857,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, @@ -4887,7 +4887,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, @@ -4917,7 +4917,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, @@ -4947,7 +4947,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, @@ -4977,7 +4977,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, @@ -5007,7 +5007,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, @@ -5037,7 +5037,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, @@ -5067,7 +5067,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, @@ -5097,7 +5097,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -5127,7 +5127,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_YELLOW_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE}, @@ -5157,7 +5157,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_YELLOW_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE}, @@ -5187,7 +5187,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5247,7 +5247,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -5277,7 +5277,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, @@ -5307,7 +5307,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FAIRY }, .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, @@ -5337,7 +5337,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, @@ -5367,7 +5367,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, @@ -5397,7 +5397,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5427,7 +5427,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5457,7 +5457,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5487,7 +5487,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5517,7 +5517,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FAIRY }, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, @@ -5547,7 +5547,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FAIRY }, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, @@ -5577,7 +5577,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, @@ -5607,7 +5607,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -5637,7 +5637,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5667,7 +5667,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5697,7 +5697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5727,7 +5727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_PICKUP}, @@ -5757,7 +5757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5787,7 +5787,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5817,7 +5817,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SPEED_BOOST, ABILITY_COMPOUND_EYES}, @@ -5847,7 +5847,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, @@ -5877,7 +5877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, @@ -5907,7 +5907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, @@ -5997,7 +5997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, @@ -6057,7 +6057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -6087,7 +6087,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, @@ -6117,7 +6117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PERSIM_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_EARLY_BIRD}, @@ -6147,7 +6147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -6177,7 +6177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -6207,7 +6207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY}, @@ -6237,7 +6237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL}, @@ -6267,7 +6267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_COAT, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -6297,7 +6297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_INTIMIDATE, ABILITY_RUN_AWAY}, @@ -6327,7 +6327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_INTIMIDATE, ABILITY_INTIMIDATE}, @@ -6357,7 +6357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM}, @@ -6387,7 +6387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -6417,7 +6417,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -6447,7 +6447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_GUTS}, @@ -6507,7 +6507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -6537,7 +6537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -6567,7 +6567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, @@ -6597,7 +6597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, @@ -6627,7 +6627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -6657,7 +6657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -6687,7 +6687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RED_SHARD, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HUSTLE, ABILITY_NATURAL_CURE}, @@ -6717,7 +6717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_HUSTLE, ABILITY_NONE}, @@ -6747,7 +6747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, @@ -6777,7 +6777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_HUSTLE}, @@ -6807,7 +6807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_ABSORB}, @@ -6837,7 +6837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY}, @@ -6927,7 +6927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -6957,7 +6957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -6987,7 +6987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -7017,7 +7017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_TRACE, ABILITY_NONE}, @@ -7047,7 +7047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -7077,7 +7077,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, @@ -7107,7 +7107,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -7137,7 +7137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -7167,7 +7167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ASPEAR_BERRY, .genderRatio = MON_FEMALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -7197,7 +7197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -7227,7 +7227,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, @@ -7257,7 +7257,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_MOOMOO_MILK, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -7637,7 +7637,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -7667,7 +7667,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -7697,7 +7697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -7727,7 +7727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -7757,7 +7757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -7787,7 +7787,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -7817,7 +7817,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -7847,7 +7847,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -7877,7 +7877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -7907,7 +7907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, @@ -7937,7 +7937,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -7967,7 +7967,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -7997,7 +7997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -8027,7 +8027,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -8057,7 +8057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -8087,7 +8087,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -8117,7 +8117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -8147,7 +8147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -8177,7 +8177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, @@ -8207,7 +8207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, @@ -8237,7 +8237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, @@ -8267,7 +8267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, @@ -8297,7 +8297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, @@ -8327,7 +8327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, @@ -8357,7 +8357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, @@ -8387,7 +8387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SPEED_BOOST, ABILITY_NONE}, @@ -8417,7 +8417,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_WONDER_GUARD, ABILITY_NONE}, @@ -8447,7 +8447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -8477,7 +8477,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -8507,7 +8507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -8537,7 +8537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -8567,7 +8567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, @@ -8597,7 +8597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -8627,7 +8627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -8657,7 +8657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_BUG }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -8687,7 +8687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_BUG }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -8717,7 +8717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS}, @@ -8747,7 +8747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS}, @@ -8777,7 +8777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -8807,7 +8807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -8837,7 +8837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PERSIM_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_COLOR_CHANGE, ABILITY_NONE}, @@ -8867,7 +8867,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -8897,7 +8897,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -8927,7 +8927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL}, @@ -8957,7 +8957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_WHITE_SMOKE, ABILITY_NONE}, @@ -9017,7 +9017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -9047,7 +9047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -9077,7 +9077,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -9107,7 +9107,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -9137,7 +9137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -9167,7 +9167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -9197,7 +9197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_MARVEL_SCALE, ABILITY_NONE}, @@ -9287,7 +9287,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_ARENA_TRAP}, @@ -9317,7 +9317,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, @@ -9347,7 +9347,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, @@ -9377,7 +9377,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, @@ -9407,7 +9407,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, @@ -9437,7 +9437,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD}, @@ -9467,7 +9467,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD}, @@ -9497,7 +9497,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -9527,7 +9527,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_NONE}, @@ -9557,7 +9557,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -9587,7 +9587,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -9617,7 +9617,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -9707,7 +9707,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -9737,7 +9737,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -9767,7 +9767,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_MOON_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -9797,7 +9797,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SUN_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -9827,7 +9827,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, @@ -9857,7 +9857,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, @@ -9887,7 +9887,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, @@ -9917,7 +9917,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_PLUS, ABILITY_NONE}, @@ -9947,7 +9947,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_MINUS, ABILITY_NONE}, @@ -9977,7 +9977,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_INTIMIDATE}, @@ -10007,7 +10007,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, @@ -10037,7 +10037,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, @@ -10067,7 +10067,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON }, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, @@ -10097,7 +10097,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON }, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, @@ -10127,7 +10127,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, @@ -10217,7 +10217,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT}, @@ -10247,7 +10247,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_TRUANT, ABILITY_NONE}, @@ -10277,7 +10277,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, @@ -10307,7 +10307,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_TRUANT, ABILITY_NONE}, @@ -10337,7 +10337,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, @@ -10367,7 +10367,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, @@ -10397,7 +10397,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -10427,7 +10427,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -10457,7 +10457,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -10487,7 +10487,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -10517,7 +10517,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BLUE_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, @@ -10547,7 +10547,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -10577,7 +10577,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -10697,7 +10697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -10727,7 +10727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_IMMUNITY, ABILITY_NONE}, @@ -10757,7 +10757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_GREEN_SHARD, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_ROCK_HEAD}, @@ -10877,7 +10877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_MYSTIC_WATER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_FORECAST, ABILITY_NONE}, @@ -10907,7 +10907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_ILLUMINATE, ABILITY_SWARM}, @@ -10937,7 +10937,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -10967,7 +10967,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, @@ -10997,7 +10997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, @@ -11027,7 +11027,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, @@ -11057,7 +11057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, @@ -11657,7 +11657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, From aefd3189456da25904b0e39a6ca2a5f63c1a3505 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Tue, 14 Mar 2023 11:43:52 -0300 Subject: [PATCH 038/129] Applied review suggestions and expanded usage of activateAfterFaint in Cmd_setmoveeffect --- data/battle_scripts_1.s | 25 ++----------------------- include/battle_scripts.h | 2 +- src/battle_script_commands.c | 13 ++++++------- src/data/battle_moves.h | 4 ++-- 4 files changed, 11 insertions(+), 33 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 425834b7e..4c61e5e69 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -433,31 +433,10 @@ BattleScript_EffectDireClaw:: goto BattleScript_EffectHit BattleScript_EffectHitSetEntryHazard:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET argumenttomoveeffect - seteffectprimary - moveendall - end + goto BattleScript_EffectHit -BattleScript_SpikesActivate:: +BattleScript_SpikesActivates:: trysetspikes BattleScript_MoveEnd printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG diff --git a/include/battle_scripts.h b/include/battle_scripts.h index c4b15d9f1..c6cbddcd3 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -457,7 +457,7 @@ extern const u8 BattleScript_LunarDanceActivates[]; extern const u8 BattleScript_ShellTrapSetUp[]; extern const u8 BattleScript_CouldntFullyProtect[]; extern const u8 BattleScript_StealthRockActivates[]; -extern const u8 BattleScript_SpikesActivate[]; +extern const u8 BattleScript_SpikesActivates[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0799cf2f3..15a72c7e8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2896,6 +2896,9 @@ void SetMoveEffect(bool32 primary, u32 certain) return; case MOVE_EFFECT_STEALTH_ROCK: case MOVE_EFFECT_SPIKES: + case MOVE_EFFECT_PAYDAY: + case MOVE_EFFECT_STEAL_ITEM: + case MOVE_EFFECT_BUG_BITE: activateAfterFaint = TRUE; break; } @@ -2938,11 +2941,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) INCREMENT_RESET_RETURN - if (gBattleMons[gEffectBattler].hp == 0 - && !activateAfterFaint - && gBattleScripting.moveEffect != MOVE_EFFECT_PAYDAY - && gBattleScripting.moveEffect != MOVE_EFFECT_STEAL_ITEM - && gBattleScripting.moveEffect != MOVE_EFFECT_BUG_BITE) + if (gBattleMons[gEffectBattler].hp == 0 && !activateAfterFaint) INCREMENT_RESET_RETURN if (DoesSubstituteBlockMove(gBattlerAttacker, gEffectBattler, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) @@ -3761,7 +3760,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (!gBattleMons[gEffectBattler].status1) { static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; - gBattleScripting.moveEffect = sDireClawEffects[Random() % 3]; + gBattleScripting.moveEffect = sDireClawEffects[Random() % ARRAY_COUNT(sDireClawEffects)]; SetMoveEffect(TRUE, 0); } break; @@ -3778,7 +3777,7 @@ void SetMoveEffect(bool32 primary, u32 certain) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SPIKESSCATTERED; BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_SpikesActivate; + gBattlescriptCurrInstr = BattleScript_SpikesActivates; } break; } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 530dacd13..22eb7ca1a 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13328,7 +13328,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .type = TYPE_ROCK, .accuracy = 90, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, @@ -13605,7 +13605,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .type = TYPE_DARK, .accuracy = 90, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, From 66c63ee4589a481777a9be4631d4ab3ed7100b25 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 14 Mar 2023 18:23:50 +0100 Subject: [PATCH 039/129] hisuian sprite fixes --- graphics/pokemon/avalugg/hisuian/back.png | Bin 654 -> 677 bytes graphics/pokemon/avalugg/hisuian/front.png | Bin 947 -> 947 bytes graphics/pokemon/avalugg/hisuian/shiny.pal | 6 ++--- graphics/pokemon/qwilfish/hisuian/back.png | Bin 606 -> 693 bytes graphics/pokemon/qwilfish/hisuian/front.png | Bin 571 -> 664 bytes graphics/pokemon/qwilfish/hisuian/normal.pal | 20 +++++++------- graphics/pokemon/qwilfish/hisuian/shiny.pal | 26 +++++++++---------- graphics/pokemon/samurott/hisuian/back.png | Bin 873 -> 867 bytes graphics/pokemon/samurott/hisuian/front.png | Bin 1140 -> 1140 bytes graphics/pokemon/samurott/hisuian/shiny.pal | 14 +++++----- 10 files changed, 33 insertions(+), 33 deletions(-) mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/shiny.pal diff --git a/graphics/pokemon/avalugg/hisuian/back.png b/graphics/pokemon/avalugg/hisuian/back.png index 321daa41fd6fa9d0521f1b581800791dac5d0b47..6bf621584946214562c1c2c72dc6c7fd1993d532 100755 GIT binary patch delta 539 zcmV+$0_6RU1*HX$EC>z}6c|9v3O$iDZGV+18r4rV`GZf8L?H0ENB{r;@7h}<00001 zVoOIv|D^}=#Q*>S$w@>(RCt{2lD&@FKoo^{MP6VSvIWIT3>N)xM=sD7IOA2cP8F@D zAYBZ)MN+27izJHDtwa}7ao^W6aix~WeFojE8DRblpz9g|X^aNBXauB>fq_xg;OwD)?xP3S zygH(DcL#p!0$)=>*ERqxju-%_S6Kr^AaxCdw;j#lH;0Y5{ zpaD38PCv@v>Hr8u7zV6QR}ipgz0nVxLJ9ob2BbX>ZBM8D%PDHLkV1n9U@qPdR delta 515 zcmV+e0{s1@1&#%fEC>P+0yfK*XR47jZGUiZaJam<`GZfSWDxMUNB{r;$`A(100001 zVoOIv|D^}=#Q*>SvPnciRCt{2ld*2wFcd`-I6pws$>sp21@H7DIN5+zDkw5|C;|>1 zIz%?!mZ?L3q(zYLQAY_#tBm9jw6njVPcp4Ij+H5+?|P5!dzT_lPL4Y21C-3(_kVl* zeLzZ>`;89!+DM<*Dh~S$`mP;ddIiwWTLEdU0qI%+sWG-N-2!ixJk=P%6%Q-s`Qx77 zxxiZ*&~F1e95Dt^UtJ48J~aSn0`>rgm>OVg+5p8XfQ>Nif$Tju9bUJTh{!CkfAK+} z!!+W+eu2yN4)E)xKkY{Y&Tr)9x_^5J=#B_jadjitfBF0^aK;1;FaVrEZ#Z`_*#i=h zBrzM(5yb4%U|Ql5YT#)b;0GMKkx(ThV-b1U7bm;_%6kSN)mZs*EQEOh9z#R^n-d_r z$`_>=&V7csBs-hTLc=9v6k&|=uJ|+bKG#)1rk6EvL3t>|X9A|=`Em=;pl}K}t^8C( z3!|#L?sB^8E~`oeAOu`3z6YQnqVA~iZWaPiMArTQQ@xfNsE;zkI|_g>!P9_y@ diff --git a/graphics/pokemon/avalugg/hisuian/front.png b/graphics/pokemon/avalugg/hisuian/front.png index bab3f63c8a2793caae7861fd44cbb7a54bad6bb4..58201f335fc75d591ef262f1bab114b36c8b0d95 100755 GIT binary patch delta 19 acmdnYzL|Z34hNqgm&T?LR=X`vKoCV1M diff --git a/graphics/pokemon/avalugg/hisuian/shiny.pal b/graphics/pokemon/avalugg/hisuian/shiny.pal index 9fd2d0e18..b34922683 100755 --- a/graphics/pokemon/avalugg/hisuian/shiny.pal +++ b/graphics/pokemon/avalugg/hisuian/shiny.pal @@ -11,9 +11,9 @@ JASC-PAL 80 60 48 72 44 32 144 120 96 -112 112 112 -184 188 184 +149 41 26 +213 79 53 249 131 79 -164 100 16 +144 68 32 240 184 72 0 0 0 diff --git a/graphics/pokemon/qwilfish/hisuian/back.png b/graphics/pokemon/qwilfish/hisuian/back.png old mode 100644 new mode 100755 index 48a01e06f23fa0eb379da21b5aa51d1e2357a45e..7504a692af0edd5661ae94fc0aba8c4b43646e3e GIT binary patch delta 669 zcmV;O0%HB%1hoZ_B!35VNliru=K~H80~}PE#K-^u02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_SVX{pT<{PO5P*P?C@e6jsJK`}z?g_oxU`VS$bZnNtf=_>_*hUV00000 z000mc^2`7L00Cl4M@0Xn2lB-L00G%aL_t(|ob8jnZo)7Wg;Sx74DBNzu}5-1X(gsy zBE*DL3>9lB10x+Wbt08+hfFLmbb>PYX^`ju1MgDX3BfT=r0$#n0{8Q|e~x9{^dH%j zmd8hol@g;Z0DtS17_cz_{FDG2K#YQ7i_y4)h)@DR2LYmXAZcEQyaBLGo_1U4>!t1pJ<5E8(6(*~d0HK=+;_eLr6(;U*o`!oM0Pp?%dsGmxE7p{&Y$*nS4TA%~G6 z>M(6OeD_~4Rhmkzp;8Nd4>NuCf$CijF9w3(_2dDId?<1JgOXZB!4haOjJdf(4Z(VfOv4w5D*YxSh&#O@Q8?*P*7l~xX`Geh`6|@ zxWK?*U{Lt@_{hMx0000*d?Yyl00HSqL_t(YiS5%rZ__{&0B~0~uw+Q8B4(<5fS?B# zMPe!yof$6ajOnwzb)YdF8G6t;Qj&+fF%j`0DlsL>hw9zMc7OfOf0&VYi~qcz-+Onq zgW!KWMVelB=arguiDydV)vN>DT;g|q)luRG6C(Ysy~8CE(K>1e)7SvQ)*eD9v_#bH zz>E;nx}$;tX397$ZXER+08&zd<2ul~0*+4myoSISFCa+G0FW8c#-AM~BgiWgtXT#?+-XpPK9ln3#fc$ta)indQ z15p^c{8S=JobeuLUxx-efu2SfnxV&o!JsT*gehWP$eq%0j9{Tkf5@c*O<2aDR@T!Q@p_*>m8K$aiD z1G}FE*jSQnJn}9N(H8gNyoA2{v(+qm>); diff --git a/graphics/pokemon/qwilfish/hisuian/front.png b/graphics/pokemon/qwilfish/hisuian/front.png old mode 100644 new mode 100755 index a32988cf7d8f3966b9e70ec7d74474650d0a5321..0de50b78609064ee4c8645dfb3a5af315870741e GIT binary patch delta 639 zcmV-_0)YLy1egVoB!35VNliru=K~H7I~Uaz%Zva302g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_cpzZ#M9>fr5I8tMC@e5gRA9I?n3#xAxU`UPbbo-Ttf=_>_*hUV00000 z008U-vU30c00Cl4M@0Xn2lB-L00F#7L_t(|obA#vOT$1E2k;9qW56id*@(J01doai zg3wFUO)wWhUDWhdyJ^u5x~Xs(T%?qo;Ap{&egwtMK@h|aei!f3I$XWdFVO#x<^8z# z?&S~~W|%%P27iGuPbyDWa^z>kou*xdDBV=Rf)G|%IRk3A5?BDf3g)O4fk<3%J!2e2 zNeaplW*zc6lq)r(P_vFXZ>}l;%6T0EsD*VeJR(VYsPtHjs#z;1hyI!uHJ;XcKoPPm zlQTf*m#m<1PgG#hY6k!b$(FT|lIvzk0T~s5ia}#SHh;r}^TxHhu$`8uXC2_LGtN_@ zf~Zw(RUh*n#Ak#tqI5u(yk!^on1+Oulmm>33%RFYTY{kCm>8=K#%AWD0D|)Kxc~sC z4(f?{HvbmHu=_qMLB(}PdqwfGD8OD0!nGRitt0#3P5h`=0b+8qrFk-TbJm$GzrUPA z%-HS!I(S0ueRm4nIe?Tgrh9blJE!mkz_~bpU1@;*P(NvNF2Tyrrw$|-%ev_Bp&J3& zyc4E9U(S%SB(G~Hlz?IU%~+D^`pXWfSe}Vj60V;B+1=$X^#gw~2LZG^2$+2?G0ZS| ZegQ3zsg*c=Uf=)#002ovPDHLkV1goZ5=sC7 delta 546 zcmV+-0^R+X1-k^0B!4haOjJdf(4crAVDLcD5D*Z!FqnXVfIvVBL__(l;0002iCy*Wh00G8HL_t(YiS3iIOXFY|#y<&M7KcVevNl&ZMX2&E z`~mh^LU?{W-}k;xBE(EHMQbjV1bj^b(n&yOB>{lF>44gjwmHTBQfs@-B|G*QHH+9@ z(B&JUI)`CbO9{Koz2*vp3K?AnXM(4yx zkMCRW?1Uq}V}FAI@QPSNUWZ!RF41uqP$~_m05pmykqx)>`yC+GTmUFT8QU^920*?8 zvdBQKwT39=p>TaEJNCp8O}7PnN%sX%k@}^HDTK2A2ia$NtD5HgBIepWPM~^=5uNC7nhA_r1c8@eplEU5bd9KO33Wi2XWI5ZrtO z2HpQJx*+OB*g^!sV8s5Ai25;KrDFO0KKqs*L<3BaKcuc{^c%z&GZTM3_`D}2Pv@(%>V!Z07*qoM6N<$f-30%W&i*H diff --git a/graphics/pokemon/qwilfish/hisuian/normal.pal b/graphics/pokemon/qwilfish/hisuian/normal.pal old mode 100644 new mode 100755 index b1a2bcd32..91f73ab4d --- a/graphics/pokemon/qwilfish/hisuian/normal.pal +++ b/graphics/pokemon/qwilfish/hisuian/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 120 32 96 -240 64 208 +240 68 208 16 16 16 -184 48 152 -128 128 128 -64 64 72 -40 40 48 -88 88 96 +56 56 64 +40 44 48 +80 84 96 +184 52 152 152 136 80 -176 160 120 -184 192 192 +184 180 144 +112 116 128 +168 172 168 +248 252 248 88 80 40 -248 248 248 -184 176 144 +0 0 0 0 0 0 diff --git a/graphics/pokemon/qwilfish/hisuian/shiny.pal b/graphics/pokemon/qwilfish/hisuian/shiny.pal old mode 100644 new mode 100755 index 79d490248..06729e52a --- a/graphics/pokemon/qwilfish/hisuian/shiny.pal +++ b/graphics/pokemon/qwilfish/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 48 128 -120 112 208 +88 68 192 +128 92 240 16 16 16 -96 88 184 -208 224 240 -136 136 152 -80 80 96 -168 184 208 -168 160 136 -184 184 168 -184 192 192 -96 96 80 -248 248 248 -200 192 184 +128 128 144 +40 44 48 +168 168 184 +88 68 192 +152 136 80 +184 180 144 +200 200 208 +168 172 168 +248 252 248 +88 80 40 +0 0 0 0 0 0 diff --git a/graphics/pokemon/samurott/hisuian/back.png b/graphics/pokemon/samurott/hisuian/back.png index 337925fd25c3b7dc4c649f2bac01070c232faf9c..36ed737d3e1c07b6e7b35e13ee8706df90da7855 100755 GIT binary patch delta 754 zcmVz|96DULtLBk3Re#8=m`F%S`26^&bYKt=5a8V4Sa5J4SeVdI zU>FoIz{JQLIAExpr~m)}*JKDA00001VoOIv|D^}=#Q*>The%~*ReEe*HJ_{JP0cYLNZ4l?A9wJ~* z0NWM-VgqoN)?+}JJ7jHu0$@^JV!BYWM*(NG2Hk%EkTC$~=i%CxD@Xb*2LvV_q41lq zOBwhXdkBC^$Xi%@6-eFI3qbEB5PzY+Y3m3Ok7_8Xwb1PZa9IGL;Z~apwdO6|f%a6& zRZe6=x5p5edxH{lb($sQBN6~Ms9u>9G~%zz2qNmzHrb}W_<+DV-*?VlylxuDzSdw kKz&UOU_4wES^q1qKRj^=DL=97mjD0&07*qoM6N<$f`MvN7XSbN delta 760 zcmVP#IUdnwxR;SMRe#Q{n@C7V`26^(bzu+?5aQnASa5J5TAX=k zc^DKhz{JQQI%BGzssI20t9@H600001VoOIv0Eh)0NB{r=jY&j7RCt{2k}+%BKorLX zrWyn-m_jE_2e*a>g-qUTGI=n9xX{7Kc5|VjxuH-Wc+kfvWGJ{$BGBNW&@6#Kkbls0 zbD)Ek6wBbkeTKews$@wfl#;FVA;d}l-@X64ch4~X$$0W7U@~|#KpzDRnt-*a=_ZI1 zQY|9z{t^JO23RxWAt1~X>;M!1UF9iM_be3NgMc+(7)#;r0Av8b@o~5?#oQ8pX6yh% zmr!_y-lhO?V`BdrgR0R6=r-tKE=T-AZ#Js~69yB15eA{6rTs)r@; zgn7)>J#|4et3cqp+Clp--Mv+_O@SgMptw8QEE;F@SA^^pKt@I(jzsI_7Jq=c@)~m> zQv!(2)`!=Cm8UMF|MlF%Sh{u4jx1bzL|R-igK%h$4jvR|I2JCZODolBtZg6TxxL$`Z+FYIkMA zrbY$O@h#Ws<}(0t+eY-z@qd+~PDa_j>~-QQU@+8wP6!57S-T0eju;+vmFwyffNtEa z00#*jGKL4xcRp>)xZkM&t==t`8HT?HW^6+fsvfOA0-H;Amfto2vKPs1iUWE30)+GQ zPLF&zmH_k*y=?+10m#xc)eZ3wi2J2Os{`L{UILj0WUl}m)X}2=&SgCZe%NuOcRTnY zBk Date: Tue, 14 Mar 2023 15:38:18 -0300 Subject: [PATCH 040/129] Changed definitions of string conversion IDE macros to allow their use in compound literals without IDE errors --- include/global.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/global.h b/include/global.h index e0ff9f0c2..9d73afabb 100644 --- a/include/global.h +++ b/include/global.h @@ -27,8 +27,8 @@ /// IDE support #if defined(__APPLE__) || defined(__CYGWIN__) || defined(__INTELLISENSE__) // We define these when using certain IDEs to fool preproc -#define _(x) (x) -#define __(x) (x) +#define _(x) {x} +#define __(x) {x} #define INCBIN(...) {0} #define INCBIN_U8 INCBIN #define INCBIN_U16 INCBIN From 509ff4c7e0d31fb18f76dc7af3c9702095eb20fe Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 3 Feb 2023 11:21:08 +0000 Subject: [PATCH 041/129] Generic TEST that executes a function --- test/test.h | 23 +++++++++++++++++++++++ test/test_battle.h | 2 ++ test/test_runner.c | 41 ++++++++++++++++++++++++++++++++++++++--- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/test/test.h b/test/test.h index 27475bb48..764443302 100644 --- a/test/test.h +++ b/test/test.h @@ -53,6 +53,16 @@ extern const u8 gTestRunnerI; extern const char gTestRunnerArgv[256]; extern const struct TestRunner gAssumptionsRunner; + +struct FunctionTestRunnerState +{ + u8 parameters; + u8 runParameter; +}; + +extern const struct TestRunner gFunctionTestRunner; +extern struct FunctionTestRunnerState *gFunctionTestRunnerState; + extern struct TestRunnerState gTestRunnerState; void CB2_TestRunner(void); @@ -62,6 +72,17 @@ void Test_ExitWithResult(enum TestResult, const char *fmt, ...); s32 MgbaPrintf_(const char *fmt, ...); +#define TEST(_name) \ + static void CAT(Test, __LINE__)(void); \ + __attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \ + { \ + .name = _name, \ + .filename = __FILE__, \ + .runner = &gFunctionTestRunner, \ + .data = (void *)CAT(Test, __LINE__), \ + }; \ + static void CAT(Test, __LINE__)(void) + #define ASSUMPTIONS \ static void Assumptions(void); \ __attribute__((section(".tests"))) static const struct Test sAssumptions = \ @@ -138,4 +159,6 @@ s32 MgbaPrintf_(const char *fmt, ...); #define KNOWN_FAILING \ Test_ExpectedResult(TEST_RESULT_FAIL) +#define PARAMETRIZE if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter) + #endif diff --git a/test/test_battle.h b/test/test_battle.h index 16918251b..a447102f3 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -639,6 +639,8 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; /* Parametrize */ +#undef PARAMETRIZE // Override test/test.h's implementation. + #define PARAMETRIZE if (gBattleTestRunnerState->parametersCount++ == i) /* Randomly */ diff --git a/test/test_runner.c b/test/test_runner.c index f2d4d5de3..e3d286c55 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -4,6 +4,7 @@ #include "gpu_regs.h" #include "main.h" #include "malloc.h" +#include "random.h" #include "test.h" #include "test_runner.h" @@ -12,6 +13,7 @@ void CB2_TestRunner(void); EWRAM_DATA struct TestRunnerState gTestRunnerState; +EWRAM_DATA struct FunctionTestRunnerState *gFunctionTestRunnerState; void TestRunner_Battle(const struct Test *); @@ -230,6 +232,38 @@ void Test_ExpectedResult(enum TestResult result) gTestRunnerState.expectedResult = result; } +static void FunctionTest_SetUp(void *data) +{ + (void)data; + gFunctionTestRunnerState = AllocZeroed(sizeof(*gFunctionTestRunnerState)); + SeedRng(0); +} + +static void FunctionTest_Run(void *data) +{ + void (*function)(void) = data; + do + { + if (gFunctionTestRunnerState->parameters) + MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters); + gFunctionTestRunnerState->parameters = 0; + function(); + } while (++gFunctionTestRunnerState->runParameter < gFunctionTestRunnerState->parameters); +} + +static void FunctionTest_TearDown(void *data) +{ + (void)data; + FREE_AND_SET_NULL(gFunctionTestRunnerState); +} + +const struct TestRunner gFunctionTestRunner = +{ + .setUp = FunctionTest_SetUp, + .run = FunctionTest_Run, + .tearDown = FunctionTest_TearDown, +}; + static void Assumptions_Run(void *data) { void (*function)(void) = data; @@ -288,11 +322,12 @@ static void Intr_Timer2(void) void Test_ExitWithResult(enum TestResult result, const char *fmt, ...) { + bool32 handled = FALSE; gTestRunnerState.result = result; ReinitCallbacks(); - if (gTestRunnerState.test->runner->handleExitWithResult - && !gTestRunnerState.test->runner->handleExitWithResult(gTestRunnerState.test->data, result) - && gTestRunnerState.result != gTestRunnerState.expectedResult) + if (gTestRunnerState.test->runner->handleExitWithResult) + handled = gTestRunnerState.test->runner->handleExitWithResult(gTestRunnerState.test->data, result); + if (!handled && gTestRunnerState.result != gTestRunnerState.expectedResult) { va_list va; va_start(va, fmt); From 89deda04164c90197f309bc2b2a4bf54a5b34270 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Mon, 20 Feb 2023 20:06:01 +0000 Subject: [PATCH 042/129] Allow tests to override specific RNG calls --- include/random.h | 63 +++++++ src/battle_script_commands.c | 53 +++--- src/battle_util.c | 24 +-- src/random.c | 24 +++ test/ability_compound_eyes.c | 4 +- test/ability_cute_charm.c | 3 - test/ability_sand_veil.c | 2 +- test/ability_stench.c | 5 +- test/hold_effect_red_card.c | 4 +- test/move.c | 26 ++- test/move_effect_accuracy_down.c | 2 +- test/move_effect_evasion_up.c | 2 +- test/move_effect_hit_switch_target.c | 5 +- test/move_effect_rampage.c | 6 +- test/move_effect_roar.c | 4 +- test/move_effect_sleep.c | 21 ++- test/random.c | 81 +++++++++ test/status1.c | 7 +- test/test_battle.h | 68 ++++++-- test/test_runner_battle.c | 243 ++++++++++++++++----------- 20 files changed, 472 insertions(+), 175 deletions(-) create mode 100644 test/random.c diff --git a/include/random.h b/include/random.h index 6bf61de6c..60c718348 100644 --- a/include/random.h +++ b/include/random.h @@ -20,4 +20,67 @@ u16 Random2(void); void SeedRng(u16 seed); void SeedRng2(u16 seed); +/* Structured random number generator. + * Instead of the caller converting bits from Random() to a meaningful + * value, the caller provides metadata that is used to return the + * meaningful value directly. This allows code to interpret the random + * call, for example, battle tests know what the domain of a random call + * is, and can exhaustively test it. + * + * RandomTag identifies the purpose of the value. + * + * RandomUniform(tag, lo, hi) returns a number from lo to hi inclusive. + * + * RandomPercentage(tag, t) returns FALSE with probability (1-t)/100, + * and TRUE with probability t/100. + * + * RandomWeighted(tag, w0, w1, ... wN) returns a number from 0 to N + * inclusive. The return value is proportional to the weights, e.g. + * RandomWeighted(..., 1, 1) returns 50% 0s and 50% 1s. + * RandomWeighted(..., 2, 1) returns 2/3 0s and 1/3 1s. */ + +enum RandomTag +{ + RNG_NONE, + RNG_ACCURACY, + RNG_CONFUSION, + RNG_CRITICAL_HIT, + RNG_CUTE_CHARM, + RNG_DAMAGE_MODIFIER, + RNG_FLAME_BODY, + RNG_FORCE_RANDOM_SWITCH, + RNG_FROZEN, + RNG_HOLD_EFFECT_FLINCH, + RNG_INFATUATION, + RNG_PARALYSIS, + RNG_POISON_POINT, + RNG_RAMPAGE_TURNS, + RNG_SECONDARY_EFFECT, + RNG_SLEEP_TURNS, + RNG_SPEED_TIE, + RNG_STATIC, + RNG_STENCH, +}; + +#define RandomWeighted(tag, ...) \ + ({ \ + const u8 weights[] = { __VA_ARGS__ }; \ + u32 sum, i; \ + for (i = 0, sum = 0; i < ARRAY_COUNT(weights); i++) \ + sum += weights[i]; \ + RandomWeightedArray(tag, sum, ARRAY_COUNT(weights), weights); \ + }) + +#define RandomPercentage(tag, t) \ + ({ \ + const u8 weights[] = { 100 - t, t }; \ + RandomWeightedArray(tag, 100, ARRAY_COUNT(weights), weights); \ + }) + +u32 RandomUniform(enum RandomTag, u32 lo, u32 hi); +u32 RandomWeightedArray(enum RandomTag, u32 sum, u32 n, const u8 *weights); + +u32 RandomUniformDefault(enum RandomTag, u32 lo, u32 hi); +u32 RandomWeightedArrayDefault(enum RandomTag, u32 sum, u32 n, const u8 *weights); + #endif // GUARD_RANDOM_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd..e0ef56184 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1917,15 +1917,25 @@ static void Cmd_accuracycheck(void) } else { + u32 accuracy; + GET_MOVE_TYPE(move, type); if (JumpIfMoveAffectedByProtect(move)) return; if (AccuracyCalcHelper(move)) return; - // final calculation - if ((Random() % 100 + 1) > GetTotalAccuracy(gBattlerAttacker, gBattlerTarget, move, GetBattlerAbility(gBattlerAttacker), GetBattlerAbility(gBattlerTarget), - GetBattlerHoldEffect(gBattlerAttacker, TRUE), GetBattlerHoldEffect(gBattlerTarget, TRUE))) + accuracy = GetTotalAccuracy( + gBattlerAttacker, + gBattlerTarget, + move, + GetBattlerAbility(gBattlerAttacker), + GetBattlerAbility(gBattlerTarget), + GetBattlerHoldEffect(gBattlerAttacker, TRUE), + GetBattlerHoldEffect(gBattlerTarget, TRUE) + ); + + if (!RandomPercentage(RNG_ACCURACY, accuracy)) { gMoveResultFlags |= MOVE_RESULT_MISSED; if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_BLUNDER_POLICY) @@ -2104,10 +2114,8 @@ static void Cmd_critcalc(void) gIsCriticalHit = FALSE; else if (critChance == -2) gIsCriticalHit = TRUE; - else if (Random() % sCriticalHitChance[critChance] == 0) - gIsCriticalHit = TRUE; else - gIsCriticalHit = FALSE; + gIsCriticalHit = RandomWeighted(RNG_CRITICAL_HIT, sCriticalHitChance[critChance] - 1, 1); // Counter for EVO_CRITICAL_HITS. partySlot = gBattlerPartyIndexes[gBattlerAttacker]; @@ -3153,9 +3161,9 @@ void SetMoveEffect(bool32 primary, u32 certain) if (sStatusFlagsForMoveEffects[gBattleScripting.moveEffect] == STATUS1_SLEEP) #if B_SLEEP_TURNS >= GEN_5 - gBattleMons[gEffectBattler].status1 |= ((Random() % 3) + 2); + gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 1, 3)); #else - gBattleMons[gEffectBattler].status1 |= ((Random() % 4) + 3); + gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 2, 5)); #endif else gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]; @@ -3558,7 +3566,7 @@ void SetMoveEffect(bool32 primary, u32 certain) { gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS; gLockedMoves[gEffectBattler] = gCurrentMove; - gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN((Random() & 1) + 2); // thrash for 2-3 turns + gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN(RandomUniform(RNG_RAMPAGE_TURNS, 2, 3)); } break; case MOVE_EFFECT_SP_ATK_TWO_DOWN: // Overheat @@ -3779,20 +3787,23 @@ static void Cmd_seteffectwithchance(void) else percentChance = gBattleMoves[gCurrentMove].secondaryEffectChance; - if (gBattleScripting.moveEffect & MOVE_EFFECT_CERTAIN - && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleScripting.moveEffect) { - gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN; - SetMoveEffect(FALSE, MOVE_EFFECT_CERTAIN); - } - else if (Random() % 100 < percentChance - && gBattleScripting.moveEffect - && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) - { - if (percentChance >= 100) + if (gBattleScripting.moveEffect & MOVE_EFFECT_CERTAIN + || percentChance >= 100) + { + gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN; SetMoveEffect(FALSE, MOVE_EFFECT_CERTAIN); - else + } + else if (RandomPercentage(RNG_SECONDARY_EFFECT, percentChance)) + { SetMoveEffect(FALSE, 0); + } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; + } } else { @@ -12343,7 +12354,7 @@ static void Cmd_forcerandomswitch(void) *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; gBattleStruct->forcedSwitch |= gBitTable[gBattlerTarget]; - *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = validMons[Random() % validMonsCount]; + *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = validMons[RandomUniform(RNG_FORCE_RANDOM_SWITCH, 0, validMonsCount - 1)]; if (!IsMultiBattle()) SwitchPartyOrder(gBattlerTarget); diff --git a/src/battle_util.c b/src/battle_util.c index 4b50bc704..e5b037acf 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3479,7 +3479,7 @@ u8 AtkCanceller_UnableToUseMove(void) case CANCELLER_FROZEN: // check being frozen if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE && !(gBattleMoves[gCurrentMove].flags & FLAG_THAW_USER)) { - if (Random() % 5) + if (!RandomPercentage(RNG_FROZEN, 20)) { gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen; gHitMarker |= HITMARKER_NO_ATTACKSTRING; @@ -3597,9 +3597,9 @@ u8 AtkCanceller_UnableToUseMove(void) { // confusion dmg #if B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 - if (Random() % 3 == 0) + if (RandomWeighted(RNG_CONFUSION, 2, 1)) #else - if (Random() % 2 == 0) + if (RandomWeighted(RNG_CONFUSION, 1, 1)) #endif { gBattleCommunication[MULTISTRING_CHOOSER] = TRUE; @@ -3625,7 +3625,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_PARALYSED: // paralysis - if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && (Random() % 4) == 0) + if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && !RandomPercentage(RNG_PARALYSIS, 75)) { gProtectStructs[gBattlerAttacker].prlzImmobility = TRUE; // This is removed in FRLG and Emerald for some reason @@ -3640,7 +3640,7 @@ u8 AtkCanceller_UnableToUseMove(void) if (gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) { gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10); - if (Random() & 1) + if (!RandomPercentage(RNG_INFATUATION, 50)) { BattleScriptPushCursor(); } @@ -5645,7 +5645,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && TARGET_TURN_DAMAGED && CanBePoisoned(gBattlerTarget, gBattlerAttacker) && IsMoveMakingContact(move, gBattlerAttacker) - && (Random() % 3) == 0) + && RandomWeighted(RNG_POISON_POINT, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); @@ -5663,7 +5663,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && TARGET_TURN_DAMAGED && CanBeParalyzed(gBattlerAttacker) && IsMoveMakingContact(move, gBattlerAttacker) - && (Random() % 3) == 0) + && RandomWeighted(RNG_STATIC, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS; BattleScriptPushCursor(); @@ -5679,7 +5679,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && (IsMoveMakingContact(move, gBattlerAttacker)) && TARGET_TURN_DAMAGED && CanBeBurned(gBattlerAttacker) - && (Random() % 3) == 0) + && RandomWeighted(RNG_FLAME_BODY, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; BattleScriptPushCursor(); @@ -5695,7 +5695,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && (IsMoveMakingContact(move, gBattlerAttacker)) && TARGET_TURN_DAMAGED && gBattleMons[gBattlerTarget].hp != 0 - && (Random() % 3) == 0 + && RandomWeighted(RNG_CUTE_CHARM, 2, 1) && GetBattlerAbility(gBattlerAttacker) != ABILITY_OBLIVIOUS && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL) && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) @@ -5915,7 +5915,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerTarget].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (Random() % 10) == 0 + && RandomWeighted(RNG_STENCH, 9, 1) && !IS_MOVE_STATUS(move) && !sMovesNotAffectedByStench[gCurrentMove]) { @@ -7635,7 +7635,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) if (gBattleMoveDamage != 0 // Need to have done damage && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED - && (Random() % 100) < atkHoldEffectParam + && RandomPercentage(RNG_HOLD_EFFECT_FLINCH, atkHoldEffectParam) && gBattleMoves[gCurrentMove].flags & FLAG_KINGS_ROCK_AFFECTED && gBattleMons[gBattlerTarget].hp) { @@ -9752,7 +9752,7 @@ static s32 DoMoveDamageCalc(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, // Add a random factor. if (randomFactor) { - dmg *= 100 - (Random() % 16); + dmg *= 100 - RandomUniform(RNG_DAMAGE_MODIFIER, 0, 15); dmg /= 100; } diff --git a/src/random.c b/src/random.c index de923fba6..e59b56387 100644 --- a/src/random.c +++ b/src/random.c @@ -31,3 +31,27 @@ u16 Random2(void) gRng2Value = ISO_RANDOMIZE1(gRng2Value); return gRng2Value >> 16; } + +__attribute__((weak, alias("RandomUniformDefault"))) +u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi); + +__attribute__((weak, alias("RandomWeightedArrayDefault"))) +u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights); + +u32 RandomUniformDefault(enum RandomTag tag, u32 lo, u32 hi) +{ + return lo + (((hi - lo) * Random()) >> 16); +} + +u32 RandomWeightedArrayDefault(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) +{ + s32 i, targetSum; + targetSum = (sum * Random()) >> 16; + for (i = 0; i < n - 1; i++) + { + targetSum -= weights[i]; + if (targetSum < 0) + return i; + } + return n - 1; +} diff --git a/test/ability_compound_eyes.c b/test/ability_compound_eyes.c index 97ab84dd2..bbe718176 100644 --- a/test/ability_compound_eyes.c +++ b/test/ability_compound_eyes.c @@ -3,7 +3,7 @@ SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") { - PASSES_RANDOMLY(91, 100); + PASSES_RANDOMLY(91, 100, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_THUNDER].accuracy == 70); PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_COMPOUND_EYES); }; @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") SINGLE_BATTLE_TEST("Compound Eyes does not affect OHKO moves") { KNOWN_FAILING; - PASSES_RANDOMLY(30, 100); + PASSES_RANDOMLY(30, 100, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_FISSURE].accuracy == 30); ASSUME(gBattleMoves[MOVE_FISSURE].effect == EFFECT_OHKO); diff --git a/test/ability_cute_charm.c b/test/ability_cute_charm.c index 5e089efdf..ccf5c490b 100644 --- a/test/ability_cute_charm.c +++ b/test/ability_cute_charm.c @@ -1,9 +1,6 @@ #include "global.h" #include "test_battle.h" -// TODO: Currently PASSES_RANDOMLY is incapable of testing Cute Charm -// because it only activates 33% of the time, but we only want to -// measure the 50% of the time that the infatuation prevents our move. SINGLE_BATTLE_TEST("Cute Charm inflicts infatuation on contact") { u32 move; diff --git a/test/ability_sand_veil.c b/test/ability_sand_veil.c index 5d2325140..5514f27c0 100644 --- a/test/ability_sand_veil.c +++ b/test/ability_sand_veil.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Sand Veil prevents damage from sandstorm") SINGLE_BATTLE_TEST("Sand Veil reduces accuracy during sandstorm") { - PASSES_RANDOMLY(4,5); + PASSES_RANDOMLY(4, 5, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_POUND].accuracy == 100); PLAYER(SPECIES_SANDSHREW) { Ability(ABILITY_SAND_VEIL); }; diff --git a/test/ability_stench.c b/test/ability_stench.c index 18d909768..fb76ebc07 100644 --- a/test/ability_stench.c +++ b/test/ability_stench.c @@ -3,7 +3,7 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") { - PASSES_RANDOMLY(1,10); + PASSES_RANDOMLY(1, 10, RNG_STENCH); GIVEN { ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); PLAYER(SPECIES_GRIMER) { Ability(ABILITY_STENCH); }; @@ -17,7 +17,8 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") SINGLE_BATTLE_TEST("Stench does not stack with King's Rock") { - PASSES_RANDOMLY(1,10); + KNOWN_FAILING; + PASSES_RANDOMLY(1, 10, RNG_STENCH); GIVEN { ASSUME(gItems[ITEM_KINGS_ROCK].holdEffect == HOLD_EFFECT_FLINCH); ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); diff --git a/test/hold_effect_red_card.c b/test/hold_effect_red_card.c index 882007cfd..0a8bb3460 100644 --- a/test/hold_effect_red_card.c +++ b/test/hold_effect_red_card.c @@ -8,7 +8,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Red Card switches the attacker with a random non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } OPPONENT(SPECIES_WOBBUFFET); @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Red Card switches the attacker with a random non-fainted rep DOUBLE_BATTLE_TEST("Red Card switches the target with a random non-battler, non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } PLAYER(SPECIES_WYNAUT); diff --git a/test/move.c b/test/move.c index d7e759f27..9ad336330 100644 --- a/test/move.c +++ b/test/move.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Accuracy controls the proportion of misses") PARAMETRIZE { move = MOVE_RAZOR_LEAF; } PARAMETRIZE { move = MOVE_SCRATCH; } ASSUME(0 < gBattleMoves[move].accuracy && gBattleMoves[move].accuracy <= 100); - PASSES_RANDOMLY(gBattleMoves[move].accuracy, 100); + PASSES_RANDOMLY(gBattleMoves[move].accuracy, 100, RNG_ACCURACY); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -27,10 +27,9 @@ SINGLE_BATTLE_TEST("Secondary Effect Chance controls the proportion of secondary PARAMETRIZE { move = MOVE_THUNDER_SHOCK; } PARAMETRIZE { move = MOVE_DISCHARGE; } PARAMETRIZE { move = MOVE_NUZZLE; } - ASSUME(gBattleMoves[move].accuracy == 100); ASSUME(gBattleMoves[move].effect == EFFECT_PARALYZE_HIT); ASSUME(0 < gBattleMoves[move].secondaryEffectChance && gBattleMoves[move].secondaryEffectChance <= 100); - PASSES_RANDOMLY(gBattleMoves[move].secondaryEffectChance, 100); + PASSES_RANDOMLY(gBattleMoves[move].secondaryEffectChance, 100, RNG_SECONDARY_EFFECT); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -70,6 +69,7 @@ SINGLE_BATTLE_TEST("Turn order is determined by speed if priority ties") SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and speed tie") { + KNOWN_FAILING; // The algorithm is significantly biased. PASSES_RANDOMLY(1, 2); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(1); } @@ -85,15 +85,29 @@ SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and speed tie" SINGLE_BATTLE_TEST("Critical hits occur at a 1/24 rate") { ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); - PASSES_RANDOMLY(100 / 24, 100); + PASSES_RANDOMLY(1, 24, RNG_CRITICAL_HIT); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SCRATCH); } } SCENE { - MESSAGE("It's a critical hit!"); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Slash's critical hits occur at a 1/8 rate") +{ + ASSUME(B_CRIT_CHANCE >= GEN_7); + ASSUME(gBattleMoves[MOVE_SLASH].flags & FLAG_HIGH_CRIT); + PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLASH); } + } SCENE { + MESSAGE("A critical hit!"); } } diff --git a/test/move_effect_accuracy_down.c b/test/move_effect_accuracy_down.c index 2a90d8ea2..a6a79d8db 100644 --- a/test/move_effect_accuracy_down.c +++ b/test/move_effect_accuracy_down.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Sand Attack lowers Accuracy") { ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); - PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100); + PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100, RNG_ACCURACY); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/move_effect_evasion_up.c b/test/move_effect_evasion_up.c index d14d15334..4a4e99db7 100644 --- a/test/move_effect_evasion_up.c +++ b/test/move_effect_evasion_up.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Double Team raises Evasion") { ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); - PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100); + PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100, RNG_ACCURACY); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/move_effect_hit_switch_target.c b/test/move_effect_hit_switch_target.c index 9c50a4e4c..5af3062a4 100644 --- a/test/move_effect_hit_switch_target.c +++ b/test/move_effect_hit_switch_target.c @@ -9,8 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Dragon Tail switches the target with a random non-fainted replacement") { - KNOWN_FAILING; // Only 18/50. Waiting for an improved PASSES_RANDOMLY. - PASSES_RANDOMLY(90 * 1, 100 * 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -27,7 +26,7 @@ SINGLE_BATTLE_TEST("Dragon Tail switches the target with a random non-fainted re DOUBLE_BATTLE_TEST("Dragon Tail switches the target with a random non-battler, non-fainted replacement") { - PASSES_RANDOMLY(90 * 1, 100 * 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); diff --git a/test/move_effect_rampage.c b/test/move_effect_rampage.c index a3afebf6b..aa4a002fb 100644 --- a/test/move_effect_rampage.c +++ b/test/move_effect_rampage.c @@ -8,7 +8,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Thrash lasts for 2 or 3 turns") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_RAMPAGE_TURNS); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -26,7 +26,6 @@ SINGLE_BATTLE_TEST("Thrash lasts for 2 or 3 turns") SINGLE_BATTLE_TEST("Thrash confuses the user after it finishes") { GIVEN { - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -45,7 +44,6 @@ SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 1 { GIVEN { ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -61,7 +59,6 @@ SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 2 { GIVEN { ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -78,7 +75,6 @@ SINGLE_BATTLE_TEST("Thrash confuses the user if it is canceled on turn 3 of 3") KNOWN_FAILING; GIVEN { ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/move_effect_roar.c b/test/move_effect_roar.c index 2d4eadda8..99256b298 100644 --- a/test/move_effect_roar.c +++ b/test/move_effect_roar.c @@ -8,7 +8,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Roar switches the target with a random non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Roar switches the target with a random non-fainted replaceme DOUBLE_BATTLE_TEST("Roar switches the target with a random non-battler, non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); diff --git a/test/move_effect_sleep.c b/test/move_effect_sleep.c index c80faf4bd..c34e1248e 100644 --- a/test/move_effect_sleep.c +++ b/test/move_effect_sleep.c @@ -6,16 +6,33 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_HYPNOSIS].effect == EFFECT_SLEEP); } -SINGLE_BATTLE_TEST("Hypnosis inflicts sleep") +SINGLE_BATTLE_TEST("Hypnosis inflicts 1-3 turns of sleep") { + u32 turns, count; + ASSUME(B_SLEEP_TURNS >= GEN_5); + PARAMETRIZE { turns = 1; } + PARAMETRIZE { turns = 2; } + PARAMETRIZE { turns = 3; } + PASSES_RANDOMLY(1, 3, RNG_SLEEP_TURNS); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_HYPNOSIS); } + TURN { MOVE(player, MOVE_HYPNOSIS); MOVE(opponent, MOVE_CELEBRATE); } + for (count = 0; count < turns; ++count) + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPNOSIS, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + MESSAGE("Foe Wobbuffet fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); + for (count = 0; count < turns; ++count) + { + if (count < turns - 1) + MESSAGE("Foe Wobbuffet is fast asleep."); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + } + MESSAGE("Foe Wobbuffet woke up!"); + STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/random.c b/test/random.c new file mode 100644 index 000000000..abaf4a4f8 --- /dev/null +++ b/test/random.c @@ -0,0 +1,81 @@ +#include "global.h" +#include "test.h" +#include "random.h" + +TEST("RandomUniform generates lo..hi") +{ + u32 lo, hi, i; + PARAMETRIZE { lo = 0; hi = 1; } + PARAMETRIZE { lo = 0; hi = 2; } + PARAMETRIZE { lo = 0; hi = 3; } + PARAMETRIZE { lo = 2; hi = 4; } + for (i = 0; i < 1024; i++) + { + u32 r = RandomUniformDefault(RNG_NONE, lo, hi); + EXPECT(lo <= r && r <= hi); + } +} + +TEST("RandomWeighted generates 0..n-1") +{ + u32 n, sum, i; + static const u8 ws[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + PARAMETRIZE { n = 1; } + PARAMETRIZE { n = 2; } + PARAMETRIZE { n = 3; } + PARAMETRIZE { n = 4; } + ASSUME(n <= ARRAY_COUNT(ws)); + for (i = 0, sum = 0; i < n; i++) + sum += ws[i]; + for (i = 0; i < 1024; i++) + { + u32 r = RandomWeightedArrayDefault(RNG_NONE, sum, n, ws); + EXPECT(0 <= r && r < n); + } +} + +TEST("RandomUniform generates uniform distribution") +{ + u32 i, error; + u16 distribution[4]; + + memset(distribution, 0, sizeof(distribution)); + for (i = 0; i < 4096; i++) + { + u32 r = RandomUniformDefault(RNG_NONE, 0, ARRAY_COUNT(distribution)); + EXPECT(0 <= r && r < ARRAY_COUNT(distribution)); + distribution[r]++; + } + + error = 0; + for (i = 0; i < ARRAY_COUNT(distribution); i++) + error += abs(UQ_4_12(0.25) - distribution[i]); + + EXPECT_LT(error, UQ_4_12(0.025)); +} + +TEST("RandomWeighted generates distribution in proportion to the weights") +{ + u32 i, sum, error; + static const u8 ws[4] = { 1, 2, 2, 3 }; + u16 distribution[ARRAY_COUNT(ws)]; + + for (i = 0, sum = 0; i < ARRAY_COUNT(ws); i++) + sum += ws[i]; + + memset(distribution, 0, sizeof(distribution)); + for (i = 0; i < 4096; i++) + { + u32 r = RandomWeightedArrayDefault(RNG_NONE, sum, ARRAY_COUNT(ws), ws); + EXPECT(0 <= r && r < ARRAY_COUNT(ws)); + distribution[r]++; + } + + error = 0; + error += abs(UQ_4_12(0.125) - distribution[0]); + error += abs(UQ_4_12(0.250) - distribution[1]); + error += abs(UQ_4_12(0.250) - distribution[2]); + error += abs(UQ_4_12(0.375) - distribution[3]); + + EXPECT_LT(error, UQ_4_12(0.025)); +} diff --git a/test/status1.c b/test/status1.c index 63a9cd041..f4d3c7d94 100644 --- a/test/status1.c +++ b/test/status1.c @@ -72,7 +72,7 @@ SINGLE_BATTLE_TEST("Burn reduces attack by 50%", s16 damage) SINGLE_BATTLE_TEST("Freeze has a 20% chance of being thawed") { - PASSES_RANDOMLY(20, 100); + PASSES_RANDOMLY(20, 100, RNG_FROZEN); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } OPPONENT(SPECIES_WOBBUFFET); @@ -90,9 +90,8 @@ SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_EMBER); } + TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Wobbuffet is frozen solid!"); MESSAGE("Foe Wobbuffet used Ember!"); MESSAGE("Wobbuffet was defrosted!"); STATUS_ICON(player, none: TRUE); @@ -145,7 +144,7 @@ SINGLE_BATTLE_TEST("Paralysis reduces speed by 50%") SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") { - PASSES_RANDOMLY(25, 100); + PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/test_battle.h b/test/test_battle.h index a447102f3..8c554216e 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -65,8 +65,9 @@ * single turn. MOVE causes the player to use Stun Spore and adds the * move to the Pokémon's moveset if an explicit Moves was not specified. * Pokémon that are not mentioned in a TURN use Celebrate. - * The test runner attempts to rig the RNG so that the first move used - * in a turn does not miss and activates its secondary effects (if any). + * The test runner rigs the RNG so that unless otherwise specified, + * moves always hit, never critical hit, always activate their secondary + * effects, and always roll the same damage modifier. * * SCENE describes the player-visible output of the battle. In this case * ANIMATION checks that the Stun Spore animation played, MESSAGE checks @@ -228,12 +229,35 @@ * } * } * - * PASSES_RANDOMLY(successes, trials) - * Checks that the test passes approximately successes/trials. Used for - * testing RNG-based attacks, e.g.: + * PASSES_RANDOMLY(successes, trials, [tag]) + * Checks that the test passes successes/trials. If tag is provided, the + * test is run for each value that the tag can produce. For example, to + * check that Paralysis causes the turn to be skipped 25/100 times, we + * can write the following test that passes only if the Pokémon is fully + * paralyzed and specify that we expect it to pass 25/100 times when + * RNG_PARALYSIS varies: + * 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!"); + * } + * } + * All BattleRandom calls involving tag will return the same number, so + * this cannot be used to have two moves independently hit or miss, for + * example. + * + * If the tag is not provided, runs the test 50 times and computes an + * approximate pass ratio. * PASSES_RANDOMLY(gBattleMoves[move].accuracy, 100); - * Note that PASSES_RANDOMLY makes the tests run very slowly and should - * be avoided where possible. + * Note that this mode of PASSES_RANDOMLY makes the tests run very + * slowly and should be avoided where possible. If the mechanic you are + * testing is missing its tag, you should add it. * * GIVEN * Contains the initial state of the parties before the battle. @@ -419,6 +443,7 @@ #include "battle_anim.h" #include "data.h" #include "item.h" +#include "random.h" #include "recorded_battle.h" #include "test.h" #include "util.h" @@ -433,6 +458,7 @@ // NOTE: If the stack is too small the test runner will probably crash // or loop. #define BATTLE_TEST_STACK_SIZE 1024 +#define MAX_TURNS 16 #define MAX_QUEUED_EVENTS 25 enum { BATTLE_TEST_SINGLES, BATTLE_TEST_DOUBLES }; @@ -512,6 +538,13 @@ struct QueuedEvent } as; }; +struct BattlerTurn +{ + u8 hit:2; + u8 criticalHit:2; + u8 secondaryEffect:2; +}; + struct BattleTestData { u8 stack[BATTLE_TEST_STACK_SIZE]; @@ -533,14 +566,13 @@ struct BattleTestData u8 turns; u8 actionBattlers; u8 moveBattlers; - bool8 hasRNGActions:1; struct RecordedBattleSave recordedBattle; u8 battleRecordTypes[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; u8 battleRecordSourceLineOffsets[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; u16 recordIndexes[MAX_BATTLERS_COUNT]; + struct BattlerTurn battleRecordTurns[MAX_TURNS][MAX_BATTLERS_COUNT]; u8 lastActionTurn; - u8 nextRNGTurn; u8 queuedEventsCount; u8 queueGroupType; @@ -555,11 +587,12 @@ struct BattleTestRunnerState u8 parametersCount; // Valid only in BattleTest_Setup. u8 parameters; u8 runParameter; + u16 rngTag; u8 trials; - u8 expectedPasses; - u8 observedPasses; - u8 skippedTrials; u8 runTrial; + u16 expectedRatio; + u16 observedRatio; + u16 trialRatio; bool8 runRandomly:1; bool8 runGiven:1; bool8 runWhen:1; @@ -645,9 +678,14 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; /* Randomly */ -#define PASSES_RANDOMLY(passes, trials) for (; gBattleTestRunnerState->runRandomly; gBattleTestRunnerState->runRandomly = FALSE) Randomly(__LINE__, passes, trials) +#define PASSES_RANDOMLY(passes, trials, ...) for (; gBattleTestRunnerState->runRandomly; gBattleTestRunnerState->runRandomly = FALSE) Randomly(__LINE__, passes, trials, (struct RandomlyContext) { __VA_ARGS__ }) -void Randomly(u32 sourceLine, u32 passes, u32 trials); +struct RandomlyContext +{ + u16 tag; +}; + +void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext); /* Given */ @@ -721,6 +759,8 @@ struct MoveContext u16 explicitHit:1; u16 criticalHit:1; u16 explicitCriticalHit:1; + u16 secondaryEffect:1; + u16 explicitSecondaryEffect:1; u16 megaEvolve:1; u16 explicitMegaEvolve:1; // TODO: u8 zMove:1; diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index ec7ba275c..0c3c23063 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -15,26 +15,10 @@ #define STATE gBattleTestRunnerState #define DATA gBattleTestRunnerState->data -/* RNG seeds for controlling the first move of the turn. - * Found via brute force. */ +#define RNG_SEED_DEFAULT 0x00000000 -/* Default seed, triggers most things. - * The 1st roll % 100 is <= 29, to make 30%+ accuracycheck pass. - * The 2nd roll is not a critical hit at the regular crit stage. - * The 3rd roll is consumed by damagecalc. - * The 4th roll is consumed by adjustdamage. - * The 5th roll % 100 is <= 9, to make 10%+ seteffectwithchance pass - * and % 3 is == 0, to make Poison Point and other 1/3s pass. */ -#define RNG_SEED_DEFAULT 0x000002BE - -/* Causes the first attack to critical hit if B_CRIT_CHANCE >= GEN_6. - * The 2nd roll % 24 == 0 to be a critical hit at any stage. - * The other rolls match RNG_SEED_DEFAULT. */ -#define RNG_SEED_CRITICAL_HIT 0x0000A9F4 - -/* Causes the first attack to miss if possible. - * The 1st roll % 100 is 99, to make 99%- accuracycheck fail. */ -#define RNG_SEED_MISS 0x00000074 +#undef Q_4_12 +#define Q_4_12(n) (s32)((n) * 4096) EWRAM_DATA struct BattleTestRunnerState *gBattleTestRunnerState = NULL; @@ -129,12 +113,13 @@ static u32 BattleTest_EstimateCost(void *data) if (!STATE) return 0; STATE->runRandomly = TRUE; - DATA.recordedBattle.rngSeed = RNG_SEED_DEFAULT; InvokeTestFunction(test); cost = 1; if (STATE->parametersCount != 0) cost *= STATE->parametersCount; - if (STATE->trials != 0) + if (STATE->trials == 1) + cost *= 3; + else if (STATE->trials > 1) cost *= STATE->trials; FREE_AND_SET_NULL(STATE); return cost; @@ -162,6 +147,28 @@ static void BattleTest_SetUp(void *data) } } +static void PrintTestName(void) +{ + if (STATE->trials && STATE->parameters) + { + if (STATE->trials == 1) + MgbaPrintf_(":N%s %d/%d (%d/?)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1); + else + MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); + } + else if (STATE->trials) + { + if (STATE->trials == 1) + MgbaPrintf_(":N%s (%d/?)", gTestRunnerState.test->name, STATE->runTrial + 1); + else + MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); + } + else if (STATE->parameters) + { + MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters); + } +} + // This does not take into account priority, statuses, or any other // modifiers. static void SetImplicitSpeeds(void) @@ -280,12 +287,82 @@ static void BattleTest_Run(void *data) STATE->checkProgressTrial = 0; STATE->checkProgressTurn = 0; - if (STATE->trials && STATE->parameters) - MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); - else if (STATE->trials) - MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); - else if (STATE->parameters) - MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters); + PrintTestName(); +} + +u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi) +{ + if (tag == STATE->rngTag) + { + u32 n = hi - lo + 1; + if (STATE->trials == 1) + { + STATE->trials = n; + PrintTestName(); + } + else if (STATE->trials != n) + { + Test_ExitWithResult(TEST_RESULT_ERROR, "RandomUniform called with inconsistent trials %d and %d", STATE->trials, n); + } + STATE->trialRatio = Q_4_12(1) / n; + return STATE->runTrial + lo; + } + + return hi; +} + +u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) +{ + const struct BattlerTurn *turn = NULL; + u32 default_ = n-1; + + if (gCurrentTurnActionNumber < gBattlersCount) + { + u32 battlerId = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; + } + + switch (tag) + { + case RNG_ACCURACY: + ASSUME(n == 2); + if (turn && turn->hit) + return turn->hit - 1; + default_ = TRUE; + break; + + case RNG_CRITICAL_HIT: + ASSUME(n == 2); + if (turn && turn->criticalHit) + return turn->criticalHit - 1; + default_ = FALSE; + break; + + case RNG_SECONDARY_EFFECT: + ASSUME(n == 2); + if (turn && turn->secondaryEffect) + return turn->secondaryEffect - 1; + default_ = TRUE; + break; + } + + if (tag == STATE->rngTag) + { + if (STATE->trials == 1) + { + STATE->trials = n; + PrintTestName(); + } + else if (STATE->trials != n) + { + Test_ExitWithResult(TEST_RESULT_ERROR, "RandomWeighted called with inconsistent trials %d and %d", STATE->trials, n); + } + // TODO: Detect inconsistent sum. + STATE->trialRatio = Q_4_12(weights[STATE->runTrial]) / sum; + return STATE->runTrial; + } + + return default_; } static s32 TryAbilityPopUp(s32 i, s32 n, u32 battlerId, u32 ability) @@ -711,42 +788,36 @@ static void CB2_BattleTest_NextTrial(void) SetMainCallback2(CB2_BattleTest_NextParameter); + switch (gTestRunnerState.result) + { + case TEST_RESULT_FAIL: + break; + case TEST_RESULT_PASS: + STATE->observedRatio += STATE->trialRatio; + break; + default: + return; + } + if (STATE->rngTag) + STATE->trialRatio = 0; + if (++STATE->runTrial < STATE->trials) { - switch (gTestRunnerState.result) - { - case TEST_RESULT_FAIL: - break; - case TEST_RESULT_PASS: - STATE->observedPasses++; - break; - case TEST_RESULT_ASSUMPTION_FAIL: - STATE->skippedTrials++; - if (STATE->skippedTrials > STATE->trials / 4) - Test_ExitWithResult(TEST_RESULT_INVALID, "25%% of the trials were SKIPed"); - break; - default: - return; - } - if (STATE->parameters) - MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); - else - MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); - gTestRunnerState.result = TEST_RESULT_PASS; + PrintTestName(); + gTestRunnerState.result = TEST_RESULT_PASS; DATA.recordedBattle.rngSeed = ISO_RANDOMIZE1(STATE->runTrial); DATA.queuedEvent = 0; DATA.lastActionTurn = 0; - DATA.nextRNGTurn = 0; SetVariablesForRecordedBattle(&DATA.recordedBattle); SetMainCallback2(CB2_InitBattle); } else { - // This is a tolerance of +/- 4%. - if (abs(STATE->observedPasses - STATE->expectedPasses) <= 2) + // This is a tolerance of +/- ~2%. + if (abs(STATE->observedRatio - STATE->expectedRatio) <= Q_4_12(0.02)) gTestRunnerState.result = TEST_RESULT_PASS; else - Test_ExitWithResult(TEST_RESULT_FAIL, "Expected %d/%d passes, observed %d/%d", STATE->expectedPasses, STATE->trials, STATE->observedPasses, STATE->trials); + Test_ExitWithResult(TEST_RESULT_FAIL, "Expected %q passes/successes, observed %q", STATE->expectedRatio, STATE->observedRatio); } } @@ -773,7 +844,8 @@ static bool32 BattleTest_CheckProgress(void *data) static bool32 BattleTest_HandleExitWithResult(void *data, enum TestResult result) { - if (result != TEST_RESULT_INVALID + if (result != TEST_RESULT_ASSUMPTION_FAIL + && result != TEST_RESULT_INVALID && result != TEST_RESULT_ERROR && result != TEST_RESULT_TIMEOUT && STATE->runTrial < STATE->trials) @@ -787,16 +859,25 @@ static bool32 BattleTest_HandleExitWithResult(void *data, enum TestResult result } } -void Randomly(u32 sourceLine, u32 passes, u32 trials) +void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext ctx) { - INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); - // This is a precision of 2%. - STATE->trials = 50; - STATE->expectedPasses = STATE->trials * passes / trials; - STATE->observedPasses = 0; - STATE->skippedTrials = 0; + INVALID_IF(passes > trials, "%d passes specified, but only %d trials", passes, trials); + STATE->rngTag = ctx.tag; STATE->runTrial = 0; - DATA.recordedBattle.rngSeed = 0; + STATE->expectedRatio = Q_4_12(passes) / trials; + STATE->observedRatio = 0; + if (STATE->rngTag) + { + STATE->trials = 1; + STATE->trialRatio = Q_4_12(1); + } + else + { + INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); + STATE->trials = 50; + STATE->trialRatio = Q_4_12(1) / STATE->trials; + DATA.recordedBattle.rngSeed = 0; + } } void RNGSeed_(u32 sourceLine, u32 seed) @@ -1037,16 +1118,6 @@ static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32 void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType) { - // TODO: Support explicit seeds for each turn? - if (DATA.nextRNGTurn == gBattleResults.battleTurnCounter - && (DATA.recordedBattle.rngSeed == RNG_SEED_DEFAULT - || DATA.recordedBattle.rngSeed == RNG_SEED_CRITICAL_HIT - || DATA.recordedBattle.rngSeed == RNG_SEED_MISS)) - { - gRngValue = DATA.recordedBattle.rngSeed; - DATA.nextRNGTurn++; - } - // An illegal move choice will cause the battle to request a new // move slot and target. This detects the move slot. if (actionType == RECORDED_MOVE_SLOT @@ -1122,10 +1193,11 @@ void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 void OpenTurn(u32 sourceLine) { INVALID_IF(DATA.turnState != TURN_CLOSED, "Nested TURN"); + if (DATA.turns == MAX_TURNS) + Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: TURN exceeds MAX_TURNS", gTestRunnerState.test->filename, sourceLine); DATA.turnState = TURN_OPEN; DATA.actionBattlers = 0x00; DATA.moveBattlers = 0x00; - DATA.hasRNGActions = FALSE; } static void SetSlowerThan(s32 battlerId) @@ -1253,21 +1325,12 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) } } - if (ctx.explicitHit && !ctx.hit) - { - if (DATA.hasRNGActions != 0) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: hit only supported on the first move", gTestRunnerState.test->filename, sourceLine); - INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); - DATA.recordedBattle.rngSeed = RNG_SEED_MISS; - } - - if (ctx.explicitCriticalHit && ctx.criticalHit) - { - if (DATA.hasRNGActions != 0) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: criticalHit only supported on the first move", gTestRunnerState.test->filename, sourceLine); - INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); - DATA.recordedBattle.rngSeed = RNG_SEED_CRITICAL_HIT; - } + if (ctx.explicitHit) + DATA.battleRecordTurns[DATA.turns][battlerId].hit = 1 + ctx.hit; + if (ctx.explicitCriticalHit) + DATA.battleRecordTurns[DATA.turns][battlerId].criticalHit = 1 + ctx.criticalHit; + if (ctx.explicitSecondaryEffect) + DATA.battleRecordTurns[DATA.turns][battlerId].secondaryEffect = 1 + ctx.secondaryEffect; if (!(DATA.actionBattlers & (1 << battlerId))) { @@ -1288,14 +1351,6 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) DATA.actionBattlers |= 1 << battlerId; DATA.moveBattlers |= 1 << battlerId; } - - // WARNING: Approximation. The move could still cause the RNG to - // advance. - if (gBattleMoves[moveId].accuracy != 0 - || gBattleMoves[moveId].split != SPLIT_STATUS) - { - DATA.hasRNGActions = TRUE; - } } void ForcedMove(u32 sourceLine, struct BattlePokemon *battler) From f4e8389779da1d3a16c524dade408c9072a14ecd Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 16 Mar 2023 17:58:39 -0300 Subject: [PATCH 043/129] Added Psyblade and Hydro Steam --- data/battle_anim_scripts.s | 4 ++++ data/battle_scripts_1.s | 4 +++- include/constants/battle_move_effects.h | 4 +++- include/constants/moves.h | 4 +++- src/battle_util.c | 6 ++++- src/data/battle_moves.h | 30 +++++++++++++++++++++++++ src/data/contest_moves.h | 4 ++++ src/data/text/move_descriptions.h | 10 +++++++++ src/data/text/move_names.h | 4 ++++ 9 files changed, 66 insertions(+), 4 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 4663fdcaf..cca8706cb 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -854,6 +854,8 @@ gBattleAnims_Moves:: .4byte Move_NOXIOUS_TORQUE .4byte Move_COMBAT_TORQUE .4byte Move_MAGICAL_TORQUE + .4byte Move_PSYBLADE + .4byte Move_HYDRO_STEAM @@@@ Z MOVES .4byte Move_BREAKNECK_BLITZ .4byte Move_ALL_OUT_PUMMELING @@ -14464,6 +14466,8 @@ Move_WICKED_TORQUE:: Move_NOXIOUS_TORQUE:: Move_COMBAT_TORQUE:: Move_MAGICAL_TORQUE:: +Move_PSYBLADE:: +Move_HYDRO_STEAM:: end @to do @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8b93edb78..52c135294 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,7 +417,9 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY - .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectHit @ EFFECT_PSYBLADE + .4byte BattleScript_EffectHit @ EFFECT_HYDRO_STEAM BattleScript_EffectAttackUpUserAlly: jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 061271dd5..c374ce436 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -399,7 +399,9 @@ #define EFFECT_TEATIME 393 #define EFFECT_ATTACK_UP_USER_ALLY 394 // Howl 8th Gen #define EFFECT_SHELL_TRAP 395 +#define EFFECT_PSYBLADE 396 +#define EFFECT_HYDRO_STEAM 397 -#define NUM_BATTLE_MOVE_EFFECTS 396 +#define NUM_BATTLE_MOVE_EFFECTS 398 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/moves.h b/include/constants/moves.h index 20cb32c54..dd00aacb4 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -858,8 +858,10 @@ #define MOVE_NOXIOUS_TORQUE 824 #define MOVE_COMBAT_TORQUE 825 #define MOVE_MAGICAL_TORQUE 826 +#define MOVE_PSYBLADE 827 +#define MOVE_HYDRO_STEAM 828 -#define MOVES_COUNT_GEN9 827 +#define MOVES_COUNT_GEN9 829 #define MOVES_COUNT MOVES_COUNT_GEN9 diff --git a/src/battle_util.c b/src/battle_util.c index 4b50bc704..fcfec90c2 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8769,6 +8769,10 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower = CalcBeatUpPower(); #endif break; + case EFFECT_PSYBLADE: + if (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_ELECTRIC_TERRAIN)) + MulModifier(&basePower, UQ_4_12(1.5)); + break; } // Move-specific base power changes @@ -9586,7 +9590,7 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move } else if (IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN)) { - if (moveType == TYPE_FIRE) + if (moveType == TYPE_FIRE || gBattleMoves[move].effect == EFFECT_HYDRO_STEAM) dmg = ApplyModifier(UQ_4_12(1.5), dmg); else if (moveType == TYPE_WATER) dmg = ApplyModifier(UQ_4_12(0.5), dmg); diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index dc18893de..7ce5a669e 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13593,6 +13593,36 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE }, + [MOVE_PSYBLADE] = + { + .effect = EFFECT_PSYBLADE, + .power = 80, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HYDRO_STEAM] = + { + .effect = EFFECT_HYDRO_STEAM, + .power = 80, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + // Z-Moves [MOVE_BREAKNECK_BLITZ] = { diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h index 2de44b348..3d633a256 100644 --- a/src/data/contest_moves.h +++ b/src/data/contest_moves.h @@ -6062,6 +6062,10 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = [MOVE_COMBAT_TORQUE] = {0}, // TODO [MOVE_MAGICAL_TORQUE] = {0}, // TODO + + [MOVE_PSYBLADE] = {0}, // TODO + + [MOVE_HYDRO_STEAM] = {0}, // TODO }; const struct ContestEffect gContestEffects[] = diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h index 7000759f7..c2b7e0b23 100644 --- a/src/data/text/move_descriptions.h +++ b/src/data/text/move_descriptions.h @@ -3236,6 +3236,14 @@ static const u8 sCombatTorqueDescription[] = _( static const u8 sMagicalTorqueDescription[] = _( "---"); +static const u8 sPsybladeDescription[] = _( + "This move's power increases\n" + "when on Electric Terrain."); + +static const u8 sHydroSteamDescription[] = _( + "This move's power increases\n" + "under harsh sunlight."); + const u8 gNotDoneYetDescription[] = _( "This move can't be used. Its\n" "effect is in development."); @@ -4073,4 +4081,6 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] = [MOVE_NOXIOUS_TORQUE - 1] = sNoxiousTorqueDescription, [MOVE_COMBAT_TORQUE - 1] = sCombatTorqueDescription, [MOVE_MAGICAL_TORQUE - 1] = sMagicalTorqueDescription, + [MOVE_PSYBLADE - 1] = sPsybladeDescription, + [MOVE_HYDRO_STEAM - 1] = sHydroSteamDescription, }; diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h index 221d3db73..85d406dca 100644 --- a/src/data/text/move_names.h +++ b/src/data/text/move_names.h @@ -829,6 +829,8 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_NOXIOUS_TORQUE] = _("Noxious Torque"), [MOVE_COMBAT_TORQUE] = _("Combat Torque"), [MOVE_MAGICAL_TORQUE] = _("Magical Torque"), + [MOVE_PSYBLADE] = _("Psyblade"), + [MOVE_HYDRO_STEAM] = _("Hydro Steam"), }; #else // 12 letters @@ -1661,6 +1663,8 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_NOXIOUS_TORQUE] = _("NoxiusTorque"), [MOVE_COMBAT_TORQUE] = _("CombatTorque"), [MOVE_MAGICAL_TORQUE] = _("MagiclTorque"), + [MOVE_PSYBLADE] = _("Psyblade"), + [MOVE_HYDRO_STEAM] = _("Hydro Steam"), }; #endif From 372c6a1afa1836ffb0595a6767fccbc034e5e80c Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 19 Mar 2023 20:55:39 +0100 Subject: [PATCH 044/129] Add new item variables and defines --- include/constants/hold_effects.h | 1 + include/constants/items.h | 33 ++- src/data/item_icon_table.h | 29 +++ src/data/items.h | 331 +++++++++++++++++++++++++++++- src/data/text/item_descriptions.h | 60 ++++++ 5 files changed, 452 insertions(+), 2 deletions(-) diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index cd4256632..5fc268cb0 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -159,6 +159,7 @@ #define HOLD_EFFECT_PUNCHING_GLOVE 178 #define HOLD_EFFECT_COVERT_CLOAK 179 #define HOLD_EFFECT_LOADED_DICE 180 +#define HOLD_EFFECT_BOOSTER_ENERGY 181 // Not implemented. #define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS)) diff --git a/include/constants/items.h b/include/constants/items.h index 1cb2803f3..f64790b38 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -928,13 +928,44 @@ #define ITEM_RUBY 756 #define ITEM_SAPPHIRE 757 +// GEN IX ITEMS #define ITEM_ABILITY_SHIELD 758 #define ITEM_CLEAR_AMULET 759 #define ITEM_PUNCHING_GLOVE 760 #define ITEM_COVERT_CLOAK 761 #define ITEM_LOADED_DICE 762 +#define ITEM_AUSPICIOUS_ARMOR 763 +#define ITEM_BOOSTER_ENERGY 764 +#define ITEM_BIG_BAMBOO_SHOOT 765 +#define ITEM_GIMMIGHOUL_COIN 766 +#define ITEM_LEADERS_CREST 767 +#define ITEM_MALICIOUS_ARMOR 768 +#define ITEM_MIRROR_HERB 769 +#define ITEM_SCROLL_OF_DARKNESS 770 +#define ITEM_SCROLL_OF_WATERS 771 +#define ITEM_TERA_ORB 772 +#define ITEM_TINY_BAMBOO_SHOOT 773 -#define ITEMS_COUNT 763 +#define ITEM_BUG_TERA_SHARD 774 +#define ITEM_DARK_TERA_SHARD 775 +#define ITEM_DRAGON_TERA_SHARD 776 +#define ITEM_ELECTRIC_TERA_SHARD 777 +#define ITEM_FAIRY_TERA_SHARD 778 +#define ITEM_FIGHTING_TERA_SHARD 779 +#define ITEM_FIRE_TERA_SHARD 780 +#define ITEM_FLYING_TERA_SHARD 781 +#define ITEM_GHOST_TERA_SHARD 782 +#define ITEM_GRASS_TERA_SHARD 783 +#define ITEM_GROUND_TERA_SHARD 784 +#define ITEM_ICE_TERA_SHARD 785 +#define ITEM_NORMAL_TERA_SHARD 786 +#define ITEM_POISON_TERA_SHARD 787 +#define ITEM_PSYCHIC_TERA_SHARD 788 +#define ITEM_ROCK_TERA_SHARD 789 +#define ITEM_STEEL_TERA_SHARD 790 +#define ITEM_WATER_TERA_SHARD 791 + +#define ITEMS_COUNT 792 #define ITEM_FIELD_ARROW ITEMS_COUNT // A special item id associated with "Cancel"/"Exit" etc. in a list of items or decorations diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index 0107b71ab..0dbec3f85 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -808,6 +808,35 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_PUNCHING_GLOVE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PunchingGlove, gItemIconPalette_PunchingGlove}, [ITEM_COVERT_CLOAK] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_CovertCloak, gItemIconPalette_CovertCloak}, [ITEM_LOADED_DICE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LoadedDice, gItemIconPalette_LoadedDice}, + [ITEM_AUSPICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AuspiciousArmor, gItemIconPalette_AuspiciousArmor}, + [ITEM_BOOSTER_ENERGY] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BoosterEnergy, gItemIconPalette_BoosterEnergy}, + [ITEM_BIG_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BigBambooShoot, gItemIconPalette_BigBambooShoot}, + [ITEM_GIMMIGHOUL_COIN] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GimmighoulCoin, gItemIconPalette_GimmighoulCoin}, + [ITEM_LEADERS_CREST] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LeadersCrest, gItemIconPalette_LeadersCrest}, + [ITEM_MALICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MaliciousArmor, gItemIconPalette_MaliciousArmor}, + [ITEM_MIRROR_HERB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MirrorHerb, gItemIconPalette_MirrorHerb}, + [ITEM_SCROLL_OF_DARKNESS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfDarkness, gItemIconPalette_ScrollOfDarkness}, + [ITEM_SCROLL_OF_WATERS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfWaters, gItemIconPalette_ScrollOfWaters}, + [ITEM_TERA_ORB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TeraOrb, gItemIconPalette_TeraOrb}, + [ITEM_TINY_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TinyBambooShoot, gItemIconPalette_TinyBambooShoot}, + [ITEM_BUG_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BugTeraShard, gItemIconPalette_BugTeraShard}, + [ITEM_DARK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DarkTeraShard, gItemIconPalette_DarkTeraShard}, + [ITEM_DRAGON_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DragonTeraShard, gItemIconPalette_DragonTeraShard}, + [ITEM_ELECTRIC_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ElectricTeraShard, gItemIconPalette_ElectricTeraShard}, + [ITEM_FAIRY_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FairyTeraShard, gItemIconPalette_FairyTeraShard}, + [ITEM_FIGHTING_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FightingTeraShard, gItemIconPalette_FightingTeraShard}, + [ITEM_FIRE_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FireTeraShard, gItemIconPalette_FireTeraShard}, + [ITEM_FLYING_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FlyingTeraShard, gItemIconPalette_FlyingTeraShard}, + [ITEM_GHOST_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GhostTeraShard, gItemIconPalette_GhostTeraShard}, + [ITEM_GRASS_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GrassTeraShard, gItemIconPalette_GrassTeraShard}, + [ITEM_GROUND_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GroundTeraShard, gItemIconPalette_GroundTeraShard}, + [ITEM_ICE_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_IceTeraShard, gItemIconPalette_IceTeraShard}, + [ITEM_NORMAL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_NormalTeraShard, gItemIconPalette_NormalTeraShard}, + [ITEM_POISON_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PoisonTeraShard, gItemIconPalette_PoisonTeraShard}, + [ITEM_PSYCHIC_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PsychicTeraShard, gItemIconPalette_PsychicTeraShard}, + [ITEM_ROCK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_RockTeraShard, gItemIconPalette_RockTeraShard}, + [ITEM_STEEL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_SteelTeraShard, gItemIconPalette_SteelTeraShard}, + [ITEM_WATER_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_WaterTeraShard, gItemIconPalette_WaterTeraShard}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; diff --git a/src/data/items.h b/src/data/items.h index 63446913e..a4e311338 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -9907,7 +9907,6 @@ const struct Item gItems[] = [ITEM_LOADED_DICE] = { - //YellwApricorn .name = _("Loaded Dice"), .itemId = ITEM_LOADED_DICE, .price = 20000, @@ -9918,4 +9917,334 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .flingPower = 30, }, + + [ITEM_AUSPICIOUS_ARMOR] = + { + .name = _("AuspciousArmr"), + .itemId = ITEM_AUSPICIOUS_ARMOR, + .price = 3000, + .description = sAuspiciousArmorDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_BOOSTER_ENERGY] = + { + .name = _("BoosterEnergy"), + .itemId = ITEM_BOOSTER_ENERGY, + .price = 0, + .holdEffect = HOLD_EFFECT_BOOSTER_ENERGY, + .description = sBoosterEnergyDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BIG_BAMBOO_SHOOT] = + { + .name = _("BigBmbooShoot"), + .itemId = ITEM_BIG_BAMBOO_SHOOT, + .price = 3000, + .description = sBigBambooShootDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_GIMMIGHOUL_COIN] = + { + .name = _("GimighoulCoin"), + .itemId = ITEM_GIMMIGHOUL_COIN, + .price = 400, + .description = sGimmighoulCoinDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_LEADERS_CREST] = + { + .name = _("Leader'sCrest"), + .itemId = ITEM_LEADERS_CREST, + .price = 3000, + .description = sLeadersCrestDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_MALICIOUS_ARMOR] = + { + .name = _("MaliciousArmr"), + .itemId = ITEM_MALICIOUS_ARMOR, + .price = 3000, + .description = sMaliciousArmorDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_MIRROR_HERB] = + { + .name = _("Mirror Herb"), + .itemId = ITEM_MIRROR_HERB, + .price = 30000, + .holdEffect = HOLD_EFFECT_MIRROR_HERB, + .description = sMirrorHerbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_SCROLL_OF_DARKNESS] = + { + .name = _("ScrllOfDrknss"), + .itemId = ITEM_SCROLL_OF_DARKNESS, + .price = 0, + .description = sScrollOfDarknessDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + }, + + [ITEM_SCROLL_OF_WATERS] = + { + .name = _("ScrollOfWatrs"), + .itemId = ITEM_SCROLL_OF_WATERS, + .price = 0, + .description = sScrollOfWatersDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + }, + + [ITEM_TERA_ORB] = + { + .name = _("Tera Orb"), + .itemId = ITEM_TERA_ORB, + .price = 0, + .description = sTeraOrbDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_TINY_BAMBOO_SHOOT] = + { + .name = _("TinyBmbooShot"), + .itemId = ITEM_TINY_BAMBOO_SHOOT, + .price = 750, + .description = sTinyBambooShootDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BUG_TERA_SHARD] = + { + .name = _("Bug TeraShard"), + .itemId = ITEM_BUG_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_DARK_TERA_SHARD] = + { + .name = _("DarkTeraShard"), + .itemId = ITEM_DARK_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_DRAGON_TERA_SHARD] = + { + .name = _("DragnTeraShrd"), + .itemId = ITEM_DRAGON_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_ELECTRIC_TERA_SHARD] = + { + .name = _("EltrcTeraShrd"), + .itemId = ITEM_ELECTRIC_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FAIRY_TERA_SHARD] = + { + .name = _("FairyTeraShrd"), + .itemId = ITEM_FAIRY_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FIGHTING_TERA_SHARD] = + { + .name = _("FghtngTerShrd"), + .itemId = ITEM_FIGHTING_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FIRE_TERA_SHARD] = + { + .name = _("FireTeraShard"), + .itemId = ITEM_FIRE_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FLYING_TERA_SHARD] = + { + .name = _("FlyngTeraShrd"), + .itemId = ITEM_FLYING_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_GHOST_TERA_SHARD] = + { + .name = _("GhostTeraShrd"), + .itemId = ITEM_GHOST_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_GRASS_TERA_SHARD] = + { + .name = _("GrassTeraShrd"), + .itemId = ITEM_GRASS_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_GROUND_TERA_SHARD] = + { + .name = _("GrondTeraShrd"), + .itemId = ITEM_GROUND_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_ICE_TERA_SHARD] = + { + .name = _("Ice TeraShard"), + .itemId = ITEM_ICE_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_NORMAL_TERA_SHARD] = + { + .name = _("NormlTeraShrd"), + .itemId = ITEM_NORMAL_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_POISON_TERA_SHARD] = + { + .name = _("PoisnTeraShrd"), + .itemId = ITEM_POISON_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_PSYCHIC_TERA_SHARD] = + { + .name = _("PschcTeraShrd"), + .itemId = ITEM_PSYCHIC_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_ROCK_TERA_SHARD] = + { + .name = _("RockTeraShard"), + .itemId = ITEM_ROCK_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_STEEL_TERA_SHARD] = + { + .name = _("SteelTeraShrd"), + .itemId = ITEM_STEEL_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_WATER_TERA_SHARD] = + { + .name = _("WaterTeraShrd"), + .itemId = ITEM_WATER_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, }; diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index e815d8ae1..cee413aa5 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -3817,3 +3817,63 @@ static const u8 sLoadedDiceDesc[] = _( "Rolls high numbers.\n" "Multihit strikes\n" "hit more times."); + +static const u8 sAuspiciousArmorDesc[] = _( + "Armor inhabited by\n" + "auspicious wishes.\n" + "Causes evolution."); + +static const u8 sBoosterEnergyDesc[] = _( + "Encapsuled energy\n" + "ups Pokémon with\n" + "certain Abilities."); + +static const u8 sBigBambooShootDesc[] = _( + "A large and rare\n" + "bamboo shoot. Best\n" + "sold to gourmands."); + +static const u8 sGimmighoulCoinDesc[] = _( + "Gimmighoul hoard\n" + "and treasure these\n" + "curious coins."); + +static const u8 sLeadersCrestDesc[] = _( + "A shard of an old\n" + "blade of some sort.\n" + "Held by Bisharp."); + +static const u8 sMaliciousArmorDesc[] = _( + "Armor inhabited by\n" + "malicious will.\n" + "Causes evolution."); + +static const u8 sMirrorHerbDesc[] = _( + "Mirrors an enemy's\n" + "stat increases\n" + "but only once."); + +static const u8 sScrollOfDarknessDesc[] = _( + "A peculiar scroll\n" + "with secrets of\n" + "the dark path."); + +static const u8 sScrollOfWatersDesc[] = _( + "A peculiar scroll\n" + "with secrets of\n" + "the water path."); + +static const u8 sTeraOrbDesc[] = _( + "Energy charges can\n" + "be used to cause\n" + "Terastallization."); + +static const u8 sTinyBambooShootDesc[] = _( + "A small and rare\n" + "bamboo shoot. Best\n" + "sold to gourmands."); + +static const u8 sTeraShardDesc[] = _( + "These shards may\n" + "form when a Tera\n" + "Pokémon faints."); From d480fc90f2edd085da8e1ba7fd983fa8c57d2b0c Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 19 Mar 2023 21:21:43 +0100 Subject: [PATCH 045/129] Fix Scrolls type --- src/data/items.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/items.h b/src/data/items.h index a4e311338..982375f3e 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -10010,7 +10010,7 @@ const struct Item gItems[] = .description = sScrollOfDarknessDesc, .importance = 1, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, + .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, }, @@ -10022,7 +10022,7 @@ const struct Item gItems[] = .description = sScrollOfWatersDesc, .importance = 1, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, + .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, }, From 47b4e6095d53bca527fc740119564f8eabb8cded Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 19 Mar 2023 21:59:51 -0300 Subject: [PATCH 046/129] Undo Timburr and Stunfisk friendships, as they don't change --- src/data/pokemon/species_info.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 5de73a21a..7b60f1b1a 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -13034,7 +13034,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 1, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, + .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, @@ -14987,7 +14987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, + .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_STATIC, ABILITY_LIMBER, ABILITY_SAND_VEIL}, From 170ff2f422b80c7a1fcd70777d8d120c029d00e2 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 21 Mar 2023 10:41:37 +0100 Subject: [PATCH 047/129] Tests for Eject Button (#2843) * eject button tests + 1 intim test Add KNOWN_FAILING Eject Button Tests = 1 Intim Test * Update test/ability_intimidate.c * Update test/ability_intimidate.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/ability_intimidate.c Eject Button Tests Eject Button Tests * Update test/hold_effect_eject_button.c Co-authored-by: Philipp AUER --------- Co-authored-by: Philipp AUER --- test/ability_intimidate.c | 28 +++++ test/hold_effect_eject_button.c | 189 ++++++++++++++++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 test/hold_effect_eject_button.c diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 08d8d606e..347c0bc71 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -95,3 +95,31 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba MESSAGE("Foe Arbok's Intimidate cuts Abra's attack!"); } } + +SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") +{ + KNOWN_FAILING; // Issue #2837 + GIVEN { + ASSUME(gItems[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_HITMONTOP) { Moves(MOVE_TACKLE); }; + } WHEN { + TURN { + MOVE(player, MOVE_QUICK_ATTACK); + MOVE(opponent, MOVE_TACKLE); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("2 sent out Hitmontop!"); + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + MESSAGE("Foe Hitmontop's Intimidate cuts Wobbuffet's attack!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("Foe Hitmontop used Tackle!"); + } + } +} diff --git a/test/hold_effect_eject_button.c b/test/hold_effect_eject_button.c new file mode 100644 index 000000000..0d28d7bf0 --- /dev/null +++ b/test/hold_effect_eject_button.c @@ -0,0 +1,189 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); +} + +SINGLE_BATTLE_TEST("Eject Button is not triggered when there is nothing to switch in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(0); }; + } WHEN { + TURN { + MOVE(player, MOVE_QUICK_ATTACK); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button is not activated by a Sheer Force boosted move") +{ + GIVEN { + PLAYER(SPECIES_NIDOKING) { Ability(ABILITY_SHEER_FORCE); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_FLAMETHROWER); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLAMETHROWER, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button will not activate under Substitute") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAICHU) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(opponent, MOVE_SUBSTITUTE); + MOVE(player, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); + MESSAGE("Foe Raichu made a SUBSTITUTE!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("The SUBSTITUTE took damage for Foe Raichu!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Raichu is switched out with the Eject Button!"); + } + } +} + +SINGLE_BATTLE_TEST("Eject Button is not blocked by trapping abilities or moves") +{ + GIVEN { + PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_ARENA_TRAP); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_TACKLE); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("2 sent out Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Eject Button is not triggered after the mon loses Eject Button") +{ + GIVEN { + PLAYER(SPECIES_RAICHU); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_KNOCK_OFF); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button is not triggered after given to player by Picketpocket") +{ + GIVEN { + PLAYER(SPECIES_REGIELEKI) { Item(ITEM_EJECT_BUTTON); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_TACKLE); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("Foe Sneasel stole Regieleki's Eject Button!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button has no chance to activate after Dragon Tail") +{ + GIVEN { + PLAYER(SPECIES_KOMMO_O); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_CHANSEY); + } WHEN { + TURN { + MOVE(player, MOVE_DRAGON_TAIL); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + MESSAGE("Foe Chansey was dragged out!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Chansey is switched out with the Eject Button!"); + } + } +} + +SINGLE_BATTLE_TEST("Eject Button prevents Volt Switch / U-Turn from activating") +{ + GIVEN { + PLAYER(SPECIES_MANECTRIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { + MOVE(player, MOVE_VOLT_SWITCH); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, player); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } +} + +SINGLE_BATTLE_TEST("Eject Button is activated before Emergency Exit") +{ + GIVEN { + PLAYER(SPECIES_LATIAS); + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_THUNDERBOLT); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Golisopod is switched out with the Eject Button!"); + } +} From 3bd680cab9b5992fa7aa2337fb0c50e8f66df15f Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 21 Mar 2023 13:36:45 -0400 Subject: [PATCH 048/129] fix GetBattleAnimMoveTargets for non-player gBattleAnimAttacker --- src/battle_anim.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/battle_anim.c b/src/battle_anim.c index fd81152e1..984f7b0a9 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -440,22 +440,22 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_BOTH: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { - targets[1] = targets[0] ^ BIT_FLANK; - numTargets++; + if (IsBattlerAlive(BATTLE_PARTNER(targets[0])) { + targets[1] = BATTLE_PARTNER(targets[0]); + numTargets = 2; } break; case MOVE_TARGET_FOES_AND_ALLY: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { - targets[1] = targets[0] ^ BIT_FLANK; + if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) { + targets[1] = BATTLE_PARTNER(targets[0]); numTargets++; } - - if (IsBattlerAlive(gBattleAnimAttacker ^ BIT_FLANK)) { - targets[2] = gBattleAnimAttacker ^ BIT_FLANK; + + if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) { + targets[2] = BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])); numTargets++; } break; From 1adc6b761e19a716d42ccf76d68a8996ae89a3a5 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 21 Mar 2023 13:38:24 -0400 Subject: [PATCH 049/129] remove random space --- src/battle_anim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_anim.c b/src/battle_anim.c index 984f7b0a9..0c688f20b 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -453,7 +453,7 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) targets[1] = BATTLE_PARTNER(targets[0]); numTargets++; } - + if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) { targets[2] = BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])); numTargets++; From c61797bc38e5cdb60393b19b987b96e4075d3bb2 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 21 Mar 2023 14:31:09 -0400 Subject: [PATCH 050/129] styling and syntax fix --- src/battle_anim.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/battle_anim.c b/src/battle_anim.c index 0c688f20b..4191fe7aa 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -440,7 +440,8 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_BOTH: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - if (IsBattlerAlive(BATTLE_PARTNER(targets[0])) { + if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) + { targets[1] = BATTLE_PARTNER(targets[0]); numTargets = 2; } @@ -448,13 +449,14 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_FOES_AND_ALLY: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - - if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) { + if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) + { targets[1] = BATTLE_PARTNER(targets[0]); numTargets++; } - if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) { + if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) + { targets[2] = BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])); numTargets++; } From 9ec31c61bfdfe01803a83f152b962ae324b8df69 Mon Sep 17 00:00:00 2001 From: May8th1995 <69943962+May8th1995@users.noreply.github.com> Date: Tue, 21 Mar 2023 19:12:46 +0000 Subject: [PATCH 051/129] Fixes weirdly set value for eject buttons etc (#2846) * Fixes weirdly set value for eject buttons etc * Remove known fialing from fixed test --------- Co-authored-by: tennis --- data/battle_scripts_1.s | 1 + test/ability_intimidate.c | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 52c135294..a32e9a4ec 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8654,6 +8654,7 @@ BattleScript_IntimidateLoopIncrement: addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_IntimidateLoop BattleScript_IntimidateEnd: + copybyte sBATTLER, gBattlerAttacker destroyabilitypopup pause B_WAIT_TIME_MED end3 diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 347c0bc71..0318435e0 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -98,7 +98,6 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") { - KNOWN_FAILING; // Issue #2837 GIVEN { ASSUME(gItems[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); PLAYER(SPECIES_WOBBUFFET); From 358180946d60e5acc6fd5a95bb95f39232b93382 Mon Sep 17 00:00:00 2001 From: tennis Date: Wed, 22 Mar 2023 11:42:32 +0000 Subject: [PATCH 052/129] Fix Intimidate targetting dead sides and false postpones --- data/battle_scripts_1.s | 1 + src/battle_script_commands.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a32e9a4ec..2754b5d7a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8627,6 +8627,7 @@ BattleScript_IntimidateActivates:: BattleScript_IntimidateLoop: jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_IntimidateLoopIncrement jumpiftargetally BattleScript_IntimidateLoopIncrement + jumpifabsent BS_TARGET, BattleScript_IntimidateLoopIncrement jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_IntimidateLoopIncrement jumpifholdeffect BS_TARGET, HOLD_EFFECT_CLEAR_AMULET, BattleScript_IntimidatePrevented_Item jumpifability BS_TARGET, ABILITY_CLEAR_BODY, BattleScript_IntimidatePrevented diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd..7949dbae8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6973,9 +6973,9 @@ bool32 ShouldPostponeSwitchInAbilities(u32 battlerId) // Checks for double battle, so abilities like Intimidate wait until all battlers are switched-in before activating. if (IsDoubleBattle()) { - if (aliveOpposing1 && !aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_OPPOSITE(battlerId), PARTY_SIZE, PARTY_SIZE)) + if (aliveOpposing1 && !aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId)), PARTY_SIZE, PARTY_SIZE)) return TRUE; - if (!aliveOpposing1 && aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId)), PARTY_SIZE, PARTY_SIZE)) + if (!aliveOpposing1 && aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_OPPOSITE(battlerId), PARTY_SIZE, PARTY_SIZE)) return TRUE; } From 4541cc3319454410db2dc5f298546117357960c3 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Wed, 22 Mar 2023 22:30:24 +0100 Subject: [PATCH 053/129] add check for Gorilla Tactics knock off shouldnt reset choicedMove when the pokemon has the Gorilla Tactics ability --- src/battle_script_commands.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd..0038844ac 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5330,7 +5330,8 @@ static bool32 TryKnockOffBattleScript(u32 battlerDef) gLastUsedItem = gBattleMons[battlerDef].item; gBattleMons[battlerDef].item = 0; - gBattleStruct->choicedMove[battlerDef] = 0; + if (gBattleMons[battlerDef].ability != ABILITY_GORILLA_TACTICS) + gBattleStruct->choicedMove[battlerDef] = 0; gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[battlerDef]]; CheckSetUnburden(battlerDef); From 299911139a56e36460fb54d0784cf55ca9d947d8 Mon Sep 17 00:00:00 2001 From: tennis Date: Wed, 22 Mar 2023 22:25:20 +0000 Subject: [PATCH 054/129] Add test for intimidate on empty slot --- test/ability_intimidate.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 0318435e0..a891f9af8 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -122,3 +122,40 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") } } } + +DOUBLE_BATTLE_TEST("Intimidate activates on an empty slot") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_CROAGUNK); + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_HITMONTOP) { Ability(ABILITY_INTIMIDATE); }; + OPPONENT(SPECIES_RALTS); + OPPONENT(SPECIES_AZURILL); + } WHEN { + TURN { + SWITCH(playerLeft, 2); + MOVE(playerRight, MOVE_GUNK_SHOT, target: opponentLeft); + MOVE(opponentRight, MOVE_SPLASH); + } + TURN { + SWITCH(playerLeft, 3); + MOVE(playerRight, MOVE_SPLASH); + } + + + } SCENE { + MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Go! Wynaut!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUNK_SHOT, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponentRight); + MESSAGE("Wynaut, that's enough! Come back!"); + MESSAGE("Go! Hitmontop!"); + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + NONE_OF { + MESSAGE("Hitmontop's Intimidate cuts Foe Ralts's attack!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Hitmontop's Intimidate cuts Foe Azurill's attack!"); + } +} From 03f6fe635f856f6f87798bbe5651daf23e919e40 Mon Sep 17 00:00:00 2001 From: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Date: Thu, 23 Mar 2023 01:50:44 -0700 Subject: [PATCH 055/129] changed CanBeConfused to actually check its argument (#2855) --- src/battle_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index fcfec90c2..bcdc13080 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6546,8 +6546,8 @@ bool32 CanBeFrozen(u8 battlerId) bool32 CanBeConfused(u8 battlerId) { - if (GetBattlerAbility(gEffectBattler) == ABILITY_OWN_TEMPO - || gBattleMons[gEffectBattler].status2 & STATUS2_CONFUSION + if (GetBattlerAbility(battlerId) == ABILITY_OWN_TEMPO + || gBattleMons[battlerId].status2 & STATUS2_CONFUSION || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; From 023cc4d38dc144f13cd76baeded914f3b01fe709 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 05:58:26 -0300 Subject: [PATCH 056/129] Fixed erroneous uses of non e-reader Enigma Berries (#2839) --- src/battle_util.c | 6 +++--- src/battle_z_move.c | 2 +- src/pokemon.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index bcdc13080..3e8f94bf6 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8194,7 +8194,7 @@ u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) return gBattleStruct->debugHoldEffects[battlerId]; else #endif - if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) + if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY_E_READER) return gEnigmaBerries[battlerId].holdEffect; else return ItemId_GetHoldEffect(gBattleMons[battlerId].item); @@ -8203,7 +8203,7 @@ u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) // static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item) { - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) return gEnigmaBerries[battlerId].holdEffectParam; else return ItemId_GetHoldEffectParam(item); @@ -8211,7 +8211,7 @@ static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item) u32 GetBattlerHoldEffectParam(u8 battlerId) { - if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) + if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY_E_READER) return gEnigmaBerries[battlerId].holdEffectParam; else return ItemId_GetHoldEffectParam(gBattleMons[battlerId].item); diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 9c9c5e0fa..104a44daa 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -199,7 +199,7 @@ bool32 IsViableZMove(u8 battlerId, u16 move) holdEffect = gBattleStruct->debugHoldEffects[battlerId]; else #endif - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) return FALSE; // HoldEffect = gEnigmaBerries[battlerId].holdEffect; else holdEffect = ItemId_GetHoldEffect(item); diff --git a/src/pokemon.c b/src/pokemon.c index 8087b9621..4250d3244 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6543,7 +6543,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s partnerSpecies = GetMonData(tradePartner, MON_DATA_SPECIES, 0); partnerHeldItem = GetMonData(tradePartner, MON_DATA_HELD_ITEM, 0); - if (partnerHeldItem == ITEM_ENIGMA_BERRY) + if (partnerHeldItem == ITEM_ENIGMA_BERRY_E_READER) partnerHoldEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; else partnerHoldEffect = ItemId_GetHoldEffect(partnerHeldItem); @@ -7213,7 +7213,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) u8 bonus; heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); - if (heldItem == ITEM_ENIGMA_BERRY) + if (heldItem == ITEM_ENIGMA_BERRY_E_READER) { if (gMain.inBattle) holdEffect = gEnigmaBerries[0].holdEffect; From 2658fe32c20d338cf5073a407353d028a449fdd5 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 06:02:32 -0300 Subject: [PATCH 057/129] Removed ITEM_HAS_EFFECT (#2840) --- include/constants/items.h | 3 - include/pokemon.h | 3 +- src/battle_ai_switch_items.c | 4 +- src/data/pokemon/item_effects.h | 208 ++++++++++++++++---------------- src/party_menu.c | 17 +-- src/pokemon.c | 12 +- 6 files changed, 123 insertions(+), 124 deletions(-) diff --git a/include/constants/items.h b/include/constants/items.h index 1cb2803f3..a5a3c95e2 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -1001,7 +1001,4 @@ #define ITEM_B_USE_MEDICINE 1 #define ITEM_B_USE_OTHER 2 -// Check if the item is one that can be used on a Pokemon. -#define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= LAST_BERRY_INDEX) - #endif // GUARD_CONSTANTS_ITEMS_H diff --git a/include/pokemon.h b/include/pokemon.h index cbfd194c6..581677cae 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -2,6 +2,7 @@ #define GUARD_POKEMON_H #include "sprite.h" +#include "constants/items.h" #include "constants/region_map_sections.h" #include "constants/map_groups.h" @@ -401,7 +402,7 @@ extern const struct BattleMove gBattleMoves[]; extern const u8 gFacilityClassToPicIndex[]; extern const u8 gFacilityClassToTrainerClass[]; extern const struct SpeciesInfo gSpeciesInfo[]; -extern const u8 *const gItemEffectTable[]; +extern const u8 *const gItemEffectTable[ITEMS_COUNT]; extern const u32 gExperienceTables[][MAX_LEVEL + 1]; extern const struct LevelUpMove *const gLevelUpLearnsets[]; extern const u16 *const gTeachableLearnsets[]; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index e8512affa..d1272d67d 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1085,13 +1085,13 @@ static bool8 ShouldUseItem(void) item = gBattleResources->battleHistory->trainerItems[i]; if (item == ITEM_NONE) continue; - if (gItemEffectTable[item - ITEM_POTION] == NULL) + if (gItemEffectTable[item] == NULL) continue; if (item == ITEM_ENIGMA_BERRY_E_READER) itemEffects = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - itemEffects = gItemEffectTable[item - ITEM_POTION]; + itemEffects = gItemEffectTable[item]; *(gBattleStruct->AI_itemType + gActiveBattler / 2) = GetAI_ItemType(item, itemEffects); diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 2651b4daf..8323801d5 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -447,128 +447,128 @@ const u8 gItemEffect_TamatoBerry[10] = { EV_BERRY_FRIENDSHIP_CHANGE, }; -const u8 *const gItemEffectTable[] = +const u8 *const gItemEffectTable[ITEMS_COUNT] = { // Medicine - [ITEM_POTION - ITEM_POTION] = gItemEffect_Potion, - [ITEM_SUPER_POTION - ITEM_POTION] = gItemEffect_SuperPotion, - [ITEM_HYPER_POTION - ITEM_POTION] = gItemEffect_HyperPotion, - [ITEM_MAX_POTION - ITEM_POTION] = gItemEffect_MaxPotion, - [ITEM_FULL_RESTORE - ITEM_POTION] = gItemEffect_FullRestore, - [ITEM_REVIVE - ITEM_POTION] = gItemEffect_Revive, - [ITEM_MAX_REVIVE - ITEM_POTION] = gItemEffect_MaxRevive, - [ITEM_FRESH_WATER - ITEM_POTION] = gItemEffect_FreshWater, - [ITEM_SODA_POP - ITEM_POTION] = gItemEffect_SodaPop, - [ITEM_LEMONADE - ITEM_POTION] = gItemEffect_Lemonade, - [ITEM_MOOMOO_MILK - ITEM_POTION] = gItemEffect_MoomooMilk, - [ITEM_ENERGY_POWDER - ITEM_POTION] = gItemEffect_EnergyPowder, - [ITEM_ENERGY_ROOT - ITEM_POTION] = gItemEffect_EnergyRoot, - [ITEM_HEAL_POWDER - ITEM_POTION] = gItemEffect_HealPowder, - [ITEM_REVIVAL_HERB - ITEM_POTION] = gItemEffect_RevivalHerb, - [ITEM_ANTIDOTE - ITEM_POTION] = gItemEffect_Antidote, - [ITEM_PARALYZE_HEAL - ITEM_POTION] = gItemEffect_ParalyzeHeal, - [ITEM_BURN_HEAL - ITEM_POTION] = gItemEffect_BurnHeal, - [ITEM_ICE_HEAL - ITEM_POTION] = gItemEffect_IceHeal, - [ITEM_AWAKENING - ITEM_POTION] = gItemEffect_Awakening, - [ITEM_FULL_HEAL - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_ETHER - ITEM_POTION] = gItemEffect_Ether, - [ITEM_MAX_ETHER - ITEM_POTION] = gItemEffect_MaxEther, - [ITEM_ELIXIR - ITEM_POTION] = gItemEffect_Elixir, - [ITEM_MAX_ELIXIR - ITEM_POTION] = gItemEffect_MaxElixir, - [ITEM_BERRY_JUICE - ITEM_POTION] = gItemEffect_BerryJuice, - [ITEM_SACRED_ASH - ITEM_POTION] = gItemEffect_SacredAsh, - [ITEM_SWEET_HEART - ITEM_POTION] = gItemEffect_Potion, - [ITEM_MAX_HONEY - ITEM_POTION] = gItemEffect_MaxRevive, + [ITEM_POTION] = gItemEffect_Potion, + [ITEM_SUPER_POTION] = gItemEffect_SuperPotion, + [ITEM_HYPER_POTION] = gItemEffect_HyperPotion, + [ITEM_MAX_POTION] = gItemEffect_MaxPotion, + [ITEM_FULL_RESTORE] = gItemEffect_FullRestore, + [ITEM_REVIVE] = gItemEffect_Revive, + [ITEM_MAX_REVIVE] = gItemEffect_MaxRevive, + [ITEM_FRESH_WATER] = gItemEffect_FreshWater, + [ITEM_SODA_POP] = gItemEffect_SodaPop, + [ITEM_LEMONADE] = gItemEffect_Lemonade, + [ITEM_MOOMOO_MILK] = gItemEffect_MoomooMilk, + [ITEM_ENERGY_POWDER] = gItemEffect_EnergyPowder, + [ITEM_ENERGY_ROOT] = gItemEffect_EnergyRoot, + [ITEM_HEAL_POWDER] = gItemEffect_HealPowder, + [ITEM_REVIVAL_HERB] = gItemEffect_RevivalHerb, + [ITEM_ANTIDOTE] = gItemEffect_Antidote, + [ITEM_PARALYZE_HEAL] = gItemEffect_ParalyzeHeal, + [ITEM_BURN_HEAL] = gItemEffect_BurnHeal, + [ITEM_ICE_HEAL] = gItemEffect_IceHeal, + [ITEM_AWAKENING] = gItemEffect_Awakening, + [ITEM_FULL_HEAL] = gItemEffect_FullHeal, + [ITEM_ETHER] = gItemEffect_Ether, + [ITEM_MAX_ETHER] = gItemEffect_MaxEther, + [ITEM_ELIXIR] = gItemEffect_Elixir, + [ITEM_MAX_ELIXIR] = gItemEffect_MaxElixir, + [ITEM_BERRY_JUICE] = gItemEffect_BerryJuice, + [ITEM_SACRED_ASH] = gItemEffect_SacredAsh, + [ITEM_SWEET_HEART] = gItemEffect_Potion, + [ITEM_MAX_HONEY] = gItemEffect_MaxRevive, // Regional Specialties - [ITEM_PEWTER_CRUNCHIES - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_RAGE_CANDY_BAR - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_LAVA_COOKIE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_OLD_GATEAU - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_CASTELIACONE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_LUMIOSE_GALETTE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_SHALOUR_SABLE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_BIG_MALASADA - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_PEWTER_CRUNCHIES] = gItemEffect_FullHeal, + [ITEM_RAGE_CANDY_BAR] = gItemEffect_FullHeal, + [ITEM_LAVA_COOKIE] = gItemEffect_FullHeal, + [ITEM_OLD_GATEAU] = gItemEffect_FullHeal, + [ITEM_CASTELIACONE] = gItemEffect_FullHeal, + [ITEM_LUMIOSE_GALETTE] = gItemEffect_FullHeal, + [ITEM_SHALOUR_SABLE] = gItemEffect_FullHeal, + [ITEM_BIG_MALASADA] = gItemEffect_FullHeal, // Vitamins - [ITEM_HP_UP - ITEM_POTION] = gItemEffect_HPUp, - [ITEM_PROTEIN - ITEM_POTION] = gItemEffect_Protein, - [ITEM_IRON - ITEM_POTION] = gItemEffect_Iron, - [ITEM_CALCIUM - ITEM_POTION] = gItemEffect_Calcium, - [ITEM_ZINC - ITEM_POTION] = gItemEffect_Zinc, - [ITEM_CARBOS - ITEM_POTION] = gItemEffect_Carbos, - [ITEM_PP_UP - ITEM_POTION] = gItemEffect_PPUp, - [ITEM_PP_MAX - ITEM_POTION] = gItemEffect_PPMax, + [ITEM_HP_UP] = gItemEffect_HPUp, + [ITEM_PROTEIN] = gItemEffect_Protein, + [ITEM_IRON] = gItemEffect_Iron, + [ITEM_CALCIUM] = gItemEffect_Calcium, + [ITEM_ZINC] = gItemEffect_Zinc, + [ITEM_CARBOS] = gItemEffect_Carbos, + [ITEM_PP_UP] = gItemEffect_PPUp, + [ITEM_PP_MAX] = gItemEffect_PPMax, // EV Feathers - [ITEM_HEALTH_FEATHER - ITEM_POTION] = gItemEffect_HpFeather, - [ITEM_MUSCLE_FEATHER - ITEM_POTION] = gItemEffect_AtkFeather, - [ITEM_RESIST_FEATHER - ITEM_POTION] = gItemEffect_DefFeather, - [ITEM_GENIUS_FEATHER - ITEM_POTION] = gItemEffect_SpatkFeather, - [ITEM_CLEVER_FEATHER - ITEM_POTION] = gItemEffect_SpdefFeather, - [ITEM_SWIFT_FEATHER - ITEM_POTION] = gItemEffect_SpeedFeather, + [ITEM_HEALTH_FEATHER] = gItemEffect_HpFeather, + [ITEM_MUSCLE_FEATHER] = gItemEffect_AtkFeather, + [ITEM_RESIST_FEATHER] = gItemEffect_DefFeather, + [ITEM_GENIUS_FEATHER] = gItemEffect_SpatkFeather, + [ITEM_CLEVER_FEATHER] = gItemEffect_SpdefFeather, + [ITEM_SWIFT_FEATHER] = gItemEffect_SpeedFeather, // Candy - [ITEM_RARE_CANDY - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XS - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_S - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_M - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_L - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XL - ITEM_POTION] = gItemEffect_RareCandy, - //[ITEM_DYNAMAX_CANDY - ITEM_POTION] = gItemEffect_DynamaxCandy, // Todo + [ITEM_RARE_CANDY] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XS] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_S] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_M] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_L] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XL] = gItemEffect_RareCandy, + //[ITEM_DYNAMAX_CANDY] = gItemEffect_DynamaxCandy, // Todo // Medicinal Flutes - [ITEM_BLUE_FLUTE - ITEM_POTION] = gItemEffect_BlueFlute, - [ITEM_YELLOW_FLUTE - ITEM_POTION] = gItemEffect_YellowFlute, - [ITEM_RED_FLUTE - ITEM_POTION] = gItemEffect_RedFlute, + [ITEM_BLUE_FLUTE] = gItemEffect_BlueFlute, + [ITEM_YELLOW_FLUTE] = gItemEffect_YellowFlute, + [ITEM_RED_FLUTE] = gItemEffect_RedFlute, // X Items - [ITEM_X_ATTACK - ITEM_POTION] = gItemEffect_XAttack, - [ITEM_X_DEFENSE - ITEM_POTION] = gItemEffect_XDefense, - [ITEM_X_SPEED - ITEM_POTION] = gItemEffect_XSpeed, - [ITEM_X_ACCURACY - ITEM_POTION] = gItemEffect_XAccuracy, - [ITEM_X_SP_ATK - ITEM_POTION] = gItemEffect_XSpecialAttack, - [ITEM_X_SP_DEF - ITEM_POTION] = gItemEffect_XSpecialDefense, + [ITEM_X_ATTACK] = gItemEffect_XAttack, + [ITEM_X_DEFENSE] = gItemEffect_XDefense, + [ITEM_X_SPEED] = gItemEffect_XSpeed, + [ITEM_X_ACCURACY] = gItemEffect_XAccuracy, + [ITEM_X_SP_ATK] = gItemEffect_XSpecialAttack, + [ITEM_X_SP_DEF] = gItemEffect_XSpecialDefense, - [ITEM_DIRE_HIT - ITEM_POTION] = gItemEffect_DireHit, - [ITEM_GUARD_SPEC - ITEM_POTION] = gItemEffect_GuardSpec, + [ITEM_DIRE_HIT] = gItemEffect_DireHit, + [ITEM_GUARD_SPEC] = gItemEffect_GuardSpec, - //[ITEM_MAX_MUSHROOMS - ITEM_POTION] = gItemEffect_MaxMushrooms, // Todo + //[ITEM_MAX_MUSHROOMS] = gItemEffect_MaxMushrooms, // Todo // Evolution Items - [ITEM_FIRE_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_WATER_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_THUNDER_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_LEAF_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_ICE_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_SUN_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_MOON_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_SHINY_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_DUSK_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_DAWN_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_SWEET_APPLE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_TART_APPLE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_CRACKED_POT - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_CHIPPED_POT - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_GALARICA_CUFF - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_GALARICA_WREATH - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_FIRE_STONE] = gItemEffect_EvoItem, + [ITEM_WATER_STONE] = gItemEffect_EvoItem, + [ITEM_THUNDER_STONE] = gItemEffect_EvoItem, + [ITEM_LEAF_STONE] = gItemEffect_EvoItem, + [ITEM_ICE_STONE] = gItemEffect_EvoItem, + [ITEM_SUN_STONE] = gItemEffect_EvoItem, + [ITEM_MOON_STONE] = gItemEffect_EvoItem, + [ITEM_SHINY_STONE] = gItemEffect_EvoItem, + [ITEM_DUSK_STONE] = gItemEffect_EvoItem, + [ITEM_DAWN_STONE] = gItemEffect_EvoItem, + [ITEM_SWEET_APPLE] = gItemEffect_EvoItem, + [ITEM_TART_APPLE] = gItemEffect_EvoItem, + [ITEM_CRACKED_POT] = gItemEffect_EvoItem, + [ITEM_CHIPPED_POT] = gItemEffect_EvoItem, + [ITEM_GALARICA_CUFF] = gItemEffect_EvoItem, + [ITEM_GALARICA_WREATH] = gItemEffect_EvoItem, // Berries - [ITEM_CHERI_BERRY - ITEM_POTION] = gItemEffect_CheriBerry, - [ITEM_CHESTO_BERRY - ITEM_POTION] = gItemEffect_ChestoBerry, - [ITEM_PECHA_BERRY - ITEM_POTION] = gItemEffect_PechaBerry, - [ITEM_RAWST_BERRY - ITEM_POTION] = gItemEffect_RawstBerry, - [ITEM_ASPEAR_BERRY - ITEM_POTION] = gItemEffect_AspearBerry, - [ITEM_LEPPA_BERRY - ITEM_POTION] = gItemEffect_LeppaBerry, - [ITEM_ORAN_BERRY - ITEM_POTION] = gItemEffect_OranBerry, - [ITEM_PERSIM_BERRY - ITEM_POTION] = gItemEffect_PersimBerry, - [ITEM_LUM_BERRY - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_SITRUS_BERRY - ITEM_POTION] = gItemEffect_SitrusBerry, - [ITEM_POMEG_BERRY - ITEM_POTION] = gItemEffect_PomegBerry, - [ITEM_KELPSY_BERRY - ITEM_POTION] = gItemEffect_KelpsyBerry, - [ITEM_QUALOT_BERRY - ITEM_POTION] = gItemEffect_QualotBerry, - [ITEM_HONDEW_BERRY - ITEM_POTION] = gItemEffect_HondewBerry, - [ITEM_GREPA_BERRY - ITEM_POTION] = gItemEffect_GrepaBerry, - [ITEM_TAMATO_BERRY - ITEM_POTION] = gItemEffect_TamatoBerry, - [LAST_BERRY_INDEX - ITEM_POTION] = NULL, + [ITEM_CHERI_BERRY] = gItemEffect_CheriBerry, + [ITEM_CHESTO_BERRY] = gItemEffect_ChestoBerry, + [ITEM_PECHA_BERRY] = gItemEffect_PechaBerry, + [ITEM_RAWST_BERRY] = gItemEffect_RawstBerry, + [ITEM_ASPEAR_BERRY] = gItemEffect_AspearBerry, + [ITEM_LEPPA_BERRY] = gItemEffect_LeppaBerry, + [ITEM_ORAN_BERRY] = gItemEffect_OranBerry, + [ITEM_PERSIM_BERRY] = gItemEffect_PersimBerry, + [ITEM_LUM_BERRY] = gItemEffect_FullHeal, + [ITEM_SITRUS_BERRY] = gItemEffect_SitrusBerry, + [ITEM_POMEG_BERRY] = gItemEffect_PomegBerry, + [ITEM_KELPSY_BERRY] = gItemEffect_KelpsyBerry, + [ITEM_QUALOT_BERRY] = gItemEffect_QualotBerry, + [ITEM_HONDEW_BERRY] = gItemEffect_HondewBerry, + [ITEM_GREPA_BERRY] = gItemEffect_GrepaBerry, + [ITEM_TAMATO_BERRY] = gItemEffect_TamatoBerry, + [LAST_BERRY_INDEX] = NULL, }; diff --git a/src/party_menu.c b/src/party_menu.c index 9a04f4c50..6964fa0c5 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4287,7 +4287,10 @@ static bool8 IsHPRecoveryItem(u16 item) if (item == ITEM_ENIGMA_BERRY_E_READER) effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - effect = gItemEffectTable[item - ITEM_POTION]; + effect = gItemEffectTable[item]; + + if (effect == NULL) + return FALSE; if (effect[4] & ITEM4_HEAL_HP) return TRUE; @@ -4798,9 +4801,9 @@ void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task) if (item == ITEM_ENIGMA_BERRY_E_READER) effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - effect = gItemEffectTable[item - ITEM_POTION]; + effect = gItemEffectTable[item]; - if (!(effect[4] & ITEM4_HEAL_PP_ONE)) + if (effect == NULL || !(effect[4] & ITEM4_HEAL_PP_ONE)) { gPartyMenu.data1 = 0; TryUsePPItem(taskId); @@ -5673,14 +5676,14 @@ u8 GetItemEffectType(u16 item) const u8 *itemEffect; u32 statusCure; - if (!ITEM_HAS_EFFECT(item)) - return ITEM_EFFECT_NONE; - // Read the item's effect properties. if (item == ITEM_ENIGMA_BERRY_E_READER) itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - itemEffect = gItemEffectTable[item - ITEM_POTION]; + itemEffect = gItemEffectTable[item]; + + if (itemEffect == NULL) + return ITEM_EFFECT_NONE; if ((itemEffect[0] & ITEM0_DIRE_HIT) || itemEffect[1] || (itemEffect[3] & ITEM3_GUARD_SPEC)) return ITEM_EFFECT_X_ITEM; diff --git a/src/pokemon.c b/src/pokemon.c index 4250d3244..f9f7d811d 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5770,9 +5770,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } // Skip using the item if it won't do anything - if (!ITEM_HAS_EFFECT(item)) - return TRUE; - if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY_E_READER) + if (gItemEffectTable[item] == NULL && item != ITEM_ENIGMA_BERRY_E_READER) return TRUE; // Get item effect @@ -5785,7 +5783,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } else { - itemEffect = gItemEffectTable[item - ITEM_POTION]; + itemEffect = gItemEffectTable[item]; } // Do item effect @@ -6339,9 +6337,9 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) offset = ITEM_EFFECT_ARG_START; - temp = gItemEffectTable[itemId - ITEM_POTION]; + temp = gItemEffectTable[itemId]; - if (!temp && itemId != ITEM_ENIGMA_BERRY_E_READER) + if (temp != NULL && !temp && itemId != ITEM_ENIGMA_BERRY_E_READER) return 0; if (itemId == ITEM_ENIGMA_BERRY_E_READER) @@ -6469,7 +6467,7 @@ u8 *UseStatIncreaseItem(u16 itemId) } else { - itemEffect = gItemEffectTable[itemId - ITEM_POTION]; + itemEffect = gItemEffectTable[itemId]; } gPotentialItemEffectBattler = gBattlerInMenuId; From 8cf357a37ba4c57efd638a1bd22e24a3e31a649e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 23 Mar 2023 12:29:04 +0100 Subject: [PATCH 058/129] tests for dire claw ceaseless edge barb barrage --- src/battle_message.c | 2 +- src/battle_script_commands.c | 2 +- test/move_effect_barb_barrage.c | 43 +++++++ test/move_effect_dire_claw.c | 138 +++++++++++++++++++++ test/move_effect_hit_set_entry_hazardss.c | 117 ++++++++++++++++++ test/move_effect_spikes.c | 8 +- test/move_effect_tri_attack.c | 144 ++++++++++++++++++++++ test/move_effect_venoshock.c | 27 ++++ 8 files changed, 475 insertions(+), 6 deletions(-) create mode 100644 test/move_effect_barb_barrage.c create mode 100644 test/move_effect_dire_claw.c create mode 100644 test/move_effect_hit_set_entry_hazardss.c create mode 100644 test/move_effect_tri_attack.c create mode 100644 test/move_effect_venoshock.c diff --git a/src/battle_message.c b/src/battle_message.c index 562680f89..2ecfac0c7 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -209,7 +209,7 @@ static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!"); static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!"); -static const u8 sText_SpikesScattered[] = _("Spikes were scattered all around\nthe opponent's side!"); +static const u8 sText_SpikesScattered[] = _("Spikes were scattered all around\n{B_DEF_TEAM2} team!"); static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby spikes!"); static const u8 sText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s PERISH count\nfell to {B_BUFF1}!"); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bd444e04e..34257d896 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3783,7 +3783,7 @@ void SetMoveEffect(bool32 primary, u32 certain) } break; case MOVE_EFFECT_SPIKES: - if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SPIKES)) + if (gSideTimers[GetBattlerSide(gEffectBattler)].spikesAmount < 3) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SPIKESSCATTERED; BattleScriptPush(gBattlescriptCurrInstr + 1); diff --git a/test/move_effect_barb_barrage.c b/test/move_effect_barb_barrage.c new file mode 100644 index 000000000..9d9c2cc84 --- /dev/null +++ b/test/move_effect_barb_barrage.c @@ -0,0 +1,43 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + //ASSUME(gBattleMoves[MOVE_BARB_BARRAGE].effect == EFFECT_BARB_BARRAGE); +} + +SINGLE_BATTLE_TEST("Barb Barrage inflicts poison") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BARB_BARRAGE); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BARB_BARRAGE, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Barb Barrage's power doubles if the target is poisoned/badly poisoned", s16 damage) +{ + u32 status1; + PARAMETRIZE { status1 = 0; } + PARAMETRIZE { status1 = STATUS1_POISON; } + PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(status1);} + } WHEN { + TURN { MOVE(player, MOVE_BARB_BARRAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BARB_BARRAGE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[2].damage); + } +} diff --git a/test/move_effect_dire_claw.c b/test/move_effect_dire_claw.c new file mode 100644 index 000000000..a5270ce3f --- /dev/null +++ b/test/move_effect_dire_claw.c @@ -0,0 +1,138 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_DIRE_CLAW].effect == EFFECT_DIRE_CLAW); +} + +// found by brute-force +#define RNG_SLEEP 0xcb0 +#define RNG_POISON 0x2BE +#define RNG_PARALYSIS 5 + +SINGLE_BATTLE_TEST("Dire Claw can inflict poison, paralysis or sleep") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_SLP) { + STATUS_ICON(opponent, sleep: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + STATUS_ICON(opponent, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze poison/electric types respectively") +{ + u8 statusAnim; + u16 species; + u32 rng; + #if B_PARALYZE_ELECTRIC >= GEN_6 + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; } + #endif // B_PARALYZE_ELECTRIC + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ARBOK;} + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + NOT STATUS_ICON(opponent, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep pokemon with abilities preventing respective statuses") +{ + u8 statusAnim; + u16 species, ability; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + #if P_GEN_4_POKEMON == TRUE + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + #endif // P_GEN_4_POKEMON + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ZANGOOSE; ability = ABILITY_IMMUNITY; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_VIGOROTH; ability = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_HYPNO; ability = ABILITY_INSOMNIA; } + + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) {Ability(ability);} + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_SLP) { + NOT STATUS_ICON(opponent, sleep: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + NOT STATUS_ICON(opponent, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep a mon which is already statused") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_BURN);} + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_SLP) { + NOT STATUS_ICON(opponent, sleep: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + NOT STATUS_ICON(opponent, poison: TRUE); + } + } +} diff --git a/test/move_effect_hit_set_entry_hazardss.c b/test/move_effect_hit_set_entry_hazardss.c new file mode 100644 index 000000000..4e9761aac --- /dev/null +++ b/test/move_effect_hit_set_entry_hazardss.c @@ -0,0 +1,117 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_STONE_AXE].effect == EFFECT_HIT_SET_ENTRY_HAZARD); + ASSUME(gBattleMoves[MOVE_CEASELESS_EDGE].effect == EFFECT_HIT_SET_ENTRY_HAZARD); +} + +SINGLE_BATTLE_TEST("Stone Axe / Ceaseless Edge set up hazards after hitting the target") +{ + u16 move; + PARAMETRIZE {move = MOVE_STONE_AXE; } + PARAMETRIZE {move = MOVE_CEASELESS_EDGE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + if (move == MOVE_CEASELESS_EDGE) { + MESSAGE("Spikes were scattered all around the opposing team!"); + } + else { + MESSAGE("Pointed stones float in the air around the opposing team!"); + } + MESSAGE("2 sent out Wobbuffet!"); + if (move == MOVE_CEASELESS_EDGE) { + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Foe Wobbuffet is hurt by spikes!"); + } + else { + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Pointed stones dug into Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + NOT MESSAGE("Spikes were scattered all around the opposing team!"); + + MESSAGE("2 sent out Wynaut!"); + HP_BAR(opponent, damage: maxHP / 4); + MESSAGE("Foe Wynaut is hurt by spikes!"); + } +} + +SINGLE_BATTLE_TEST("Stone Axe can set up pointed stones only once") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + MESSAGE("2 sent out Wynaut!"); + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Pointed stones dug into Foe Wynaut!"); + } +} + diff --git a/test/move_effect_spikes.c b/test/move_effect_spikes.c index 33b0bad4b..0c84a5fb1 100644 --- a/test/move_effect_spikes.c +++ b/test/move_effect_spikes.c @@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Spikes damage on switch in") s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); for (count = 0; count < layers; ++count) { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); } MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / divisor); @@ -51,11 +51,11 @@ SINGLE_BATTLE_TEST("Spikes fails after 3 layers") } SCENE { s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); diff --git a/test/move_effect_tri_attack.c b/test/move_effect_tri_attack.c new file mode 100644 index 000000000..31627ef2d --- /dev/null +++ b/test/move_effect_tri_attack.c @@ -0,0 +1,144 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TRI_ATTACK].effect == EFFECT_TRI_ATTACK); +} + +// found by brute-force +#define RNG_PARALYSIS 0xcb0 +#define RNG_BURN 0x2BE +#define RNG_FREEZE 5 + +SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice types respectively") +{ + u8 statusAnim; + u16 species; + u32 rng; + #if B_PARALYZE_ELECTRIC >= GEN_6 + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU;} + #endif // B_PARALYZE_ELECTRIC + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_ARCANINE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_GLALIE; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + NOT STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + NOT STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilities preventing respective statuses") +{ + u8 statusAnim; + u16 species, ability; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + #if P_GEN_4_POKEMON == TRUE + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + #endif // P_GEN_4_POKEMON + #if P_GEN_7_POKEMON == TRUE + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; } + #endif // P_GEN_7_POKEMON + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_SEAKING; ability = ABILITY_WATER_VEIL; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; } + + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) {Ability(ability);} + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + NOT STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + NOT STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze a mon which is already statused") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + NOT STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + NOT STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + } +} diff --git a/test/move_effect_venoshock.c b/test/move_effect_venoshock.c new file mode 100644 index 000000000..876f611c9 --- /dev/null +++ b/test/move_effect_venoshock.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_VENOSHOCK].effect == EFFECT_VENOSHOCK); +} + +SINGLE_BATTLE_TEST("Venoshock's power doubles if the target is poisoned/badly poisoned", s16 damage) +{ + u32 status1; + PARAMETRIZE { status1 = 0; } + PARAMETRIZE { status1 = STATUS1_POISON; } + PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(status1);} + } WHEN { + TURN { MOVE(player, MOVE_VENOSHOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_VENOSHOCK, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[2].damage); + } +} From f15fb1540fe60d4f791cb537406cbd5f3ecdba0a Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Thu, 23 Mar 2023 23:16:08 +0100 Subject: [PATCH 059/129] Allow Kubfu evolution with Scroll items --- src/data/pokemon/evolution.h | 4 +- src/data/pokemon/item_effects.h | 210 ++++++++++++++++---------------- src/party_menu.c | 3 +- 3 files changed, 112 insertions(+), 105 deletions(-) diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h index 4f09867a6..b76e83a73 100644 --- a/src/data/pokemon/evolution.h +++ b/src/data/pokemon/evolution.h @@ -542,7 +542,9 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_DREEPY] = {{EVO_LEVEL, 50, SPECIES_DRAKLOAK}}, [SPECIES_DRAKLOAK] = {{EVO_LEVEL, 60, SPECIES_DRAGAPULT}}, [SPECIES_KUBFU] = {{EVO_DARK_SCROLL, 0, SPECIES_URSHIFU}, - {EVO_WATER_SCROLL, 0, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}}, + {EVO_ITEM, ITEM_SCROLL_OF_DARKNESS, SPECIES_URSHIFU}, + {EVO_WATER_SCROLL, 0, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}, + {EVO_ITEM, ITEM_SCROLL_OF_WATERS, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}}, #endif [SPECIES_RATTATA_ALOLAN] = {{EVO_LEVEL_NIGHT, 20, SPECIES_RATICATE_ALOLAN}}, [SPECIES_SANDSHREW_ALOLAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_SANDSLASH_ALOLAN}}, diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 8323801d5..607f57814 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -450,125 +450,129 @@ const u8 gItemEffect_TamatoBerry[10] = { const u8 *const gItemEffectTable[ITEMS_COUNT] = { // Medicine - [ITEM_POTION] = gItemEffect_Potion, - [ITEM_SUPER_POTION] = gItemEffect_SuperPotion, - [ITEM_HYPER_POTION] = gItemEffect_HyperPotion, - [ITEM_MAX_POTION] = gItemEffect_MaxPotion, - [ITEM_FULL_RESTORE] = gItemEffect_FullRestore, - [ITEM_REVIVE] = gItemEffect_Revive, - [ITEM_MAX_REVIVE] = gItemEffect_MaxRevive, - [ITEM_FRESH_WATER] = gItemEffect_FreshWater, - [ITEM_SODA_POP] = gItemEffect_SodaPop, - [ITEM_LEMONADE] = gItemEffect_Lemonade, - [ITEM_MOOMOO_MILK] = gItemEffect_MoomooMilk, - [ITEM_ENERGY_POWDER] = gItemEffect_EnergyPowder, - [ITEM_ENERGY_ROOT] = gItemEffect_EnergyRoot, - [ITEM_HEAL_POWDER] = gItemEffect_HealPowder, - [ITEM_REVIVAL_HERB] = gItemEffect_RevivalHerb, - [ITEM_ANTIDOTE] = gItemEffect_Antidote, - [ITEM_PARALYZE_HEAL] = gItemEffect_ParalyzeHeal, - [ITEM_BURN_HEAL] = gItemEffect_BurnHeal, - [ITEM_ICE_HEAL] = gItemEffect_IceHeal, - [ITEM_AWAKENING] = gItemEffect_Awakening, - [ITEM_FULL_HEAL] = gItemEffect_FullHeal, - [ITEM_ETHER] = gItemEffect_Ether, - [ITEM_MAX_ETHER] = gItemEffect_MaxEther, - [ITEM_ELIXIR] = gItemEffect_Elixir, - [ITEM_MAX_ELIXIR] = gItemEffect_MaxElixir, - [ITEM_BERRY_JUICE] = gItemEffect_BerryJuice, - [ITEM_SACRED_ASH] = gItemEffect_SacredAsh, - [ITEM_SWEET_HEART] = gItemEffect_Potion, - [ITEM_MAX_HONEY] = gItemEffect_MaxRevive, + [ITEM_POTION] = gItemEffect_Potion, + [ITEM_SUPER_POTION] = gItemEffect_SuperPotion, + [ITEM_HYPER_POTION] = gItemEffect_HyperPotion, + [ITEM_MAX_POTION] = gItemEffect_MaxPotion, + [ITEM_FULL_RESTORE] = gItemEffect_FullRestore, + [ITEM_REVIVE] = gItemEffect_Revive, + [ITEM_MAX_REVIVE] = gItemEffect_MaxRevive, + [ITEM_FRESH_WATER] = gItemEffect_FreshWater, + [ITEM_SODA_POP] = gItemEffect_SodaPop, + [ITEM_LEMONADE] = gItemEffect_Lemonade, + [ITEM_MOOMOO_MILK] = gItemEffect_MoomooMilk, + [ITEM_ENERGY_POWDER] = gItemEffect_EnergyPowder, + [ITEM_ENERGY_ROOT] = gItemEffect_EnergyRoot, + [ITEM_HEAL_POWDER] = gItemEffect_HealPowder, + [ITEM_REVIVAL_HERB] = gItemEffect_RevivalHerb, + [ITEM_ANTIDOTE] = gItemEffect_Antidote, + [ITEM_PARALYZE_HEAL] = gItemEffect_ParalyzeHeal, + [ITEM_BURN_HEAL] = gItemEffect_BurnHeal, + [ITEM_ICE_HEAL] = gItemEffect_IceHeal, + [ITEM_AWAKENING] = gItemEffect_Awakening, + [ITEM_FULL_HEAL] = gItemEffect_FullHeal, + [ITEM_ETHER] = gItemEffect_Ether, + [ITEM_MAX_ETHER] = gItemEffect_MaxEther, + [ITEM_ELIXIR] = gItemEffect_Elixir, + [ITEM_MAX_ELIXIR] = gItemEffect_MaxElixir, + [ITEM_BERRY_JUICE] = gItemEffect_BerryJuice, + [ITEM_SACRED_ASH] = gItemEffect_SacredAsh, + [ITEM_SWEET_HEART] = gItemEffect_Potion, + [ITEM_MAX_HONEY] = gItemEffect_MaxRevive, // Regional Specialties - [ITEM_PEWTER_CRUNCHIES] = gItemEffect_FullHeal, - [ITEM_RAGE_CANDY_BAR] = gItemEffect_FullHeal, - [ITEM_LAVA_COOKIE] = gItemEffect_FullHeal, - [ITEM_OLD_GATEAU] = gItemEffect_FullHeal, - [ITEM_CASTELIACONE] = gItemEffect_FullHeal, - [ITEM_LUMIOSE_GALETTE] = gItemEffect_FullHeal, - [ITEM_SHALOUR_SABLE] = gItemEffect_FullHeal, - [ITEM_BIG_MALASADA] = gItemEffect_FullHeal, + [ITEM_PEWTER_CRUNCHIES] = gItemEffect_FullHeal, + [ITEM_RAGE_CANDY_BAR] = gItemEffect_FullHeal, + [ITEM_LAVA_COOKIE] = gItemEffect_FullHeal, + [ITEM_OLD_GATEAU] = gItemEffect_FullHeal, + [ITEM_CASTELIACONE] = gItemEffect_FullHeal, + [ITEM_LUMIOSE_GALETTE] = gItemEffect_FullHeal, + [ITEM_SHALOUR_SABLE] = gItemEffect_FullHeal, + [ITEM_BIG_MALASADA] = gItemEffect_FullHeal, // Vitamins - [ITEM_HP_UP] = gItemEffect_HPUp, - [ITEM_PROTEIN] = gItemEffect_Protein, - [ITEM_IRON] = gItemEffect_Iron, - [ITEM_CALCIUM] = gItemEffect_Calcium, - [ITEM_ZINC] = gItemEffect_Zinc, - [ITEM_CARBOS] = gItemEffect_Carbos, - [ITEM_PP_UP] = gItemEffect_PPUp, - [ITEM_PP_MAX] = gItemEffect_PPMax, + [ITEM_HP_UP] = gItemEffect_HPUp, + [ITEM_PROTEIN] = gItemEffect_Protein, + [ITEM_IRON] = gItemEffect_Iron, + [ITEM_CALCIUM] = gItemEffect_Calcium, + [ITEM_ZINC] = gItemEffect_Zinc, + [ITEM_CARBOS] = gItemEffect_Carbos, + [ITEM_PP_UP] = gItemEffect_PPUp, + [ITEM_PP_MAX] = gItemEffect_PPMax, // EV Feathers - [ITEM_HEALTH_FEATHER] = gItemEffect_HpFeather, - [ITEM_MUSCLE_FEATHER] = gItemEffect_AtkFeather, - [ITEM_RESIST_FEATHER] = gItemEffect_DefFeather, - [ITEM_GENIUS_FEATHER] = gItemEffect_SpatkFeather, - [ITEM_CLEVER_FEATHER] = gItemEffect_SpdefFeather, - [ITEM_SWIFT_FEATHER] = gItemEffect_SpeedFeather, + [ITEM_HEALTH_FEATHER] = gItemEffect_HpFeather, + [ITEM_MUSCLE_FEATHER] = gItemEffect_AtkFeather, + [ITEM_RESIST_FEATHER] = gItemEffect_DefFeather, + [ITEM_GENIUS_FEATHER] = gItemEffect_SpatkFeather, + [ITEM_CLEVER_FEATHER] = gItemEffect_SpdefFeather, + [ITEM_SWIFT_FEATHER] = gItemEffect_SpeedFeather, // Candy - [ITEM_RARE_CANDY] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XS] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_S] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_M] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_L] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XL] = gItemEffect_RareCandy, - //[ITEM_DYNAMAX_CANDY] = gItemEffect_DynamaxCandy, // Todo + [ITEM_RARE_CANDY] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XS] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_S] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_M] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_L] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XL] = gItemEffect_RareCandy, + //[ITEM_DYNAMAX_CANDY] = gItemEffect_DynamaxCandy, // Todo // Medicinal Flutes - [ITEM_BLUE_FLUTE] = gItemEffect_BlueFlute, - [ITEM_YELLOW_FLUTE] = gItemEffect_YellowFlute, - [ITEM_RED_FLUTE] = gItemEffect_RedFlute, + [ITEM_BLUE_FLUTE] = gItemEffect_BlueFlute, + [ITEM_YELLOW_FLUTE] = gItemEffect_YellowFlute, + [ITEM_RED_FLUTE] = gItemEffect_RedFlute, // X Items - [ITEM_X_ATTACK] = gItemEffect_XAttack, - [ITEM_X_DEFENSE] = gItemEffect_XDefense, - [ITEM_X_SPEED] = gItemEffect_XSpeed, - [ITEM_X_ACCURACY] = gItemEffect_XAccuracy, - [ITEM_X_SP_ATK] = gItemEffect_XSpecialAttack, - [ITEM_X_SP_DEF] = gItemEffect_XSpecialDefense, + [ITEM_X_ATTACK] = gItemEffect_XAttack, + [ITEM_X_DEFENSE] = gItemEffect_XDefense, + [ITEM_X_SPEED] = gItemEffect_XSpeed, + [ITEM_X_ACCURACY] = gItemEffect_XAccuracy, + [ITEM_X_SP_ATK] = gItemEffect_XSpecialAttack, + [ITEM_X_SP_DEF] = gItemEffect_XSpecialDefense, - [ITEM_DIRE_HIT] = gItemEffect_DireHit, - [ITEM_GUARD_SPEC] = gItemEffect_GuardSpec, + [ITEM_DIRE_HIT] = gItemEffect_DireHit, + [ITEM_GUARD_SPEC] = gItemEffect_GuardSpec, - //[ITEM_MAX_MUSHROOMS] = gItemEffect_MaxMushrooms, // Todo + //[ITEM_MAX_MUSHROOMS] = gItemEffect_MaxMushrooms, // Todo // Evolution Items - [ITEM_FIRE_STONE] = gItemEffect_EvoItem, - [ITEM_WATER_STONE] = gItemEffect_EvoItem, - [ITEM_THUNDER_STONE] = gItemEffect_EvoItem, - [ITEM_LEAF_STONE] = gItemEffect_EvoItem, - [ITEM_ICE_STONE] = gItemEffect_EvoItem, - [ITEM_SUN_STONE] = gItemEffect_EvoItem, - [ITEM_MOON_STONE] = gItemEffect_EvoItem, - [ITEM_SHINY_STONE] = gItemEffect_EvoItem, - [ITEM_DUSK_STONE] = gItemEffect_EvoItem, - [ITEM_DAWN_STONE] = gItemEffect_EvoItem, - [ITEM_SWEET_APPLE] = gItemEffect_EvoItem, - [ITEM_TART_APPLE] = gItemEffect_EvoItem, - [ITEM_CRACKED_POT] = gItemEffect_EvoItem, - [ITEM_CHIPPED_POT] = gItemEffect_EvoItem, - [ITEM_GALARICA_CUFF] = gItemEffect_EvoItem, - [ITEM_GALARICA_WREATH] = gItemEffect_EvoItem, + [ITEM_FIRE_STONE] = gItemEffect_EvoItem, + [ITEM_WATER_STONE] = gItemEffect_EvoItem, + [ITEM_THUNDER_STONE] = gItemEffect_EvoItem, + [ITEM_LEAF_STONE] = gItemEffect_EvoItem, + [ITEM_ICE_STONE] = gItemEffect_EvoItem, + [ITEM_SUN_STONE] = gItemEffect_EvoItem, + [ITEM_MOON_STONE] = gItemEffect_EvoItem, + [ITEM_SHINY_STONE] = gItemEffect_EvoItem, + [ITEM_DUSK_STONE] = gItemEffect_EvoItem, + [ITEM_DAWN_STONE] = gItemEffect_EvoItem, + [ITEM_SWEET_APPLE] = gItemEffect_EvoItem, + [ITEM_TART_APPLE] = gItemEffect_EvoItem, + [ITEM_CRACKED_POT] = gItemEffect_EvoItem, + [ITEM_CHIPPED_POT] = gItemEffect_EvoItem, + [ITEM_GALARICA_CUFF] = gItemEffect_EvoItem, + [ITEM_GALARICA_WREATH] = gItemEffect_EvoItem, + [ITEM_AUSPICIOUS_ARMOR] = gItemEffect_EvoItem, + [ITEM_MALICIOUS_ARMOR] = gItemEffect_EvoItem, + [ITEM_SCROLL_OF_DARKNESS] = gItemEffect_EvoItem, + [ITEM_SCROLL_OF_WATERS] = gItemEffect_EvoItem, // Berries - [ITEM_CHERI_BERRY] = gItemEffect_CheriBerry, - [ITEM_CHESTO_BERRY] = gItemEffect_ChestoBerry, - [ITEM_PECHA_BERRY] = gItemEffect_PechaBerry, - [ITEM_RAWST_BERRY] = gItemEffect_RawstBerry, - [ITEM_ASPEAR_BERRY] = gItemEffect_AspearBerry, - [ITEM_LEPPA_BERRY] = gItemEffect_LeppaBerry, - [ITEM_ORAN_BERRY] = gItemEffect_OranBerry, - [ITEM_PERSIM_BERRY] = gItemEffect_PersimBerry, - [ITEM_LUM_BERRY] = gItemEffect_FullHeal, - [ITEM_SITRUS_BERRY] = gItemEffect_SitrusBerry, - [ITEM_POMEG_BERRY] = gItemEffect_PomegBerry, - [ITEM_KELPSY_BERRY] = gItemEffect_KelpsyBerry, - [ITEM_QUALOT_BERRY] = gItemEffect_QualotBerry, - [ITEM_HONDEW_BERRY] = gItemEffect_HondewBerry, - [ITEM_GREPA_BERRY] = gItemEffect_GrepaBerry, - [ITEM_TAMATO_BERRY] = gItemEffect_TamatoBerry, - [LAST_BERRY_INDEX] = NULL, + [ITEM_CHERI_BERRY] = gItemEffect_CheriBerry, + [ITEM_CHESTO_BERRY] = gItemEffect_ChestoBerry, + [ITEM_PECHA_BERRY] = gItemEffect_PechaBerry, + [ITEM_RAWST_BERRY] = gItemEffect_RawstBerry, + [ITEM_ASPEAR_BERRY] = gItemEffect_AspearBerry, + [ITEM_LEPPA_BERRY] = gItemEffect_LeppaBerry, + [ITEM_ORAN_BERRY] = gItemEffect_OranBerry, + [ITEM_PERSIM_BERRY] = gItemEffect_PersimBerry, + [ITEM_LUM_BERRY] = gItemEffect_FullHeal, + [ITEM_SITRUS_BERRY] = gItemEffect_SitrusBerry, + [ITEM_POMEG_BERRY] = gItemEffect_PomegBerry, + [ITEM_KELPSY_BERRY] = gItemEffect_KelpsyBerry, + [ITEM_QUALOT_BERRY] = gItemEffect_QualotBerry, + [ITEM_HONDEW_BERRY] = gItemEffect_HondewBerry, + [ITEM_GREPA_BERRY] = gItemEffect_GrepaBerry, + [ITEM_TAMATO_BERRY] = gItemEffect_TamatoBerry, + [LAST_BERRY_INDEX] = NULL, }; diff --git a/src/party_menu.c b/src/party_menu.c index 6964fa0c5..9185657a7 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5516,7 +5516,8 @@ void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task) } else { - RemoveBagItem(gSpecialVar_ItemId, 1); + if (ItemId_GetPocket(gSpecialVar_ItemId) != POCKET_KEY_ITEMS) + RemoveBagItem(gSpecialVar_ItemId, 1); FreePartyPointers(); } } From e601719c911b7c21421c36c69089a9f379e2704d Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 24 Mar 2023 00:04:08 +0100 Subject: [PATCH 060/129] Add new PLA form change items --- include/constants/items.h | 6 +++- src/data/item_icon_table.h | 3 ++ src/data/items.h | 36 +++++++++++++++++++ src/data/pokemon/form_change_table_pointers.h | 4 +++ src/data/pokemon/form_change_tables.h | 14 +++++++- src/data/text/item_descriptions.h | 15 ++++++++ 6 files changed, 76 insertions(+), 2 deletions(-) diff --git a/include/constants/items.h b/include/constants/items.h index d7d325376..2d186601b 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -965,7 +965,11 @@ #define ITEM_STEEL_TERA_SHARD 790 #define ITEM_WATER_TERA_SHARD 791 -#define ITEMS_COUNT 792 +#define ITEM_ADAMANT_CRYSTAL 792 +#define ITEM_GRISEOUS_CORE 793 +#define ITEM_LUSTROUS_GLOBE 794 + +#define ITEMS_COUNT 795 #define ITEM_FIELD_ARROW ITEMS_COUNT // A special item id associated with "Cancel"/"Exit" etc. in a list of items or decorations diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index 0dbec3f85..a0c27ea72 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -837,6 +837,9 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_ROCK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_RockTeraShard, gItemIconPalette_RockTeraShard}, [ITEM_STEEL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_SteelTeraShard, gItemIconPalette_SteelTeraShard}, [ITEM_WATER_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_WaterTeraShard, gItemIconPalette_WaterTeraShard}, + [ITEM_ADAMANT_CRYSTAL] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AdamantCrystal, gItemIconPalette_AdamantCrystal}, + [ITEM_GRISEOUS_CORE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GriseousCore, gItemIconPalette_GriseousCore}, + [ITEM_LUSTROUS_GLOBE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LustrousGlobe, gItemIconPalette_LustrousGlobe}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; diff --git a/src/data/items.h b/src/data/items.h index 982375f3e..82e41901c 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -10247,4 +10247,40 @@ const struct Item gItems[] = .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, + + [ITEM_ADAMANT_CRYSTAL] = + { + .name = _("AdamantCrystl"), + .itemId = ITEM_ADAMANT_CRYSTAL, + .price = 0, + .description = sAdamantCrystalDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_GRISEOUS_CORE] = + { + .name = _("Griseous Core"), + .itemId = ITEM_GRISEOUS_CORE, + .price = 0, + .description = sGriseousCoreDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_LUSTROUS_GLOBE] = + { + .name = _("LustrousGlobe"), + .itemId = ITEM_LUSTROUS_GLOBE, + .price = 0, + .description = sLustrousGlobeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, }; diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 90be7112b..62afeb2e0 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -1,6 +1,10 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = { #if P_GEN_4_POKEMON == TRUE + [SPECIES_DIALGA] = sDialgaFormChangeTable, + [SPECIES_DIALGA_ORIGIN] = sDialgaFormChangeTable, + [SPECIES_PALKIA] = sPalkiaFormChangeTable, + [SPECIES_PALKIA_ORIGIN] = sPalkiaFormChangeTable, [SPECIES_GIRATINA] = sGiratinaFormChangeTable, [SPECIES_GIRATINA_ORIGIN] = sGiratinaFormChangeTable, [SPECIES_SHAYMIN] = sShayminFormChangeTable, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 94da0add3..723bda4b2 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -44,9 +44,21 @@ FORM_BATTLE_END: #define NIGHT 2 #if P_GEN_4_POKEMON == TRUE +static const struct FormChange sDialgaFormChangeTable[] = { + {FORM_ITEM_HOLD, SPECIES_DIALGA, ITEM_NONE}, + {FORM_ITEM_HOLD, SPECIES_DIALGA_ORIGIN, ITEM_ADAMANT_CRYSTAL}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sPalkiaFormChangeTable[] = { + {FORM_ITEM_HOLD, SPECIES_PALKIA, ITEM_NONE}, + {FORM_ITEM_HOLD, SPECIES_PALKIA_ORIGIN, ITEM_LUSTROUS_GLOBE}, + {FORM_CHANGE_END}, +}; + static const struct FormChange sGiratinaFormChangeTable[] = { {FORM_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE}, - {FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB}, + {FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_CORE}, {FORM_CHANGE_END}, }; diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index cee413aa5..da15f001c 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -3877,3 +3877,18 @@ static const u8 sTeraShardDesc[] = _( "These shards may\n" "form when a Tera\n" "Pokémon faints."); + +static const u8 sAdamantCrystalDesc[] = _( + "A large, glowing gem\n" + "that lets Dialga\n" + "change form."); + +static const u8 sGriseousCoreDesc[] = _( + "A large, glowing gem\n" + "that lets Giratina\n" + "change form."); + +static const u8 sLustrousGlobeDesc[] = _( + "A large, glowing gem\n" + "that lets Palkia\n" + "change form."); From cd6d71cd01118ecab1405ddf28ce8dc4b00a51fb Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 24 Mar 2023 00:50:06 +0100 Subject: [PATCH 061/129] Add most of the new item icons (Clear Amulet & Shards missing) --- .../items/icon_palettes/ability_shield.pal | 19 ++++++ .../items/icon_palettes/adamant_crystal.pal | 19 ++++++ .../items/icon_palettes/auspicious_armor.pal | 19 ++++++ .../items/icon_palettes/big_bamboo_shoot.pal | 19 ++++++ .../items/icon_palettes/booster_energy.pal | 19 ++++++ graphics/items/icon_palettes/covert_cloak.pal | 19 ++++++ .../items/icon_palettes/gimmighoul_coin.pal | 19 ++++++ .../items/icon_palettes/griseous_core.pal | 19 ++++++ .../items/icon_palettes/leaders_crest.pal | 19 ++++++ graphics/items/icon_palettes/loaded_dice.pal | 19 ++++++ .../items/icon_palettes/lustrous_globe.pal | 19 ++++++ .../items/icon_palettes/malicious_armor.pal | 19 ++++++ graphics/items/icon_palettes/mirror_herb.pal | 19 ++++++ .../items/icon_palettes/punching_glove.pal | 19 ++++++ .../icon_palettes/scroll_of_darkness.pal | 19 ++++++ .../items/icon_palettes/scroll_of_waters.pal | 19 ++++++ graphics/items/icon_palettes/tera_orb.pal | 19 ++++++ .../items/icon_palettes/tiny_bamboo_shoot.pal | 19 ++++++ graphics/items/icons/ability_shield.png | Bin 0 -> 692 bytes graphics/items/icons/adamant_crystal.png | Bin 0 -> 735 bytes graphics/items/icons/auspicious_armor.png | Bin 0 -> 710 bytes graphics/items/icons/big_bamboo_shoot.png | Bin 0 -> 300 bytes graphics/items/icons/booster_energy.png | Bin 0 -> 309 bytes graphics/items/icons/covert_cloak.png | Bin 0 -> 308 bytes graphics/items/icons/gimmighoul_coin.png | Bin 0 -> 270 bytes graphics/items/icons/griseous_core.png | Bin 0 -> 724 bytes graphics/items/icons/leaders_crest.png | Bin 0 -> 276 bytes graphics/items/icons/loaded_dice.png | Bin 0 -> 307 bytes graphics/items/icons/lustrous_globe.png | Bin 0 -> 750 bytes graphics/items/icons/malicious_armor.png | Bin 0 -> 690 bytes graphics/items/icons/mirror_herb.png | Bin 0 -> 331 bytes graphics/items/icons/punching_glove.png | Bin 0 -> 682 bytes graphics/items/icons/scroll_of_darkness.png | Bin 0 -> 264 bytes graphics/items/icons/scroll_of_waters.png | Bin 0 -> 264 bytes graphics/items/icons/tera_orb.png | Bin 0 -> 327 bytes graphics/items/icons/tiny_bamboo_shoot.png | Bin 0 -> 249 bytes include/graphics.h | 39 ++++++++++++ src/data/graphics/items.h | 60 +++++++++++++++--- src/data/item_icon_table.h | 36 +++++------ 39 files changed, 451 insertions(+), 26 deletions(-) create mode 100644 graphics/items/icon_palettes/ability_shield.pal create mode 100644 graphics/items/icon_palettes/adamant_crystal.pal create mode 100644 graphics/items/icon_palettes/auspicious_armor.pal create mode 100644 graphics/items/icon_palettes/big_bamboo_shoot.pal create mode 100644 graphics/items/icon_palettes/booster_energy.pal create mode 100644 graphics/items/icon_palettes/covert_cloak.pal create mode 100644 graphics/items/icon_palettes/gimmighoul_coin.pal create mode 100644 graphics/items/icon_palettes/griseous_core.pal create mode 100644 graphics/items/icon_palettes/leaders_crest.pal create mode 100644 graphics/items/icon_palettes/loaded_dice.pal create mode 100644 graphics/items/icon_palettes/lustrous_globe.pal create mode 100644 graphics/items/icon_palettes/malicious_armor.pal create mode 100644 graphics/items/icon_palettes/mirror_herb.pal create mode 100644 graphics/items/icon_palettes/punching_glove.pal create mode 100644 graphics/items/icon_palettes/scroll_of_darkness.pal create mode 100644 graphics/items/icon_palettes/scroll_of_waters.pal create mode 100644 graphics/items/icon_palettes/tera_orb.pal create mode 100644 graphics/items/icon_palettes/tiny_bamboo_shoot.pal create mode 100644 graphics/items/icons/ability_shield.png create mode 100644 graphics/items/icons/adamant_crystal.png create mode 100644 graphics/items/icons/auspicious_armor.png create mode 100644 graphics/items/icons/big_bamboo_shoot.png create mode 100644 graphics/items/icons/booster_energy.png create mode 100644 graphics/items/icons/covert_cloak.png create mode 100644 graphics/items/icons/gimmighoul_coin.png create mode 100644 graphics/items/icons/griseous_core.png create mode 100644 graphics/items/icons/leaders_crest.png create mode 100644 graphics/items/icons/loaded_dice.png create mode 100644 graphics/items/icons/lustrous_globe.png create mode 100644 graphics/items/icons/malicious_armor.png create mode 100644 graphics/items/icons/mirror_herb.png create mode 100644 graphics/items/icons/punching_glove.png create mode 100644 graphics/items/icons/scroll_of_darkness.png create mode 100644 graphics/items/icons/scroll_of_waters.png create mode 100644 graphics/items/icons/tera_orb.png create mode 100644 graphics/items/icons/tiny_bamboo_shoot.png diff --git a/graphics/items/icon_palettes/ability_shield.pal b/graphics/items/icon_palettes/ability_shield.pal new file mode 100644 index 000000000..d11016b32 --- /dev/null +++ b/graphics/items/icon_palettes/ability_shield.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +248 200 240 +224 176 232 +200 144 224 +240 224 248 +176 120 216 +77 146 186 +105 179 221 +238 246 246 +222 222 222 +197 197 197 +161 161 161 +48 48 48 +255 255 255 +0 0 0 diff --git a/graphics/items/icon_palettes/adamant_crystal.pal b/graphics/items/icon_palettes/adamant_crystal.pal new file mode 100644 index 000000000..738ff0498 --- /dev/null +++ b/graphics/items/icon_palettes/adamant_crystal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +184 208 248 +168 200 248 +81 123 173 +128 168 216 +200 232 248 +224 248 248 +248 248 248 +104 104 104 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/auspicious_armor.pal b/graphics/items/icon_palettes/auspicious_armor.pal new file mode 100644 index 000000000..9d0c8e444 --- /dev/null +++ b/graphics/items/icon_palettes/auspicious_armor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +160 144 32 +192 176 56 +224 208 88 +128 112 32 +72 56 24 +224 80 80 +176 88 88 +120 72 72 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/big_bamboo_shoot.pal b/graphics/items/icon_palettes/big_bamboo_shoot.pal new file mode 100644 index 000000000..28ab4fe69 --- /dev/null +++ b/graphics/items/icon_palettes/big_bamboo_shoot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +189 202 71 +121 168 43 +120 167 42 +163 126 74 +116 101 78 +79 66 46 +115 77 43 +180 133 94 +233 176 96 +241 241 193 +183 170 147 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/booster_energy.pal b/graphics/items/icon_palettes/booster_energy.pal new file mode 100644 index 000000000..21dc17ba2 --- /dev/null +++ b/graphics/items/icon_palettes/booster_energy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +111 45 22 +0 0 0 +190 91 13 +255 139 1 +255 255 255 +255 231 10 +251 42 6 +154 157 151 +193 161 19 +234 238 234 +122 111 115 +74 67 68 +90 185 248 +78 86 255 +111 52 255 diff --git a/graphics/items/icon_palettes/covert_cloak.pal b/graphics/items/icon_palettes/covert_cloak.pal new file mode 100644 index 000000000..06491d2ad --- /dev/null +++ b/graphics/items/icon_palettes/covert_cloak.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +54 52 72 +101 120 143 +103 139 163 +84 105 130 +74 75 101 +90 108 136 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/gimmighoul_coin.pal b/graphics/items/icon_palettes/gimmighoul_coin.pal new file mode 100644 index 000000000..555a04dbe --- /dev/null +++ b/graphics/items/icon_palettes/gimmighoul_coin.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +180 124 35 +115 66 13 +255 249 234 +224 159 27 +255 226 121 +255 200 59 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/griseous_core.pal b/graphics/items/icon_palettes/griseous_core.pal new file mode 100644 index 000000000..05980782c --- /dev/null +++ b/graphics/items/icon_palettes/griseous_core.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +206 181 41 +222 198 57 +247 231 140 +156 132 33 +189 156 41 +123 99 33 +49 49 49 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/leaders_crest.pal b/graphics/items/icon_palettes/leaders_crest.pal new file mode 100644 index 000000000..1f60ee220 --- /dev/null +++ b/graphics/items/icon_palettes/leaders_crest.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +188 143 70 +131 85 43 +186 181 176 +80 74 71 +239 185 78 +138 128 128 +220 217 215 +250 225 159 +246 205 93 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/loaded_dice.pal b/graphics/items/icon_palettes/loaded_dice.pal new file mode 100644 index 000000000..16624b9e9 --- /dev/null +++ b/graphics/items/icon_palettes/loaded_dice.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +48 52 78 +127 216 17 +0 0 0 +192 240 140 +128 217 18 +90 137 46 +129 218 19 +88 135 48 +107 182 17 +128 217 18 +93 144 44 +89 136 47 +255 255 255 +127 216 19 +48 38 64 diff --git a/graphics/items/icon_palettes/lustrous_globe.pal b/graphics/items/icon_palettes/lustrous_globe.pal new file mode 100644 index 000000000..b62730a16 --- /dev/null +++ b/graphics/items/icon_palettes/lustrous_globe.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +248 216 232 +198 159 217 +210 171 229 +224 192 240 +210 192 240 +160 192 232 +144 200 232 +160 216 240 +128 216 224 +208 240 240 +248 240 240 +248 248 248 +80 80 80 +48 48 48 diff --git a/graphics/items/icon_palettes/malicious_armor.pal b/graphics/items/icon_palettes/malicious_armor.pal new file mode 100644 index 000000000..1ef3efe89 --- /dev/null +++ b/graphics/items/icon_palettes/malicious_armor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +66 66 99 +90 90 132 +115 115 156 +90 115 230 +132 140 181 +125 147 246 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/mirror_herb.pal b/graphics/items/icon_palettes/mirror_herb.pal new file mode 100644 index 000000000..b4ad3f972 --- /dev/null +++ b/graphics/items/icon_palettes/mirror_herb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +39 194 168 +124 228 211 +19 101 84 +187 228 77 +238 250 169 +234 244 124 +24 152 108 +126 106 28 +173 171 15 +43 138 128 +127 175 55 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/punching_glove.pal b/graphics/items/icon_palettes/punching_glove.pal new file mode 100644 index 000000000..f21cb39ec --- /dev/null +++ b/graphics/items/icon_palettes/punching_glove.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +255 212 0 +200 56 32 +248 64 48 +232 232 232 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/scroll_of_darkness.pal b/graphics/items/icon_palettes/scroll_of_darkness.pal new file mode 100644 index 000000000..1b66d85e0 --- /dev/null +++ b/graphics/items/icon_palettes/scroll_of_darkness.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +130 116 116 +86 86 86 +54 41 49 +104 78 86 +56 56 56 +141 105 41 +223 191 65 +242 241 242 +184 172 179 +186 140 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/scroll_of_waters.pal b/graphics/items/icon_palettes/scroll_of_waters.pal new file mode 100644 index 000000000..41a94976f --- /dev/null +++ b/graphics/items/icon_palettes/scroll_of_waters.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +118 109 109 +143 130 127 +101 77 83 +73 68 68 +122 108 104 +141 105 41 +223 191 65 +242 241 242 +184 172 179 +186 140 57 +102 78 84 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/tera_orb.pal b/graphics/items/icon_palettes/tera_orb.pal new file mode 100644 index 000000000..78b3689f9 --- /dev/null +++ b/graphics/items/icon_palettes/tera_orb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +81 41 75 +98 61 92 +66 72 65 +51 4 43 +201 185 199 +110 86 106 +84 73 92 +32 41 34 +255 255 255 +71 50 92 +64 71 94 +139 165 201 +183 191 209 +0 0 0 diff --git a/graphics/items/icon_palettes/tiny_bamboo_shoot.pal b/graphics/items/icon_palettes/tiny_bamboo_shoot.pal new file mode 100644 index 000000000..1172befa6 --- /dev/null +++ b/graphics/items/icon_palettes/tiny_bamboo_shoot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +111 167 43 +179 192 68 +107 144 66 +84 116 48 +68 93 37 +124 137 52 +168 87 80 +168 116 111 +241 241 193 +168 87 80 +183 170 147 +121 52 57 +0 0 0 +0 0 0 diff --git a/graphics/items/icons/ability_shield.png b/graphics/items/icons/ability_shield.png new file mode 100644 index 0000000000000000000000000000000000000000..de7354d71f8ab38c4042d94cfad8b58b856dc5f2 GIT binary patch literal 692 zcmV;l0!#ggP)EX>4Tx04R}tkv&MmKpe$i(@I4u4t5ZA$j~}j5EXHhDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR0!X5l%$?&0I>U5saWpZjz4D+QAQK9P8i>4rtTK|Hf* z>74h8!>lYR#OK8023?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*!aYNMH#`q#!~@9TikzAx5i4iitGs$36VRjz2{%nOqex zax9<*6_Voz|AXJ%n#HL}Hz^bcdR}b%BMJm}fmXw|zmILZbprUGfh(=!uQh?$PtqG5 zEph}5Yy%h99ZlW?E_Z;TCtWfmNAlAYibdf4jJ_!k4Bi5LYi@7teVjf3S?X%}1~@nb z#!8gE?(y#4?%w`A)9&vFlVWnTjs1QK0000mP)t-s00030|Nr>N@ZhlM$dKUh;P|k3 z*iDkUX|vt#_V(W1-o?emp`oELFfjlB{{R30f`gsi0000GbW%=J0RR90|NsC0|NsC0 z|NsC0z)*`r0001!Nkl8f8U5zc zlZ8E!NQqx7-RP-z+M?uzA6lc2s23cMnUkR#m}&(K$w2i8$sh(tGeMH`(+%uUYZLaM z=*X~NcXYPi1UZ4-ng9m-D<*)S0+imz83rTxKqU1(!3az4Z4x5aKE!kDT|D=G{oIHC a_q+k9MhXH6sl^!p0000fQS8WW2&PqdmRCNqX=2;|!TkpJ`Unud?RrDvnWg}+IW^2rVL;u+U;U;n%pM-e+KMKTt7o)AiVUcQ4<(y+1wb?_Y*1CPn8WH}?qvW5^)DC&U#< z|NsAg$Aup&PW%Y0UfZzZ#)%g{9{d1-jEoEe0|THePz@ZUCdg+2IRYg?e!(D}$lyRg zw=+;~v!{z=h{nXN6L0e!R^V~g?oj;rzy5>Fi$i8_6ZN~Vn0+eLoAUZsw1LtI{a*#& z0~f^1kw37vIpxQk4;SY(6ss8)GG73yk)hf%1JM;eJ}Ybc+V+Rw`b-1mnIFD7dk5G*jj5|=hnD-^J$(E+wkN%E{_o;1+N_fq?Iu?Ay=-&c<7l%v^W~iH zorl-xXdZcf=+_n zW&LEcuwXgnHD&L+kMHiiyZ6ub^1Ju!laq?J^!}{_MU+8+Plzj!{{R2~f(Z%-Hds8k z5YbSe;9(*0ARu5vL_~#$hk=0sP!^~L4zd;t_5(QrB|(0{Af3qIKtQ)MP;RNGi(`n! z#HE23g$^rly!I5B_5c3^*0P zU#>Q+uaZTQD!GDu72M<7jVC@c;t_oKROLg*lHI#LhAr@2A9N)&Zr!Sf0av6`6`xG0 zDbn1>mO6LVRAasD2MXWje*d~b+-QGTSXY{0S#re7z?mD3a+>0J<5hFKk{>ng6EZ!% jvFq#c3Z1tF$nMpaRt&q zu=kXE92{GIfQeYLl=#=YE-@bTlp?W-n3lmW?8&QGrbDS?t8zhH*{ z|Ns93Vi<`2dRzx6*XQZt7@{$;b<%CVW&}?|IAO7FBX7?4=UHQz*=Ese_mu|%~ zYH!fx*cR@pu-7}`MYTSMj%Vn?jjO}fI5ux&$czp=Y3gC4^~tnfOSti~5{G;~+rlje zm0jAL)HLURu|7EUO8dhnEJnT`H!hs>%)_eb*bgte<8S}f%;zgQB3PGY)7NJlYFo4K d;j8)`ubFlCu)NHY>l6oh!PC{xWt~$(699KKc>w?b literal 0 HcmV?d00001 diff --git a/graphics/items/icons/booster_energy.png b/graphics/items/icons/booster_energy.png new file mode 100644 index 0000000000000000000000000000000000000000..df583a2508d4e908ff8c32664f65480c4da30528 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt)( zx?(_bUo`LkZpQyW@SN+n7Tc`3(+@5be)aBERerITvrE*@AAVu~^G*IU*UvKmsum~- z@(X4FsYU_^0=k`na??Fs978lF_D=E?J8Zz=tlM^r(`4WO+~(aZVyT*Y`Q0jd{&Owx zOWWY_c*6>Y7@3-o=TC0+M7S<9P=49{;>?aB{av}b?4Mmd_lHY_wf)Y0x9yDA;`Of{ zpRP%HAaRS~+ncrb7@k$<>pR$-IQM}kV9kfmMh7~!@=sF$nMpaRt&q zU}oZxTG5~0y*MPZ$;&%6DyIV?j!C{d_dE_LDo_&S7tHV<6&wiYb_U8#^K@|x(U_P! zDUgpvk;8eZ^T&VY_ngXv*m8U1Yc;htg-!N+tz>hl^}t>EV~%HHyN^g3+)$ll=aQzv zEjmL`+uoCB!~X<+g-^dE7=FLfS3Z*>U)KNl~s zV^~wB!f?CRc!6*PlXQVft)oeTsC7e|0<+`awYT4_`#sImo^7ey^0VjpSBo>x>7OsG P3G$PttDnm{r-UW|j&*9# literal 0 HcmV?d00001 diff --git a/graphics/items/icons/gimmighoul_coin.png b/graphics/items/icons/gimmighoul_coin.png new file mode 100644 index 0000000000000000000000000000000000000000..b161cf12ac37b2e9eaa9beeb36382e8e3e97d9e4 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&_ zYLttec>n)=^A)n z2SpDka5ziz6#nm(UQ_#u!FHt6`zyLClZz{=(PSIF}1I-uJVTbg@^6O{5H=%z@p<_8|%G)m**9O`N2sqTYv4@ dE&pkIDRYD()2!=@=KTY?+0)g}Wt~$(695QOXPN*2 literal 0 HcmV?d00001 diff --git a/graphics/items/icons/griseous_core.png b/graphics/items/icons/griseous_core.png new file mode 100644 index 0000000000000000000000000000000000000000..08748fe7bba170faebb029c29aa9fc4b8046143e GIT binary patch literal 724 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pfw4c+**PE}BfliSI3vG6!PD7U zp`a)~Ei)&Tfk9(p?L=FT!wxb>fQS8WW2&PqdmRCNqX=2;|!TkpJ`Unud?RrDvnWg}+IW^2rVL;u+U;U;n%pM-e+KMKTt7o)AiVUcQ4<(y+1wb?_Y*1CPn8WH}?qvW5^)DC&U#< z|NsC0+*Zwd$1J};@0ru0xOa|bb+V$Np&?KlD2oQl0xWg|g#=21{DMI`k->q0ZfBs} z3Qrfu5RHjTCpropHsD|mZf^Pa|B+I9)NbD@En~Zg*B%aikJqn?uX+`i{;99y;{)-P zlS0@Q#GJ0#Q0m7pWtz9!#EB*=c^6zwNP8{4LW;r7rTOz@@e>A$?#)d198OpSZV$Nd zX_m^J8DH)67tIiSDwG(z{9fn2Z|C*OA}u tXl*c?-tNWQ?yd{<+VQvDYTf$vUs;$V*>)OpRnGx=(bLt>Wt~$(6995%J!Sv^ literal 0 HcmV?d00001 diff --git a/graphics/items/icons/leaders_crest.png b/graphics/items/icons/leaders_crest.png new file mode 100644 index 0000000000000000000000000000000000000000..b105fcd29d95d1ff1f2c240fea023c8001e9db50 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q zu&3XxIaGVs)(rt(?(cW{bu~2Hxq1E9!};IN#zGXp$se5`4+1#?B|(0{4F6HVfq-sj zpj?@!i(`n!#I1prOa~M=9tU0dZ@**V;=~+RSs{-AmwyqfqS(Lt&R9MBsPBrI;YW6K zTFOqW6mCsA9;9X9V&WCLA$j8@#`7sluP@$sFD^gf_1;82MLmn-O6*%p8q~{Mrm20B uJZ_#kU0->^y$42O2~y2_lwUnqe~sDVE7Pe4Cr literal 0 HcmV?d00001 diff --git a/graphics/items/icons/loaded_dice.png b/graphics/items/icons/loaded_dice.png new file mode 100644 index 0000000000000000000000000000000000000000..1295450928df350a450cc87ab127f5248959175e GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt#P ze)Ts5fs6wmdKzvDMRn>m-V%;zH^|;52;|02(24BO|NsAg{S9FQH3!|-_8=PsN`m}? z8Gxey|A7bywKK{18BlJjr;B5V#>Bl74)PsQ;Bax32zKiE|9^Y;me4zo<-To=OZ#+S z+m!!~-Rt-0^|i4&a4&4!tT53$#>In6`yJZ?ZqJVi=Zazug~eRh&KcLr^O;jwJ11q| zrfvrn?KLh@o+ZWFZ(U6k1qO+6Kl3EAAL;D1FQMlpyWq9QZ2M0zm;*YR}^4`1&hJj?yupCc&e4F-4w z;yI@2Ch-Pwbko#0?-PeuNtB7ti6?ZrAn_yDC5PWQ7j5?P%#fZ*%@c=+g<=Ow9n4C) zLOeqpmKBxqy;+B4&Rd+7N{zMd$zK@At1D@)(;Pt@OGqFI0TOB`qXH8VT2)dEq-a0p z;vcsCNpeZ#Dua<@0aYjvZ9n)Q{O;B$OiwvUff&&JVp$(!fPWWg)-CJ%*s_`@fbSW& zQrrG&1DO3Jz24TsM?n8JaB8-Vo z(+40!T`k`L2Zz9Tk+Roa-rdvL+rMX8{rv#cG;+>avyKt~001yhOjJbx00960|M=MG z#-G{JtL5Op@Y2BWpup&m$mpQh@POFh(D3m1@bLKf_)t(#FfcGLRPaau000nlQchC< z|NsC0|NsC0|NsC0|NsBMP>VwV006>CL_t(2k%f{`4#OY}Lnj)uKq1`!wljpbw9_>I zRPw_KBz?X9$*fUkPrD&hDxlp^Lk%&?wn?aHi%&aI6SdXPlp~RY80hbH&q^hd0Gk1% z%*F#~Ch-UZ1V=*SCh&*_AS+vFPGnI43FejHhtr<)J;11Sfu4xyI>975{R?EoVNc&d zZ%)N{+CZ^+-J#?kHlHsXP3Wr*e`BB>BROk`obU4?`q?fPD(iR;a`XG5iX#bSU6il3 gP|wx={u#dY0duGe>o^(Lg8%>k07*qoM6N<$f=vBdUH||9 literal 0 HcmV?d00001 diff --git a/graphics/items/icons/malicious_armor.png b/graphics/items/icons/malicious_armor.png new file mode 100644 index 0000000000000000000000000000000000000000..931850013a6d012fc4855aba69ff7a0cffe928c0 GIT binary patch literal 690 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pfw3ji**U<|*;%2WC_gPTCzXLg zV`A+@TaUvIGDqVtd%0@yl?jxdxL_42AX+#@OYERiruLRs2}Li(O)@=#Vq{paH#N(5 zhq8;O$I8aAI(}e2a`B|+MOUvs@j)4aj}I2w-@99VXD@S0+SHY42}}W|r#;jkCF$+g zVv83%#KF{&=hnD-^J$(E+wkN%E{_o;1+N_fq?Iu?Ay=-&c<7l%v^W~iH zorl-xXdZcf=+_n zW&LEcuwXgnHD&L+kMHiiyZ6ub^1Ju!laq?J^!}{_MU+8+Plzj!{{R2KlT&h3R7-L3 zoT%bwEj?RnCx0_AFaU}JWzm4S>z6k`A%T)0zhIC~WN;v$+ZiY~(bL5-L}TLG07s$2 z4ji`vw}1LCE`H`p&KuL1Ne&JrYo{|h_MdE5Wa2n}XrWlXOAu$d$$Pf_6_(MO&67_Q z-Q!C6;nJcS|3~0J{-?a?iF2++vOUfh(pvp7IXjb8p*? zJ)Mg>PRwaD5WTmJ*;(VpUZ;5OOFPaNpSoHoSNpf>e`qat{LiHmdK II;Vst0PmeHtpET3 literal 0 HcmV?d00001 diff --git a/graphics/items/icons/mirror_herb.png b/graphics/items/icons/mirror_herb.png new file mode 100644 index 0000000000000000000000000000000000000000..e792bad8294cd25b4411e62c7e9f5de1b7f1fc0f GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q zpnhmY&6CT*sUf?c_`dtK^3|6bi5WR{Su$%^^J{lC)UP*(CH_Ji$Ht1!&MgubxT~`)h%xZ_GNrUbe{&XRG0n9Wl|ET^@PL?34o{K5-J*l?*|`y7 zXI^Bt%(<9n4!5C{g!;M6869Q zreJ;e64QQ-??#SW#3ojsaGhTqXm|BxCZpWFUk~~3T$L_QVl~d=hnD-^J$(E+wkN%E{_o;1+N_fq?Iu?Ay=-&c<7l%v^W~iH zorl-xXdZcf=+_n zW&LEcuwXgnHD&L+kMHiiyZ6ub^1Ju!laq?J^!}{_MU+8+Plzj!{tpCK7*1Fy{BSUM z@#2MnfdNneD2^4#Eh{(#ln^Kh@(Tv*1nGu?0|DL6K)Fs&7sn8diLDbG`Hm=XI8PV* z`QP78z)!tmXWGq4b}J0#Ki_|)bo0?8ZBx>c7d>JY`0-lh)zt$zRl?j&JR6rUS-Jd# z#OLHoyf!H*%;DYrTNd4Lkh|y5_xc;7irAd5zjM?$>&;J`HrvlsxApH0uP*u9iK=t! uwZt;aMO)r{PoFFxeqaAv*!&mlD}FI#|6?h?YGU&gF$nMpaRt&q z&{R?q78YivX_(;`W?^B`o2hw!zvHKmpLVR-ysO6&q6R{`f39i;vII(k{DK+&qk;ng z-OfO{EKe855RHjzCwlT7FyLT*><}^O|NrePtF+H8462oBK6>ev{2|80!R(79jx^4A zIh%R5^%kjpubErTTOzLg+O3?;x6P(z(w`F_Og;M)rW?;Q)BGMVD_P;QeR+b+f<1Sm k1Mjsr?N2DE`}5R2*6=dprNWffA0W4Ry85}Sb4q9e030c3F$nMpaRt&q zP?nq9-&CLK8|>-gQk9d@o2hw!zvHKmpLVR-ysO7D%`XI^3`ow5no$F!1WJPZf*Jm! zf&&5F&Oo^=PZ!4!jfra~dh#7G;9!325Hach|LrTQw9hRJs+DOzdg+$@A;!hQ?29Ch zG|qTAn|ZeN7O8!&nOn_UBCh?~t(?ub&8BA3pA#QUJ^K`<8_zS-{2nkXS>dyNd4kM> nJ$Iu6@3lAWPbjGS^VB`o@G|42!j#q@Am@3y`njxgN@xNAvm$E` literal 0 HcmV?d00001 diff --git a/graphics/items/icons/tera_orb.png b/graphics/items/icons/tera_orb.png new file mode 100644 index 0000000000000000000000000000000000000000..03ecb8e82c2d5267de84291cc4d4e79e2f12bf98 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q z5UA;$WEeNIW(5J~yWRmhr~lXIZH`!LWw)&|VTQ0!-sLas zCoeFEE&h_n`{o>@xI5R=&q3}l_Uv1eJu}zS-Cr_7D(3I1cdIOzo<*AST#o8Ds>pj2 z?G*a@_=L2`1%B%i9FmKdsI!@}UD+pn@#N0RiBI;r-`>4wu>)`0)E^ICZaB6{uVeol zah4M^GkY(8zRG;Ebz#Tr(rdoe`+;3BNh5rlN)=R8>KIJaCKu0rpy85}S Ib4q9e05-0R6aWAK literal 0 HcmV?d00001 diff --git a/graphics/items/icons/tiny_bamboo_shoot.png b/graphics/items/icons/tiny_bamboo_shoot.png new file mode 100644 index 0000000000000000000000000000000000000000..6b24c7e383e46234a138381d7fa8b30383a2b5e3 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q zkiT4e^8uIa2~Hs;1}?FxHJv6a!UI;61u3d46@@1yb}qQYP+aJ@X;% zBin-OOt;o#7slkf-O&xM-EmLgeAC}_$2*%9?55u=cvP&rUhl^CnK>P@&o?|}5xnwq b!ThI;%bqgsYv+=T2RX*m)z4*}Q$iB}thHwP literal 0 HcmV?d00001 diff --git a/include/graphics.h b/include/graphics.h index 8b1e0c3a2..7cf903034 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -8834,6 +8834,45 @@ extern const u32 gItemIcon_Gem[]; extern const u32 gItemIconPalette_Ruby[]; extern const u32 gItemIconPalette_Sapphire[]; +// GEN IX ITEMS +extern const u32 gItemIcon_AbilityShield[]; +extern const u32 gItemIconPalette_AbilityShield[]; +extern const u32 gItemIcon_AuspiciousArmor[]; +extern const u32 gItemIconPalette_AuspiciousArmor[]; +extern const u32 gItemIcon_BigBambooShoot[]; +extern const u32 gItemIconPalette_BigBambooShoot[]; +extern const u32 gItemIcon_BoosterEnergy[]; +extern const u32 gItemIconPalette_BoosterEnergy[]; +extern const u32 gItemIcon_CovertCloak[]; +extern const u32 gItemIconPalette_CovertCloak[]; +extern const u32 gItemIcon_GimmighoulCoin[]; +extern const u32 gItemIconPalette_GimmighoulCoin[]; +extern const u32 gItemIcon_LeadersCrest[]; +extern const u32 gItemIconPalette_LeadersCrest[]; +extern const u32 gItemIcon_LoadedDice[]; +extern const u32 gItemIconPalette_LoadedDice[]; +extern const u32 gItemIcon_MaliciousArmor[]; +extern const u32 gItemIconPalette_MaliciousArmor[]; +extern const u32 gItemIcon_MirrorHerb[]; +extern const u32 gItemIconPalette_MirrorHerb[]; +extern const u32 gItemIcon_PunchingGlove[]; +extern const u32 gItemIconPalette_PunchingGlove[]; +extern const u32 gItemIcon_ScrollOfDarkness[]; +extern const u32 gItemIconPalette_ScrollOfDarkness[]; +extern const u32 gItemIcon_ScrollOfWaters[]; +extern const u32 gItemIconPalette_ScrollOfWaters[]; +extern const u32 gItemIcon_TeraOrb[]; +extern const u32 gItemIconPalette_TeraOrb[]; +extern const u32 gItemIcon_TinyBambooShoot[]; +extern const u32 gItemIconPalette_TinyBambooShoot[]; + +extern const u32 gItemIcon_AdamantCrystal[]; +extern const u32 gItemIconPalette_AdamantCrystal[]; +extern const u32 gItemIcon_GriseousCore[]; +extern const u32 gItemIconPalette_GriseousCore[]; +extern const u32 gItemIcon_LustrousGlobe[]; +extern const u32 gItemIconPalette_LustrousGlobe[]; + extern const u32 gItemIcon_ReturnToFieldArrow[]; extern const u32 gItemIconPalette_ReturnToFieldArrow[]; diff --git a/src/data/graphics/items.h b/src/data/graphics/items.h index 35ce13db2..ce4ecf608 100644 --- a/src/data/graphics/items.h +++ b/src/data/graphics/items.h @@ -1931,17 +1931,61 @@ const u32 gItemIconPalette_Ruby[] = INCBIN_U32("graphics/items/icon_palettes/rub const u32 gItemIconPalette_Sapphire[] = INCBIN_U32("graphics/items/icon_palettes/sapphire.gbapal.lz"); -//const u32 gItemIcon_AbilityShield[] = INCBIN_U32("graphics/items/icons/ability_shield.4bpp.lz"); -//const u32 gItemIconPalette_AbilityShield[] = INCBIN_U32("graphics/items/icon_palettes/ability_shield.gbapal.lz"); +const u32 gItemIcon_AbilityShield[] = INCBIN_U32("graphics/items/icons/ability_shield.4bpp.lz"); +const u32 gItemIconPalette_AbilityShield[] = INCBIN_U32("graphics/items/icon_palettes/ability_shield.gbapal.lz"); //const u32 gItemIcon_ClearAmulet[] = INCBIN_U32("graphics/items/icons/clear_amulet.4bpp.lz"); //const u32 gItemIconPalette_ClearAmulet[] = INCBIN_U32("graphics/items/icon_palettes/clear_amulet.gbapal.lz"); -//const u32 gItemIcon_PunchingGlove[] = INCBIN_U32("graphics/items/icons/punching_glove.4bpp.lz"); -//const u32 gItemIconPalette_PunchingGlove[] = INCBIN_U32("graphics/items/icon_palettes/punching_glove.gbapal.lz"); +const u32 gItemIcon_PunchingGlove[] = INCBIN_U32("graphics/items/icons/punching_glove.4bpp.lz"); +const u32 gItemIconPalette_PunchingGlove[] = INCBIN_U32("graphics/items/icon_palettes/punching_glove.gbapal.lz"); -//const u32 gItemIcon_CovertCloak[] = INCBIN_U32("graphics/items/icons/covert_cloak.4bpp.lz"); -//const u32 gItemIconPalette_CovertCloak[] = INCBIN_U32("graphics/items/icon_palettes/covert_cloak.gbapal.lz"); +const u32 gItemIcon_CovertCloak[] = INCBIN_U32("graphics/items/icons/covert_cloak.4bpp.lz"); +const u32 gItemIconPalette_CovertCloak[] = INCBIN_U32("graphics/items/icon_palettes/covert_cloak.gbapal.lz"); -//const u32 gItemIcon_LoadedDice[] = INCBIN_U32("graphics/items/icons/loaded_dice.4bpp.lz"); -//const u32 gItemIconPalette_LoadedDice[] = INCBIN_U32("graphics/items/icon_palettes/loaded_dice.gbapal.lz"); +const u32 gItemIcon_LoadedDice[] = INCBIN_U32("graphics/items/icons/loaded_dice.4bpp.lz"); +const u32 gItemIconPalette_LoadedDice[] = INCBIN_U32("graphics/items/icon_palettes/loaded_dice.gbapal.lz"); + +const u32 gItemIcon_AuspiciousArmor[] = INCBIN_U32("graphics/items/icons/auspicious_armor.4bpp.lz"); +const u32 gItemIconPalette_AuspiciousArmor[] = INCBIN_U32("graphics/items/icon_palettes/auspicious_armor.gbapal.lz"); + +const u32 gItemIcon_BigBambooShoot[] = INCBIN_U32("graphics/items/icons/big_bamboo_shoot.4bpp.lz"); +const u32 gItemIconPalette_BigBambooShoot[] = INCBIN_U32("graphics/items/icon_palettes/big_bamboo_shoot.gbapal.lz"); + +const u32 gItemIcon_BoosterEnergy[] = INCBIN_U32("graphics/items/icons/booster_energy.4bpp.lz"); +const u32 gItemIconPalette_BoosterEnergy[] = INCBIN_U32("graphics/items/icon_palettes/booster_energy.gbapal.lz"); + +const u32 gItemIcon_GimmighoulCoin[] = INCBIN_U32("graphics/items/icons/gimmighoul_coin.4bpp.lz"); +const u32 gItemIconPalette_GimmighoulCoin[] = INCBIN_U32("graphics/items/icon_palettes/gimmighoul_coin.gbapal.lz"); + +const u32 gItemIcon_LeadersCrest[] = INCBIN_U32("graphics/items/icons/leaders_crest.4bpp.lz"); +const u32 gItemIconPalette_LeadersCrest[] = INCBIN_U32("graphics/items/icon_palettes/leaders_crest.gbapal.lz"); + +const u32 gItemIcon_MaliciousArmor[] = INCBIN_U32("graphics/items/icons/malicious_armor.4bpp.lz"); +const u32 gItemIconPalette_MaliciousArmor[] = INCBIN_U32("graphics/items/icon_palettes/malicious_armor.gbapal.lz"); + +const u32 gItemIcon_MirrorHerb[] = INCBIN_U32("graphics/items/icons/mirror_herb.4bpp.lz"); +const u32 gItemIconPalette_MirrorHerb[] = INCBIN_U32("graphics/items/icon_palettes/mirror_herb.gbapal.lz"); + +const u32 gItemIcon_ScrollOfDarkness[] = INCBIN_U32("graphics/items/icons/scroll_of_darkness.4bpp.lz"); +const u32 gItemIconPalette_ScrollOfDarkness[] = INCBIN_U32("graphics/items/icon_palettes/scroll_of_darkness.gbapal.lz"); + +const u32 gItemIcon_ScrollOfWaters[] = INCBIN_U32("graphics/items/icons/scroll_of_waters.4bpp.lz"); +const u32 gItemIconPalette_ScrollOfWaters[] = INCBIN_U32("graphics/items/icon_palettes/scroll_of_waters.gbapal.lz"); + +const u32 gItemIcon_TeraOrb[] = INCBIN_U32("graphics/items/icons/tera_orb.4bpp.lz"); +const u32 gItemIconPalette_TeraOrb[] = INCBIN_U32("graphics/items/icon_palettes/tera_orb.gbapal.lz"); + +const u32 gItemIcon_TinyBambooShoot[] = INCBIN_U32("graphics/items/icons/tiny_bamboo_shoot.4bpp.lz"); +const u32 gItemIconPalette_TinyBambooShoot[] = INCBIN_U32("graphics/items/icon_palettes/tiny_bamboo_shoot.gbapal.lz"); + +// Tera Shards here + +const u32 gItemIcon_AdamantCrystal[] = INCBIN_U32("graphics/items/icons/adamant_crystal.4bpp.lz"); +const u32 gItemIconPalette_AdamantCrystal[] = INCBIN_U32("graphics/items/icon_palettes/adamant_crystal.gbapal.lz"); + +const u32 gItemIcon_GriseousCore[] = INCBIN_U32("graphics/items/icons/griseous_core.4bpp.lz"); +const u32 gItemIconPalette_GriseousCore[] = INCBIN_U32("graphics/items/icon_palettes/griseous_core.gbapal.lz"); + +const u32 gItemIcon_LustrousGlobe[] = INCBIN_U32("graphics/items/icons/lustrous_globe.4bpp.lz"); +const u32 gItemIconPalette_LustrousGlobe[] = INCBIN_U32("graphics/items/icon_palettes/lustrous_globe.gbapal.lz"); diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index a0c27ea72..9e4b56777 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -803,22 +803,22 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_TEA] = {gItemIcon_Tea, gItemIconPalette_Tea}, [ITEM_RUBY] = {gItemIcon_Gem, gItemIconPalette_Ruby}, [ITEM_SAPPHIRE] = {gItemIcon_Gem, gItemIconPalette_Sapphire}, - [ITEM_ABILITY_SHIELD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AbilityShield, gItemIconPalette_AbilityShield}, + [ITEM_ABILITY_SHIELD] = {gItemIcon_AbilityShield, gItemIconPalette_AbilityShield}, [ITEM_CLEAR_AMULET] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ClearAmulet, gItemIconPalette_ClearAmulet}, - [ITEM_PUNCHING_GLOVE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PunchingGlove, gItemIconPalette_PunchingGlove}, - [ITEM_COVERT_CLOAK] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_CovertCloak, gItemIconPalette_CovertCloak}, - [ITEM_LOADED_DICE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LoadedDice, gItemIconPalette_LoadedDice}, - [ITEM_AUSPICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AuspiciousArmor, gItemIconPalette_AuspiciousArmor}, - [ITEM_BOOSTER_ENERGY] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BoosterEnergy, gItemIconPalette_BoosterEnergy}, - [ITEM_BIG_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BigBambooShoot, gItemIconPalette_BigBambooShoot}, - [ITEM_GIMMIGHOUL_COIN] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GimmighoulCoin, gItemIconPalette_GimmighoulCoin}, - [ITEM_LEADERS_CREST] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LeadersCrest, gItemIconPalette_LeadersCrest}, - [ITEM_MALICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MaliciousArmor, gItemIconPalette_MaliciousArmor}, - [ITEM_MIRROR_HERB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MirrorHerb, gItemIconPalette_MirrorHerb}, - [ITEM_SCROLL_OF_DARKNESS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfDarkness, gItemIconPalette_ScrollOfDarkness}, - [ITEM_SCROLL_OF_WATERS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfWaters, gItemIconPalette_ScrollOfWaters}, - [ITEM_TERA_ORB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TeraOrb, gItemIconPalette_TeraOrb}, - [ITEM_TINY_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TinyBambooShoot, gItemIconPalette_TinyBambooShoot}, + [ITEM_PUNCHING_GLOVE] = {gItemIcon_PunchingGlove, gItemIconPalette_PunchingGlove}, + [ITEM_COVERT_CLOAK] = {gItemIcon_CovertCloak, gItemIconPalette_CovertCloak}, + [ITEM_LOADED_DICE] = {gItemIcon_LoadedDice, gItemIconPalette_LoadedDice}, + [ITEM_AUSPICIOUS_ARMOR] = {gItemIcon_AuspiciousArmor, gItemIconPalette_AuspiciousArmor}, + [ITEM_BOOSTER_ENERGY] = {gItemIcon_BoosterEnergy, gItemIconPalette_BoosterEnergy}, + [ITEM_BIG_BAMBOO_SHOOT] = {gItemIcon_BigBambooShoot, gItemIconPalette_BigBambooShoot}, + [ITEM_GIMMIGHOUL_COIN] = {gItemIcon_GimmighoulCoin, gItemIconPalette_GimmighoulCoin}, + [ITEM_LEADERS_CREST] = {gItemIcon_LeadersCrest, gItemIconPalette_LeadersCrest}, + [ITEM_MALICIOUS_ARMOR] = {gItemIcon_MaliciousArmor, gItemIconPalette_MaliciousArmor}, + [ITEM_MIRROR_HERB] = {gItemIcon_MirrorHerb, gItemIconPalette_MirrorHerb}, + [ITEM_SCROLL_OF_DARKNESS] = {gItemIcon_ScrollOfDarkness, gItemIconPalette_ScrollOfDarkness}, + [ITEM_SCROLL_OF_WATERS] = {gItemIcon_ScrollOfWaters, gItemIconPalette_ScrollOfWaters}, + [ITEM_TERA_ORB] = {gItemIcon_TeraOrb, gItemIconPalette_TeraOrb}, + [ITEM_TINY_BAMBOO_SHOOT] = {gItemIcon_TinyBambooShoot, gItemIconPalette_TinyBambooShoot}, [ITEM_BUG_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BugTeraShard, gItemIconPalette_BugTeraShard}, [ITEM_DARK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DarkTeraShard, gItemIconPalette_DarkTeraShard}, [ITEM_DRAGON_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DragonTeraShard, gItemIconPalette_DragonTeraShard}, @@ -837,9 +837,9 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_ROCK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_RockTeraShard, gItemIconPalette_RockTeraShard}, [ITEM_STEEL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_SteelTeraShard, gItemIconPalette_SteelTeraShard}, [ITEM_WATER_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_WaterTeraShard, gItemIconPalette_WaterTeraShard}, - [ITEM_ADAMANT_CRYSTAL] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AdamantCrystal, gItemIconPalette_AdamantCrystal}, - [ITEM_GRISEOUS_CORE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GriseousCore, gItemIconPalette_GriseousCore}, - [ITEM_LUSTROUS_GLOBE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LustrousGlobe, gItemIconPalette_LustrousGlobe}, + [ITEM_ADAMANT_CRYSTAL] = {gItemIcon_AdamantCrystal, gItemIconPalette_AdamantCrystal}, + [ITEM_GRISEOUS_CORE] = {gItemIcon_GriseousCore, gItemIconPalette_GriseousCore}, + [ITEM_LUSTROUS_GLOBE] = {gItemIcon_LustrousGlobe, gItemIconPalette_LustrousGlobe}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; From 1da65c40517a64a4ef0695b27d3aa3d26ecb2e9f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 22:33:47 -0300 Subject: [PATCH 062/129] Fixed Grassy Terrain not healing --- src/battle_util.c | 32 +++++++++++++++++++++----------- test/terrain_grassy.c | 16 ++++++++++++++++ 2 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 test/terrain_grassy.c diff --git a/src/battle_util.c b/src/battle_util.c index 3e8f94bf6..cfb1d577b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2127,15 +2127,25 @@ enum ENDTURN_FIELD_COUNT, }; -static bool32 TryEndTerrain(u32 terrainFlag, u32 stringTableId) +static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { - if (gFieldStatuses & terrainFlag - && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) + if (gFieldStatuses & terrainFlag) { - gFieldStatuses &= ~terrainFlag; - TryToRevertMimicry(); - gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; - BattleScriptExecute(BattleScript_TerrainEnds); + if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0) + { + gFieldStatuses &= ~terrainFlag; + TryToRevertMimicry(); + + if (terrainFlag != STATUS_FIELD_GRASSY_TERRAIN) + { + gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; + BattleScriptExecute(BattleScript_TerrainEnds); + } + } + if (terrainFlag == STATUS_FIELD_GRASSY_TERRAIN) + { + BattleScriptExecute(BattleScript_GrassyTerrainHeals); + } return TRUE; } return FALSE; @@ -2492,19 +2502,19 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_ELECTRIC_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); + effect += EndTurnTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_MISTY_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); + effect += EndTurnTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); gBattleStruct->turnCountersTracker++; break; case ENDTURN_GRASSY_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); + effect += EndTurnTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); gBattleStruct->turnCountersTracker++; break; case ENDTURN_PSYCHIC_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); + effect += EndTurnTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_WATER_SPORT: diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c new file mode 100644 index 000000000..6b3a93234 --- /dev/null +++ b/test/terrain_grassy.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + MESSAGE("Wobbuffet is healed by the grassy terrain!"); + HP_BAR(player, damage: -maxHP / 16); + } +} From c922ff69b91ace7dd00eb2303b18b01e4f59120a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 22:34:08 -0300 Subject: [PATCH 063/129] Added To-Do test results --- test/terrain_grassy.c | 3 +++ test/test.h | 7 +++++++ test/test_battle.h | 9 +++++++++ test/test_runner.c | 6 ++++++ tools/mgba-rom-test-hydra/main.c | 8 ++++++++ 5 files changed, 33 insertions(+) diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c index 6b3a93234..77f8a9927 100644 --- a/test/terrain_grassy.c +++ b/test/terrain_grassy.c @@ -14,3 +14,6 @@ SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") HP_BAR(player, damage: -maxHP / 16); } } + +TO_DO_BATTLE_TEST("Grassy Terrain increases power of Grass-type moves by 30/50 percent") +TO_DO_BATTLE_TEST("Grassy Terrain decreases power of Earthquake, Magnitude and Bulldoze by 50 percent") diff --git a/test/test.h b/test/test.h index 27475bb48..a05e42a04 100644 --- a/test/test.h +++ b/test/test.h @@ -13,6 +13,7 @@ enum TestResult TEST_RESULT_INVALID, TEST_RESULT_ERROR, TEST_RESULT_TIMEOUT, + TEST_RESULT_TODO, }; struct TestRunner @@ -138,4 +139,10 @@ s32 MgbaPrintf_(const char *fmt, ...); #define KNOWN_FAILING \ Test_ExpectedResult(TEST_RESULT_FAIL) +#define TO_DO \ + Test_ExpectedResult(TEST_RESULT_TODO) + +#define EXPECT_TO_DO \ + Test_ExitWithResult(TEST_RESULT_TODO, "%s:%d: EXPECT_TO_DO", gTestRunnerState.test->filename, __LINE__) + #endif diff --git a/test/test_battle.h b/test/test_battle.h index 16918251b..1e97229bd 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -601,6 +601,15 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; /* Test */ +#define TO_DO_BATTLE_TEST(_name) \ + SINGLE_BATTLE_TEST("TODO: " _name) \ + { \ + TO_DO; \ + GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } \ + WHEN { TURN { } } \ + THEN { EXPECT_TO_DO; } \ + } + #define SINGLE_BATTLE_TEST(_name, ...) \ struct CAT(Result, __LINE__) { MEMBERS(__VA_ARGS__) }; \ static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, u32, struct BattlePokemon *, struct BattlePokemon *); \ diff --git a/test/test_runner.c b/test/test_runner.c index f2d4d5de3..1d3f14aad 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -193,6 +193,10 @@ void CB2_TestRunner(void) result = "ASSUMPTION_FAIL"; color = "\e[33m"; break; + case TEST_RESULT_TODO: + result = "TO_DO"; + color = "\e[33m"; + break; case TEST_RESULT_INVALID: result = "INVALID"; break; @@ -211,6 +215,8 @@ void CB2_TestRunner(void) MgbaPrintf_(":P%s%s\e[0m", color, result); else if (gTestRunnerState.result == TEST_RESULT_ASSUMPTION_FAIL) MgbaPrintf_(":A%s%s\e[0m", color, result); + else if (gTestRunnerState.result == TEST_RESULT_TODO) + MgbaPrintf_(":T%s%s\e[0m", color, result); else if (gTestRunnerState.expectedResult == gTestRunnerState.result) MgbaPrintf_(":K%s%s\e[0m", color, result); else diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index f506d0428..8705225b8 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -44,6 +44,7 @@ struct Runner char *output_buffer; int passes; int knownFails; + int todos; int assumptionFails; int fails; int results; @@ -87,6 +88,9 @@ static void handle_read(struct Runner *runner) case 'K': runner->knownFails++; goto add_to_results; + case 'T': + runner->todos++; + goto add_to_results; case 'A': runner->assumptionFails++; goto add_to_results; @@ -427,6 +431,7 @@ int main(int argc, char *argv[]) int exit_code = 0; int passes = 0; int knownFails = 0; + int todos = 0; int assumptionFails = 0; int fails = 0; int results = 0; @@ -444,6 +449,7 @@ int main(int argc, char *argv[]) exit_code = WEXITSTATUS(wstatus); passes += runners[i].passes; knownFails += runners[i].knownFails; + todos += runners[i].todos; assumptionFails += runners[i].assumptionFails; fails += runners[i].fails; results += runners[i].results; @@ -459,6 +465,8 @@ int main(int argc, char *argv[]) fprintf(stdout, "- Tests \e[32mPASSED\e[0m: %d\n", passes); if (knownFails > 0) fprintf(stdout, "- Tests \e[33mKNOWN_FAILING\e[0m: %d\n", knownFails); + if (todos > 0) + fprintf(stdout, "- Tests \e[33mTO_DO\e[0m: %d\n", todos); if (fails > 0) fprintf(stdout, "- Tests \e[31mFAILED\e[0m : %d\n", fails); if (assumptionFails > 0) From 492422b6bd268178aa687ca017fe44d67a399546 Mon Sep 17 00:00:00 2001 From: Zunawe Date: Thu, 23 Mar 2023 21:47:26 -0700 Subject: [PATCH 064/129] Fix scanner item flag name --- data/maps/AbandonedShip_CaptainsOffice/scripts.inc | 2 +- data/maps/AbandonedShip_HiddenFloorRooms/map.json | 2 +- include/constants/flags.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/maps/AbandonedShip_CaptainsOffice/scripts.inc b/data/maps/AbandonedShip_CaptainsOffice/scripts.inc index 7c59fec96..78fdc6434 100644 --- a/data/maps/AbandonedShip_CaptainsOffice/scripts.inc +++ b/data/maps/AbandonedShip_CaptainsOffice/scripts.inc @@ -7,7 +7,7 @@ AbandonedShip_CaptainsOffice_EventScript_CaptSternAide:: goto_if_set FLAG_EXCHANGED_SCANNER, AbandonedShip_CaptainsOffice_EventScript_ThisIsSSCactus checkitem ITEM_SCANNER goto_if_eq VAR_RESULT, TRUE, AbandonedShip_CaptainsOffice_EventScript_CanYouDeliverScanner - goto_if_set FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER, AbandonedShip_CaptainsOffice_EventScript_ThisIsSSCactus + goto_if_set FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER, AbandonedShip_CaptainsOffice_EventScript_ThisIsSSCactus msgbox AbandonedShip_CaptainsOffice_Text_NoSuccessFindingScanner, MSGBOX_DEFAULT release end diff --git a/data/maps/AbandonedShip_HiddenFloorRooms/map.json b/data/maps/AbandonedShip_HiddenFloorRooms/map.json index 9c480a1c9..e808250f4 100644 --- a/data/maps/AbandonedShip_HiddenFloorRooms/map.json +++ b/data/maps/AbandonedShip_HiddenFloorRooms/map.json @@ -38,7 +38,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "AbandonedShip_HiddenFloorRooms_EventScript_ItemScanner", - "flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER" + "flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/include/constants/flags.h b/include/constants/flags.h index 99a8377a7..ed5dd5c68 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1123,7 +1123,7 @@ #define FLAG_ITEM_NEW_MAUVILLE_ULTRA_BALL 0x433 #define FLAG_ITEM_NEW_MAUVILLE_ESCAPE_ROPE 0x434 #define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL 0x435 -#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER 0x436 +#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER 0x436 #define FLAG_ITEM_SCORCHED_SLAB_TM11 0x437 #define FLAG_ITEM_METEOR_FALLS_B1F_2R_TM02 0x438 #define FLAG_ITEM_SHOAL_CAVE_ENTRANCE_BIG_PEARL 0x439 From c08df20166cb8103e599d306b47f1c73579f95c7 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 24 Mar 2023 10:17:57 +0000 Subject: [PATCH 065/129] Fix "Too many different moves" detection --- test/test_runner_battle.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 0c3c23063..b1a94b14e 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1106,6 +1106,31 @@ void Status1_(u32 sourceLine, u32 status1) SetMonData(DATA.currentMon, MON_DATA_STATUS, &status1); } +static const char *const sBattlerIdentifiersSingles[] = +{ + "player", + "opponent", +}; + +static const char *const sBattlerIdentifiersDoubles[] = +{ + "playerLeft", + "opponentLeft", + "playerRight", + "opponentRight", +}; + +static const char *BattlerIdentifier(s32 battlerId) +{ + const struct BattleTest *test = gTestRunnerState.test->data; + switch (test->type) + { + case BATTLE_TEST_SINGLES: return sBattlerIdentifiersSingles[battlerId]; + case BATTLE_TEST_DOUBLES: return sBattlerIdentifiersDoubles[battlerId]; + } + return ""; +} + static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32 byte) { u32 recordIndex = DATA.recordIndexes[battlerId]++; @@ -1267,7 +1292,6 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) else if (moveId == MOVE_NONE) { INVALID_IF(DATA.explicitMoves[battlerId & BIT_SIDE] & (1 << DATA.currentMonIndexes[battlerId]), "Missing explicit %S", gMoveNames[ctx.move]); - INVALID_IF(i == MAX_MON_MOVES, "Too many different moves"); SetMonData(mon, MON_DATA_MOVE1 + i, &ctx.move); SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &gBattleMoves[ctx.move].pp); moveSlot = i; @@ -1275,6 +1299,7 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) break; } } + INVALID_IF(i == MAX_MON_MOVES, "Too many different moves for %s", BattlerIdentifier(battlerId)); } else if (ctx.explicitMoveSlot) { From efc9bad8427c91a4a577facd4d2b56614245d742 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 24 Mar 2023 10:21:38 +0000 Subject: [PATCH 066/129] Fix Defog "Too many moves" --- test/move_effect_defog.c | 47 ++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/test/move_effect_defog.c b/test/move_effect_defog.c index d877899bb..e9e55d57f 100644 --- a/test/move_effect_defog.c +++ b/test/move_effect_defog.c @@ -327,7 +327,6 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from p DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can") { - bool32 defogTurn = FALSE; GIVEN { ASSUME(gBattleMoves[MOVE_HAIL].effect == EFFECT_HAIL); ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); @@ -343,33 +342,29 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" TURN { MOVE(playerLeft, MOVE_STICKY_WEB); MOVE(playerRight, MOVE_SPIKES); MOVE(opponentLeft, MOVE_STICKY_WEB); MOVE(opponentRight, MOVE_SPIKES); } TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); SWITCH(opponentLeft, 2); SWITCH(opponentRight, 3);} TURN { MOVE(playerLeft, MOVE_TOXIC_SPIKES); MOVE(playerRight, MOVE_STEALTH_ROCK); MOVE(opponentLeft, MOVE_TOXIC_SPIKES); MOVE(opponentRight, MOVE_STEALTH_ROCK); } - TURN { MOVE(playerLeft, MOVE_HAIL); MOVE(playerRight, MOVE_AURORA_VEIL); MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_STEALTH_ROCK); } - TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_LIGHT_SCREEN); } - TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } - TURN { defogTurn = TRUE ; MOVE(opponentRight, MOVE_DEFOG, target:playerLeft);} + TURN { MOVE(playerLeft, MOVE_HAIL); MOVE(playerRight, MOVE_AURORA_VEIL); MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_LIGHT_SCREEN); } + TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_SAFEGUARD); } + TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_DEFOG, target: playerLeft); } } SCENE { - if (defogTurn == TRUE) - { - MESSAGE("Foe Glalie used Defog!"); - MESSAGE("Glalie is protected by MIST!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); - // Player side - MESSAGE("Ally's Reflect wore off!"); - MESSAGE("Ally's Light Screen wore off!"); - MESSAGE("Ally's Mist wore off!"); - MESSAGE("Ally's Aurora Veil wore off!"); - MESSAGE("Ally's Safeguard wore off!"); + MESSAGE("Foe Glalie used Defog!"); + MESSAGE("Glalie is protected by MIST!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); + // Player side + MESSAGE("Ally's Reflect wore off!"); + MESSAGE("Ally's Light Screen wore off!"); + MESSAGE("Ally's Mist wore off!"); + MESSAGE("Ally's Aurora Veil wore off!"); + MESSAGE("Ally's Safeguard wore off!"); - MESSAGE("The spikes disappeared from the ground around your team!"); - MESSAGE("The pointed stones disappeared from around your team!"); - MESSAGE("The poison spikes disappeared from the ground around your team!"); - MESSAGE("The sticky web has disappeared from the ground around your team!"); + MESSAGE("The spikes disappeared from the ground around your team!"); + MESSAGE("The pointed stones disappeared from around your team!"); + MESSAGE("The poison spikes disappeared from the ground around your team!"); + MESSAGE("The sticky web has disappeared from the ground around your team!"); - // Opponent side - MESSAGE("The spikes disappeared from the ground around the opposing team!"); - MESSAGE("The pointed stones disappeared from around the opposing team!"); - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); - MESSAGE("The sticky web has disappeared from the ground around the opposing team!"); - } + // Opponent side + MESSAGE("The spikes disappeared from the ground around the opposing team!"); + MESSAGE("The pointed stones disappeared from around the opposing team!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + MESSAGE("The sticky web has disappeared from the ground around the opposing team!"); } } From c383c995f1413091846b9140155ca8426d759ce3 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Mar 2023 10:12:09 -0300 Subject: [PATCH 067/129] Applied review changes --- src/battle_util.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index cfb1d577b..e8adc8a11 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2135,17 +2135,14 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { gFieldStatuses &= ~terrainFlag; TryToRevertMimicry(); - - if (terrainFlag != STATUS_FIELD_GRASSY_TERRAIN) + if (!(terrainFlag & STATUS_FIELD_GRASSY_TERRAIN)) { gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; BattleScriptExecute(BattleScript_TerrainEnds); } } - if (terrainFlag == STATUS_FIELD_GRASSY_TERRAIN) - { + if (terrainFlag & STATUS_FIELD_GRASSY_TERRAIN) BattleScriptExecute(BattleScript_GrassyTerrainHeals); - } return TRUE; } return FALSE; @@ -2502,19 +2499,19 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_ELECTRIC_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); + effect = EndTurnTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_MISTY_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); + effect = EndTurnTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); gBattleStruct->turnCountersTracker++; break; case ENDTURN_GRASSY_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); + effect = EndTurnTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); gBattleStruct->turnCountersTracker++; break; case ENDTURN_PSYCHIC_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); + effect = EndTurnTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_WATER_SPORT: From 2c3db747027aab2346b57058115c50814619562f Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Fri, 24 Mar 2023 10:36:10 -0400 Subject: [PATCH 068/129] fix base power calcs using battler addresses --- src/battle_util.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 7bf090a73..8338d1045 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8602,7 +8602,7 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower *= 2; break; case EFFECT_PURSUIT: - if (gActionsByTurnOrder[GetBattlerTurnOrderNum(gBattlerTarget)] == B_ACTION_SWITCH) + if (gActionsByTurnOrder[GetBattlerTurnOrderNum(battlerDef)] == B_ACTION_SWITCH) basePower *= 2; break; case EFFECT_NATURAL_GIFT: @@ -8736,12 +8736,12 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) #if B_HIDDEN_POWER_DMG < GEN_6 u8 powerBits; - powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1) - | ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0) - | ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1) - | ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2) - | ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3) - | ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4); + powerBits = ((gBattleMons[battlerAtk].hpIV & 2) >> 1) + | ((gBattleMons[battlerAtk].attackIV & 2) << 0) + | ((gBattleMons[battlerAtk].defenseIV & 2) << 1) + | ((gBattleMons[battlerAtk].speedIV & 2) << 2) + | ((gBattleMons[battlerAtk].spAttackIV & 2) << 3) + | ((gBattleMons[battlerAtk].spDefenseIV & 2) << 4); basePower = (40 * powerBits) / 63 + 30; #endif @@ -8753,15 +8753,15 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) break; case EFFECT_TERRAIN_PULSE: if ((gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - && IsBattlerGrounded(gBattlerAttacker)) + && IsBattlerGrounded(battlerAtk)) basePower *= 2; break; case EFFECT_EXPANDING_FORCE: - if (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_PSYCHIC_TERRAIN)) + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN)) MulModifier(&basePower, UQ_4_12(1.5)); break; case EFFECT_RISING_VOLTAGE: - if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) + if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN)) basePower *= 2; break; case EFFECT_BEAT_UP: @@ -8770,7 +8770,7 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) #endif break; case EFFECT_PSYBLADE: - if (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_ELECTRIC_TERRAIN)) + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN)) MulModifier(&basePower, UQ_4_12(1.5)); break; } @@ -9611,7 +9611,7 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move || (gSideStatuses[defSide] & SIDE_STATUS_AURORA_VEIL)) && abilityAtk != ABILITY_INFILTRATOR && !(isCrit) - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg) + && !gProtectStructs[battlerAtk].confusionSelfDmg) { if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) MulModifier(&finalModifier, UQ_4_12(0.66)); @@ -9620,7 +9620,7 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move } // Parental Bond Second Strike - if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT) + if (gSpecialStatuses[battlerAtk].parentalBondState == PARENTAL_BOND_2ND_HIT) { if (B_PARENTAL_BOND_DMG < GEN_7) MulModifier(&finalModifier, UQ_4_12(0.5)); From b9447f88fc3a30b78206bca459b60bdc831f461a Mon Sep 17 00:00:00 2001 From: sbird Date: Fri, 24 Mar 2023 15:41:18 +0100 Subject: [PATCH 069/129] fix compound eyes ohko test --- src/battle_script_commands.c | 2 +- test/ability_compound_eyes.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 283adb54a..9ace33bf0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12562,7 +12562,7 @@ static void Cmd_tryKO(void) if (gCurrentMove == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) odds -= 10; #endif - if (Random() % 100 + 1 < odds && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) + if (RandomPercentage(RNG_ACCURACY, odds) && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) lands = TRUE; } diff --git a/test/ability_compound_eyes.c b/test/ability_compound_eyes.c index bbe718176..d90604d5c 100644 --- a/test/ability_compound_eyes.c +++ b/test/ability_compound_eyes.c @@ -21,12 +21,11 @@ SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") // than we expect. SINGLE_BATTLE_TEST("Compound Eyes does not affect OHKO moves") { - KNOWN_FAILING; PASSES_RANDOMLY(30, 100, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_FISSURE].accuracy == 30); ASSUME(gBattleMoves[MOVE_FISSURE].effect == EFFECT_OHKO); - PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_TINTED_LENS); }; + PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_COMPOUND_EYES); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_FISSURE); } From aea5d79aa2965e88fc69ef483f7f2c87b02dfc28 Mon Sep 17 00:00:00 2001 From: sbird Date: Thu, 23 Feb 2023 23:14:14 +0100 Subject: [PATCH 070/129] [trainer_parties] implement fully customizable npc trainer parties fix nature related bug, fix hash generation, add tests --- include/battle_main.h | 4 + include/constants/trainers.h | 9 +- include/data.h | 42 +++++-- include/global.h | 3 + src/battle_main.c | 217 +++++++++++++++++++++++++++-------- src/data.c | 1 + test/trainer_control.c | 140 ++++++++++++++++++++++ 7 files changed, 356 insertions(+), 60 deletions(-) create mode 100644 test/trainer_control.c diff --git a/include/battle_main.h b/include/battle_main.h index df59dcae3..8d1aad454 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -1,6 +1,9 @@ #ifndef GUARD_BATTLE_MAIN_H #define GUARD_BATTLE_MAIN_H +#include "pokemon.h" +#include "data.h" + struct TrainerMoney { u8 classId; @@ -66,6 +69,7 @@ bool8 TryRunFromBattle(u8 battlerId); void SpecialStatusesClear(void); void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk); bool32 IsWildMonSmart(void); +u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags); extern struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE]; diff --git a/include/constants/trainers.h b/include/constants/trainers.h index 39ca2a2b8..25660ac07 100644 --- a/include/constants/trainers.h +++ b/include/constants/trainers.h @@ -374,7 +374,12 @@ // 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_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 #endif // GUARD_TRAINERS_H diff --git a/include/data.h b/include/data.h index 79f6a3715..6e41ac703 100644 --- a/include/data.h +++ b/include/data.h @@ -31,6 +31,26 @@ struct MonCoords #define MON_COORDS_SIZE(width, height)(DIV_ROUND_UP(width, 8) << 4 | DIV_ROUND_UP(height, 8)) #define GET_MON_COORDS_WIDTH(size)((size >> 4) * 8) #define GET_MON_COORDS_HEIGHT(size)((size & 0xF) * 8) +#define TRAINER_PARTY_IVS(hp, atk, def, speed, spatk, spdef) (hp | (atk << 5) | (def << 10) | (speed << 15) | (spatk << 20) | (spdef << 25)) +#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 +{ + const u8 *nickname; + const u8 *ev; + u32 iv; + u16 moves[4]; + u16 species; + u16 heldItem; + u16 ability; + u8 lvl; + u8 ball; + u8 friendship; + u8 nature : 5; + bool8 gender : 2; + bool8 isShiny : 1; +}; struct TrainerMonNoItemDefaultMoves { @@ -68,6 +88,7 @@ struct TrainerMonItemCustomMoves #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 { @@ -75,20 +96,21 @@ union TrainerMonPtr const struct TrainerMonNoItemCustomMoves *NoItemCustomMoves; const struct TrainerMonItemDefaultMoves *ItemDefaultMoves; const struct TrainerMonItemCustomMoves *ItemCustomMoves; + const struct TrainerMonCustomized *EverythingCustomized; }; struct Trainer { - /*0x00*/ u8 partyFlags; - /*0x01*/ u8 trainerClass; - /*0x02*/ u8 encounterMusic_gender; // last bit is gender - /*0x03*/ u8 trainerPic; - /*0x04*/ u8 trainerName[TRAINER_NAME_LENGTH + 1]; - /*0x10*/ u16 items[MAX_TRAINER_ITEMS]; - /*0x18*/ bool8 doubleBattle; - /*0x1C*/ u32 aiFlags; - /*0x20*/ u8 partySize; - /*0x24*/ union TrainerMonPtr party; + /*0x00*/ u32 aiFlags; + /*0x04*/ union TrainerMonPtr 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; + /*0x1F*/ u8 partySize; }; #define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F)) diff --git a/include/global.h b/include/global.h index 4b3e90bfa..f7d166bb5 100644 --- a/include/global.h +++ b/include/global.h @@ -147,6 +147,9 @@ #define CAT(a, b) CAT_(a, b) #define CAT_(a, b) a ## b +// Converts a string to a compound literal, essentially making it a pointer to const u8 +#define COMPOUND_STRING(str) (const u8[]) _(str) + // This produces an error at compile-time if expr is zero. // It looks like file.c:line: size of array `id' is negative #define STATIC_ASSERT(expr, id) typedef char id[(expr) ? 1 : -1]; diff --git a/src/battle_main.c b/src/battle_main.c index 9ea3b6644..efbf1b819 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -118,6 +118,10 @@ static void HandleEndTurn_FinishBattle(void); static void SpriteCB_UnusedBattleInit(struct Sprite *sprite); static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite); static void TrySpecialEvolution(void); +static u32 Crc32B (const u8 *data, u32 size); +static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i); +static void ModifyPersonalityForNature(u32 *personality, u32 newNature); +static u32 GeneratePersonalityForGender(u32 gender, u32 species); EWRAM_DATA u16 gBattle_BG0_X = 0; EWRAM_DATA u16 gBattle_BG0_Y = 0; @@ -1869,72 +1873,129 @@ static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite) } } -static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 firstTrainer) +static u32 Crc32B (const u8 *data, u32 size) +{ + s32 i, j; + u32 byte, crc, mask; + + i = 0; + crc = 0xFFFFFFFF; + for (i = 0; i < size; ++i) + { + byte = data[i]; + crc = crc ^ byte; + for (j = 7; j >= 0; --j) + { + mask = -(crc & 1); + crc = (crc >> 1) ^ (0xEDB88320 & mask); + } + } + return ~crc; +} + +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); + } + return Crc32B(buffer, n); +} + +static void ModifyPersonalityForNature(u32 *personality, u32 newNature) +{ + u32 nature = GetNatureFromPersonality(*personality); + s32 diff = abs(nature - newNature); + s32 sign = (nature > newNature) ? 1 : -1; + if (diff > NUM_NATURES / 2) + { + diff = NUM_NATURES - diff; + sign *= -1; + } + *personality -= (diff * sign); +} + +static u32 GeneratePersonalityForGender(u32 gender, u32 species) +{ + const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[species]; + if (gender == MON_MALE) + return ((255 - speciesInfo->genderRatio) / 2) + speciesInfo->genderRatio; + else + return speciesInfo->genderRatio / 2; +} + +u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags) { - u32 nameHash = 0; u32 personalityValue; u8 fixedIV; s32 i, j; u8 monsCount; - u16 ball; - - if (trainerNum == TRAINER_SECRET_BASE) - return 0; - - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER + s32 ball = -1; + if (battleTypeFlags & BATTLE_TYPE_TRAINER && !(battleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER_HILL))) { if (firstTrainer == TRUE) ZeroEnemyPartyMons(); - if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + if (battleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { - if (gTrainers[trainerNum].partySize > PARTY_SIZE / 2) + if (trainer->partySize > PARTY_SIZE / 2) monsCount = PARTY_SIZE / 2; else - monsCount = gTrainers[trainerNum].partySize; + monsCount = trainer->partySize; } else { - monsCount = gTrainers[trainerNum].partySize; + monsCount = trainer->partySize; } for (i = 0; i < monsCount; i++) { - - if (gTrainers[trainerNum].doubleBattle == TRUE) + u32 personalityHash = GeneratePartyHash(trainer, i); + if (trainer->doubleBattle == TRUE) personalityValue = 0x80; - else if (gTrainers[trainerNum].encounterMusic_gender & F_TRAINER_FEMALE) + else if (trainer->encounterMusic_gender & F_TRAINER_FEMALE) personalityValue = 0x78; // Use personality more likely to result in a female Pokémon else personalityValue = 0x88; // Use personality more likely to result in a male Pokémon - for (j = 0; gTrainers[trainerNum].trainerName[j] != EOS; j++) - nameHash += gTrainers[trainerNum].trainerName[j]; - - switch (gTrainers[trainerNum].partyFlags) + personalityValue += personalityHash << 8; + switch (trainer->partyFlags) { case 0: { - const struct TrainerMonNoItemDefaultMoves *partyData = gTrainers[trainerNum].party.NoItemDefaultMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + 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; } case F_TRAINER_PARTY_CUSTOM_MOVESET: { - const struct TrainerMonNoItemCustomMoves *partyData = gTrainers[trainerNum].party.NoItemCustomMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + 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); @@ -1947,12 +2008,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir } case F_TRAINER_PARTY_HELD_ITEM: { - const struct TrainerMonItemDefaultMoves *partyData = gTrainers[trainerNum].party.ItemDefaultMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + 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); @@ -1961,12 +2017,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir } case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: { - const struct TrainerMonItemCustomMoves *partyData = gTrainers[trainerNum].party.ItemCustomMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + 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); @@ -1979,18 +2030,88 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir } break; } + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + { + 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); + + // TODO: Figure out a default strategy when moves are not set, to generate a good moveset + 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); + } + 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]); + } } #if B_TRAINER_CLASS_POKE_BALLS >= GEN_7 - ball = (sTrainerBallTable[gTrainers[trainerNum].trainerClass]) ? sTrainerBallTable[gTrainers[trainerNum].trainerClass] : ITEM_POKE_BALL; - SetMonData(&party[i], MON_DATA_POKEBALL, &ball); + if (ball == -1) + { + ball = (sTrainerBallTable[trainer->trainerClass]) ? sTrainerBallTable[trainer->trainerClass] : ITEM_POKE_BALL; + SetMonData(&party[i], MON_DATA_POKEBALL, &ball); + } #endif } - - gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; } - return gTrainers[trainerNum].partySize; + return trainer->partySize; +} + +static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 firstTrainer) +{ + u8 retVal; + if (trainerNum == TRAINER_SECRET_BASE) + return 0; + retVal = CreateNPCTrainerPartyFromTrainer(party, &gTrainers[trainerNum], firstTrainer, gBattleTypeFlags); + + gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; } void VBlankCB_Battle(void) diff --git a/src/data.c b/src/data.c index 08b2c96e0..1ced9ce81 100644 --- a/src/data.c +++ b/src/data.c @@ -3,6 +3,7 @@ #include "battle.h" #include "data.h" #include "graphics.h" +#include "constants/abilities.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/trainers.h" diff --git a/test/trainer_control.c b/test/trainer_control.c new file mode 100644 index 000000000..307942207 --- /dev/null +++ b/test/trainer_control.c @@ -0,0 +1,140 @@ +#include "global.h" +#include "test.h" +#include "battle.h" +#include "battle_main.h" +#include "data.h" +#include "malloc.h" +#include "string_util.h" +#include "constants/item.h" +#include "constants/abilities.h" +#include "constants/trainers.h" +#include "constants/battle.h" + + +static const struct TrainerMonCustomized sTestParty1[] = +{ + { + .species = SPECIES_WOBBUFFET, + .ball = ITEM_MASTER_BALL, + .ability = ABILITY_TELEPATHY, + .friendship = 42, + .gender = TRAINER_MON_FEMALE, + .heldItem = ITEM_ASSAULT_VEST, + .isShiny = TRUE, + .iv = TRAINER_PARTY_IVS(25,26,27,28,29,30), + .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 4, 0), + .lvl = 67, + .moves = {MOVE_AIR_SLASH, MOVE_BARRIER, MOVE_SOLAR_BEAM, MOVE_EXPLOSION}, + .nature = TRAINER_PARTY_NATURE(NATURE_HASTY), + .nickname = COMPOUND_STRING("Bubbles") + }, + { + .species = SPECIES_WOBBUFFET, + .ability = ABILITY_SHADOW_TAG, + .lvl = 5, + }, +}; + +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), +}; + +TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + u8 nickBuffer[20]; + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer1, TRUE, BATTLE_TYPE_TRAINER); + EXPECT(IsMonShiny(&testParty[0])); + EXPECT(!IsMonShiny(&testParty[1])); + + EXPECT(GetMonData(&testParty[0], MON_DATA_POKEBALL, 0) == ITEM_MASTER_BALL); + EXPECT(GetMonData(&testParty[1], MON_DATA_POKEBALL, 0) == ITEM_POKE_BALL); + + EXPECT(GetMonData(&testParty[0], MON_DATA_SPECIES, 0) == SPECIES_WOBBUFFET); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPECIES, 0) == SPECIES_WOBBUFFET); + + EXPECT(GetMonAbility(&testParty[0]) == ABILITY_TELEPATHY); + EXPECT(GetMonAbility(&testParty[1]) == ABILITY_SHADOW_TAG); + + EXPECT(GetMonData(&testParty[0], MON_DATA_FRIENDSHIP, 0) == 42); + EXPECT(GetMonData(&testParty[1], MON_DATA_FRIENDSHIP, 0) == 0); + + EXPECT(GetMonData(&testParty[0], MON_DATA_HELD_ITEM, 0) == ITEM_ASSAULT_VEST); + EXPECT(GetMonData(&testParty[1], MON_DATA_HELD_ITEM, 0) == ITEM_NONE); + + EXPECT(GetMonData(&testParty[0], MON_DATA_HP_IV, 0) == 25); + EXPECT(GetMonData(&testParty[0], MON_DATA_ATK_IV, 0) == 26); + EXPECT(GetMonData(&testParty[0], MON_DATA_DEF_IV, 0) == 27); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPEED_IV, 0) == 28); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPATK_IV, 0) == 29); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPDEF_IV, 0) == 30); + + EXPECT(GetMonData(&testParty[1], MON_DATA_HP_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_ATK_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_DEF_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPEED_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPATK_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPDEF_IV, 0) == 0); + + EXPECT(GetMonData(&testParty[0], MON_DATA_HP_EV, 0) == 252); + EXPECT(GetMonData(&testParty[0], MON_DATA_ATK_EV, 0) == 0); + EXPECT(GetMonData(&testParty[0], MON_DATA_DEF_EV, 0) == 0); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPEED_EV, 0) == 252); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPATK_EV, 0) == 4); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPDEF_EV, 0) == 0); + + EXPECT(GetMonData(&testParty[1], MON_DATA_HP_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_ATK_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_DEF_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPEED_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPATK_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPDEF_EV, 0) == 0); + + EXPECT(GetMonData(&testParty[0], MON_DATA_LEVEL, 0) == 67); + EXPECT(GetMonData(&testParty[1], MON_DATA_LEVEL, 0) == 5); + + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE1, 0) == MOVE_AIR_SLASH); + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE2, 0) == MOVE_BARRIER); + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE3, 0) == MOVE_SOLAR_BEAM); + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE4, 0) == MOVE_EXPLOSION); + + GetMonData(&testParty[0], MON_DATA_NICKNAME, nickBuffer); + EXPECT(StringCompare(nickBuffer, COMPOUND_STRING("Bubbles")) == 0); + + GetMonData(&testParty[1], MON_DATA_NICKNAME, nickBuffer); + EXPECT(StringCompare(nickBuffer, COMPOUND_STRING("Wobbuffet")) == 0); + + EXPECT(GetGenderFromSpeciesAndPersonality(GetMonData(&testParty[0], MON_DATA_SPECIES, 0), testParty[0].box.personality) == MON_FEMALE); + + EXPECT(GetNature(&testParty[0]) == NATURE_HASTY); + + Free(testParty); +} + +TEST("CreateNPCTrainerPartyForTrainer generates different personalities for different mons") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer2, TRUE, BATTLE_TYPE_TRAINER); + EXPECT(testParty[0].box.personality != testParty[1].box.personality); + Free(testParty); +} From 4b43f3eb9df60e42758666411fcf8ed79c5890f6 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 26 Mar 2023 21:10:51 +0200 Subject: [PATCH 071/129] add cases for everything customized --- src/battle_script_commands.c | 6 +++++ src/battle_setup.c | 8 ++++++ src/battle_tower.c | 49 ++++++++++++++++++++++++++++++++++++ src/match_call.c | 3 +++ 4 files changed, 66 insertions(+) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c50d801b1..b1ce7f964 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7504,6 +7504,12 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) 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; } for (; gTrainerMoneyTable[i].classId != 0xFF; i++) diff --git a/src/battle_setup.c b/src/battle_setup.c index 220edd394..2b8e63e76 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -798,6 +798,14 @@ static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons) 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; } return sum; diff --git a/src/battle_tower.c b/src/battle_tower.c index 930075656..a4758b930 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -23,6 +23,7 @@ #include "field_message_box.h" #include "tv.h" #include "battle_factory.h" +#include "constants/abilities.h" #include "constants/apprentice.h" #include "constants/battle_dome.h" #include "constants/battle_frontier.h" @@ -3007,6 +3008,7 @@ static void FillPartnerParty(u16 trainerId) u16 monId; u32 otID; u8 trainerName[(PLAYER_NAME_LENGTH * 3) + 1]; + s32 ball = -1; SetFacilityPtrsGetLevel(); if (trainerId == TRAINER_STEVEN_PARTNER) @@ -3098,6 +3100,53 @@ static void FillPartnerParty(u16 trainerId) } break; } + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + { + const struct TrainerMonCustomized *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.EverythingCustomized; + + CreateMon(&gPlayerParty[i], partyData[i].species, partyData[i].lvl, 0, TRUE, j, TRUE, otID); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + + // TODO: Figure out a default strategy when moves are not set, to generate a good moveset + for (j = 0; j < MAX_MON_MOVES; ++j) + { + SetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + SetMonData(&gPlayerParty[i], MON_DATA_IVS, &(partyData[i].iv)); + if (partyData[i].ev != NULL) + { + SetMonData(&gPlayerParty[i], MON_DATA_HP_EV, &(partyData[i].ev[0])); + SetMonData(&gPlayerParty[i], MON_DATA_ATK_EV, &(partyData[i].ev[1])); + SetMonData(&gPlayerParty[i], MON_DATA_DEF_EV, &(partyData[i].ev[2])); + SetMonData(&gPlayerParty[i], MON_DATA_SPATK_EV, &(partyData[i].ev[3])); + SetMonData(&gPlayerParty[i], MON_DATA_SPDEF_EV, &(partyData[i].ev[4])); + SetMonData(&gPlayerParty[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(&gPlayerParty[i], MON_DATA_ABILITY_NUM, &j); + } + SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); + if (partyData[i].ball != ITEM_NONE) + { + ball = partyData[i].ball; + SetMonData(&gPlayerParty[i], MON_DATA_POKEBALL, &ball); + } + if (partyData[i].nickname != NULL) + { + SetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, partyData[i].nickname); + } + CalculateMonStats(&gPlayerParty[i]); + } } StringCopy(trainerName, gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerName); diff --git a/src/match_call.c b/src/match_call.c index a9d18b347..c3378040e 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1812,6 +1812,9 @@ static void PopulateSpeciesFromTrainerParty(int matchCallId, u8 *destStr) case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: speciesName = gSpeciesNames[party.ItemCustomMoves[monId].species]; break; + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + speciesName = gSpeciesNames[party.EverythingCustomized[monId].species]; + break; } StringCopy(destStr, speciesName); From 0b8285737a7434c8d48d05e623105fea2e8186cf Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Mar 2023 09:19:48 -0300 Subject: [PATCH 072/129] Fixed Comatose AI checks --- include/battle_ai_util.h | 1 + src/battle_ai_main.c | 8 ++++---- src/battle_ai_util.c | 5 +++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 11eba7b66..892736b54 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -144,6 +144,7 @@ bool32 AnyPartyMemberStatused(u8 battlerId, bool32 checkSoundproof); u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move); bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move); bool32 IsWakeupTurn(u8 battler); +bool32 AI_IsBattlerAsleepOrComatose(u8 battlerId); // partner logic u16 GetAllyChosenMove(u8 battlerId); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 19eedb41c..a359358b9 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -974,7 +974,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } break; case EFFECT_DREAM_EATER: - if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE) + if (!AI_IsBattlerAsleepOrComatose(battlerDef)) score -= 8; else if (effectiveness == AI_EFFECTIVENESS_x0) score -= 10; @@ -1453,7 +1453,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_SNORE: case EFFECT_SLEEP_TALK: - if (IsWakeupTurn(battlerAtk) || (!(gBattleMons[battlerAtk].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerAtk] != ABILITY_COMATOSE)) + if (IsWakeupTurn(battlerAtk) || !AI_IsBattlerAsleepOrComatose(battlerAtk)) score -= 10; // if mon will wake up, is not asleep, or is not comatose break; case EFFECT_MEAN_LOOK: @@ -1463,7 +1463,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_NIGHTMARE: if (gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE) score -= 10; - else if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE) + else if (!AI_IsBattlerAsleepOrComatose(battlerDef)) score -= 8; else if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) score -= 10; @@ -3780,7 +3780,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_NIGHTMARE: if (AI_DATA->abilities[battlerDef] != ABILITY_MAGIC_GUARD && !(gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE) - && (AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE || gBattleMons[battlerDef].status1 & STATUS1_SLEEP)) + && AI_IsBattlerAsleepOrComatose(battlerDef)) { score += 5; if (IsBattlerTrapped(battlerDef, TRUE)) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index a9e3ed3e0..7b8fb0463 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3749,3 +3749,8 @@ bool32 ShouldUseZMove(u8 battlerAtk, u8 battlerDef, u16 chosenMove) return FALSE; } + +bool32 AI_IsBattlerAsleepOrComatose(u8 battlerId) +{ + return (gBattleMons[battlerId].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerId] == ABILITY_COMATOSE; +} From 2fba07c501df6e9434ffe53f18aa67385078aa06 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Mar 2023 11:30:38 -0300 Subject: [PATCH 073/129] Added KNOWN_FAILING to Dire Claw and Tri Attack's force-bruted RNG failing tests --- test/move_effect_dire_claw.c | 1 + test/move_effect_tri_attack.c | 1 + 2 files changed, 2 insertions(+) diff --git a/test/move_effect_dire_claw.c b/test/move_effect_dire_claw.c index a5270ce3f..f02555df3 100644 --- a/test/move_effect_dire_claw.c +++ b/test/move_effect_dire_claw.c @@ -15,6 +15,7 @@ SINGLE_BATTLE_TEST("Dire Claw can inflict poison, paralysis or sleep") { u8 statusAnim; u32 rng; + KNOWN_FAILING; PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } diff --git a/test/move_effect_tri_attack.c b/test/move_effect_tri_attack.c index 31627ef2d..9bfacdb98 100644 --- a/test/move_effect_tri_attack.c +++ b/test/move_effect_tri_attack.c @@ -15,6 +15,7 @@ SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") { u8 statusAnim; u32 rng; + KNOWN_FAILING; PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } From f6a924a7917008e2e1e0a9201c78aaa91884f81f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Mar 2023 11:49:50 -0300 Subject: [PATCH 074/129] Fixed instances of gSideTimers not using side constants --- src/battle_script_commands.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3376f9db6..28bf60c39 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3923,14 +3923,14 @@ static void Cmd_tryfaintmon(void) if (gBattleResults.playerFaintCounter < 255) gBattleResults.playerFaintCounter++; AdjustFriendshipOnBattleFaint(gActiveBattler); - gSideTimers[0].retaliateTimer = 2; + gSideTimers[B_SIDE_PLAYER].retaliateTimer = 2; } else { if (gBattleResults.opponentFaintCounter < 255) gBattleResults.opponentFaintCounter++; gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL); - gSideTimers[1].retaliateTimer = 2; + gSideTimers[B_SIDE_OPPONENT].retaliateTimer = 2; } if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0) { From 7b306b61473f2fa31b676769c7fb66fbf6bb7d2d Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Mon, 27 Mar 2023 17:32:16 +0100 Subject: [PATCH 075/129] RandomElement for structured RNG Converts Tri Attack and Dire Claw to use structured RNG. --- include/random.h | 16 ++++- src/battle_script_commands.c | 5 +- src/random.c | 10 +++- test/move_effect_dire_claw.c | 46 ++++++-------- test/move_effect_tri_attack.c | 48 ++++++--------- test/random.c | 33 +++++++++- test/test_battle.h | 16 ++++- test/test_runner_battle.c | 109 +++++++++++++++++++++++++++------- 8 files changed, 199 insertions(+), 84 deletions(-) diff --git a/include/random.h b/include/random.h index 60c718348..fd340c26d 100644 --- a/include/random.h +++ b/include/random.h @@ -29,7 +29,12 @@ void SeedRng2(u16 seed); * * RandomTag identifies the purpose of the value. * - * RandomUniform(tag, lo, hi) returns a number from lo to hi inclusive. + * RandomUniform(tag, lo, hi) returns a number from lo to hi inclusive + * with uniform probability. + * + * RandomElement(tag, array) returns an element in array with uniform + * probability. The array must be known at compile-time (e.g. a global + * const array). * * RandomPercentage(tag, t) returns FALSE with probability (1-t)/100, * and TRUE with probability t/100. @@ -47,6 +52,7 @@ enum RandomTag RNG_CRITICAL_HIT, RNG_CUTE_CHARM, RNG_DAMAGE_MODIFIER, + RNG_DIRE_CLAW, RNG_FLAME_BODY, RNG_FORCE_RANDOM_SWITCH, RNG_FROZEN, @@ -60,6 +66,7 @@ enum RandomTag RNG_SPEED_TIE, RNG_STATIC, RNG_STENCH, + RNG_TRI_ATTACK, }; #define RandomWeighted(tag, ...) \ @@ -77,10 +84,17 @@ enum RandomTag RandomWeightedArray(tag, 100, ARRAY_COUNT(weights), weights); \ }) +#define RandomElement(tag, array) \ + ({ \ + *(typeof((array)[0]) *)RandomElementArray(tag, array, sizeof((array)[0]), ARRAY_COUNT(array)); \ + }) + u32 RandomUniform(enum RandomTag, u32 lo, u32 hi); u32 RandomWeightedArray(enum RandomTag, u32 sum, u32 n, const u8 *weights); +const void *RandomElementArray(enum RandomTag, const void *array, size_t size, size_t count); u32 RandomUniformDefault(enum RandomTag, u32 lo, u32 hi); u32 RandomWeightedArrayDefault(enum RandomTag, u32 sum, u32 n, const u8 *weights); +const void *RandomElementArrayDefault(enum RandomTag, const void *array, size_t size, size_t count); #endif // GUARD_RANDOM_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3376f9db6..62dcbf447 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3318,7 +3318,8 @@ void SetMoveEffect(bool32 primary, u32 certain) } else { - gBattleScripting.moveEffect = Random() % 3 + 3; + static const u8 sTriAttackEffects[] = { MOVE_EFFECT_BURN, MOVE_EFFECT_FREEZE, MOVE_EFFECT_PARALYSIS }; + gBattleScripting.moveEffect = RandomElement(RNG_TRI_ATTACK, sTriAttackEffects); SetMoveEffect(FALSE, 0); } break; @@ -3779,7 +3780,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (!gBattleMons[gEffectBattler].status1) { static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; - gBattleScripting.moveEffect = sDireClawEffects[Random() % ARRAY_COUNT(sDireClawEffects)]; + gBattleScripting.moveEffect = RandomElement(RNG_DIRE_CLAW, sDireClawEffects); SetMoveEffect(TRUE, 0); } break; diff --git a/src/random.c b/src/random.c index e59b56387..14983e776 100644 --- a/src/random.c +++ b/src/random.c @@ -38,9 +38,12 @@ u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi); __attribute__((weak, alias("RandomWeightedArrayDefault"))) u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights); +__attribute__((weak, alias("RandomElementArrayDefault"))) +const void *RandomElementArray(enum RandomTag tag, const void *array, size_t size, size_t count); + u32 RandomUniformDefault(enum RandomTag tag, u32 lo, u32 hi) { - return lo + (((hi - lo) * Random()) >> 16); + return lo + (((hi - lo + 1) * Random()) >> 16); } u32 RandomWeightedArrayDefault(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) @@ -55,3 +58,8 @@ u32 RandomWeightedArrayDefault(enum RandomTag tag, u32 sum, u32 n, const u8 *wei } return n - 1; } + +const void *RandomElementArrayDefault(enum RandomTag tag, const void *array, size_t size, size_t count) +{ + return (const u8 *)array + size * RandomUniformDefault(tag, 0, count - 1); +} diff --git a/test/move_effect_dire_claw.c b/test/move_effect_dire_claw.c index f02555df3..2212c3cb0 100644 --- a/test/move_effect_dire_claw.c +++ b/test/move_effect_dire_claw.c @@ -6,21 +6,14 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_DIRE_CLAW].effect == EFFECT_DIRE_CLAW); } -// found by brute-force -#define RNG_SLEEP 0xcb0 -#define RNG_POISON 0x2BE -#define RNG_PARALYSIS 5 - SINGLE_BATTLE_TEST("Dire Claw can inflict poison, paralysis or sleep") { u8 statusAnim; - u32 rng; - KNOWN_FAILING; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; } + PASSES_RANDOMLY(1, 3, RNG_DIRE_CLAW); GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -48,15 +41,14 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze poison/electric types respe u16 species; u32 rng; #if B_PARALYZE_ELECTRIC >= GEN_6 - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; } #endif // B_PARALYZE_ELECTRIC - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ARBOK;} + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; species = SPECIES_ARBOK;} GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species); } WHEN { - TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN { MOVE(player, MOVE_DIRE_CLAW, WITH_RNG(RNG_DIRE_CLAW, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); @@ -76,21 +68,20 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep pokemo u8 statusAnim; u16 species, ability; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } #if P_GEN_4_POKEMON == TRUE - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } #endif // P_GEN_4_POKEMON - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ZANGOOSE; ability = ABILITY_IMMUNITY; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_VIGOROTH; ability = ABILITY_VITAL_SPIRIT; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_HYPNO; ability = ABILITY_INSOMNIA; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; species = SPECIES_ZANGOOSE; ability = ABILITY_IMMUNITY; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = MOVE_EFFECT_SLEEP; species = SPECIES_VIGOROTH; ability = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = MOVE_EFFECT_SLEEP; species = SPECIES_HYPNO; ability = ABILITY_INSOMNIA; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species) {Ability(ability);} } WHEN { - TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN { MOVE(player, MOVE_DIRE_CLAW, WITH_RNG(RNG_DIRE_CLAW, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); @@ -112,15 +103,14 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep a mon { u8 statusAnim; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = MOVE_EFFECT_SLEEP; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_BURN);} } WHEN { - TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN { MOVE(player, MOVE_DIRE_CLAW, WITH_RNG(RNG_DIRE_CLAW, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); diff --git a/test/move_effect_tri_attack.c b/test/move_effect_tri_attack.c index 9bfacdb98..c3fbfaace 100644 --- a/test/move_effect_tri_attack.c +++ b/test/move_effect_tri_attack.c @@ -6,21 +6,14 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_TRI_ATTACK].effect == EFFECT_TRI_ATTACK); } -// found by brute-force -#define RNG_PARALYSIS 0xcb0 -#define RNG_BURN 0x2BE -#define RNG_FREEZE 5 - SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") { u8 statusAnim; - u32 rng; - KNOWN_FAILING; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; } + PASSES_RANDOMLY(1, 3, RNG_TRI_ATTACK); GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -48,16 +41,15 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ u16 species; u32 rng; #if B_PARALYZE_ELECTRIC >= GEN_6 - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU;} + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU;} #endif // B_PARALYZE_ELECTRIC - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_ARCANINE; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_GLALIE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_ARCANINE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_GLALIE; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species); } WHEN { - TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN { MOVE(player, MOVE_TRI_ATTACK, WITH_RNG(RNG_TRI_ATTACK, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); @@ -80,23 +72,22 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilitie u8 statusAnim; u16 species, ability; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } #if P_GEN_4_POKEMON == TRUE - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } #endif // P_GEN_4_POKEMON #if P_GEN_7_POKEMON == TRUE - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; } #endif // P_GEN_7_POKEMON - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_SEAKING; ability = ABILITY_WATER_VEIL; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_SEAKING; ability = ABILITY_WATER_VEIL; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species) {Ability(ability);} } WHEN { - TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN { MOVE(player, MOVE_TRI_ATTACK, WITH_RNG(RNG_TRI_ATTACK, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); @@ -118,15 +109,14 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze a mon which is alread { u8 statusAnim; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} } WHEN { - TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN { MOVE(player, MOVE_TRI_ATTACK, WITH_RNG(RNG_TRI_ATTACK, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); diff --git a/test/random.c b/test/random.c index abaf4a4f8..39f587c06 100644 --- a/test/random.c +++ b/test/random.c @@ -34,6 +34,17 @@ TEST("RandomWeighted generates 0..n-1") } } +TEST("RandomElement generates an element") +{ + u32 i; + static const u8 es[4] = { 1, 2, 4, 8 }; + for (i = 0; i < 1024; i++) + { + u32 e = *(const u8 *)RandomElementArrayDefault(RNG_NONE, es, sizeof(es[0]), ARRAY_COUNT(es)); + EXPECT(e == 1 || e == 2 || e == 4 || e == 8); + } +} + TEST("RandomUniform generates uniform distribution") { u32 i, error; @@ -42,7 +53,7 @@ TEST("RandomUniform generates uniform distribution") memset(distribution, 0, sizeof(distribution)); for (i = 0; i < 4096; i++) { - u32 r = RandomUniformDefault(RNG_NONE, 0, ARRAY_COUNT(distribution)); + u32 r = RandomUniformDefault(RNG_NONE, 0, ARRAY_COUNT(distribution) - 1); EXPECT(0 <= r && r < ARRAY_COUNT(distribution)); distribution[r]++; } @@ -79,3 +90,23 @@ TEST("RandomWeighted generates distribution in proportion to the weights") EXPECT_LT(error, UQ_4_12(0.025)); } + +TEST("RandomElement generates a uniform distribution") +{ + u32 i, error; + static const u8 es[4] = { 1, 2, 4, 8 }; + u16 distribution[9]; + + memset(distribution, 0, sizeof(distribution)); + for (i = 0; i < 4096; i++) + { + u32 e = *(const u8 *)RandomElementArrayDefault(RNG_NONE, es, sizeof(es[0]), ARRAY_COUNT(es)); + distribution[e]++; + } + + error = 0; + for (i = 0; i < ARRAY_COUNT(es); i++) + error += abs(UQ_4_12(0.25) - distribution[es[i]]); + + EXPECT_LT(error, UQ_4_12(0.025)); +} diff --git a/test/test_battle.h b/test/test_battle.h index 0e0464254..60d0dc33c 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -303,13 +303,14 @@ * The inference process is naive, if your test contains anything that * modifies the speed of a battler you should specify them explicitly. * - * MOVE(battler, move | moveSlot:, [megaEvolve:], [hit:], [criticalHit:], [target:], [allowed:]) + * MOVE(battler, move | moveSlot:, [megaEvolve:], [hit:], [criticalHit:], [target:], [allowed:], [WITH_RNG(tag, value]) * Used when the battler chooses Fight. Either the move ID or move slot * must be specified. megaEvolve: TRUE causes the battler to Mega Evolve * if able, hit: FALSE causes the move to miss, criticalHit: TRUE causes * the move to land a critical hit, target: is used in double battles to * choose the target (when necessary), and allowed: FALSE is used to - * reject an illegal move e.g. a Disabled one. + * reject an illegal move e.g. a Disabled one. WITH_RNG allows the move + * to specify an explicit outcome for an RNG tag. * MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); * If the battler does not have an explicit Moves specified the moveset * will be populated based on the MOVEs it uses. @@ -538,11 +539,18 @@ struct QueuedEvent } as; }; +struct TurnRNG +{ + u16 tag; + u16 value; +}; + struct BattlerTurn { u8 hit:2; u8 criticalHit:2; u8 secondaryEffect:2; + struct TurnRNG rng; }; struct BattleTestData @@ -758,6 +766,8 @@ enum { TURN_CLOSED, TURN_OPEN, TURN_CLOSING }; #define SKIP_TURN(battler) SkipTurn(__LINE__, battler) #define SEND_OUT(battler, partyIndex) SendOut(__LINE__, battler, partyIndex) +#define WITH_RNG(tag, value) rng: ((struct TurnRNG) { tag, value }) + struct MoveContext { u16 move; @@ -777,6 +787,8 @@ struct MoveContext u16 explicitAllowed:1; struct BattlePokemon *target; bool8 explicitTarget; + struct TurnRNG rng; + bool8 explicitRNG; }; void OpenTurn(u32 sourceLine); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index d869bf2e5..1b03341a4 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -292,6 +292,20 @@ static void BattleTest_Run(void *data) u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi) { + const struct BattlerTurn *turn = NULL; + u32 default_ = hi; + + if (gCurrentTurnActionNumber < gBattlersCount) + { + u32 battlerId = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; + } + + if (turn && turn->rng.tag == tag) + { + default_ = turn->rng.value; + } + if (tag == STATE->rngTag) { u32 n = hi - lo + 1; @@ -308,7 +322,7 @@ u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi) return STATE->runTrial + lo; } - return hi; + return default_; } u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) @@ -322,28 +336,35 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; } - switch (tag) + if (turn && turn->rng.tag == tag) { - case RNG_ACCURACY: - ASSUME(n == 2); - if (turn && turn->hit) - return turn->hit - 1; - default_ = TRUE; - break; + default_ = turn->rng.value; + } + else + { + switch (tag) + { + case RNG_ACCURACY: + ASSUME(n == 2); + if (turn && turn->hit) + return turn->hit - 1; + default_ = TRUE; + break; - case RNG_CRITICAL_HIT: - ASSUME(n == 2); - if (turn && turn->criticalHit) - return turn->criticalHit - 1; - default_ = FALSE; - break; + case RNG_CRITICAL_HIT: + ASSUME(n == 2); + if (turn && turn->criticalHit) + return turn->criticalHit - 1; + default_ = FALSE; + break; - case RNG_SECONDARY_EFFECT: - ASSUME(n == 2); - if (turn && turn->secondaryEffect) - return turn->secondaryEffect - 1; - default_ = TRUE; - break; + case RNG_SECONDARY_EFFECT: + ASSUME(n == 2); + if (turn && turn->secondaryEffect) + return turn->secondaryEffect - 1; + default_ = TRUE; + break; + } } if (tag == STATE->rngTag) @@ -365,6 +386,52 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) return default_; } +const void *RandomElementArray(enum RandomTag tag, const void *array, size_t size, size_t count) +{ + const struct BattlerTurn *turn = NULL; + u32 index = count-1; + + if (gCurrentTurnActionNumber < gBattlersCount) + { + u32 battlerId = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; + } + + if (turn && turn->rng.tag == tag) + { + u32 element; + for (index = 0; index < count; index++) + { + memcpy(&element, (const u8 *)array + size * index, size); + if (element == turn->rng.value) + break; + } + if (index == count) + { + // TODO: Incorporate the line number. + const char *filename = gTestRunnerState.test->filename; + Test_ExitWithResult(TEST_RESULT_ERROR, "%s: RandomElement illegal value requested: %d", filename, turn->rng.value); + } + } + + if (tag == STATE->rngTag) + { + if (STATE->trials == 1) + { + STATE->trials = count; + PrintTestName(); + } + else if (STATE->trials != count) + { + Test_ExitWithResult(TEST_RESULT_ERROR, "RandomElement called with inconsistent trials %d and %d", STATE->trials, count); + } + STATE->trialRatio = Q_4_12(1) / count; + index = STATE->runTrial; + } + + return (const u8 *)array + size * index; +} + static s32 TryAbilityPopUp(s32 i, s32 n, u32 battlerId, u32 ability) { struct QueuedAbilityEvent *event; @@ -1357,6 +1424,8 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) DATA.battleRecordTurns[DATA.turns][battlerId].criticalHit = 1 + ctx.criticalHit; if (ctx.explicitSecondaryEffect) DATA.battleRecordTurns[DATA.turns][battlerId].secondaryEffect = 1 + ctx.secondaryEffect; + if (ctx.explicitRNG) + DATA.battleRecordTurns[DATA.turns][battlerId].rng = ctx.rng; if (!(DATA.actionBattlers & (1 << battlerId))) { From 00d695ac2b313c5a887d20aad4618f350725713c Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 28 Mar 2023 10:38:48 -0400 Subject: [PATCH 076/129] add AI_FLAG_OMNISCIENT --- include/battle.h | 4 ++-- include/battle_ai_util.h | 1 + include/constants/battle_ai.h | 1 + src/battle_ai_main.c | 13 +++++++++++++ src/battle_ai_util.c | 19 ++++++++++++++----- src/battle_debug.c | 4 ++-- src/battle_main.c | 4 ++-- 7 files changed, 35 insertions(+), 11 deletions(-) diff --git a/include/battle.h b/include/battle.h index 491273b80..19f9df13d 100644 --- a/include/battle.h +++ b/include/battle.h @@ -272,8 +272,8 @@ struct AiPartyMon struct AIPartyData // Opposing battlers - party mons. { - struct AiPartyMon mons[2][PARTY_SIZE]; // 2 parties(player, opponent). Used to save information on opposing party. - u8 count[2]; + struct AiPartyMon mons[NUM_BATTLE_SIDES][PARTY_SIZE]; // 2 parties(player, opponent). Used to save information on opposing party. + u8 count[NUM_BATTLE_SIDES]; }; struct AiLogicData diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 11eba7b66..95f6619c5 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -9,6 +9,7 @@ bool32 AI_RandLessThan(u8 val); void RecordLastUsedMoveByTarget(void); +bool32 BattlerHasAi(u32 battlerId); bool32 IsBattlerAIControlled(u32 battlerId); void ClearBattlerMoveHistory(u8 battlerId); void RecordLastUsedMoveBy(u32 battlerId, u32 move); diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 1cfb9cd4d..1316054cd 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -57,6 +57,7 @@ #define AI_FLAG_SCREENER (1 << 14) // AI prefers screening effects like reflect, mist, etc. TODO unfinished #define AI_FLAG_SMART_SWITCHING (1 << 15) // AI includes a lot more switching checks #define AI_FLAG_ACE_POKEMON (1 << 16) // AI has an Ace Pokemon. The last Pokemon in the party will not be used until it's the last one remaining. +#define AI_FLAG_OMNISCIENT (1 << 17) // AI has full knowledge of player moves, abilities, hold items // 'other' ai logic flags #define AI_FLAG_ROAMING (1 << 29) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 19eedb41c..6e308003a 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -257,6 +257,8 @@ static void CopyBattlerDataToAIParty(u32 bPosition, u32 side) void Ai_InitPartyStruct(void) { u32 i; + bool32 isOmniscient = (AI_THINKING_STRUCT->aiFlags & AI_FLAG_OMNISCIENT); + struct Pokemon *mon; AI_PARTY->count[B_SIDE_PLAYER] = gPlayerPartyCount; AI_PARTY->count[B_SIDE_OPPONENT] = gEnemyPartyCount; @@ -278,6 +280,17 @@ void Ai_InitPartyStruct(void) { if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) AI_PARTY->mons[B_SIDE_PLAYER][i].isFainted = TRUE; + + if (isOmniscient) + { + u32 j; + mon = &gPlayerParty[i]; + AI_PARTY->mons[B_SIDE_PLAYER][i].item = GetMonData(mon, MON_DATA_HELD_ITEM); + AI_PARTY->mons[B_SIDE_PLAYER][i].heldEffect = ItemId_GetHoldEffect(AI_PARTY->mons[B_SIDE_PLAYER][i].item); + AI_PARTY->mons[B_SIDE_PLAYER][i].ability = GetMonAbility(mon); + for (j = 0; j < MAX_MON_MOVES; j++) + AI_PARTY->mons[B_SIDE_PLAYER][i].moves[j] = GetMonData(mon, MON_DATA_MOVE1 + j); + } } } diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index a9e3ed3e0..93586626e 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -457,7 +457,7 @@ void RecordLastUsedMoveByTarget(void) RecordKnownMove(gBattlerTarget, gLastMoves[gBattlerTarget]); } -bool32 IsBattlerAIControlled(u32 battlerId) +bool32 BattlerHasAi(u32 battlerId) { switch (GetBattlerPosition(battlerId)) { @@ -473,6 +473,14 @@ bool32 IsBattlerAIControlled(u32 battlerId) } } +bool32 IsBattlerAIControlled(u32 battlerId) +{ + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_OMNISCIENT) + return TRUE; + + return BattlerHasAi(battlerId); +} + void ClearBattlerMoveHistory(u8 battlerId) { memset(BATTLE_HISTORY->usedMoves[battlerId], 0, sizeof(BATTLE_HISTORY->usedMoves[battlerId])); @@ -1230,8 +1238,9 @@ s32 AI_GetAbility(u32 battlerId) if (knownAbility == ABILITY_NONE) return knownAbility; - if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE) - return BATTLE_HISTORY->abilities[battlerId]; + if (AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability != ABILITY_NONE) { + return AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability; + } // Abilities that prevent fleeing - treat as always known if (knownAbility == ABILITY_SHADOW_TAG || knownAbility == ABILITY_MAGNET_PULL || knownAbility == ABILITY_ARENA_TRAP) @@ -1257,10 +1266,10 @@ u16 AI_GetHoldEffect(u32 battlerId) u32 holdEffect; if (!IsBattlerAIControlled(battlerId)) - holdEffect = BATTLE_HISTORY->itemEffects[battlerId]; + holdEffect = AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].heldEffect; else holdEffect = GetBattlerHoldEffect(battlerId, FALSE); - + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE) return holdEffect; diff --git a/src/battle_debug.c b/src/battle_debug.c index 027be03a4..1d690caaa 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -774,7 +774,7 @@ static void Task_ShowAiPoints(u8 taskId) // Swap battler if it's player mon data->aiBattlerId = data->battlerId; - while (!IsBattlerAIControlled(data->aiBattlerId)) + while (!BattlerHasAi(data->aiBattlerId)) { if (++data->aiBattlerId >= gBattlersCount) data->aiBattlerId = 0; @@ -931,7 +931,7 @@ static void Task_ShowAiKnowledge(u8 taskId) // Swap battler if it's player mon data->aiBattlerId = data->battlerId; - while (!IsBattlerAIControlled(data->aiBattlerId)) + while (!BattlerHasAi(data->aiBattlerId)) { if (++data->aiBattlerId >= gBattlersCount) data->aiBattlerId = 0; diff --git a/src/battle_main.c b/src/battle_main.c index efbf1b819..8e0dc6d87 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3859,7 +3859,7 @@ static void TryDoEventsBeforeFirstTurn(void) gChosenActionByBattler[i] = B_ACTION_NONE; gChosenMoveByBattler[i] = MOVE_NONE; // Record party slots of player's mons that appeared in battle - if (!IsBattlerAIControlled(i)) + if (!BattlerHasAi(i)) gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[i]]; } TurnValuesCleanUp(FALSE); @@ -4096,7 +4096,7 @@ static void HandleTurnActionSelectionState(void) // Do AI score computations here so we can use them in AI_TrySwitchOrUseItem if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) - && (IsBattlerAIControlled(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { + && (BattlerHasAi(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { gBattleStruct->aiMoveOrAction[gActiveBattler] = ComputeBattleAiScores(gActiveBattler); } break; From 10ef3e83483c08cc5f62a1f7f0469aafdfa4f7b8 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 28 Mar 2023 10:58:44 -0400 Subject: [PATCH 077/129] style fixes --- src/battle_ai_util.c | 5 ++--- src/battle_main.c | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 93586626e..51f4ef046 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1238,9 +1238,8 @@ s32 AI_GetAbility(u32 battlerId) if (knownAbility == ABILITY_NONE) return knownAbility; - if (AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability != ABILITY_NONE) { + if (AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability != ABILITY_NONE) return AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability; - } // Abilities that prevent fleeing - treat as always known if (knownAbility == ABILITY_SHADOW_TAG || knownAbility == ABILITY_MAGNET_PULL || knownAbility == ABILITY_ARENA_TRAP) @@ -1269,7 +1268,7 @@ u16 AI_GetHoldEffect(u32 battlerId) holdEffect = AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].heldEffect; else holdEffect = GetBattlerHoldEffect(battlerId, FALSE); - + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE) return holdEffect; diff --git a/src/battle_main.c b/src/battle_main.c index 8e0dc6d87..817552852 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4096,7 +4096,8 @@ static void HandleTurnActionSelectionState(void) // Do AI score computations here so we can use them in AI_TrySwitchOrUseItem if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) - && (BattlerHasAi(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { + && (BattlerHasAi(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) + { gBattleStruct->aiMoveOrAction[gActiveBattler] = ComputeBattleAiScores(gActiveBattler); } break; From 686d42709a6281c5baed0e5a6d8aad34b6b642a5 Mon Sep 17 00:00:00 2001 From: PSF Date: Tue, 28 Mar 2023 15:50:58 -0700 Subject: [PATCH 078/129] Added documentation on resetting battle flags and vars Added Overworld_ResetBattleFlagsAndVars to Overworld_ResetStateAfterWhiteOut --- include/config/battle.h | 2 ++ src/overworld.c | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 4a3d6382f..c6bca6de8 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -143,6 +143,7 @@ // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. // Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. +// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define B_FLAG_INVERSE_BATTLE 0 // If this flag is set, the battle's type effectiveness are inversed. For example, fire is super effective against water. #define B_FLAG_FORCE_DOUBLE_WILD 0 // If this flag is set, all land and surfing wild battles will be double battles. #define B_SMART_WILD_AI_FLAG 0 // If not 0, you can set this flag in a script to enable smart wild pokemon @@ -152,6 +153,7 @@ // Var Settings // To use the following features in scripting, replace the 0s with the var ID you're assigning it to. // Eg: Replace with VAR_UNUSED_0x40F7 so you can use VAR_TERRAIN for that feature. +// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active #define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) diff --git a/src/overworld.c b/src/overworld.c index 6b63a60d5..9fabe3ed9 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -401,6 +401,23 @@ void Overworld_ResetStateAfterDigEscRope(void) FlagClear(FLAG_SYS_USE_FLASH); } +void Overworld_ResetBattleFlagsAndVars(void) +{ +#if VAR_TERRAIN != 0 + VarSet(VAR_TERRAIN, 0); +#endif + +#if B_VAR_WILD_AI_FLAGS != 0 + VarSet(B_VAR_WILD_AI_FLAGS,0); +#endif + + FlagClear(B_FLAG_INVERSE_BATTLE); + FlagClear(B_FLAG_FORCE_DOUBLE_WILD); + FlagClear(B_SMART_WILD_AI_FLAG); + FlagClear(B_FLAG_NO_BAG_USE); + FlagClear(B_FLAG_NO_CATCHING); +} + static void Overworld_ResetStateAfterWhiteOut(void) { ResetInitialPlayerAvatarState(); @@ -409,9 +426,7 @@ static void Overworld_ResetStateAfterWhiteOut(void) FlagClear(FLAG_SYS_SAFARI_MODE); FlagClear(FLAG_SYS_USE_STRENGTH); FlagClear(FLAG_SYS_USE_FLASH); -#if VAR_TERRAIN != 0 - VarSet(VAR_TERRAIN, 0); -#endif + Overworld_ResetBattleFlagsAndVars(); // If you were defeated by Kyogre/Groudon and the step counter has // maxed out, end the abnormal weather. if (VarGet(VAR_SHOULD_END_ABNORMAL_WEATHER) == 1) From 6a7466c92982bb63f98554857f0ce48cf1347c2b Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 29 Mar 2023 11:11:07 -0700 Subject: [PATCH 079/129] =?UTF-8?q?Added=20B=5FDOUBLE=5FWILD=5FREQUIRE=5F2?= =?UTF-8?q?=5FMONS=20to=20allow=20use=20of=20B=5FDOUBLE=5FWILD=5FCHANCE=20?= =?UTF-8?q?even=20when=20there=20is=20only=20one=20Pok=C3=A9mon=20in=20the?= =?UTF-8?q?=20party?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/config/battle.h | 1 + src/wild_encounter.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/include/config/battle.h b/include/config/battle.h index 4a3d6382f..66d4b92aa 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -183,6 +183,7 @@ // Other settings #define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. +#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, when the player only has one Pokémon in the party, randomly generated wild battles will always be a Single battle, regardless of the number used in B_DOUBLE_WILD_CHANCE. #define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight. #define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. #define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) diff --git a/src/wild_encounter.c b/src/wild_encounter.c index d228b87a1..ef668c3a1 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -1097,7 +1097,11 @@ static void ApplyCleanseTagEncounterRateMod(u32 *encRate) bool8 TryDoDoubleWildBattle(void) { +#if B_DOUBLE_WILD_REQUIRE_2_MONS == TRUE if (GetSafariZoneFlag() || GetMonsStateToDoubles() != PLAYER_HAS_TWO_USABLE_MONS) +#else + if (GetSafariZoneFlag()) +#endif return FALSE; #if B_FLAG_FORCE_DOUBLE_WILD != 0 else if (FlagGet(B_FLAG_FORCE_DOUBLE_WILD)) From 24df9823e8f1c20e723b2b9b8b2ab01ee84db379 Mon Sep 17 00:00:00 2001 From: PSF Date: Thu, 30 Mar 2023 06:35:38 -0700 Subject: [PATCH 080/129] In response to PR discussion, added new preproc config for developers to toggle Overworld_ResetBattleFlagsAndVars --- include/config/battle.h | 5 +++-- src/overworld.c | 18 +++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index c6bca6de8..77e0e0f4d 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -143,7 +143,6 @@ // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. // Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. -// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define B_FLAG_INVERSE_BATTLE 0 // If this flag is set, the battle's type effectiveness are inversed. For example, fire is super effective against water. #define B_FLAG_FORCE_DOUBLE_WILD 0 // If this flag is set, all land and surfing wild battles will be double battles. #define B_SMART_WILD_AI_FLAG 0 // If not 0, you can set this flag in a script to enable smart wild pokemon @@ -153,10 +152,12 @@ // Var Settings // To use the following features in scripting, replace the 0s with the var ID you're assigning it to. // Eg: Replace with VAR_UNUSED_0x40F7 so you can use VAR_TERRAIN for that feature. -// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active #define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) +//Flag and Var settings +#define B_RESET_FLAGS_VARS_AFTER_WHITEOUT TRUE // If set to TRUE, Flag and Var settings (B_FLAG_INVERSE_BATTLE,B_FLAG_FORCE_DOUBLE_WILD,B_SMART_WILD_AI_FLAG,B_FLAG_NO_BAG_USE,B_FLAG_NO_CATCHING,B_VAR_WILD_AI_FLAGS, and VAR_TERRAIN) will be reset when the player whites out. + // Terrain settings #define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades. #define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8. diff --git a/src/overworld.c b/src/overworld.c index 9fabe3ed9..3af1cfd6d 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -401,15 +401,16 @@ void Overworld_ResetStateAfterDigEscRope(void) FlagClear(FLAG_SYS_USE_FLASH); } -void Overworld_ResetBattleFlagsAndVars(void) +#if B_RESET_FLAGS_VARS_AFTER_WHITEOUT == TRUE + void Overworld_ResetBattleFlagsAndVars(void) { -#if VAR_TERRAIN != 0 - VarSet(VAR_TERRAIN, 0); -#endif + #if VAR_TERRAIN != 0 + VarSet(VAR_TERRAIN, 0); + #endif -#if B_VAR_WILD_AI_FLAGS != 0 - VarSet(B_VAR_WILD_AI_FLAGS,0); -#endif + #if B_VAR_WILD_AI_FLAGS != 0 + VarSet(B_VAR_WILD_AI_FLAGS,0); + #endif FlagClear(B_FLAG_INVERSE_BATTLE); FlagClear(B_FLAG_FORCE_DOUBLE_WILD); @@ -417,6 +418,7 @@ void Overworld_ResetBattleFlagsAndVars(void) FlagClear(B_FLAG_NO_BAG_USE); FlagClear(B_FLAG_NO_CATCHING); } +#endif static void Overworld_ResetStateAfterWhiteOut(void) { @@ -426,7 +428,9 @@ static void Overworld_ResetStateAfterWhiteOut(void) FlagClear(FLAG_SYS_SAFARI_MODE); FlagClear(FLAG_SYS_USE_STRENGTH); FlagClear(FLAG_SYS_USE_FLASH); +#if B_RESET_FLAGS_VARS_AFTER_WHITEOUT == TRUE Overworld_ResetBattleFlagsAndVars(); +#endif // If you were defeated by Kyogre/Groudon and the step counter has // maxed out, end the abnormal weather. if (VarGet(VAR_SHOULD_END_ABNORMAL_WEATHER) == 1) From 4b859ff1e47b482d578f37d5cba7815a86a3ded9 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 31 Mar 2023 00:44:22 -0400 Subject: [PATCH 081/129] Use tilemap file for cable car pylons --- .../cable_car/{pylons.bin => pylon_pole.bin} | 0 graphics/cable_car/pylon_top.bin | Bin 0 -> 20 bytes src/cable_car.c | 65 ++++++++---------- 3 files changed, 27 insertions(+), 38 deletions(-) rename graphics/cable_car/{pylons.bin => pylon_pole.bin} (100%) create mode 100755 graphics/cable_car/pylon_top.bin diff --git a/graphics/cable_car/pylons.bin b/graphics/cable_car/pylon_pole.bin similarity index 100% rename from graphics/cable_car/pylons.bin rename to graphics/cable_car/pylon_pole.bin diff --git a/graphics/cable_car/pylon_top.bin b/graphics/cable_car/pylon_top.bin new file mode 100755 index 0000000000000000000000000000000000000000..44b20744d4383964fb62e47f513541fbc6ad594e GIT binary patch literal 20 bcmZQDU^HMdU^ZYeU^QSfU^n0};4}aL6dnQ& literal 0 HcmV?d00001 diff --git a/src/cable_car.c b/src/cable_car.c index 4eb4c3080..7d18df7b7 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -27,9 +27,11 @@ #define STATE_END 0xFF -#define TAG_CABLE_CAR 1 -#define TAG_DOOR 2 -#define TAG_CABLE 3 +enum { + TAG_CABLE_CAR = 1, + TAG_DOOR, + TAG_CABLE, +}; struct CableCar { @@ -62,8 +64,8 @@ struct CableCar u16 *groundTilemap; u16 *treesTilemap; u16 *bgMountainsTilemap; - const u16 *pylonHookTilemapEntries; - u8 *pylonStemTilemap; + const u16 *pylonTopTilemap; + u16 *pylonPoleTilemap; }; static EWRAM_DATA struct CableCar *sCableCar = NULL; @@ -129,24 +131,11 @@ static const struct BgTemplate sBgTemplates[4] = { }, }; -static const u8 sGround_Tilemap[] = INCBIN_U8("graphics/cable_car/ground.bin.lz"); -static const u8 sTrees_Tilemap[] = INCBIN_U8("graphics/cable_car/trees.bin.lz"); -static const u8 sBgMountains_Tilemap[] = INCBIN_U8("graphics/cable_car/bg_mountains.bin.lz"); - -static const u16 sPylonHook_TilemapEntries[] = { - 0x3000, - 0x3001, - 0x3002, - 0x3003, - 0x3004, - 0x3005, - 0x3006, - 0x3007, - 0x3008, - 0x3009, -}; - -static const u8 sPylonStems_Tilemap[] = INCBIN_U8("graphics/cable_car/pylons.bin.lz"); +static const u16 sGround_Tilemap[] = INCBIN_U16("graphics/cable_car/ground.bin.lz"); +static const u16 sTrees_Tilemap[] = INCBIN_U16("graphics/cable_car/trees.bin.lz"); +static const u16 sBgMountains_Tilemap[] = INCBIN_U16("graphics/cable_car/bg_mountains.bin.lz"); +static const u16 sPylonTop_Tilemap[] = INCBIN_U16("graphics/cable_car/pylon_top.bin"); +static const u16 sPylonPole_Tilemap[] = INCBIN_U16("graphics/cable_car/pylon_pole.bin.lz"); static const struct CompressedSpriteSheet sSpriteSheets[] = { { gCableCar_Gfx, 0x800, TAG_CABLE_CAR }, @@ -299,8 +288,8 @@ static void CB2_LoadCableCar(void) sCableCar->groundTilemap = malloc_and_decompress(sGround_Tilemap, &sizeOut); sCableCar->treesTilemap = malloc_and_decompress(sTrees_Tilemap, &sizeOut); sCableCar->bgMountainsTilemap = malloc_and_decompress(sBgMountains_Tilemap, &sizeOut); - sCableCar->pylonStemTilemap = malloc_and_decompress(sPylonStems_Tilemap, &sizeOut); - sCableCar->pylonHookTilemapEntries = sPylonHook_TilemapEntries; + sCableCar->pylonPoleTilemap = malloc_and_decompress(sPylonPole_Tilemap, &sizeOut); + sCableCar->pylonTopTilemap = sPylonTop_Tilemap; DecompressAndCopyTileDataToVram(0, gCableCarBg_Gfx, 0, 0, 0); gMain.state++; break; @@ -335,8 +324,8 @@ static void CB2_LoadCableCar(void) case 6: CopyToBgTilemapBufferRect_ChangePalette(1, sCableCar->treesTilemap, 0, 17, 32, 15, 17); CopyToBgTilemapBufferRect_ChangePalette(2, sCableCar->bgMountainsTilemap, 0, 0, 30, 20, 17); - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonHookTilemapEntries, 0, 0, 5, 2, 17); - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 20, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonTopTilemap, 0, 0, 5, 2, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonPoleTilemap, 0, 2, 2, 20, 17); gMain.state++; break; case 7: @@ -404,8 +393,8 @@ static void CB2_EndCableCar(void) UnsetBgTilemapBuffer(2); UnsetBgTilemapBuffer(3); ResetBgsAndClearDma3BusyFlags(0); - sCableCar->pylonHookTilemapEntries = NULL; - FREE_AND_SET_NULL(sCableCar->pylonStemTilemap); + sCableCar->pylonTopTilemap = NULL; + FREE_AND_SET_NULL(sCableCar->pylonPoleTilemap); FREE_AND_SET_NULL(sCableCar->bgMountainsTilemap); FREE_AND_SET_NULL(sCableCar->treesTilemap); FREE_AND_SET_NULL(sCableCar->groundTilemap); @@ -514,8 +503,8 @@ static void Task_AnimateBgGoingUp(u8 taskId) FillBgTilemapBufferRect(3, 0, 2, 0, 1, 2, 17); break; case 16: - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonHookTilemapEntries, 0, 0, 5, 2, 17); - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 30, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonTopTilemap, 0, 0, 5, 2, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonPoleTilemap, 0, 2, 2, 30, 17); sCableCar->bg3VerticalOffset = 64; break; } @@ -542,7 +531,7 @@ static void Task_AnimateBgGoingDown(u8 taskId) switch (sCableCar->bg3HorizontalOffset) { case 176: - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 30, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonPoleTilemap, 0, 2, 2, 30, 17); break; case 16: FillBgTilemapBufferRect(3, 0, 2, 0, 3, 2, 17); @@ -550,14 +539,14 @@ static void Task_AnimateBgGoingDown(u8 taskId) sCableCar->bg3VerticalOffset = 192; break; case 32: - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[2], 2, 0, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[3], 3, 0, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[7], 2, 1, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[8], 3, 1, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[2], 2, 0, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[3], 3, 0, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[7], 2, 1, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[8], 3, 1, 1, 1, 17); break; case 40: - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[4], 4, 0, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[9], 4, 1, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[4], 4, 0, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[9], 4, 1, 1, 1, 17); break; } } From 57396026b2f212bbc7c2fa04d230311738d9f8ef Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 31 Mar 2023 14:57:51 -0400 Subject: [PATCH 082/129] Replace NUM_TEXT_PRINTERS with WINDOWS_MAX --- gflib/text.c | 6 +++--- gflib/text.h | 2 -- gflib/window.c | 2 -- gflib/window.h | 2 ++ src/contest.c | 2 +- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 86dca3829..1bded26b5 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -36,7 +36,7 @@ static u32 GetGlyphWidth_Narrow(u16, bool32); static u32 GetGlyphWidth_SmallNarrow(u16, bool32); static EWRAM_DATA struct TextPrinter sTempTextPrinter = {0}; -static EWRAM_DATA struct TextPrinter sTextPrinters[NUM_TEXT_PRINTERS] = {0}; +static EWRAM_DATA struct TextPrinter sTextPrinters[WINDOWS_MAX] = {0}; static u16 sFontHalfRowLookupTable[0x51]; static u16 sLastTextBgColor; @@ -244,7 +244,7 @@ static void SetFontsPointer(const struct FontInfo *fonts) void DeactivateAllTextPrinters(void) { int printer; - for (printer = 0; printer < NUM_TEXT_PRINTERS; ++printer) + for (printer = 0; printer < WINDOWS_MAX; ++printer) sTextPrinters[printer].active = FALSE; } @@ -322,7 +322,7 @@ void RunTextPrinters(void) if (!gDisableTextPrinters) { - for (i = 0; i < NUM_TEXT_PRINTERS; ++i) + for (i = 0; i < WINDOWS_MAX; ++i) { if (sTextPrinters[i].active) { diff --git a/gflib/text.h b/gflib/text.h index a88cb990e..ff13efa9a 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -3,8 +3,6 @@ #include "characters.h" -#define NUM_TEXT_PRINTERS 32 - // Given as a text speed when all the text should be // loaded at once but not copied to vram yet. #define TEXT_SKIP_DRAW 0xFF diff --git a/gflib/window.c b/gflib/window.c index 1621a0884..76e863f10 100644 --- a/gflib/window.c +++ b/gflib/window.c @@ -9,8 +9,6 @@ u8 gTransparentTileNumber; void *gWindowBgTilemapBuffers[NUM_BACKGROUNDS]; extern u32 gWindowTileAutoAllocEnabled; -#define WINDOWS_MAX 32 - EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0}; EWRAM_DATA static struct Window* sWindowPtr = NULL; EWRAM_DATA static u16 sWindowSize = 0; diff --git a/gflib/window.h b/gflib/window.h index 0000dd864..0f2dff2a8 100644 --- a/gflib/window.h +++ b/gflib/window.h @@ -1,6 +1,8 @@ #ifndef GUARD_WINDOW_H #define GUARD_WINDOW_H +#define WINDOWS_MAX 32 + #define PIXEL_FILL(num) ((num) | ((num) << 4)) enum { diff --git a/src/contest.c b/src/contest.c index 2c0f66f6b..8a1847f11 100644 --- a/src/contest.c +++ b/src/contest.c @@ -5503,7 +5503,7 @@ static void ContestBG_FillBoxWithTile(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 wi static bool32 Contest_RunTextPrinters(void) { RunTextPrinters(); - return IsTextPrinterActive(4); + return IsTextPrinterActive(WIN_GENERAL_TEXT); } static void Contest_SetBgCopyFlags(u32 flagIndex) From 83ef5a229de4aede0beb81270b807c65b2b6f0c9 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Fri, 31 Mar 2023 20:26:19 +0200 Subject: [PATCH 083/129] =?UTF-8?q?Center=20gen=201=20pok=C3=A9mon=20icons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- graphics/pokemon/aerodactyl/icon.png | Bin 403 -> 431 bytes graphics/pokemon/alakazam/icon.png | Bin 492 -> 512 bytes graphics/pokemon/articuno/icon.png | Bin 386 -> 406 bytes graphics/pokemon/bellsprout/icon.png | Bin 311 -> 296 bytes graphics/pokemon/butterfree/icon.png | Bin 413 -> 430 bytes graphics/pokemon/cloyster/icon.png | Bin 454 -> 418 bytes graphics/pokemon/dodrio/icon.png | Bin 492 -> 452 bytes graphics/pokemon/dragonite/icon.png | Bin 407 -> 412 bytes graphics/pokemon/exeggutor/icon.png | Bin 376 -> 385 bytes graphics/pokemon/gastly/icon.png | Bin 400 -> 389 bytes graphics/pokemon/gyarados/icon.png | Bin 608 -> 563 bytes graphics/pokemon/haunter/icon.png | Bin 482 -> 405 bytes graphics/pokemon/hypno/icon.png | Bin 424 -> 443 bytes graphics/pokemon/kingler/icon.png | Bin 496 -> 461 bytes graphics/pokemon/koffing/icon.png | Bin 463 -> 476 bytes graphics/pokemon/krabby/icon.png | Bin 468 -> 407 bytes graphics/pokemon/magnemite/icon.png | Bin 313 -> 319 bytes graphics/pokemon/magneton/icon.png | Bin 360 -> 387 bytes graphics/pokemon/marowak/icon.png | Bin 330 -> 351 bytes graphics/pokemon/meowth/icon.png | Bin 348 -> 362 bytes graphics/pokemon/mew/icon.png | Bin 338 -> 348 bytes graphics/pokemon/mewtwo/icon.png | Bin 401 -> 403 bytes graphics/pokemon/moltres/icon.png | Bin 428 -> 457 bytes graphics/pokemon/muk/icon.png | Bin 475 -> 458 bytes graphics/pokemon/nidoking/icon.png | Bin 426 -> 457 bytes graphics/pokemon/oddish/icon.png | Bin 311 -> 327 bytes graphics/pokemon/onix/icon.png | Bin 492 -> 436 bytes graphics/pokemon/paras/icon.png | Bin 396 -> 377 bytes graphics/pokemon/parasect/icon.png | Bin 388 -> 386 bytes graphics/pokemon/rapidash/icon.png | Bin 520 -> 526 bytes graphics/pokemon/sandslash/icon.png | Bin 429 -> 448 bytes graphics/pokemon/shellder/icon.png | Bin 311 -> 338 bytes graphics/pokemon/snorlax/icon.png | Bin 381 -> 386 bytes graphics/pokemon/tauros/icon.png | Bin 436 -> 414 bytes graphics/pokemon/tentacool/icon.png | Bin 355 -> 360 bytes graphics/pokemon/tentacruel/icon.png | Bin 432 -> 428 bytes graphics/pokemon/victini/icon.png | Bin 346 -> 358 bytes graphics/pokemon/vileplume/icon.png | Bin 399 -> 392 bytes graphics/pokemon/voltorb/icon.png | Bin 230 -> 244 bytes graphics/pokemon/weezing/icon.png | Bin 493 -> 503 bytes 40 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/aerodactyl/icon.png b/graphics/pokemon/aerodactyl/icon.png index e354dbb0dcaaaa9cac8a26df89d4e138167a71d8..58c96d57c7fce6c6433c4cc58f8525ab2236e04f 100644 GIT binary patch delta 357 zcmV-r0h<1k1Fr*+7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SElET{R7i>KRKc!; zFbpH%fJCSG|NnMQ7;4iNxa{d&7Kv%pZjv_G%kqnxz!NSHj3)v_?inz#8KJHXB>NraH>@ zR_~VE)m{+^C%puJLAbpH+~MM=pV-)QN!$IXQQwO@0p4|YmrRX)X9IqY=(-;S@oirP zW*3tLwr$%H7ds^^SUmxWrdKKSn5RxZhNX^h=GwHT)wPNS6P{A6f@Q=;U7p13BeSar!wh7|2Kd zR5uBs;NC#|B%yBDF{art4|QM5|GeL8`B&mS{_S`Jl$8|TD$z^c00000NkvXXu0mjf DHBY5s delta 329 zcmV-P0k;0H1Cs-g7zqRe0001qplF?uE`tvdE)?mI1yx!H! z^%}sY1X%e=@wCiw9cn$p7_)emVM7gB1=h-ruZ|JX0Qj0yLWqqcq6$+&RjUcPbt8Yu zF*M$^vG~^aSJ{E~Rh!D4`)k^OTC=XZu1{C>t!5hP3tw`Z=7qcqH_Lr~J{{(v=oLPW zC)hN9dp0oJBH(6H^j^MRI1cu2{J+Of#6%9I7~xQe5e|wARX-*Q-ff5Rb$ bzsKPYqRF+jd!m|200000NkvXXu0mjf@TQh| diff --git a/graphics/pokemon/alakazam/icon.png b/graphics/pokemon/alakazam/icon.png index 6d136899d988ee651e5227763a1d5217fc442a78..e823e94cd36a740de8d352f1e5a02f75810ab1ee 100644 GIT binary patch delta 439 zcmV;o0Z9Jr1AqjO7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sen~_@R7i>4luM4p zAPhu1K_YnLy8msb%7jm560+_=O1Ff|Ha7TuK3}zfH-WtJfA zJ=F-bD>qw35fuml&)Xs>08ru%)b8TSsFt^8K(4JMs1&t@b)a4E+%~z%{Wxa9-un3MN|+Z1yuq}Ne- zvH#2U^#IW;T>&JqL+W3Q1GD>=7|rLQCRSyB4))0o_fs( h3D$hTB0a2002ovPDHLkV1kQ<#5Di_ delta 419 zcmV;U0bKro1ndKl7zqRe0001qplF?uE5dr5C?FcASX3@q~rlo z1(s$>-i9%3Wn?uA43R3lz^f&S)WTxBAOT){wN3K@>e_g)~wM<7AQatb+Fqxjx1;)>Cg#0PoRt`rN52fxaEO4)9a_2?T0NWIS!FzTvmUS zGLnXoO=j~&kkIUnkS^plaMwEECU`%vlkV!SQRalC=pQO?uY;FG8RrDQH=okm>Mkvo zsf<(qvf@WiS3p3y=+g`@tBRTm2(T9*WOiOw1)BRIF*{T_!!Am1w+2+S3y0v z7q#LVG)bAzuJvuTO&fxU!0xluooasp_ZgT~3z?4s09TF24+#6|lTBajx$7BV*aVE4 zFUDY$yB>o9>*E28<}e1+A{&7*9C`yrF<)LepaFB<3}7sWM=KRLc&- zFbJzuSfw4{|NnM8QbI^NX@_Y$l-`D892R@q?)q{u^ZPy!1Y&_@%6-HM!T^*2B#?1@ z?kj^pLKG`~R-gbtE%xcs6-Z(*3hf(*$QK99)lslS zs5Iw5x&TCfvA0Hl(Qbo83kWgsZpRy_An0+>bGPd@4jd759OSz^=TyKR>v0m<_Nb%$ zn=6v>Qj2}x^}qE|Kx}hH3<2Sj~BvVYV};eA*m!v3~J&w&gp==N_HuQI#+V>tz|Ps?Gv ewEy)_KdKjKycKSuv3f%Q0000NHz#11)Y= zEtEMzE(}cypn!H20mAmW%cRLf4dchN(9fsT9}J+2P($g*E<@VJflC3M$Kh}o6;)fN z!};!^q=N_s*#p6*=}--kEntI|WX-o$scy6<_x{;XpNb-@so}F66$i@}cNXG?82x{t zyfnXr=}>aMJ615u_wD2B?%9*12X*_5SfE>$@aQ!WTe2w9ZSUbSK`QG1#bq9K4B(KEZ**`6YB5 zdaOMS9L#CC9S2VpqX+{BCY4s!fx{$hN`%KMslDOQ-}}KZe-+;uRkU;wSo=c&0000< KMNUMnLSTYa8jFMg diff --git a/graphics/pokemon/bellsprout/icon.png b/graphics/pokemon/bellsprout/icon.png index 59ae8d037ed7e014f2dbe322d03e4fb411ec1fdc..ff6ca2c33716e1c4a6f249f313c9a099e2a2f3e4 100644 GIT binary patch delta 221 zcmV<303!dl0;mFz7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Srb$FWR7i>Kl)(-H zAq+%0K$jZR`TxJQWkDlQG@djv374JO3C!Vzu=R_AYUy88i$w7?;kL9ua1zyLM)Ct_ z0a48x%ufJON__&S&wx;j@k;cZfR?iPHV0`#e^un1h3zY3z8K^CD>5)_jt{^RutQiW zQJ@t3>+|A`qv`$9(e&Jow;*?Y3JgU7x|9d0FuGvxGeA04`@+p2dZK_sbvw=A)%NNC mIF!p6d|Z$tWQ#d`J0EZF)pk#lEc%Q90000Kl*?{J zAq+!#NGK90`TxJI1DRU}0$o(IYO@?0V+QUC;jfLzkA|~jXtxM+Tz8UTkeKccNp}MR zjs}%AAX$~Y%w!PBImN|+C9FH(cgUE4q4c3c0m^f*}-)2@&fVf^gE&xQM$U*vtH%PtLCh^B&gL82|lc~V>D8&74Luc z`pzj-xyR97-a2IzwoA`&zuP%%%z8q=^UIZ^0-5giCq~oF{tv#PGGv~B?%0w;^hS9yyB6-upoh9 le++@SU?UKltB{1 zAP4}9dV`Vw|F(eEM8TwoPA@H2Hh>uS@%YCS%r|*}H;4&YO9~(aA88^-FmXqikqAS8 zv=J91#HFDGaTP!^jJV|G^OSUiMj)?wEg^_91V*g=?U1bsAt0<1fSyrC1RDi{5$p)n zLKa|yx+cU)^N_WF1nU~+F492KnR9MEXxUT;QqG`2(4-T!Z=$-p9VPmzTpp@iU&^VK z0Dn`uDJk3+;Qc_HLZLh0_7VJYd|VK|VEboA+Ueo-{#!cG zg8^GT3_Ip)Wa-@NDpU0Z1ivvM68E5+= delta 380 zcmV-?0fYXc1I7c87zqRe0001qplF?uE zdw{4?c3t$WUK0hewk6Kct}ARJ?>x%yq=_MR4iHx6F@Fs6zYvdGnC+$NW+a&lk>f#9 zIDbkCqs9a#a%fxuWV(KDuM&Vxq}^c0g0wPdy>(-OkZHAq*A{tixQ41~tVqg)1bBZt z0-5L(W7}w#HFS*ei8R$$BEu+?m0d~S|!ktH{; zKk$1B0L1XY7i({)$OZ0eI#~3(*=Xe)+_~}iCGX=fuTYm;qk#X!pvlrie29Hr06gSp zo$~?&Z(&Ou7E7L>9kLAqixnyBatCNAEH*VenSZJXhBa9N6JjK8TQuQ?&2~-hayHv| zyU)R8@V)U>(VP>*O^dfzP^OZ8!@BiV35+sBi(7zBR-_M;L2_RD>12W3G%!N+b8u(I aW&HsaY4WVL_x7X!0000Kl);XJ zFbqVAA~{kHp8x;b^*Du?;2`Z~FI&?Jsu{*k3hy}nT>;~})fEQ{PVd7CRiG4C&>BBk zKmkKc)n*PX2Gf-p7SgrTgEioz7j$}p0T30a8C>^9+WTdIiWQof_{)Q=NuL2jXPu3j z>Cu2{y6}K?0_;kEr*6yg07d25WQ?$>H{RJ=JsZ&>2s(h;!Xy$6%sfmNIxt2NZyNu^ z${tp9aTHAb48btla+o8FVa`)+7TY(K{K4>6>XjNe0=R8k19#eVzeo+dow{xe=cYU! zx0peFw}#6k`-E$jZ*A*0{KxC*g3jhEB07*qoM6N<$f@J%rWdHyG delta 419 zcmV;U0bKsX1MCBk7zqRe0001qplF?uE7&WQTtt zkf!)^0g1i$GKfFE*G_hPOpb*@TL%O$;h?F&z5*ucYK?CIC?-!%LhsmB5TQenK2L{? zZQ(4@fIK^Kcs~rC)X6yBH+u_qc)46wAXCg`4LAw{tq&DkENh^zf)Lk0B99xOsDA(t zpXOhT9^-bEszY200~gup!;dhk!%ly!`4I-D`R2#j|-?xPb3>ZlHd9Py=?sedhkR4uiy0J3mU*1Dpep7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S8c9S!R7i>Kl)(CEIaHl4%?FdE28z=as2C>#pgF~^4bCh;t=Zq0{~z6LTEx+ zT3GIya1{iRs8-7n9YKr$RLP!Y%$`7LPzhU(c_COAKm_bS&SeCcLGxq~YhH302!23| zIN7JQFxka8 zte6FutA+bYXYiwx4kSi8KJ~3Z3K<;g@=X9M9U@Hq*#K929}%Y7#(DSTfGB!l(pY~z z9+nQ?+0}(KXGd`$w~coq{bj&aMy_cd9d{KXMQjNKBr+A6=s{FC$anind_U#^VA(Xa zmOPJt$@{jTQw-Qj*%U-WdL@+UOtgNrd2bEdxjdUKK!IDISqHe*0o7Iq7=P1Y6>&On zd=Re#?_*@q0cjT^P6wTJZ>T0Hd zr?7y!Y6p|`pal(o%nFJ!nFSVZ?V+Apyk={q8M?I=4#ASvI)~&w$^Y~%p_;7eN3Ao` zD}%wa>Kgwj*L6CK)Pmh<;V#(@o6qMiizS$fmMy>8N7+*U#}Q|zv;@d6gqZ+2Aq)Yr zBFqHHf-na_Qo=j|k`U$vkoeBL10*8MCqP1nivR@U6d;!u<-;8*S{R|o?cLG<0000< KMNUMnLSTY3Ux_*Z delta 303 zcmV+~0nq+|1NZ`v7zqRe0001qplF?uEzl09kzF%U*|gE>NuVO*ur zw%*3RLRyz@0y#t~;ov<)szrtC5P>eS&4NJ+mIz{v$958|PfObTOgA6%B#n4N{A6+2 zd0G}haI_>30mys;fmto}83nmM4Fb zu^eh3$RyniZGIWqwX*HnUW0?xx6|ignX!*gxKgqKLitm&K!gB+NGkMb9IHcwQQG7N#`l zEKFh0MHn>bLl{6lg#m-Ugn^0Q5r!MwSeQTe;{^T`&r>@VKmC+8v zAP7YpdGiwe|Gyn*rxmbEmcA?*4_h+MEDD|;$3MOc;J_!~E{OpJAi&JZ$TtE&(^Z07 z1P_9wi$q5}P`RZW66Vv$E8%OXl&%27t|CA_)2R^#K&6t4B8jL2dKOn8$v<-;joiyz zS72G96snR>Iobz*AiKy7$UzCM%%X%=5CifM`Bk#KSpeDzNsxTHLwFO~EQ*eC5Yq8_ zGcjXMZl~%WKNQai#FNt>u|QUTY=(OJ!{3V4AHlU+{o!k{{;+okfj=x@{b2=T{m}$6 z>+t?ybC}*AZl~5C7O?&ZfawoLU=Z!q=?~t#Eqb#nwiAOIIVR5vxFptG<6S z>_WFioy#>a&}C7*Xr!V^wIqNINI&Hg20maHteAy|>m1|+PI2}jLQc{A`LMHpeclr$ z?+h#&ZGgZZSn3Vz!oYIoc;tUFm?j!kd2G0k(@iBE z^i~CYOPy*Gcnx6IsY^zcMpn8g5&$whUg;`i=hpE%qAAiL#w9qh5}tlAQW$vd=51kq Y0fs#1kjArV*8l(j07*qoM6N<$f>UFR-T(jq diff --git a/graphics/pokemon/gyarados/icon.png b/graphics/pokemon/gyarados/icon.png index 889943b04f4be2d2e1b2a6d23462f79502bebac1..41ccb5aee2ad3bc30c2eb1562c50f6fac21413b8 100644 GIT binary patch delta 490 zcmV1hWK?7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Su}MThR7i>4lu>hp zAPj^ZF`aM+$^ZYi-2~L2)J~^w$IRV>`Pc+ycUeAhss2(=>l30XX-z)>wh{XiBF zuqyyq4?s}#dd?t!qye=aM@A8=ZMM}Pp6?7Dsz_$eia+%hi{@}z715MUfN@6ep`gz? z4)+Bh+nW?0LN(I?D3x67d?>A}unb#h)K*WL z#DF5SZRE4Y25cj}Kmf32gx$Q+2)y2cCpe%@<0FMHZZo`plLPpky*%6qJQZW7bdfuMGQzEj@_0L%U2ncuJLqIfpw}6;xgn*dZzxlrfM7jdO{}vE(6Bzwp z=EUItkSsee_+KswvrPRT6XxdsWf>D@x%&T>FjxP#A!5Q@{qI0Xn4AC2jiY@>{}VJq z!i@f>%>qP8VgQW(-}6Cf1YYU%|0Q9Z==L^un~xz9LeAfNx3?!m%aGfh=mBj0xAKpd g+x`E1_y6esZ>fDG)0R-u)Bpeg07*qoM6N<$g2F)RjQ{`u delta 536 zcmV+z0_Xj+1mFaa7zqRe0001qplF?uEy_^a;K)FTAmoYz+$uQv+VraGO%(+tl7N%Xd$5Z_?JY4A@bF919KtX{WH#m1sObc| z%@15Ih=jOluUluQNG}~`k(a(ts>%yG7K=?dX zLNjn5(Dh6S2nMM`v*+M0!9P#x|13DZMm`=A7Q7t|07N1mS$B_X0N74G1kCo>R{amE zXr&+fy=0ZDB93&hReixO3pF8$E(6$v#*a5;)){1K!qDi#EINZk9i|KK2GxJTAOUH< zz|!V}K|%*F7E62LtAjz$-v)@^9vRRY1XKA0Ikgk&3@W*pQ!LZiZw&%+CUd%y=a+u# z0}$NC*;V5QJ?p@`Se3Cn7$nLfbKRLc&- zAPi&WR#5!^f4e*>R84!FHZAI*!cO8um{NW(@PzjV#uEX(x0C@m0l4OXA;vYFvU1TH z1)+Dr&J7`i!RY$GGy_#5^nlNTQ3LZrXS`Je43oOfV=5Ikd?}(^koJ5=TW!m@qK^kF znnD$|DuL)o*V^2F(aLUh)1MQrlwI~I>Xs>lpj+fFJ9hnSh^Yi=0%+$#ioYZdk%g=v zNYyB2l(7Y}j$i}=J8jw%#X{uVH76HC(si!-0|Ltw4E$aZ&usZq$z7&K&mWBmR9 zasMkd_rKXc_kY;GB>q3_U#|T>*+23Buz%|RVgJeh{s4?BMTC#s|M37!iwYlkqCWuT dD)5C5z#Bz}C5#iMsign_002ovPDHLkV1nuLnpFS* delta 409 zcmV;K0cQS{1L6aa7zqRe0001qplF?uEVUj32Kd3Umj`AqgxTr*N6+eod3?7$r&ytl)>f67+s)q$*U} zl~j9CVqF#rU@2ad#l=pxj9+SVnY@y;N21w7a(SEsD6(|^)WxZogT-m#o_y}zhx`#} z4>OG@km;whnAu8Tuuh#b_eDmfdSib9Q9lR!;jEzde{6lVbg1l>kIz=?pnZo?8Zxal z4AD%boF2mWCXTi^IL2(d-eC6YhB$y;UcK<(zB=X_mLPFTi~}UQCehHjAr7v4rycLT zH`2!eE|h!AgLSbuxLRtKltGTe zFbG8>kPzPR?|<8V>@>AwyIIXASwWCDY!dOO4$)`Gsb;K z!1H0oeGO#pB)nKz7F!b}0kahV*Ehkt1;M}DCeFji3?SSs!>R;y0w8h5(TF*N)FO?& zVi69#g&D6ESUV_x8=+mx!AC-nC(If(@-9RI@A};cFh~BN5=@XOK0R#7zqRe0001qplF?uE4=xu97rE z5Gz1U3sDN;U^tI}0TBEcHP!%tbOEH|HlnMXOd4U@;UaG7)pcM8nX4RkmtJA+K+QhW^ra|a24kaSTI?+F zB?;-tcUG1i2oiQOc3sD#g%EmRcG&3WDAhH@3mQ)ZA>EK6_!RFe*xVVZLTy4Y~^>rxw;AFU&9<#u_A@FngK#6l)MV wVXnEFYkEShFsA?}Kg3+(;_gR$?Z5f)10Ue(SR1mX{Qv*}07*qoM6N<$g3^MVO8@`> diff --git a/graphics/pokemon/kingler/icon.png b/graphics/pokemon/kingler/icon.png index 34a72990600a16081c6ed9d6f3d700db1c1eaa70..3f9d0b8b78e41ed6730b3c0b2149a71e4a70d614 100644 GIT binary patch delta 387 zcmV-}0et@O1I+`F7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SOG!jQR7i>Clu>WP zAPj_qknjVN@BjbX`pig(OT6u+(lpenQGGcZu)pK@M+>&ncoUIK0TKOae5Zpn3<2yJ zUQ(!_@k1q4#%~lfWszn@ft4H*VG5cw3o>QM0`(O1w(u}pT~NEK=T=53yB`Z`t&CTm zmskR-?kUUyC@!#nD(qC^$pRg{^6ys72<{a2N`dX7G986?g@rpRH^YSym#Yp77uy;Y zym+r8DEP=E_U)qrx}bzQN}VOx%WZWyjS3xj?v`!aL*9ElO4Y2%;MbFOA=9*Px-d78 z%@$&@S@>_Rk52zSKBxb9z{8yW1P^oi_jtIb{|OIs`XBLPFsDDkgSGlE@eum;4G$Xc zCg7oMdUnObW-TeOK=c&5T*fcQ4{mMAb_4hF=^spQ!1TvVGL9{)e3{_BZs|6nm}1$=BBe3=bz z6ZjYu04c~Cn9(VYq<9g|82C(JOVpTz(OdB$mxs+Bcgw2 zDk0V5c|>n7TsoGvVLS~Ek;-(<=(T1nL&kq z%6Xq!*D1i3$_k!M+f%fqOj0DU-0>~Unp!(vO7Hi}-EEt3e~;b&Zy(6E9W`!8D%W2{ z{KCV{0<2Ov6I4hnlu1U@6Hp(Zq=tW4@O>DUTG0fshS+7Mpt=Xek}jQb0Nn<-AhF~H zg09t&uISL^9K%fx77gCZOfXF~`ugaQ7Nxc)edJ8TOiG9N>9A_*XxG9Obt zRcsOC*2sGO! z(qiQQ|Mn1+Rt%V_wljdE4x7?9{uBUUPws=h9>)RW38oK*_YX<{I3~u8AT9KL zD$y$^BA;+k1TW>0(UPemRXr4vJ?AaV`qbJr;g;Ox=^wNIJ}i9W>`j-V~dW(1F? zElqv>laSl1EU=d?{LngG=!K^~^CAIw5q@=|FVY1X3&C6_$qz?!}c1>jj1w300000NkvXXu0mjfCw05z delta 384 zcmV-`0e}A71J47H7zqRe0001qplF?uE<}Ggjm?s=PQx$|hHv!dH-Q00M&5}5Bs|(v z*LY&@01x0O89Ff3A}_(zR3(A|RgPrtY{yPAu);}glHdRN&i5JM{{)ltCjg{~g3|b+ zDqy;b22C$0NUcQ?n80Tga76$g(n3@K#*X$%4gk;l1}&ei=(x@X|uo&&!>}VN(#8`_S&>% z9-IEon3zLyboE>{`rM1?y#@Vnk>>PC$n?V|c;zzv zSVn>yC;F+byBw``L_ZyfA6~pC`so@L`qK>fiavI_q%UDjAMbvkKNBK-ky9dBwH)G7 e2#%ccd;9>x{^J5E(!ebM0000KRLcqj zF$mlsn1kT_|KE0WTk_a!pip{gJ+zBXMq_l2<8N;mfPGwR-6BxoI{_3SOX{lBZ6t0hX}@bph1v`#^KCDpW!$`d99v8Jg!Oi6QtEAfCytk&zUNU(k?|% z7^-AtaV{>#(z~*MVJ==tA<2_f^>I4ff|R*T*)@@|br1`mMn}~7Wl_`^j~@n^Ndn=+ z>*Y8E1w&Hu52ajRhrBGoiWz*3fTd+qWjSR?JL&dA*pI{CK4`zS{at*y{Y@V3w*Ms$ zi|scX;KVJ8nPIWWCEq&{5UZ+&aBA^%4WN%Ynu~x(9%s9^fSJl%ThzBrp`v`n^ z1i%j^zMHlTNWt70vEL=YOz8?d1;EC$O~iVhQUZ&hDqDe=cq(?rf>_b~xdF6}`?G(Y z+aZ?#QN8C}0GnCvzUcAPJ8lE(^7G*~aID*iWkRSOVQkRkLUV#sP!EO>G*brA0vh}v zn!fDcUJ&J*(m(I}3Kl7qUFdxg5aT+#I&Sy4+^0YBAU-tW0L1hNyg1n79QI$Q09Y99 zc9+F($I{hjY3DX8S^@B!GISPFLhyFkFl4Hh6+vSPs8!|dikN9~2~s$Twa?rY_1(== zzWNP@Vh^~Ip3{>6vP~GSO^@G`!=fBe99Y}p4a>w%xofMnCdO_Hazx{+(e!;c{RQhU o8Sw6pD5Z?>*B>#i@xS@w7sJ!jh|T2NQUCw|07*qoM6N<$f?ILFpa1{> diff --git a/graphics/pokemon/magnemite/icon.png b/graphics/pokemon/magnemite/icon.png index ffefd1a45b9e50bda43a7f8ef42018efe54016e6..95b81cae03d1139804566a9bb7958ef968c43edd 100644 GIT binary patch delta 244 zcmV1)~7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sy-7qtR7i>Kl)(4lmNMit{5TP|yZ6N`3 z%pVE}4^ZTsTgy&#?fqIUAm>h4j;+eevLige28P~XK{7(3ZCVugLBlzRnveV2)54_YnxRtm2zRbL^*|gqf@c6U4#H8N@t%)gU+B-A=g^{ zM>*56?*IS*07*qoM6N<$g3~T;B>(^b diff --git a/graphics/pokemon/magneton/icon.png b/graphics/pokemon/magneton/icon.png index 733049b1d68e18c9e21b0d5547e5bd3a5c813311..bde234ea113243d3d81d3323ca319a2a0107b0d4 100644 GIT binary patch delta 314 zcmV-A0mc640)qpP7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0Rc%wK~zYI?UTWd z!ypVq14t+bnEC&|-LausTAWs@_O|h}oli}}a#1I(=&+?`mqNdN!< M07*qoM6N<$g6YzX;{X5v delta 287 zcmV+)0pR|F1Ly*f7zqRe0001qplF?uEFbqX`0u#PKjGmwa z*BUuXPT*^F%b~IgU9y&LlP(=e2@`fZ_F+ib+MMJ2mP zu<{pcc@cs5c1d+{oVKiSuvXv%1bQc@WAk002ovPDHLkV1iWqf`$M9 diff --git a/graphics/pokemon/marowak/icon.png b/graphics/pokemon/marowak/icon.png index a9738970562aeb62305736aa6dfcce3095e92da2..af56d377c599bc95cf1c497a0ffb7f02baa7ae42 100644 GIT binary patch delta 276 zcmV+v0qg$C0^b6V7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S-AP12R7i>Kl)Vna zFbITgkYMB9|7{C)nxr;y)uqZ1hAe!X`BAQvCw>gzOTH4842Z~hO&BqnO0MJp8#DV$ zoGEz^k?xTxv=_FZOu!C-G%sphp*o2&O$=2HfWVc!O;s5Q(|Do^`#vCS`U%7gm81Gy zKMKSeqqs&|=S?|t0OB|Yi|RauC($6U)*yx{(3b~TH0pqfOh6;VJQ*rB_K3DVnE1g0 zNV-7(ddMs=u=zD7wI^;IkAajs8c4G9!$7qCyCbq2$ig4m39kHMH;_wz*bHRl52vR7 a?hh|V_lLx zE01C5)^2!%x0Xn-K?G9Sa8ue4Le~xz-fW#?$GRZ+qu^Z*A#1-N;><^eI%5qRYETO0 z=qLykns5Zfk;zk6nBx~99dPL)OzIx&IzVNVj-i|i+ccM$=KulB+e-OYd;118!+-w0gT&bnfPUTcXqgry0m|o@w^}Dm7f3@$! z9wiPZOyvtR(dx${%Kl)(yv zKnz4J9wa7Y{{L?~iO_13RoYVz1_W{5PO`f=({$JOg)3cg3IT@66&Nva0|>Zx1ed`@ z9%e2*z}2#@qNG}Ygb7Or25jLT4rWTA8I%T45u0beK()HS`B`U>(9NU})Qx~~Bh*Ej zE+j(cL)|}#*eD%-xIC%?TyKKVQ$RI{gQo7egLZ`YZm!wGs=m48eR&*3t4j`HCl@~G zzAwMfN%*;b*PqlKAU_01O^{=NbU)A`K-z!+mREpOAOggfcYu@x*#}4lL>(axdkc^Z lh~~I5ALxzYh5lcJi;h=00dA~!UeD5{AAjkd*exqC=|C2ESl3yU&pRab`2SK>-$rIdo|g*SDRn; zuJz)9nJk_6x(8-4>pw8zFuTS0yah%8RqpE+7)XNt0t1xdFQ{u>w8?!TLxg;)o}Z5^ XY}nJ{D3}!;00000NkvXXu0mjfjgNr; diff --git a/graphics/pokemon/mew/icon.png b/graphics/pokemon/mew/icon.png index 6e7175f437391b2c2f68c247c255b6d98b14f822..d4b6ec9a72cec9ce5587d7f7bab8d189a3f7f338 100644 GIT binary patch delta 273 zcmV+s0q*|N0^9CR9gxJ zF$fzdltsbZ|F-L+^MI-cnDIBM#Egb56a8{a9;&;|%ax>u&bmWlq@ z)%t6wfVD}+fVWw2%@cy(C<}8m*hJg}PDKVoL^*L48GgQ6^EnJb{cRVie9~u|ch~#v z-xH)?KkVPcgKyEs!?LECsvh0@4DI7zqRe0001qplF?uEuvn$F zlh>gZ@FQ#9skjVW`nh*gH|FHJDo<<&L*nZY@%#-i-(Dn0hqLjcEBc{)W~4|G;COQ( zpe&=#sYj2%m~t>isOvfhh|XXWswvNy7Ba7eC{Al^sO?(bb7M4H`j`3zFs+fB76nH9 zy5!D&p^5{O17_rYw!m!Tbm_7IX5&d5Fq$!t1x7Q_15;`Dz(DyqFdzMX)kGcCi2e diff --git a/graphics/pokemon/mewtwo/icon.png b/graphics/pokemon/mewtwo/icon.png index 8463a04ddc33cc2efa1a315acb06bf6d7796a9d8..b0dc901658c6931d8024affbf60ab2706eabfcf2 100644 GIT binary patch delta 329 zcmV-P0k-~;1Cs-g7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S5lKWrR7i>KluHi7 zFbG6bvBk{&Z(G1gQ=4(BNR_%NQoNZlpM<<^`^WtNKInos7jZ)$03>bh*4crFi1?F& z>#Z1EQ#le)y+6gKk4Q`a}FzO za60l{j(ZV!ZN$o8VwZ+((cwS78u$1?`~yD-K?Z&>f(-m11R40j2r}@4|NaL*j3egc z#{wWHKcI^gogX_u2ti_<-vCnPm;h1a{n00000NkvXXu0mjflH`fR delta 327 zcmV-N0l5B?1Caxe7zqRe0001qplF?uEVAQ3;_9oi+e!c5V=Lm z+ap@C6jz_NNW0{S+_E@WcNnsL6om#cGPW^e%pWeuCqUV7+gL$)Vax_>4}=R|+JW8` zU_jU6Hcf%p0NgY+S=<}YfR@eKHBX@WWXs(gdZnPfL!1EEf;F0|cM4l4jrB4Ra*2QB zOjWQ(L`F{9NI5(?TyG=Cv7xie=oI4SkQnl{SB&z3ee7g?`#1yLAZWe_IC=n}U%Y@}kf-pO2Y`LK z#xMy39@orql8mAkVIcJoeh8ywx-c`4I(Q0GRgkAJvq75|VYEsU=0k)T;s&m97UtLe Z_y#ix&7cm(M)Lpw002ovPDHLkV1j2Uk<0)9 diff --git a/graphics/pokemon/moltres/icon.png b/graphics/pokemon/moltres/icon.png index 99affaa0b2cab8d2e31db51e44d34582ad672bd0..70de8545068fbd265d59066d42e2e26097e9eb46 100644 GIT binary patch delta 383 zcmV-_0f7Fj1IYuB7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SM@d9MR7i>Kl);X} zFbG5=)xaSV{Quu}7$-8eBlXh5YE>Vq1||bWc^t>@eDTDmyv2hkq6jo7DwZ`6qUz9$ z_mH$ZK!F$}8HnJosabV|LLmv*G91dsNdQTjXck9ar~IvO)OGxAG+VEPJOrLf@u#_j zXQLy(c^s@vg|S_K-2`aSo3!38s(Gw^x;Gqmv7DSvlSl)!|7tKlor7C1dY;|_0=6e< zVzmbHXBLPtm&pYA;3;zvDS`dcPodxWHz$cYX1?cq;#@aCEMKH2t>$+$DW2$7z(5|l zB9i_}4%zL5U;BfGb%F2$1(ayx!aqtE_t%^FD)A34iuI;m&i#;;=(A0N?=$Zkch^-0 z{$f|V%PcPZQzMpWPNN<8_gmXir{YgC;TJRB1OE=M*Il{b-%FMSvEknpql>4xU~_(0 d0e@&gyaCvL7G<@!U=siU002ovPDHLkV1k*%u{i($ delta 354 zcmV-o0iFKI1FQp(7zqRe0001qplF?uE&kbe)1dfUmqRMRnq>vwLMr@}ZZ z?}*|J!DnpDso1f${a3-c%j?gA_if@}wRF_YxLD}3=`)PrpjRL zWIY8OC=nE_ebYD{6}n>b&4l&)&Gb%?FhGr1goMLMt0x=)&c^1QMI0=I-R4;n4g^A` zcQX!Q+1K=L#vzne_6dhDbbMsPfs0oli2X|Z07kXH_q}!S<^TWy07*qoM6N<$f=-sN Ay#N3J diff --git a/graphics/pokemon/muk/icon.png b/graphics/pokemon/muk/icon.png index f56a9b367d8b0ec0c44fe6487af47ec60467a042..3168d1be464250b28d69e8506147a8f2fad78528 100644 GIT binary patch delta 384 zcmV-`0e}A61Ih!C7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SNJ&INR7i>Cl))0i zAP7WbV^28j|Nm`4NFr#`bEiA)C9JR-^S13z1<_-*iEb^R=DKm9eRqhM9}SwKEDb%r z{?;Qrz9%K3)>JX(CN4-(?qiCT;-@p7TQIxy*_Mk7?yGIAKfz++go8^5%pZj9<%~u!pnELAFb+R?cy(jV0SMf*s zaXfg+J3MUX2G@9q0GaU+0J6Zt0w8Hd1jvMk3=lg|!~r8;Kn^}2P8a~bFf0pbKPLX1bneHqNUA_R`> ej)}5asrLtb%_xS8SA1^(0000at()CL-XlhArYtmEq;IP z363{S5fa+|=^Y`~Qe!R>kM0)iUe7Hw~ zu+t}zLXdG-xuB*8lHL)(YBQz{7R85p6Y4zU7*Dkv~+yHi&M#x*sK z0+adRa~}eX@ByqI8JLleu@qB)8TlBu6&0AU13x}dU@{+tsI~wjXJ0I264VA1Ky=}P v2YLCM0V$Q8AoQZ10Wo<6aSg~7{{qMlmZexmK~?Dk00000NkvXXu0mjfgdnUb diff --git a/graphics/pokemon/nidoking/icon.png b/graphics/pokemon/nidoking/icon.png index 377cb6672e543b7717395bd6c426d7e5f679d98b..93d0b5f80e5f8735ebd30285daf5fa0f9dbb4719 100644 GIT binary patch delta 383 zcmV-_0f7Fh1IYuB7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SM@d9MR7i>Kl);X} zFbG7g;G96r|Nm_V>^M$prN^$+jZ{lD4+dyDrTowXd;;_&Rxlcn5!edQN+LplnJh-g7uFR=inxC^!|M-Cz;>k7j0<@(#M<{J- z!(b2FezA#LB!x<;f;uY#SJWmD#{(_q6~7B1=W77#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S#Ysd#R7i>Kl(7!O zFbG6F0F%r8|KApHYjxn6ZFdV#nD5)V|hO@u4rP?5euI4-U# z{pS_X^40rAtU&q_O=yqsQ>;V;JgSKFb7T`KSNjSxq*#!L>7C$&ZiXR7n)YUx!ByTP@KuE%$ z0AYa*kORdQKo|!%Ko}r4K>9I$0U&q>kWAn!`EUnFzYhue`adfG0000%bI3rn5vqTh0n||AiVkMv-6`z^mC=e3N3TXCFB>F=cYJFu#7k9aYDM_ zJIx3rj1G2`#&;>H0ZClI8F4;9Vu{D3cL2?Hx7Rbg5Ln=q3#D2eYeQibUu m@e~I7uL#5M!jS4G{dfQ=W`Ao>!^-^t00007#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SGD$>1R7i>4l))0i zAP7W*xwHTOw`Gw~G^U+)dTE?VbYxkTn73_z)bK9e-Y9-3z*-3D0-!aM0JF~K72esP zd52jbiikH?XmzoWFyaCB(tVKmA!uNjitaNA)NOrrM1NSoCpjfP6oHr%*HIh-Zw&Dz z9N449!q?o@W5P0j@J&mP+mdSQ?|US(a5;=UGMxqzr$=~&K)f#IC|Mh%Hg>7vXDKI# zrXEMU7KJJIWt`?o62H>(`rlszf+l>DLK z>R#WX-IX7MXvvQPnXmbgJHO&b!NZat2Oci?@x;RgKMEd6&it71aOOw+JsN@)KT!Cv z;K#^^B|q?rA50neF!7@U0we7UKl&M`Ke+H?B49aI4u1`Z2av5A{cVe_-T(jq07*qo IM6N<$g7{3Sg8%>k delta 419 zcmV;U0bKsH1MCBk7zqRe0001qplF?uEV1b)Zs0|{v9R$8t@0EE>zv2l^{NWp(| zPt0a)NXyc-)K3qmrTKT%P`TeZxdq}D!kP^nj#{!XnpcEHl0E{29g@x-atQ0b^&ybz z9s#Ykj~nXV&dh#9rfz9Yq_M>lT(6PYeDj~#((yLxZ^B~BFQ0bHx?YsfcapT0DB7<)DATSGjuhKoS3u5N^ob3sku78-^%0hlkrCHw*!T z9%<}j*KKUyk-Iwx$%f{S)SRCmK}H+YxN$uH>^wXXTlepV>RXMbEcnpDM|hrmr~}lZ z*U3lAYYIMS@QT$@~A`)`k!PCG^-F;v7B3n>LJdZ~dnL?E5*#9f2d}oHqngN-^yKQ9?Av zZ4}@DGb6`k6rE!x(tchMD6@uWR$Vm%KwzsvlqmD*-rD3nNQpTm>Lig52q1mF`bv-; zpqn%Y6dB*&;%Nte6ha9>G7w;k1V|t%t3cxt1zJ?00!%9$I@bEeE`G`LFrn=~E-d?R zMtI+MKjz@lCN&VFc63D3Fdbg*#k@( z4H_;Q=|H6d7asGm_-RHAHdGX_R~bsAfyGiITWTeH`BSGpzrl7=KtBD>vhO~CKVKpi z;BvG)@Z5ZIVBS7B_%^+bc~{(!KJK!AuMU^yWsOAAUJYB5fH)CpLi29Zr5;G#I~9M^ z<-8`juPVe8Aab;im5+D@ojyhP=#^`ih^VayPe{^X0@JxI$fH!2cky3N;@H z+-WF45%^aXi^qv($HDO0@W|P0ISA`w(-}ix!c2bT!pweT!YqDd!YqF1n=p$X{wB=q zN7U=G1C4%Eg!1YK_QDyO`URCy VqXB;aeKY_7002ovPDHLkV1igdl&}B* diff --git a/graphics/pokemon/parasect/icon.png b/graphics/pokemon/parasect/icon.png index c6aaff12d702bcb696d4ad28da9d4bb66d1e60ed..27b8e098932cb01dc43e5ad5b3c40b8c3f88f186 100644 GIT binary patch delta 312 zcmV-80muG?1A+sP7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S07*naR7i>Klx+*c zAPj`diUuO&{{O$-MQu0h%V4m5YCcHeE@z7RY};Mm6C z5FqUc%r5|`fVdFkc#x7YaWG;QGm?vxJJ%M=0$cyP5;0(ZE|j_g>5?&%Na(9hj3bpC|6bpgBF=>S5twcUCa3|J4%-QsphjSD zTl2;6Is$W#sJq06kA)eLCqBlX4rnG^#s`!-=R*XS^D!pnD-(a{7sQXlAG(A-_y7O^ M07*qoM6N<$f?~UrBLDyZ diff --git a/graphics/pokemon/rapidash/icon.png b/graphics/pokemon/rapidash/icon.png index 92dae70a64c0d8911ff899508ecea3a5fdda41b3..a15a0a18a2071cf16601f0011371b49237184d64 100644 GIT binary patch delta 453 zcmV;$0XqJO1dard7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sj7da6R7i>Kl)-Yt zAPhvEAqQnZ+W-ICY9+A2vD039=~Rapvk!q}vfK9O0@ybD2&kEULwJBAJ9EYvh;+b| znK0=Te7zHx-ZASc@gqE_k<4+P-S{TpL(y>|69g*vcBMikD%B)(Y=LTAUj@vWM`2(b z0kv9X8lQ1l0*6e0H6$UP8k$S7)QD0`Db*2AUPMZp!~{xd#YjjA^aPM-o~AKTq`F99 z;?uQ;T$#eAuYp`Wcb6ofz1A(y0}~#$l(ve)2A}Mvc(_HE*1@* v{b9Qb5*ptm>ytmc+0&$Vf4Dc0U-E}9tPvv;er#0=00000NkvXXu0mjfnwHN2 delta 447 zcmV;w0YLta1c(HX7zqRe0001qplF?uE^6BHKi@dsO4;rhSWwS8C)FWO0q@dtff$a|J>)h@6OT>;O|xs z#Z>6(Y$^~$1)<9dYiO7jstlABD(sQw_LEt$US1|d>j$z1D{>OyE6#@c_5 zD=kQ7O30e>Rij8JDdonLhP=EU}}sS7ewej$*;&^q_|F0gi1tiGdt%;X+aHe;0c10a0PF3yWRg zRFYKyP3E%dx@3Ao8{Cbt0V4;(&?fXD!@OkN3U^?Dp{OriL6KWO3k)Z!8F(3hX?g?9 zxJzeX#u0pAOdB7Vzz%W-rW|TUU<@CH_0SfdmX9hQOf@hMhK~(%ZPR|>gS#tVS0f+Z p>5=UVl^1*<_hQS( diff --git a/graphics/pokemon/sandslash/icon.png b/graphics/pokemon/sandslash/icon.png index a1d72a1ba7cb5d5908ba16b215d57bd361baa682..18970df1555ddbd1c641c6d501a9eed6e61c0155 100644 GIT binary patch delta 374 zcmV-+0g3*t1Hc227#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SK1oDDR7i>Kl);X} zAPhtkkdV1}{{L^+12h8TWOsY$sg`J@%mmv|zvKAEJAq#$6h45!2eFq>GXSOB7$~W& zNT&hSHb8}$f+P^FRZ%Nc#ljn!UcqH*ki=fsDqUw0#pM9MwGftA(0><0SHXqWjPAN- zXjW0G8f;+SYBs}v*xywNay+ZAhtTTLEKXX0I$L#6fVPD@j><4l^9 z41L)F<2X+;kkQ+Ws0NF>=1Ekln=rch2e6ML%fRu(+h)s6@**5S1STFg^^zxcMLaV1iDV2R<}{Jn&%<=KhbxY99H(V*km9AAI>5 U^#NHlpa1{>07*qoM6N<$f`#Lw0uMebswRzi636$dbO)b3Sp^Dpi=qmPikUF`A88iHmCoMAVE zunrIgsB??MYdzW__qdPi*!G;KfC<&AmYIX0kb8rV^*FNrGaOGnLGi4tE zOtXl5aG+16_i<1%aiFE~ zKD;0i*Pv$h;RS7d=>4?uLA{_22U>n@eK7N@k8jj_=z%BYx^e&j002ovPDHLkV1ko> BplbjC diff --git a/graphics/pokemon/shellder/icon.png b/graphics/pokemon/shellder/icon.png index 8d74f82624c8a138908183308884952431f237a4..8ffeb3edfa95cf44487ddbfd4c8f2cf5cf4b5787 100644 GIT binary patch delta 263 zcmV+i0r>v60@4DI7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&`Cr=R7i>KQ(X^) zAPjTyfdt6<|NrfELo~-Y?(IGj7bTMxXw`1pT|ZaA*_`bYUP_y1)7!u(@a62JOc|<> zT19~A9#Eo$IaGl6h*!sJC+R@ouIiVOIAByk1*T6ZkjwcHWCFWVB`J2wRHPAfhn-SJ z1*WDGbq88R5GnnLU(bC*yJ9vpTNux3sMQdVrJLTkee>XR7fh14Q5_t7MwxNE;aamX$0^dfEE8!m)3z#I;`zchj{(7 m4)sxoc>R+OaUn+?eqA5UCd2+*X_OZL0000KltB)K zFbG6V3X2B9-2b*8S`#a6{VR8}F=3vxD9mwuu?^slPLBjYM2P1aLlqHbz=$&tuRtIz z*dqam6slK1lwl@hy|lLjsgSHYP;i!yYY5H2shdaW8HjAx3$wXy=?YyIMTrJ1>jMxv z-%f}x29=SZ5r8*;1?WH!-2v~)FQpw(CCY#+Y5}Nvhcp2}XfI)<7EF2rBBdr?OY#*u z(X#zhVbWWpF((#3s>7>U@foQe0qjN&4X}raMANtOv7gj0mhqlHw9JD)Tori<~ delta 307 zcmV-30nGk_1N{P!7zqRe0001qplF?uEW*S z@V)tvvO0?hbW-B9gvHWKD4<^=<=rn0uIF#s{x>dwAB_=))$ zgGDTjDHZ^>#f+#36MiqWnN}WOGlb7Pw@HMM=Vcmc|9DP%0lfZ%zf(W-gPYWkQHR)% zQHQ74k5Px%k4XpmrUR~ZNc_0y5ON=Ni4MV!s}BFhk1y*92zSmY-+2H4002ovPDHLk FV1n(pkwE|e diff --git a/graphics/pokemon/tauros/icon.png b/graphics/pokemon/tauros/icon.png index 08975b0bcedd9bfada576131ab88bf1dc730800b..de4bdd330d435f7d221310649a61c4b74b9f2a4f 100644 GIT binary patch delta 340 zcmV-a0jvJB1D*qr7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S97#k$R7i>Kl);k3 zAP7X`C~&j?|8Ex@ErT#QZ0%*MhC>eF0TR=FUElb10Q;E(4fBx|V-}|kfbx2`zi=d0 zT4NF(sEVNXZuyFL3*3gF5}}g_3?QSAV}huQ1qREwO`eN&(FW2<10oz&z-Yj|R%)JJVR)PFk6ss6-ay!sIx#;M=_ zTfjMtS3ghnJ0m>QFF`$C{n0?Y`V)U}>d*aQtDiX);8uS#?hhAm%V!b=uLFGY2XhcS m_=7dghwnoy?gQYsKaC$Ip%hSF?r+op00007zqRe0001qplF?uE5dr5Pcp!;_Y5?0TE z)6Ds2itl{_j6olZkg+krIw(Jd)l9qJ9GiCgLfA~Zp(>Fa>4d=r18@{J$o6~=x z9pdqE*CGLk^38YBq9U*>HmYiK0xjmU3Z*2_pmaP?jU0;rSDZH*2sGu#6~qMm2Z3T! zvk)8JP{nJ%5G;Z3yiS&2^*e8Cfm_8UoDAwWMhHy?!B%&r2)ASqMA-?eFw$huvb3ddp3mqVKY$c4p^k4e%1HrSa$7<9mbpQYW07*qo IM6N<$g6;&Ry#N3J diff --git a/graphics/pokemon/tentacool/icon.png b/graphics/pokemon/tentacool/icon.png index 5870f50b8ec9a40b8028accc708279f61ae62ee6..64a9ef364532259daefb064464b3ce3eea6c9226 100644 GIT binary patch delta 285 zcmV+&0pkAS0_Xye7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S=1D|BR7i>Kl*tOi zFbqV!fRGnF|Npm@RX3zTwl6I`G$spV9wXUg6;qvilT}{kMxi>_loCTOgFs6nBXT!; zBZecusm9ogyaVujAq*nvL0=7o@V+-DPtkn?Ut3VILk&X9ZMHbRqWR@7p#`@@u#f6g zE`-q5|6Uk7UzlwA`1f_E`^V`%h)KFn#3bDZFiZEdX^|%B)&YW7W?@8Ehl5|mALpa7 jEUtb#VmBV#XUD?>{(}_$QAcD~00000NkvXXu0mjf7h`%= delta 281 zcmV+!0p|Yb0^F$%&!5X=vjyx`y-pbyaZ zq_FW9a>7Ac1#1y4ECfGblj0yx$z6nyh-5uuVm8~@2DdqGnAu%sHV8&uXxV?C4G_30 zGvGW9CXJR9c$(ru0Z^uxMMMK9y^0nDs24hoj+Q7&qaWvO%qao3C&4qywC^0aOM{)k+`~=tSx=)ip&IirPAheb4v6S_}>GN@h{urpz_S zWyVBu%0%4gQPh8=-)v6PZzweV2B7Ktg8@g=chaASf4&VM48`yqu-OQH-$#zfD00F$ fxnuw^Nn0<;2)MMuG%&CL0000Kl--WR zAP9x4CI&6xy#Lz{PKV*=M&I!dK^!D5r8gykTbwccL>g`a;de_mOyR# znd&A9Af}T6XRX2$0%{3zt`=FC2Lg;MK{g`g%*1^sAOlDP`3mM4V2}tE2Ws_fJy4X8 zWL2=!?GVJ04bb*~vFfc2(=D`@RTtvol6C4Iq`wIu2&hoe(9I#}E8-hKj1mJ-5>m45 z2r&+Nu%(yfx^Ex8I-=NOFD~#3(l@EqE7>i~R?8Z|oliZ!GqAfA{)o|Dk+A6fE}NxPP$!L>xcBul;BH z+L7G;y4&rK+28)EU3xpVeLr>H%g3=jzW6h|0Np|%9Hgt1DF6Tf07*qoM6N<$f`zcA A9{>OV delta 358 zcmV-s0h#`+1F!>-7zqRe0001qplF?uE1pw6o!2R;T*uBK7cb6 zI&{fxG-UBLYzTO5LLoyT6bI6+LrFU$FR! z&D~^@>rl}Nuz1to4X*(m4^9EIkr3kV;I3J;F%Yk%Yt)T5I%Tn_vN%BGmm5 zZAA=XqhfRl3Jel*Z@5f-Xt|rX-1AcJb#U8nbpV~|(6gIqb%^}-TOHiQ1YQTX`~fMe zL+JddkKm{S`E64T@roGmfE{!oMRDD!jFCEPnf)opH;7ChcY&$GX8-^I07*qoM6N<$ Ef|aKl*4>1X=v{g)Njl&my7EC{#@nPZD@1$05ShA=ur)9(mLFHz z>~+FY2pd?yhJiYDQFH-s*cJ18rz{1hP)f`?%zW>K;+C`x4G8oXr9k+*I;QJPO`V%SXx;=)}VqJHv#(@XGJ=b$`qSV{^f* zQiy{0%?|l0UMqIDFpLp0)Yb#0x23#fe8MC4nGWm6b8u*fm8;e h;fG?wKIR0XJOFJ54y7i`LJ9x?002ovPDHLkV1imZc4Ytn delta 271 zcmV+q0r39j0@?zQ7zqRe0001qplF?uEtfb+sMOKTH~Ja+d4*cX63{l|Gg0up7DXHcG21=d`^a#F_~|G6z?wHe!c&0Q0TO|F z77SW|4c!D>1FYzfORznrbYkRkt*LO{Ll#$55X~SPhpZr)NF72}5K^mQ2Lu>3V(Ds4d8ZQtT zC)3GwlEX002ovPDHLkV1h1Ud5Hi3 diff --git a/graphics/pokemon/vileplume/icon.png b/graphics/pokemon/vileplume/icon.png index a3cb2b0b59a050075baa9bf7fcb1d65c6edd5092..3dcf11ce3912894ffc6924c219ac0521c7b60985 100644 GIT binary patch delta 318 zcmV-E0m1%{1Be5V7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S21!IgR7i>KR9z2* zAPgfx793{#|Nr(nP@{ZZa=F~g*#{)FbZ*f)_n?Iqj7d&JiKV9j>3t#zK_vOawL~ca z;F*J9?>*lX%FF^RO9;ziJK~!{K{Jd^f*s7T-YvYHT9Hy9aa)2jAw|f(DuI&TB(h%z z=x#yzkcAIW-KUy=hIS!!$7!RC^I=mg81b8cq>%u=+a|X36}qnAGGbhN7I-l!0zA43 zXkxw}11;oG{dg7*< Qi~s-t07*qoM6N<$f&wy$Pyhe` delta 325 zcmV-L0lNN(1CIlc7zqRe0001qplF?uEbEG@rFn!5fevSI2SWx4lC5|Ud5Ka8PPrHgCTR;-BVF4f? zqCZv4+)mo!S{~W;tK?=zl^hh2sr3t9WmRll??{x+Qlj~z6=)?Xr9zPvM6A@BvMPVU z(Na`Nqm+#8M2B&)Q5O<1x0X3#iG4i`*|@{J7ju_P@F~dN0l>oR#SU(LL9jl4*5EAX zrPjK>bAo7JwchEa_sB`tu-9&c@At4^F9rbfdAh>h<>xS8g@S0K|5?G(g#pG};hOB00000NkvXXu0mjfn=P5M diff --git a/graphics/pokemon/voltorb/icon.png b/graphics/pokemon/voltorb/icon.png index 551dbf281c4b9ff65c99f66baf812fdd2050fc82..f0113355b0b81df695a1c5886fb6b1819baa5a22 100644 GIT binary patch delta 169 zcmV;a09OCz0rUZo7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sa!Eu%R7i>KlR*l= zFbD*Tf(HY;|Nm_@>7@{JEfnWEV~~VgSMysK9JTxKI-!r@X68jfdjhk4!I)isA5ahq zbwTCyKoxifgycEfASaco;bp%B)&eMeEFnlliXaMAk=o}~Pknxkqi&iv{k!{jf6fg# XdkVt@hYAh=00008NkvXXu0mjfdtpLU delta 155 zcmV;M0A&C40pDE8T__^_t9PYk zeLxcU1{6rkM;6Fhh9bbPmzI~7mWI&7Z=d!o?-{bd`n30t((;f5o~79vr#(Wl=HIil zw0HVQwtUum_f82}fZy0iNeS6u4F8ps&^?339|dS&H1=r-0B5;bM>N2xnE(I)07(Z$ JPDHLkV1jQwM4RM~FC zFbK5bNM>UP{{L^w5wF2<(@K4)v`DK>V1hZulhQ{Tzz^})t3y2W{mgMT=urRJF9DoO zo{4CEg!zeDtBUc)?-H=TS{c#;f-16K-4Ye65rCJQ0UG6Bj)?AV)N-b*Pp(9XTW-ma zIgZ!?)|ddYoUf&SNVtyp3ux2NvwSMeU>;rQ@L)U7%7)sYLXfWU7=Z9RkK@RAFba7} zd;s{NllT$0%sFu9sZ@f#70X1WGyzouu#wxAj7(7D9wmw8b@Sg`MuY~y|nqg(}mb8ti--w-XFxQ7=lGoQGi}`Tb+7Ls z`Hg@B_s#i%Ll`~W05I(aI#bsP)Jz<_FgZG;bQci4z5gp9J^r1548U4ItcPa-;d}Kg zAd=!qKvW*?0+QnOSO`d@%tAoo{{A8$rUza?IN?OXARwdnJK$o>f~6DXCV^Pokm33Q YI8-JoNgC1(*Z=?k07*qoM6N<$f)v8cTmS$7 delta 420 zcmV;V0bBm}1MLHl7zqRe0001qplF?uEKb05eFQ8#WaJd@l{&SXQx~N}BE=FtADEDI=n%z&1;60<@8^TDYku-< z&efSxDpicjcrglm5OKU5)Zw2CxK8+Ni*QWz*1K5Ii@tH*R<;RqVR{^E0H~wT;<$gQ zz``o->2VDG2Y5H#Ie}+-g`&z{3Zf!j*b@*Sf8&htBcA zzk2?9d%1fx-@Yc-SVMQ+O>1VR#{J}c_ozE*AJ9CRCu zO7XCp+q(7I$21Es{M0e&$9S=_m^y!%Vy47=j5&qOGGV-#kZrCM?CRg2Gs2Z;YB~5U zmxCfn=EMg@sDfq5qEM=150dtcO(HNv3~_V|8I-{ O0000 Date: Sat, 1 Apr 2023 07:34:59 +0200 Subject: [PATCH 084/129] Forgot to fix Venusaur --- graphics/pokemon/venusaur/icon.png | Bin 493 -> 489 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/venusaur/icon.png b/graphics/pokemon/venusaur/icon.png index c841ddde4fe57b5833b98dbe10868839264c683b..ce3b2290ac95bbb4a77df21b7ad9513739f06424 100644 GIT binary patch delta 415 zcmV;Q0bu^^1L*^h7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SXGugsR7i>Kl;Mtp zAP|JR6@pC{=KbIHW&o{J+T7*Rf8D56W*jz1zsu!YlLDXO1r)nN^rTea%p}96UN|M$r5# zaMMbJVKs0!loCUKFv`@K_SED3jueqc0aOEV{dZ-h)+qmuYv^VAo@bh*-E5`X$KR6eDU)~zt?fP&1y08IczLxrT z3LvitQu)yVG9yUk#{(c|f}nxn4L~pgBn^9R0+4h92%6pjLV}zCLLpUvlx>GT933DU zy;1)pK=2WOU<#1(FMybrkq^%RIrCuz$b=6^fV|?v{(1h)haU-yCp!A$RptNy002ov JPDHLkV1mvdzz6^U delta 420 zcmV;V0bBm*1MLHl7zqRe0001qplF?uENVj`1Gcmbn> zYZnu`mNY4IALFplj<6W#F8T~k4z~$$?oAo%(!s$=QmMHOCSZT>1qyW1PR6_O@t%ejD&5SI6Xtv z=xl2kIbe&ya4=E<7H-Xq@jTiL98(5nj3Hw)%6YVLk`gdJe;jkpBh_>_XY3)&_=3kV zS3UDL3DU0ozXvajg;z5kcNXWD#pHh%^E1X}1vjh70o5*l;!(XH0LcgE?Ip{~Zubyq zfc7sAq%iGKK|$*J4bcOV!cb5@FQt_dh8p0}p)h(SOzBihm=Z`~Y}rr>L!uT2zKc7x z+9INa0jBRq3WH;WK_g83gD{ Date: Sat, 1 Apr 2023 07:35:18 +0200 Subject: [PATCH 085/129] Fix gen 2 icons --- graphics/pokemon/aipom/icon.png | Bin 380 -> 407 bytes graphics/pokemon/ariados/icon.png | Bin 389 -> 421 bytes graphics/pokemon/azumarill/icon.png | Bin 417 -> 419 bytes graphics/pokemon/chikorita/icon.png | Bin 314 -> 326 bytes graphics/pokemon/corsola/icon.png | Bin 315 -> 346 bytes graphics/pokemon/crobat/icon.png | Bin 391 -> 404 bytes graphics/pokemon/donphan/icon.png | Bin 479 -> 401 bytes graphics/pokemon/entei/icon.png | Bin 488 -> 461 bytes graphics/pokemon/espeon/icon.png | Bin 348 -> 382 bytes graphics/pokemon/feraligatr/icon.png | Bin 469 -> 492 bytes graphics/pokemon/hitmontop/icon.png | Bin 473 -> 463 bytes graphics/pokemon/ho_oh/icon.png | Bin 558 -> 539 bytes graphics/pokemon/hoppip/icon.png | Bin 342 -> 366 bytes graphics/pokemon/kingdra/icon.png | Bin 402 -> 349 bytes graphics/pokemon/lugia/icon.png | Bin 517 -> 523 bytes graphics/pokemon/meganium/icon.png | Bin 431 -> 425 bytes graphics/pokemon/pichu/icon.png | Bin 266 -> 288 bytes graphics/pokemon/politoed/icon.png | Bin 399 -> 398 bytes graphics/pokemon/raikou/icon.png | Bin 572 -> 489 bytes graphics/pokemon/sentret/icon.png | Bin 320 -> 336 bytes graphics/pokemon/slowking/icon.png | Bin 401 -> 402 bytes graphics/pokemon/steelix/icon.png | Bin 442 -> 483 bytes graphics/pokemon/suicune/icon.png | Bin 538 -> 533 bytes graphics/pokemon/typhlosion/icon.png | Bin 441 -> 446 bytes graphics/pokemon/tyranitar/icon.png | Bin 458 -> 431 bytes 25 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/aipom/icon.png b/graphics/pokemon/aipom/icon.png index 43822f098048c30c6d76abcbe6506c6ca28f80a9..294ab74eb43d491423a0017e5a39e4e63d0ead98 100644 GIT binary patch delta 333 zcmV-T0kZ!50+$1j7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S6-h)vR7i>Kl)-Mq zFbG7WbZfa}9 zv=Y>#Yk^>`HUV}POmz?pk|&^|p;x360GTlnn@Ru@0JkA<5+MSy3J1W<9>_O9q6i6i zNB~PRZNy`Z;82KvllNW4gE-z_PuGO~J94k_6b9b=sWbGO76YBOGv<131ZDv2slgFV z=r{pzuh++ZZ3ox?ygeB24%MgrO8rawUx;r10qFK0fNuW*==PsJwAud{ywU7`WJv8P zb=tr3AqMR!b=rUJ5-R5yJtUU>-3wr0-%_OPugm;Mjl3@`5y_YKe`Ukvr=`NQ|J!qO f$+ipe1Nra;Y!4V2<&_w<00000NkvXXu0mjfnZ}rj delta 306 zcmV-20nPrG1N;Jz7zqRe0001qplF?uEb>!3;^{5KBkK^^>JMs z7>I^0;gY_ihygyp0{nJryhu+F?ZE_F0QcUEOrbczBdKsK zd*HRuRZmtO`cLtzI;0#?hYX?)8AKg2h&trDQHMO4r~~*Undl&!ffmW`Iv5!~qmIgm z4x@nW&P5Kl);X} zAPhvSf(cwa|Npl;4oM1&DN?ms^$;JDsxz6G7~bP?*C&OQE(^!nkmKn9JTG#_A&VPE zgTg9%x@AH%rKI^x8seF(s^aQm(Ho$V@koP%;p$x20b)D)9Y78~ zOaTI;1`dFD4YU9;J`ATqI)IFh4j`2eGk|z}=mB!^p*`L@4L~M*cmc%a15f@15SI_+ t#|03d52!g6AX7eE1exuMb6tPThad8=7f>!Itjqua002ovPDHLkV1m}^lIQ>c delta 315 zcmV-B0mS~L1BC;S7zqRe0001qplF?uE3G@Oo^q|uBZN_ahf;=1Pc;)^RGM0clx5}j~@yHt-cHF z-MJ55Pg`H@J0JPvHQ-_tJ z%Pi^?BO*Bk(SFfAwNa5b+>e&_VbA~d`~nzK0hrFm3=FMGbYKvGNsAGTc3@;Z2V-n9 z12g#;!1O*`;K2AkdN7`k*B*@LV~-~@7|#cFMF@PvDp(0V+tC+3-T^ZE%8iZ4)c^nh N002ovPDHLkV1nsWk$3KmBEg~ zAPhtimLe;)Jpcc<#RO6eF}>_zrCm!^5i>D1bzW2YV*$*INf$v|aNyv}aXVMXVG87k z4X-Z-In3}nf*LFZ`azL_u}ffmi0%?djkp3b)hy9XS_X<8MLti#U~s<)Y5}LTK$@-` ztRy5d7~txy1`DcxUwRpMXb9zS6U&FW9l^d~Wg^pK0^?OTeDR zl7Vr_xs+(?GMcv4bX(5{d`#g;-tFjK|Bs)Gh%kLWAdC$$wuGs#%oZSMg!#Pyu_@jG z#NNX#K&oK?$Vw0g5Pcv>8UUhC1W67cJ%J<02oOatY^d`%1CZSJ{a_3L$@ia=zbX%q rg&@EHkY|FV1`yd0#2!=q0+1=*kN_D%rCf2*00000NkvXXu0mjf5d)8j delta 343 zcmV-d0jU0?1EB+u7zqRe0001qplF?uEVlBg0~4OaM0!$u|86k|fCEJV(Y82>a0mi;+uHUZEk6Bw(>49@B(BRQLDMyzK8xd$ z<+j^t%>?TVBjYU*^OB5N>#JhQ(lcYRe5s52w^a}{FFPk_LM{n{9xGsY|Led2Rls;t z0pm>shT<()fswO?)E9smrDsak5tu_6sUZpxn2{7jf+8@F^T%}j5txVhEeQ!2Mav8h pzyR=?R)9GZFl1ZAml~KK>l%Q67#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S#7RU!R7i>Kl+6;t zFbISb`RTz4y#L#ZNv%C((ea>mrhDBl6w+OkB~D8tNO%i?77_?(^w1WH&wx2%h|#9lbQI??L||gm5~hK$_N$%( z_j_1>1pqE}wJU*IF5LsEl0Aq@$y*piP3=>Erg!!qEq8hB|L1;rQNIUB*5L?{#Q$P| zfW6uR1Wd9E5EKwwfXoA8A0YGFc6kQK95`-1+yIf(3zGOF4`BcR002ovPDHLkV1gwP BY#jgq delta 239 zcmViY;P)?An z6;eIYE{Rt*j>b{o1at(16h=Y_L%%a3F@QHe+26ALmHPS6@hbB`gCK#3S}ZWsiJnJ) zjzYnWgOCi&j19WkJ1fABH;XNT1Fx0>cs@1`$J`CGKTRsyrYWWe+0i;r1R!u)1;Jab zPI(1D$9g@8WmF}vq10@y{yAbSa_YnZG*R(gancN0k!w?&Fd0S`d}tVa+{-W?=DZEl pgKjnqU8ag`7+fY~!vOfYKb}}9V72%=#>4;s002ovPDHLkV1nWtV|V}n diff --git a/graphics/pokemon/corsola/icon.png b/graphics/pokemon/corsola/icon.png index 9fb51a0b146038411c78300dc5d07de33ba9d74f..e5ebe6c08d6adf125e0e9ee9cbca9637b13c16a7 100644 GIT binary patch delta 271 zcmV+q0r3920@?zQ7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S*hxe|R7i>KR6z>E zFbr!5^k4_;|G%A_l(uV}48{%{s}Ai!ilsQ9Wx4Tb;1#c!N&q#PDWIYUA1NW)6m&u! zC+0)nR4r0UkbrwyeLVL-!D!dCw?YJqqM#(0TH^5(PN=VBDE=G2J7W9i zF*p7J-_kG*!-i=EGH94nfeaevTp-o0Pk9uGEAsPx@B$f<+n7231|CZz V6_bnuHY5N5002ovPDHLkV1kn2aM}O> delta 240 zcmVr9LId5U(y?0GCRw=Eu)i(wbrLkx!LqbQpc5(D^Oq=t`Zy*XY-i^^u#Y$k} z1}3S7q6{MIVxL4HMeUJ|aCr#RQXbJ!05Nj$k55Y}Sw9>vFnc?0J%(wfVA$Ge-;Br^@Z)o+04{&P zwgGSNuQU5`=Lom^hZp=BD&^=t?+~T&i6J7MJARP27k6YVsquKV%t!&N0@7^VWByBk zrq23WMg1->>UVkE)UT2JlGU#vry;A~4X{&IzYgWoRMcO01ms73YIYFJ>a(wgG1(5u zq~7lT&UU~nk*~{S+aePU{r=ZE?I$Gt!g5JSPpO%|VWJQ9tM~@rL&kZ+e=Xqv0000< KMNUMnLSTZAl#Kl)(~% zAPhtWE;%^a|Nq-&69iGQGo7|4_oU>JkihJ+Jo-p5-G()1oiZM#Gz|!9T4=I>6G++# zUt(G$iU?E(f=IILf#@dei=?Q|ogOm{gw;nSJS^)f7=czi!W0fgh*&)3gtZbCfOkTK zVec{!i4-V^?h*BW8zO=VlfhFn6~enzsmdf`snX^ z9HcwQ`Yi{Mdk1lUc;g_=A0`gc`#d>_xPy#M>>b4Y0hj(J!1%R4bO)LGLvxV1Kjh!| Z!wa`uAvdSamec?M002ovPDHLkV1fesk*ELw delta 406 zcmV;H0crk`1K$IX7zqRe0001qplF?uEb>!3`KndK{EYLU}rNCS&$QIq6D(&kjZ(>U?%{6pUE%)sD9?;KgA()$t8_gZKCY%ZVXEqMA*b0 zU>LvZYl)?|$MZ?{wp>1R9%JM2b0vxSrnu&p8snSz@vs6<}Y zG0{|sAUWy$S*jm|_ncrH;>C>>%-J}f{iq6w zZWC`>fJ+891qpdWB+d<}Q3s5W*rSgOgJeH!0Ei<<@gp9L=XAJVvPl`JFl&E^)(v8- zADFrCE&N!1{D`~s;zw3UR(|CFVC~2D7k+#LH-8%dYcN+j00000NkvXXu0jG}g1yVS A$p8QV diff --git a/graphics/pokemon/entei/icon.png b/graphics/pokemon/entei/icon.png index b7707797f0cb9261e12a1af310cac50f0e75d636..eeb80f46047d49d661461cd800c4b0e3bec4d48b 100644 GIT binary patch delta 387 zcmV-}0et@G1I+`F7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SOG!jQR7i>Kl-;g_ zFbsp2R4SB<`2F8@ZrVZ#Fddz1Dv&1Gb$&Fy&*wei0QGrPKPbS~OgBENrC{5jNU1&- zeJy1L=u0Un-w=YTmr_ldROzq~0$117pvu?0%49*Rs@ldbD4Q~ft>Dm^D@f)JG5%(T z>SWMG{eHDT#Dp1tbDz+hd7%~nB{2~TF91?eY h02T~@ynOfvAHGXM9ABY#P;3AI002ovPDHLkV1k>1t#kkY delta 415 zcmV;Q0bu^k1Ly;g7zqRe0001qplF?uEn= zu!N^B5f8ujC5VnJso{t?8qYJVEQ?j5M$xHvX!KHuar?}bD=V_ce{Tv zh~n*Y%8ScZI;0bvSDSyNVsR#yU zP_;Dn?4Fmgm|zN!^OU_+Fc)^ad?tTbdj22&?9<55G2sKnjVj#6xk9wWw1du)IiOf`!_iCbV?)O9?CZzKR6!2J zAPDTHo^}ZQ|F;Y1c13Btbdw&+p=q1}M%3B1CoT?I;aD&P6GOs+yn2FRLL`yU7^0z& z5XX{Mq9uB&lR^o0L7^=Zd9PMC^NCx;KMZ6bOa?L&qJd1L(Lm}Y?yHUl;xFyoK-w#mV+(_U zh&w=6U@(xH8WfBMk_;*sNcJ?Nfn>A1)IiSsL3P~HA3i!0Dj5Vsq)-(|K3c+s$S6cJQBMEARvw-nLm0`#o zuu~629yrgyNG#`@hd#M!xEyHc_Qr^tIsmW3flgigmU#lgoqEepjicE@=(x9x8n}G~ zBPU3Lt|X4P^y6K)y+9RRAU3UnMYY&E;B49GQg9=$wh+9y>9x%?XIw0?-!4tfzt#u9 zl&Zi~Ap=vT0!%bZQUykJ4NSmUsK9_rKd%B4<7A5hObeEPY4Hj$E$X|#Ecwv!yL`L= X&Ar$}EUn=}00000NkvXXu0mjf$&q}P diff --git a/graphics/pokemon/feraligatr/icon.png b/graphics/pokemon/feraligatr/icon.png index 2fe3556a84094255dacedc86769420f89d31c720..74aca6aea47a50f18c8729bcb8e37dec026c5b5b 100644 GIT binary patch delta 419 zcmV;U0bKso1MCBk7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SYDq*vR7i>Klu>Vk zFbsq%45?IX-~a!&J3BzrCd)KwPuuc<5O>(l1-{$ucP)IS@0feA7nIX6a?;?{fUNc| z!wVN`uf6n!J@n#;TQ8p(T=gt9bWo=w4TBOMdRSmKG^m@poQ{F6rh1ok4F|drAZDVt z>$a`RTla_+Z2=K~zA9@PY9l;@jhHx}DD^EQ7E!~sS#Th-8V2a83Yl+A?=S=O$@t-WB3g3Xu)FRkIQ#Uxw?7f1y67DgB>3^563@jgvD zn8L9W?e!%#!@YX8>c2Ypf(2Nqn{&*8Bh!zQ${sTL#sT4fUgtkSf8u{-{R1QoKLwEb z!A}4ZggF56LXZO>DlI_TWD_8&k0i_!Af*KeWvPU@0K(id+6s{E5%1@Jc>?4lNCn76 zmwA}yz delta 395 zcmV;60d)TC1JwhN7zqRe0001qplF?uEj?ft9zR&(INut`}#hV2TroR-K$+6_F($hn*0s^~8b@-tyPUcNhOW@3#(d zgIXykh@#87I@E!xZ5bX}a49Lwcd7y#t-@RdCvYo;;4R#W6n7Ea4x}bn@nzKmhZz1V|-T{2X2`iL$ zDn#~4R}JtY<)zRSR{}`~z_Y1rMQ&Ep6SqYy_az?!bFYvPce5E6Y77d9S53q1dTkcG z=st;EW+D!>kYJY~Zzo)4S!pXgB)WH*gze?eN8fi|1JV22^RK{w3uX=m4C#k6V75IN zRaI&L18W)>FcllXz@rvqz*HgjU~bo1P!FcadoV`O0LB2(&qKNq%r}q$jIY6r>$DCS pGSOfh9|u}q`oLxG_(1%rk1uw;NuW8Js+a%(002ovPDHLkV1i}>uH^s# diff --git a/graphics/pokemon/hitmontop/icon.png b/graphics/pokemon/hitmontop/icon.png index a2af3bd2484a06eacafced25d2941540a84f1751..7f8d63f91561d6e163204d912b3c7cfdaea7c560 100644 GIT binary patch delta 389 zcmV;00eb$~1J47H7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SO-V#SR7i>KmF>>M zAP9w*8sLWs-2dGUP^(sKw>R(4nQZCGk&o8%?DhJs|6lSHPp3k31%eFHqztf1B%_>{ z830y=P)otAlC+jlh2In;Ris5B?1?oKX_28*zZARAs0t$gISiGFGLwcG2{N?6p1d31fJsH5{=^4EHb)Ezv8nazL|I7BGKo3d-4Py59UMsw?0{4*gy7v zxBtffgZ(%D9~`sue+R_I{|yj}|Ic^@gxPoWf8SpLQ8{yD8C!d7fZ)sCMi2*tI7?=K zH-dPPfDnx!1rQ4%PJ&Eju)}%86kr9|F zlzc%V!v!LW5CA{cJHyj3720qS^DqvVa9*9)E>V|t1mbF{zs7v4=WiW=d_L(Ab%(^S zcG3X~mMqAm1E}J~H;rq9wE6IYfE;_*Sp>}nmH=uB09I_2=mZdfRq0x_%j?&BEqm(g zMUd~;ZK45#APr+B8S;X3aZ?zPqQrUEKzGDVhPbr2Uj=SaDKv`?+6iJ2cP97%B6hx< t3t}pMtb#!fF?_@6e2_4-mxBDmj~|*$*qLG?0=)nL002ovPDHLkV1k~jw%h;! diff --git a/graphics/pokemon/ho_oh/icon.png b/graphics/pokemon/ho_oh/icon.png index 7a7ce8af61360888a36885de5b855797a87c890f..315683cc5e8ef1b1d46983b419bc998ef7fcad88 100644 GIT binary patch delta 466 zcmV;@0WJQn1e*kq7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SnMp)JR7i>4l-+K_ zAPhze&WenLzxRLJ+585Ql3i>!ORH3sPrewEt+XBAW--T?)Yn*0R;l0Y-2P zknjbr<<$47EkD33kV^b|y>+1*qxDn*NUx969kk03L{cE#_~i4tXF!*ZR(L7;DRn*av%h-QBUvKw_i)U;;5 zzM_3X;7C>fVZR}v4FHX(`gi-60f4T5wZGQ~Q1#FDn>5RSK-WJ57=n()H~q(am<2!U zU&_mXSoF6s{CU94`X{fK&jV)FAD8;1|7!nL|LgEC=l`q!H|laC8>S6{^Z)<=07*qo IM6N<$f|fGg0RR91 delta 485 zcmV-7zqRe0001qplF?uE5I0D+i!~oqf=ROrc2`BSnU_16w zqeRpX^};IHj&?q!)%b^n>%nkr_!_m^@p*z-)DQ4G3BXGZANp%du(}Bdwc5*iKrJ#@Bt1RM;qKE*^h$Um~Ppr_IL9;}v- z_AZcJeprl0Nh95VNC2b}|7HF3MK0cvK}`Z)J#Q4A<)q~RSLQ_X0F^n?*fGWgXd@7Q zuuT&Q7sM;CPzNARgD?cReWuvuXzJJ|5yn7kjXDJ8!Wp9vRrJB*Iz(ercMMTYOc%Hg zkv$$U6h;+4;5yi`55geeIz;@Ns`0&I9W`6pHR7i>Kl(7zj zFbqT)65C?%{r}(Amw;Lt2bK<~!b2tG=R2p6Tb8GOT40?5RpcCyDxVsI9z@<6(TwLK z5);(eY4WAuTccD?0fp^hCu#)I-C}y&c_YB-0LL@I=+cjq9vKSS$B%pdm%xmSn^_9L zR_oXtXV=jQWv71I7SiJRh19}dOJ4nlvmNmH@3C2?d#N=M=0fNM#U0(D6k^I0=Yx#AX q0Ll7?0Lc4icOi+f!*^);sUa)~|o^r)je6hlAOz!DKdos;6WTl8zE^WM71- ziolw(cuQ*K;AYCD7Sql_xVP`Bz_p@MyTuHSrqGs>Idq(}zlu)oJ$pQ+GaL|c=md8N zXBMMw%L4X(+7Qz1AY?o=W1 z&fyj;;4$zC_s9=SBh8s-nGloZ&()0#k<%r56V2ZNp@vT!msB~j36;|C)$u2vs46t( zx$aw!+9WGXLnKmikWH$ZBBnBvLA6yIice^5ab0Z?!qQs$BOW)20tYLDYXm#K8$BgZ z1CK6e%m4NDs`L*CYx+meLr*__9`^L}=i#6JjTL6&^w-g-_|tU1E&e)MiHiR?-uS@$ Z-vQg=6O3ITXTAUc002ovPDHLkV1j2>ddL6( delta 329 zcmV-P0k;0#0+Iue7zqRe0001qplF?uErQ$b3^KoFcC^dHs-2!{bz>g>tDI`&wx53Fd$vMv@&~9;;F%4L(w#*8oZhwvqt8MjSS=WD< z;e^4!Cj~_49!^4>9~pY8v!UQtV%2ZX_}n$R;*>jEUDXS|6IiZFDtV9RWf|m#Ui-!f zK&^>V5r*_7{sW+iQM($0Vp5Y!>xnFig?aEo0e5MTQ}K8digbZ^!+VU_?Re%0tNW^( z32HlkjdNEh?39Kn9$$AMO4u)QV3#$6_uI$IDDocbej~2`yErsD4hOk3h>9?=R0PN$ b^aFeVBNn46KRlAbJ zAPh@P6)GUtWvg^dN*N6kg%6 zuYBlO5vt8%gHxZzihy!%2(qtk?SvK??6U<8mY?F9SzCu%Y8`TP5iIl21uNW>QoZV# zQ77oXi=!|^HKz`Lz5++zGN%qE!&$;~l2@iiVqnLsoLE)P4R=8T(i9NrLjh3g7T_10p^86!r?$2_GlSAGV~+p77zbNv!UuNmM;X z+T3!flT~b`9~!4r6MF_6!54`r$eS5o@c;3P0j%qY{v?@yy=Uw=y1T>P6F#}y?L9H> z?zZPC-}#5T@3wik`S|F)lBW#mQZF! zI3?VD7MeBSZp`kUB>KCa+>Oi_-`U-RkQ+*Jcbc@06l%@gXmK_tNAnr(ZvDjnD7n`) so_vXA&^mfO$KkD_g+PB|W&uq7hWt+lb=fG%l&Wf6b`L^d1@|_*?M9!% zSbP(G8q0H{uSQN2eKnBG^i_;{PXB|8G|uU-8E?ue^fl8rz*ywLdK+cc4mG9(kkH?{ zu@5|0Nc7tzkaWO6-=@wWkq7!Z2}59_KL{Q!Wn%i)$)-0&5}3Z-avpBNGWjUuY-R0O mAd_1zI#Vu-Ae46{!ht_m3gfJY!Qd7E0000R7i={l);X} zAPhvS7z`!K%>V!G+N7z9V$#FzN-c+6{J>+9yxZ-o7Wt;$8m}NWD|ToO?9g@nDgoJW z86mZM(ll=YZAop-CZX4pA(E$fn;?;=xzAgi|eX-hjJODoc`IMEFdkgr$dag^Mje%AwbON-E+}b1K zsfFF)R!Z4=Mym%I5~>Fj5#$h1h}}^Ftd0oCM!*Ni;If0A(gTl{lB`~dK-8IoZVL<#@^002ovPDHLkV1meqnVSFr delta 357 zcmV-r0h<1)1Fr*+7zqRe0001qplF?uE;SA;`<5U&b{!0muP9ryj(+p}quw_oR7A71dcG-FJUY{qOCB*kF7Aok4S*9?*wu4cRzjr`qtGUiV$N200000NkvXXu0mjf DX!WE< diff --git a/graphics/pokemon/pichu/icon.png b/graphics/pokemon/pichu/icon.png index 5e3de4b990dd7ebd579fc7e16967388d62b3ed2b..d29fa7fb4a5774895e43e3791ebff8b16c4344af 100644 GIT binary patch delta 213 zcmV;`04o2A0-yqr7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{So=HSOR7i>Kl)(yy zFbsnQ57Op$dH=U{9UFKs_97@h%QfHDwH;ZOsmDcTKuHLegrMP`AOQB)T!Iy_uqbQQ z8o?M$0SEPvF|s{wUpZP4Zy>i#1GFCyzNo=^o_!L6aMG<|qS4}RZH%f$ zv+ovGD|q%PvTrps^(UGE()~{bh}y~s5SbsR08xV&0U|fwrkt$wg?u;wLA4K;vDh$% P00000NkvXXu0mjfI2=^% delta 191 zcmV;w06_ns0*V5V7zqRe0001qplF?uE}M002ovPDHLkV1h#-PqF|2 diff --git a/graphics/pokemon/politoed/icon.png b/graphics/pokemon/politoed/icon.png index 8ea308aa35561da41df3bbb6a96292d8734c5beb..ffc6a38a4862c5af1e2b0eb16ab7a97faf349094 100644 GIT binary patch delta 324 zcmV-K0lWT>1C9fb7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S3`s;mR7i>Kl(DkJ zAP7Y>226o+|Nn0nG+Ql@ZfD-SrAP{nf+n2f_=f?Y&bQVo0!mrVt01JkQ46?k2 zO%T~Vd74!vA(U5tsO=LH>NO0oW}_`&E18WTPHuv9kg!mvxXGbT*fYCqBL@5+oPLe{ zD;SY~^1D=(ze`oX<8=IDk8hc;1+onCpqPdyKm2Wh;6Whfk6sGI{Lz;{=3D~#oIUdg zVa_>Z8{%`i-5qel{qW z(2cgC;iQd2VYKZ+3q?Xu)CPj;F`IJX0}(TB`NVUB*DQe;kMWk>vB2*!%c#m=c6xuu zgjElhPfPGq`}Ip+=(!hELRLew_ET*N09C;(b^ZW&!-iClUl>-z)@QRx$`WN-loQ_l zt0vOHW897{1PgGnB;1*c3E|Jz9LJHZlmI5`npg<2U9b2 z5SdNi-|jV3gN2e^zJdA5SE1GsWY94q)bD}O##gfr7+4HL-AC_%3HWG=Qt&}^Kt6r} XtcRuKF!eK#00000NkvXXu0mjfn-rF` diff --git a/graphics/pokemon/raikou/icon.png b/graphics/pokemon/raikou/icon.png index fb0d48a5fd4a85560d166f6b4798e6f14022e100..77cc29d7e9f273f9fa110e59ebefca17e72ea8bd 100644 GIT binary patch delta 415 zcmV;Q0bu^T1nC2i7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SXGugsR7i>Kl;Li} zAPj_q4HAsV_x^7?+msfkDE&EUo29C1?>IXIzT^0#1$@xY^UeX)?;JSM)gT+k=xq7@ z+;ssn%!6*~dj!BF=IPSUE@p}rBtX<7I;3Wpp&%xtq#h#jA$2{nI$klLG|Kc2nTZ69h&q&Csf3ZFTi>YeS z0X=$-m~-(!5?gPcvGlo(LMdxk)3w}n*#-#dV@YZi&7MQQgP~So2y8mv9Z;pk;R{sJ z;PI9~O#CwFi}H@}>HQzws5L-;TWp=f`%sq|J(t?;X^ee-HwNo_d*bowLi|^#U&W6j zp1F5^M1U;(I0rwD2#^gw7J#h$fb*m2@mv71@h4;wsO?&*)?;T!I1AAJqmEGPf~002ov JPDHLkV1g?G!nyze delta 499 zcmV1H1%~7zqRe0001qplF?uEbBTsNMuqqROhnJ%C>e|b7A0ALRS~*MHZ4bbfTFkE zkN?O!-bX_IX@DFFDjw!2#J~b^B+|F#AnN#RDO@DAil0sb6sC=j(W8n%3r1sYaixD$ zTpm4;QJh^zB9=S<&<#u}rL|ZV?(VhoV78`v{Dsxz=4I=(LYY%zVIgHfIxjuHt@uKV zANHCBT$Wg3>-c2++!h ze|J+Bf`kv($42?RtXMmHZn?)~cjBZXGt*1uP&kQ$f_6EjuImN5+sQX`)! zA&_Wb@|G7PTA_^xU;ro7xW^^(q{V1)?WAUz+@xMbg**KZgl p$*)H5cX>Gyl63S(ar|fB#$QG765Ki18?XQX002ovPDHLkV1oV~;Ise$ diff --git a/graphics/pokemon/sentret/icon.png b/graphics/pokemon/sentret/icon.png index 9a8040833beebacffdd0943654e2254839a3a85f..e95d75ccd41ee47c49b7d235e0371f4c8ced1ed8 100644 GIT binary patch delta 261 zcmV+g0s8*H0?-1G7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&PhZ;R7i>Kl)(xE zAq+$nA%;Cn{{L^A*sZ-dku4P3(p=}ENp^ju{9c)D@;V5P*->p`oVa5z0>xlF_nWPE z#ldojp$EYLL3hAZbxjyNf;s@K=k%yG9fjo~Cas;s8t@tB8KeslCp;FmC?}+MVRHuI zn?jPutY8hyOY)y&#_|hdS9F5WVy#FBtMMt30P28dfW#8BCS#GCA$JewUuS)SVTM3b z1r334!)yeCD*{>H@DvEq!v%pbU00000 LNkvXXu0mjfdvI-t delta 245 zcmVA>07zqRe0001qplF?uEGc4!kgYsuxBq_J%Nn{jnccCa;afY#@4600000NkvXXu0mjfCZuI_ diff --git a/graphics/pokemon/slowking/icon.png b/graphics/pokemon/slowking/icon.png index c4d5bdbe7aaea3f343ee08fd1519be6600424d68..8527e8982de133801ba193d3ff892fafabecbecf 100644 GIT binary patch delta 328 zcmV-O0k{5<1Cj%f7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S5J^NqR7i>KluHi6 zFbqT+=d*Am&;4)9*rk9}r-&UAxN5qX7spPT*|uK{#B-q+2;VgVn<^$bz*s_c|C%l%0zCm@?8r9}{?_HS%tBoYk zh)k}N>*6V#z{pE~lmSly)UhB21#o1cNDn1Caxe7zqRe0001qplF?uE`Kpum=@#jSH2|ojR40+w|$~kbXYK{<5sK zqccnw(-DF5n;`(~_3^bK_ZQo8z90=rQyV_R2quQlO+uDjIp_15M*wxrXNCagG$wzB zY-PR_mkE7`T)7Gv1|fU12!mh3kez%G#zjBi zVGu^7L=Tmr+M!*KLCI4 Z$0yk{#oQP6d}ROt002ovPDHLkV1hQBl#~Df diff --git a/graphics/pokemon/steelix/icon.png b/graphics/pokemon/steelix/icon.png index 2cceec69a9d8d9c226c867af9b9af1f441ef2c62..defe78d7d6f53947f5eb7f13cd17b0a6bfac85e1 100644 GIT binary patch delta 409 zcmV;K0cQTX1LFgb7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SVM#C;w=qAF#4iw)=X`r-mU=&fOA6}lVHY;8d$mN$i2xm%MO zVZgP}xy+b`e~{}&Y=wX1VWMsk8e$(;fw6VCvr?x$^hCllKYHy99m@qX^Q<11Oyq z&$E|5p;W1Uk<}@&A8)kuVE@WWwBd00Aa_BFqI4Ya7DoneKNY z%mt7sKqgEE$dWJ_AWy<1fIJEF4v=@kh#(0di7JAibA5FmR4+eHvSyt1Gyi{%wQ`B2>Nzu?0!&{7-D_kEce00000NkvXXu0mjf DU8c7* delta 368 zcmV-$0gwLU1G)o{7zqRe0001qplF?uE9^;yXB#>jIBIST(8$+H_@0MO4fx0Lj_l%MKI_?1y-U02sMGVYmsG5M@ z#A=q7EnmTeQsq4I%0|*^K>nm)3)Th0s>;MOgIg?dcOGPVW@IPb0-702MV zqsjS3Tp-OaB{@@oE!Sn(OWWl0T#-zeYKkG8Y8(U}GIW7)t9Z+n#(!bAOv4$PDAQaa zPp4J7Jd$Ute15?`j+=5&L%>MhkAZ}o!+*v17{%}a O0000Cl-;s} zFbITe2seia@Bg-4h$cjB@6Xguwasq$$;kJ5{oG}^&L59DGlyiY$%DgK3mYVB`~F}s zu5OT~vbWY9IaAlG?E+nJ+mS8BaXkV+k$%H>KMgRmMgWnJTMLWL{fdw4u`aFKBpaY_ zsy#B2i>l;K%ymD12H%Q$%t}cucnQ1_9+8;XE2g9q>85{Fy$ZuWJZaI37NP>3xYioF z=KSQl;NaMaK+tQ=5e!vOoCAU>)mm`NA$lKGUH21512u;@jshw|N1@)>#eqJ(6a?X8 z-L3}zZ0d zNc?O;Dq$N7#oofq5d|b8wfZonn2mBVItIG5 zEm*}5F%3r_Z~*K*oS=)d7bi^mZuKRP!iXj>ZWE~r?^)(IYkzth(}lr(&~82M&e3!h z+-aTUCE%+cxOqtO;c;g_klh;Ck{dr5K{&qkqcQ_Duj$8MueAr>gBia^00000NkvXX Hu0mjf6lB@9 diff --git a/graphics/pokemon/typhlosion/icon.png b/graphics/pokemon/typhlosion/icon.png index b69680648cb83e16a1c3ab8fb2803ec140136840..e5e5ea51c1b5912ac01717d9c2470cfc44b1e6c1 100644 GIT binary patch delta 372 zcmV-)0gL{*1HJ>07#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SJV``BR7i>Cl-sU^ zFbGA>oSIZx*#G~x2dJ8{rJ9-7A^OCUi`um;zZrPSXC*MD;DAH3$8#3FV*r5U%vl*3 znrL0D8j0BQLk+B!c7`%(nV~?kyi-h>hx}rhEp7Ks3hQnZ9lIgVg~S~OPMV;I4z z%im^zE|F6TDj>gqibpO|BB0hPQjX{dSQ@CC6Fy2`0`QO69!Egz+}=RR@Qb5Ww=NhK zaX=?IW=Juy)!Lv^Q_w`$02*OSMML;1&TMx-ufLJ|zZ;YHaBcSEar*}FAc#W_Q$c6~ ztoKY1i)C0q6Tk#QcJRmz(w&T5Aff^xH^{ZfyFiGEnY$)a7lCL#JpZRan#M-p5Quwj z7~x$YZjkS5P3HDsN=yfTm*P>8!FtBRqxY6uSQUadD$!R}kGP^Th6#Z!w zoij`$Zk=IjP!L+DIt08IO6*)s!H6d+-P#nG;H1PXOKc+;Vp-xQd2$_aghM=??>v7% zJi9&@!j_bX713C^w&m#Jm`H2~K0_Z7-P|rbkasU+BDO%@S2LnDEo~Pr;FD-c6pX+C z;-v?W8<4-n9>}%%$70}9-lai#>;SA-N|M14IpRvL+JlB_)|os|cNHA{gMjW)7Z6@l z7xfncRxDaz`uGt7-e>AEeYLNvg?U?6*-kXu{SoGB^PrlVMwq!N53$BQ{TeSfiSrj1`dSbT9{R9+eVmKRKb>n zFbI=Zz{B|9|NnLqb$3QfJC{Am(O?K^n`L>bugsjoX0rysz{ecGH6n)`sip#s80kn; zBS)&14HRHajxkjS8YCM@q^8Iq$Wj?-$VML|EUeO*sgOrpOp77ZuE!9OEbyi&<_;SI zD*6rzFyCITw)?Sv;}_c@D>wI-<9ASy0j6JVPv5r9v4W^zAy^+*T+>mC4!{~%HgZm}71b1;@+#}CZ*V)zNtolZLc-E$On+{I#r@q&d zAK&r=&uW?<$E#V_JwK$-naqcEJ*Q~l1xU~QATE{6cYXjw-rvRD_P_j~+GUa-Mxe?M z`^^vJSeYN#hw;_=|9toXOF$K=1B64K00000NkvXXu0mjf D{d}i1 delta 384 zcmV-`0e}9l1Ih!C7zqRe0001qplF?uE;f5fRlg>OqB<#?V*-&hdp*lg9~$D3^cZ z7|74-ZDo`jDxmYbJ@-7EwGTklyln+C3%U;gyTiMlJ(H_?m%G#((^1KIFZfHtjCSlu z!x(Wc5pS#=$Dp_&(^EVm3kt=Q?!G!El6?qRq(WwG_8%5K9Fs5=05v3vS0^6}z*kts zUBYdtHliUQ_c~Xn2q`Z+jAE00000j(SW From 01a12d81c78df92f38fba3b721b1e969cafa7526 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Sat, 1 Apr 2023 07:48:53 +0200 Subject: [PATCH 086/129] Fix gen 3 icons --- graphics/pokemon/absol/icon.png | Bin 359 -> 382 bytes graphics/pokemon/aggron/icon.png | Bin 450 -> 489 bytes graphics/pokemon/altaria/icon.png | Bin 432 -> 417 bytes graphics/pokemon/armaldo/icon.png | Bin 398 -> 424 bytes graphics/pokemon/beldum/icon.png | Bin 256 -> 277 bytes graphics/pokemon/cacturne/icon.png | Bin 307 -> 328 bytes graphics/pokemon/castform/icon.png | Bin 242 -> 255 bytes graphics/pokemon/chimecho/icon.png | Bin 282 -> 271 bytes graphics/pokemon/combusken/icon.png | Bin 367 -> 371 bytes graphics/pokemon/exploud/icon.png | Bin 411 -> 421 bytes graphics/pokemon/flygon/icon.png | Bin 432 -> 451 bytes graphics/pokemon/groudon/icon.png | Bin 414 -> 437 bytes graphics/pokemon/huntail/icon.png | Bin 378 -> 391 bytes graphics/pokemon/lairon/icon.png | Bin 377 -> 392 bytes graphics/pokemon/latias/icon.png | Bin 360 -> 368 bytes graphics/pokemon/latios/icon.png | Bin 371 -> 379 bytes graphics/pokemon/lileep/icon.png | Bin 353 -> 371 bytes graphics/pokemon/manectric/icon.png | Bin 309 -> 339 bytes graphics/pokemon/mawile/icon.png | Bin 424 -> 410 bytes graphics/pokemon/medicham/icon.png | Bin 320 -> 336 bytes graphics/pokemon/metang/icon.png | Bin 420 -> 416 bytes graphics/pokemon/milotic/icon.png | Bin 495 -> 478 bytes graphics/pokemon/pelipper/icon.png | Bin 391 -> 406 bytes graphics/pokemon/salamence/icon.png | Bin 410 -> 420 bytes graphics/pokemon/seviper/icon.png | Bin 375 -> 397 bytes graphics/pokemon/sharpedo/icon.png | Bin 353 -> 366 bytes graphics/pokemon/shiftry/icon.png | Bin 438 -> 459 bytes graphics/pokemon/slakoth/icon.png | Bin 349 -> 364 bytes graphics/pokemon/solrock/icon.png | Bin 293 -> 307 bytes graphics/pokemon/swablu/icon.png | Bin 320 -> 336 bytes graphics/pokemon/swalot/icon.png | Bin 293 -> 311 bytes graphics/pokemon/tropius/icon.png | Bin 426 -> 442 bytes graphics/pokemon/wailord/icon.png | Bin 362 -> 360 bytes graphics/pokemon/wynaut/icon.png | Bin 397 -> 353 bytes graphics/pokemon/zangoose/icon.png | Bin 430 -> 412 bytes 35 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/absol/icon.png b/graphics/pokemon/absol/icon.png index 681d98d1d9ee147ce1156b4d82d37364ec483805..d58d208a7bd322beb9e549793c41994940842ec9 100644 GIT binary patch delta 308 zcmV-40n7g90{#M!7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S{7FPXR7i>Kl+6yq zFbIPikb1=L|F*+nKTV+NZJV^Ehpw`R32DD=`?UpNEw{EZP`=Vr$ypzI@WjzzfT}(% zQ$?6j_9ZA2-JsgKJ=s?`yH$G1WzkppqgPNw1fT{a#-O!$`Op~&%3oDck z=DIE|CXx&rW!GJQle$9eQhFIqELmVN2jQvES!6s6{<|=^(skhwQR)5PQM`IR%qV!T z5m9x3*h|sf!PR=9g#osFwd?Tzn%4UPG8{_=$V89?kf~$>NI{qpAm@evNFqo9kdYwY z2#}HwM}TlQ#pnG3NGC{fcz1xD^WhGV1s@o{<^w*$ha0LBC>14yeVn=g0000V>>3`TteE9!otdJce! z_rq;^?{@YHW27!|lk(598ddd*BJBx!%sfP^O5yY6pK% zlvp|t*piy7t#8CTlXxZ50yzOl1!%0H6{MakbWAn%Er6Rrv>sY+M?S$$v0gqW5LXxr zr$6&g>i5FrM5-{LX{QQPGAzP0gR(FqIE2BiIhKUk^6AeMrt>2SBh8N_40e8;!VG?# j!i;{1PJZB1{rCnvMYHcGBn(Rc000R9NkvXXu0mjfvp0f2 diff --git a/graphics/pokemon/aggron/icon.png b/graphics/pokemon/aggron/icon.png index 5410a384f66a11a93a0fd673bf3011fba516e237..3eaa0605429f37a3e12194d559d8ac7ee5835fff 100644 GIT binary patch delta 415 zcmV;Q0bu^Z1L*^h7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SXGugsR7i>Klv|d= zAPhreGyUm@z5m^gBtnV_(=!VQr_Wf(kC1yD&l)Q;_13T437TiNhM+foZ50-XS>y7Z z!iOS~in}Bc){D73?s<~d5so6<>D7vY+nB)2U2(VBqKDn==Y8L&=BZ&13K(%H)R|oZT$MrzA{0rR;%p%Mc21;qgOVVaRxQv8irL^S z2Zho+I1W@z@j7leST-a~R)T+ZoF)NVZ2TQol5k$S$}DL^TntcJ$QXBw+oPmFAJ(@r zjyub76ay%NM-u}2FkG7$=amxUiP@drQSRnMtzO^a&-!zIJpj4f{|%7$43L>1CqUja zKo){f@h*Zw5MD#rA&l`zO$7N62C+ErM=>B_^h|}FgwdawL5d3?oiO46zkC1y002ov JPDHLkV1jOLw6_2N delta 376 zcmV-;0f+wS1HuE47zqRe0001qplF?uERdMw}RrVNVne(V?3#wEc>xdv`?3`+m@$R!4SQ$%+m>zN}AX@!JXJ=v;sA zvzEtkJ){LI<^y0IbaPCU0NSqToqK(B;7PpiwrV~ zv%qb((!YQaL9~NWxCwgjF#_;f^d5+h7%x1~4n}+km`FD;;zP0cDCrS|`1k|niH{#P W=JXOj^Ebr+0000Kl)fJb400rkd(7 zG!qfdw_z+|UdSXgSQF2WTcS(TnLp6+QhIP)-fGoh5Uqg)dR6R@x`AkMcmg7{2qo|k zIfz`~aie3Y0s|?3Vyr)isx3PCHh4IeB39jiB-m%97eAw8*>k=$cN>H{)_UR@nGBW(COcehfe=y zJUr-6#>0vJcs!iwPw;=zALD-7zqRe0001qplF?uEWrrY`=u z!5GaUgX%&hF&w6s+KqVAI!Yd07Y}79tBwGOW9*0!00*^zyq2J)}3HWcclE24mO#lD@07*qoM6N<$ Eg89y=U;qFB diff --git a/graphics/pokemon/armaldo/icon.png b/graphics/pokemon/armaldo/icon.png index 5dba6557dfd99f42185a3475fa7890203035ed36..1277dbbbe0eeeafab82fbcdfe199d901c8640db0 100644 GIT binary patch delta 350 zcmV-k0iphm1E>R#7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SCP_p=R7i>Kl+A9# zKnR5GEJ(XPFz^4ioxzdX{mJG~_0(|4A&gulN0e4?Y!2ESZI7;z_0RGIESmr5EeU^_G9S-$&Z><95S}V|$wtA1Nd1eW?vD&f( zIM1j+HATx3n9T5h-&Xm&`mh8&X)B${bP>_Q)XKcuDRREr_!}@(DSkF!N4hd?!a^RX z=nb$NABq~RoNuG{Bjn_)sy?}~Q6SAj=EBpyuU`5+Jur+ns^nJ{UMi?5=4JbZZa>aX z{4)M6K&JB_0WzQe2#^JfdVq}QfAj#sc>WVWhV!2Qf;rDU6iVAm wVTl_clR|qFA8vqb`QUp#2q1et;1Brl1-P9W1cPm{Qvd(}07*qoM6N<$g1*?Gz5oCK delta 324 zcmV-K0lWUF1C9fb7zqRe0001qplF?uE-%O;WdsO5AO$if7^~hNfs=Qf${)#)g33Np6V)#t66`i zgk843YlD|D{bNf&=i#^&JzKf+-@4~-Ed}T zUH-g|kEzlRa>gP6N}%*r5fBK+_r@!*tdu5g3DvB+^=ckyZq>i5-v*O72$;k{z$6X= zCUF?Ruy9CVgoA)#BLgMo1Pxcx5YRB?Pa6xpTrGkz6u~4P9DUetK5*e9@WO}wfsZdY WW7TG6iTiE<0000KlQ9m( zFbG4-!W8WL-?k>opF)_cuXu{;7elCco~sXvQtQVUqa!FktRZMpL{mmB2oQ3zvjrZ3 z*2_f++Cg}5QYsfI30SYPO4NytOUXkCa8!2^1D)?fPJLQ zNorPl0V{tZoCD7(CYyhFVEg*Z;16jeKqWU;LmE^Olf~H~;_u07*qoM6N<$ Ef>!xdTmS$7 delta 181 zcmV;m080Or0)PUL7zqRe0001qplF?uE=>YOI(%^ymxAQo1gAZwq#?zUm|+8&$ww2??D3q)FG*eV@Tp-A3^JMgme)* zHQ>rc_PHP)Sg3>LmeYZ0JwaVw>?&hEGqyR1GjIpK_`rTny;UFxNgmdh%>pKUPjeyZ ji<`^*s{Zfr!FPBAu?m|lP^s{a00000NkvXXu0mjf>!47O diff --git a/graphics/pokemon/cacturne/icon.png b/graphics/pokemon/cacturne/icon.png index fd1bb1d5fef7ac0963c678a67a2ebc54143c0411..8dd74b291de3ba24b86975590a9f2f23ee92edb2 100644 GIT binary patch delta 253 zcmV}c87#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S#z{m$R7i>KlsgW? zFbqRI$U`%T_rGmLxkV8`l&36djBI?M^>H}HEf03O^#she#73Xq5r75YH37=httR5` zkQN|_@inmQq;@gqN2=@wl(0_afK*>NRHI-U?ng5Tu!K&J%DmY{E{d~&7$x=TlcywD zAySn@)IbB5M3~H64^VG3TA&sS(N!3hhq%FQSu~SEmeD;+aNF&>&0Rm|36MVt5NrY@ z=hOuV>=YnXm!|+x|NqQUod-Hm;y+onf5tn+1dD33UsWl7KC*{<u+a{q QMgRZ+07*qoM6N<$f>IqpjQ{`u diff --git a/graphics/pokemon/chimecho/icon.png b/graphics/pokemon/chimecho/icon.png index f5480bc356735faec3595cb18fc51559907b11b3..d4d6b644855a35c3824edb6c48602090f8d41492 100644 GIT binary patch delta 196 zcmV;#06YJh0*?Za7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SjY&j7R7i>Kl)(zX zAPhs5*o)Nm|NnOF*x1EZ*l7a;ddaia2rXsnjZ`)F8?}rupE5!rRzVOE3P40`4+v#k z;whmZ_k2ZwS0@Jd0O0CPa5v4HFrrrOV+6j($fhyB;6`*Ac6R;(QsN9N{Vps3CoG2S y9dIH{!ihM^hgd};u}EU;BiaMxPXlC6kU$4pDht($A3YfW0000KltB`M zFbG8xC9uoC|7}Z1#;PH-n|9GDI&OFpQ0Ardn*kuoCWr(8MDr5VfUwxTBEV88$SYB( zN^k;-M)Z1*Wdr3cfbtq3&FdI0fEHDOT>+X2R3e>ExL6qn*ct)uO;Vi*Z0(5W95nq7 z99^~ogK@^>VyD!9fy{GO=3-syM6}-lFxwz{X*<|A2T-Cfgc4JMPN1!nZJm?PxpfX% zZsiyZHAj2hzFMC8yH|?y|FHNAL_00008NkvXXu0mjf5^H?A delta 293 zcmV+=0owla0`CHl7zqRe0001qplF?uEzKCKi@yupE17~#QN-SjlOSOqf)4L zW$j~7T34x>YtqCCh5>aZ0GTTI20SV7hIAVN<_<4gD_v=~I@H-ZjG>3sCI{?Ez=D7M zFvjvd#~WG$39yl>YnlSbo=8HVM|`0)Xc8JZDpK{$go00000NkvXXu0mjfeCUL8 diff --git a/graphics/pokemon/exploud/icon.png b/graphics/pokemon/exploud/icon.png index f803aecaba4454021e3dd855ead8ce245332fbf3..3cb142dde2afcdf4c9b5a440a7e9c5c73e685f72 100644 GIT binary patch delta 347 zcmV-h0i^z$1Em9y7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SBS}O-R7i>KR9%n5 zAPk#?BNZg@|NplahkgL-`gBisOSM+3UB?8H*X!>E$!C1a`GG;UoE{j=+#Jsz)6nQ} z-uOX;t(jTiw*+o51%h-(IB^5J<%z}v^?MVxWMb(!V6x(v>|Uw36G{n@oV+5Ap9EhZ z^nGC`Y?&@I6Z|!QiGTqL2L{~q&Lf3ailX1RLbq+APzDitb`kVnk5+4?mkBM_J1IaC zRUvgW9Q7I`c0z-KqrzTRClrt734(xSM_jo?$N+6t2oa<@5*7i5uToR7o?00000NkvXXu0mjfDwmpC diff --git a/graphics/pokemon/flygon/icon.png b/graphics/pokemon/flygon/icon.png index 10788b2253f8662bd11c6dcecee0d9b9806a1e9b..f0c4e165ad0abe88a8650002f43c6e025399f79a 100644 GIT binary patch delta 377 zcmV-<0fzpt1H%K57#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SK}keGR7i>KltGq+ zFbG6_uR&%5b^qHAkf;Q8cC%|-blUnMh*I13jfVhmte#ae3=!x1eAfrS0R-0zNMcBV+0)lDUMQl{d-_u!uk~4vUJUL{pVZp{EzdXpFOH#n z>vT?KHIVKwIT+PIdMeLQ3?x7N)nQN##N}PEI!rYXNK77B7Kf<@l6nBE!(0Y(0*l36 z1~T+`rggec14$r!qD}8%AmI<`BizUPG!V_=?!ac#KvK?i%TNr&r-%MD5T>tz^!k4R XSMD5N-7zqRe0001qplF?uEArWj zjxb-0DJx4XCECr9C3YQc>j)~7{oTG??qsp;D`Z&MevF-nG}v8I@n8rN|1m%$V3zQf zfmsRihJjgd5uSk|?UO|j7|_+22x3xTMpaEr5Ca46!AJx}V4}fgAObTgWtK%pU`BPY zLoy%$LzjaAxpX!I(-^xMF98^`Fv!2a4EO*{@l?S40)J=pXj+Z*SO5S307*qoM6N<$ Ef?vO(Z2$lO diff --git a/graphics/pokemon/groudon/icon.png b/graphics/pokemon/groudon/icon.png index 1c237537b6e80268033616117c154b238987cf41..69326145ca14df7079d5b2fd4884aca7ccb0b988 100644 GIT binary patch delta 363 zcmV-x0hIop1GNK?7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SGf6~2R7i>KRKa$G zFbpI1>fG%A|JzC;9V-NS*n8Ur=N2i7?0}Z#uB}Sz0`FR%2w8Q)sSqJ5a!#p%gV6hg zG8_~xiSRslsnB{r!_(alPFBL>D?3rE4!08qF6d#^h>Ng|2GTU(fU1cA`rBx#S@V{_ zNJzBfBqY~hu$l;e#Z7vN)T-g3wU$7Mb6!SI!IB$K4jHP@NGfO?;;>`lED@3|Kuwq6 zytx>*;;`wo$fH(8jT{Qb3$TGnCSFdj@;c8ROjfW1oRdUiVyqyR#W<3A^E z{2U;jNq@6v*XBB+IQ{;p^P1oZ13qm3;D?*8@Vl<+4v^(a{{p0bA0TxI5axpdgpMZx zqQFpqaOlQgbQd5o0^~a%b^*eCP=IXtun!PZfPBaYCCFdr!xM;9Bz2R}+P(k)002ov JPDHLkV1nCoryu|T delta 340 zcmV-a0jvJC1D*qr7zqRe0001qplF?uEbkfsv7$QeD~6?eTbQ#mCOrl!t2v}KKf?0I0vt?q}Eng8%0trih4-u4zYiI z8y&;l!^sax&jmHjoFm}ihtN#9>$)xqZaA1E>6JUem8BIV4ea1`6H3WoD<-YAjR|wO zC+t4kl3DR&jp^je53ef_0BRR2H$7<>;5R$y?7z+l>d2^@h@$f^|>7lB#$Sb-sP mIWK%*1tyc}Eg$$vK0W}U7&xn8e>2|z0000T7#0Wv0000?P=%ZT0004VQb$4nuFf3kks(BXNQv!KL9&BT28dR{ZW1v>UT(KvT^4W-Z7AZ50s~YL%E!_ZJFc3U5h@z^3!7)FrhM6te}3#2@xKGfpBraE>NtD=0000< KMNUMnLSTaK%ZDle delta 299 zcmV+`0o4A71Ns7x7zqRe0001qplF?uE<}Ggjn$H|Zo?oDhIxZ~n{=t#hp_}pgNI0F zvE+x#;DxxGw<|*=cRGwzDJ*el-2{yL0#87IEp}$O}%C2_N>n zqcMA%Nq6>CW;ZFr_0+3ui(_yRneZ#BhOH|&_KynI)4BjASD@h&kB{;I28;dO5`jsM x2uwO70+UiU0w(+c297f@w0zZ!!>|`M4&SJl>^qAptQ7zN002ovPDHLkV1o5zi-Z6G diff --git a/graphics/pokemon/lairon/icon.png b/graphics/pokemon/lairon/icon.png index 24bea9dfdc19b75eda89cf7eab1160c64b737ec0..27cb6edaa3edc97fb4879a499c624b6cf7e6129d 100644 GIT binary patch delta 318 zcmV-E0m1(H0*C{U7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S21!IgR7i>KRLc&- zAPk$6?y^Jt|9?9N_5#9oowOmLR@gCw);^v7<68&W=MJPhbJn;3Hw)9O7{ZML;W-xu zX#zxWhhx>CmPIhh2o`(RP<`UoFcQqSL7)*LEV}>#gorPM$P;L(<06C}13>~=Zz(Sv z=F=A0TiaNLv0g=g_Ndk4u-rflai%Wv2nWxWr*n$Um4GIkt?JsA52p4JL8+s-=YH3% ziXOiG+z;YA{6BtWeEJW1EbIfMxu4qrxw(HEAP@KN0_4U0Wq=IsuL5LnKZ^hv+>ata z2KS=~kjeeXPUir5y1&OmEN$G}j}{A|D<-?n_=Xd7A6``3Bh!OOm QNdN!<07*qoM6N<$f=n5bbN~PV delta 303 zcmV+~0nq-41Nj1w7zqRe0001qplF?uEb^l5JmR}Xx60onfO0`LNm7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S?ny*JR7i>Kl)(9w3EuziffQF4vdSG^rJ51cgN3OYucK6u8 z&3#a?&QvzY#W`PA<(qLS*ynORomYKW|B8Rdr}6Iuv-oevP)y_B{~%`Z&*@ypKXEs> sZ}G4BH=Yc;_>cIox#E9V{XYIrI?xmpZJVDo00000NkvWtM6N<$g2Wh&pa1{> delta 286 zcmV+(0pb4e0_Xye7zqRe0001qplF?uE_YWyJR_H+o z1^pC5AeJnfIgYMU7ivPAZI2+iA`dQD%N*bJd3CSnin>)p_G5l zP0U;`O=+Zov%Ja}%0NN2)lK)gt>;v)ck6^HA}*O06@^7wLdH6UfR z+*RfFId*-IOo~FXa4Kz9!vvVAP6qoM>mwcPjX(zrybe|vuLA)!)d6HL%%}rM`~OY{ kP|OPBbQojuzdF1Cj&rAgQhtX!000UA07*qoM6N<$f}(DB?*IS* diff --git a/graphics/pokemon/latios/icon.png b/graphics/pokemon/latios/icon.png index 95590eb52d691e35fa7589f62be39556394a1423..d63fb4710ea47b6b753866887a8244a9edbe6765 100644 GIT binary patch delta 305 zcmV-10nYyO0{a4x7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S`AI}UR7i>KRLc&7 zKnOID7)ToC|NpkIt6jPeo1VN#^q@1sfXr^&6MqMAfyGU{WPq@N*8~t5z}yj9NvN`o zxSY?hm*_xfxL4Zd;00000NkvXXu0mjf DxTcXS delta 297 zcmV+^0oMNe0`mfp7zqRe0001qplF?uEjok>or|C2$rgY&TmZ< zTwqD9-QJIv<~ej_0ajIZ(&tsSKpfA#ai1xEKmLG&j|2x_5pnS52@W2Zh=X7UOvGUr v_lN@<|EMDl=V96&2QWHL!Qo*4Ar2KE6b-iBKvW{~00000NkvXXu0mjfO^$(g diff --git a/graphics/pokemon/lileep/icon.png b/graphics/pokemon/lileep/icon.png index 0f3132ed4324b7ba57a130578d50298868ff7684..034453bf99a581d3296221cf8b69cebb7edf5866 100644 GIT binary patch delta 297 zcmV+^0oMNE0`mfp7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S@kvBMR7i>Kl)(}#3EuI^rHxrRYZzribB}T?tmVJKm`1! z@01M;gY8D7_i0dnr{l0=ILmTfvbSIYDMdJr=#JKyvCzE^6`rjF0pZ|d&JU}2>bL4} zm^uPvcX@AsgqL>&NN{RQr_1-pe0Tu`)fMJ^$>K)<00008NkvXXu0mjfpyGl~ delta 279 zcmV+y0qFko0^tIX7zqRe0001qplF?uE`OdZu6fZ>@sswQBn`58>Wq(Qu(ypSfPKu~_FKv2F6 d0r)B(FB)9Ax(fW5l>h($07*qoM6LruV1h=-ev<$I diff --git a/graphics/pokemon/manectric/icon.png b/graphics/pokemon/manectric/icon.png index 5379bbafa1a5816567134eeee8a9cec1564b2420..5d7f3e95085295a66da64031dfa1d0b694f7661b 100644 GIT binary patch delta 264 zcmV+j0r&p30@DJJ7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S(Md!>R7i>Kl(7!O zAPhvK23H;|?*IR`XCP4p4lEry;4GEyaW*#faqJiZSm+{i0+MC`XfOjHS<;mw;z0ER zU;#mZdL<&D88kpg0!0-T0+t&AuBti!fvWZd0ezq9IdY;!-&EJne3~bM8MN;yn`jKy zsY+e=^@N$KpQmnT-qT?$K)FaR1`>{qiF0lSA;HpJZYjcXRH9rm94o8vEAq!{=+kXc zl0O*mAlS>v!{k8{i)Xod*gJj`dx7i)@(t7lg2%B{0`*@U=-$r%+z%g^%M?*AMLQz^ O0000C^u&>rVA)GOy))-*aC@&KR6%mY zFbE6D#dti{|9@LBb~2&hnI76+mc49NG7+q$2&K^3$+uCQM}xwp(+M~!M!-e#rCe1&#{j8FYfw-d^rsg= z^iKt&l<>y2^vqy?1T%~sUD_1mc!*=-g+0UYHgOq~-|razf-O&nlrcJWr*JI}g0l|l zT0GCX59zVFSiR#7zqRe0001qplF?uEB&9- zQCDt%19VM5dkN4m5LT{dlf>!RDk+DK0j8OoZTMLY-P&D48G949DSIIgOedP_RW98 z1iFeVh{%J__pA|!=8tH7ha%eI;wpF`4f4}K;s%awZb^9 z;LO~5#qDZ}KgRlR7o^p`Q%k}=EOY?Lpfu*ZTl&F2S0k2Z7+f&SwcwoUIdU5!gL)H5 zw%IDU-_^(1v~~6al)Rv6o)D&DzE(<)hWbwtMlg81Ni2*NDF^WABiUTZ)_x#Zn*FF? w2;77bDfI~)y&eiO`jLgXuECGRjDF$AH{YYAwF{lytpET307*qoM6N<$f=#`tF#rGn diff --git a/graphics/pokemon/medicham/icon.png b/graphics/pokemon/medicham/icon.png index 9e4bbc27cd9c616db92cf7c00ad1f3646cc1e121..79883928382f12697a7bf1a61a362e78390a600c 100644 GIT binary patch delta 261 zcmV+g0s8*H0?-1G7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&PhZ;R7i>Kl(7!O zFbG5=2n-(J|Npj!ld7o#v|TDy4HDBmgADd9%b$k(3w?~9@S!c>*6NN1)&P(ZWeFUY zNfdzVEFfhG06JwY31UUCmR+2g&6&zs1;9*X<+Oc-Uf(j(YaK@;nK$wb7zKhJfgqC> zZbH0@Z?{R?2(2+>ZLqnnDibKTA*w63Athj{hJ8r0aEt-#=$?!(^{DPlGJ;c;E8d99 zKz_hL=AUQ`WOtC=KvKXC29iQg29kfThk@h{b1;y?VZLS{ANs=${ZJ6B-nDU}00000 LNkvXXu0mjf*uiay delta 245 zcmVA>07zqRe0001qplF?uExpBhc?P z=!sN>cSN!%R79?BCGf8HG85+I+LJtjS!XrCbjIphOk^L>0$aHsY_Q1YmANLiOOavm znF2mdmW-JwbDlb4aSfC!r-vyvlq=9|eXi#Zmr}nFgX(NZEh1nz20ya?R+#&*Xkj4X vK^Os!4`Bovg~3=DVbCayH0U#7-uB}L1*nB&s4Sd$00000NkvXXu0mjf^SEfF diff --git a/graphics/pokemon/metang/icon.png b/graphics/pokemon/metang/icon.png index 3916b65310dcfb481570e48999f2224376698704..8d27afff4f3f024b87a3046a24b7bb1bce7105d5 100644 GIT binary patch delta 342 zcmV-c0jd6^1E2$t7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S9!W$&R7i>KlfjOI zFbqWNMB7KnKjbMNTc6V*-r%-k&X6GaGtxYvd_PC!?gqn`~ zLabTaMqv{3M{5j-i&t<3;mLqv59%1~NX#X8=_LXAR&)5W@49d#=BL8~uB#zw}P^m)@!V(mT~Z^v?7(f9bvIe@0gQN4+ogpN}%? ozv?~df1&rN|E1oC{{KzyABol-SrbkFW&i*H07*qoM6N<$g7YM$bN~PV delta 346 zcmV-g0j2(+1Ed3x7zqRe0001qplF?uEV%HdKV9EmD*Z7r63`W=k<0RB}W%};j(0gY+?AUN?x6r$SC z7@S2alrWJyahVpW5Um01ro6c&@zw~cGE>qk5?|&kkUW!0GGCP&@Jp}urBbR6mmYt- zRXhr>T9ucVw*{QKA&NiVWgR}z(nA=XnyYTU1KWG1W*$srL5uk|D{oSf=~nd{fSzl8 zW?i2cfIVl7FirL^Mk0cdiQ`fLM!_tAag$pCoZ{93FkI{_fC&D2{i*}GI#iAhSh+e# zTL-vvTLKl-rJj zFbqVInu}zmp8x;b`Vt^c!b7FiKGmhr%7bl&XjSA}y6C?{9 zh%=f2MK6-D8fmBiGpM+kI;AL58(k8Qx!RMcLi;DTbSP0h{C!9p9V0%Zg^sDgJS`mb zbSZ!-mSy8M6xgEEF2@q+Ci~Ad|BHW$zXwRf!wQfM9wI<AoAf0Kzsl$;~}c)5IO_^0000(S)peRr|#CVy}>fS;Qr(1W9$!CWZ>3o zFbrB$ZxtN7wDWf*jBVP-9FPDz=}_=dc$a#NjWVHUUUWPi46jyO?V#`8s1rzg(&&FJ zUhI^FJE@+nWAJ`FiexiN8Bt(?mwgu6dmHhL7c>mW=F?8)+-12;UE6Tr4ocb)ZLIB3 z6dRy1pi%wK8h+pd?YLUKm)68kJ{r25I*qbX4hluCaF!AU6M3OBGz z58Dp{=sfdbl^Y&32})-^h7Gx1Pni$h=YZtGhgl-5i4SuNG7=xF6j${Hsk;&%=YBR~ Q4FCWD07*qoM6N<$g1a}gkpKVy diff --git a/graphics/pokemon/pelipper/icon.png b/graphics/pokemon/pelipper/icon.png index 43ae7c2760806e5b7a62b62e721aa0c4937f5644..49debae7177426b50540d81b8ad7e7846d70283b 100644 GIT binary patch delta 332 zcmV-S0ki&x1C|4j7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S6iGxuR7i>KRLc&- zFbL~HI?+r0|9?9IeFTzb(zHoC)IIcI*M$T;O*ei56pZM3o^!rb7@bnOQivcY5?ou9 z&j-8+2$Ti}%tBvSl=hZ|8KgzTUIAVV{8R<`PLyUnq$e96S~X5!Wl(z-;KEB8B9JnW zI5;fWtJFHt8d!yYya}keF>r-PY$7U(MSG=KPeCHNw&o{g5RAt7X;13nLsZBFU{aZWmKr~?GZZf0Q1a0E!1$}n}R*aO7oIus-8b_59NX7~iC z0wifZ1Udvr+J%hCvX8m?*gO~Q9eMp6Hz`u%7#xX5nh3wVy*d(KzrQ+r0Z~= ehrFh5ZvPAKY!sn-xZkG$0000b^l5JmR{nIbnZ2e8Cw zYox@z8(gPbrQ1WSv|=mT<%TIOTN~jf6Kog+E|NN#?tk%N{QVAxKQ=&A>&MWIr4e+~ zR)!X+s>n-&RRmsVQ5pUsL=ho!W=14FLpSH#6%o@raC4UE9Z|M9@p(EMiFp&Sr}KYe z6izl73(;~n7AL;cJ9jt1P;7wN=2_;|{ASG9=fyu(V>;@b(S5k%OY671`$#l`9&#p? z(vP(PJN<9wXJCLBm~`sVQ3Qs%=)jD$0`sJYR5PGjfeE#9snZ4wB9|J05!kX$z{vDS z21eDu6h;IF_rP4Rsev)F*#ToX!N4gPpT9Q(V@+8=(B7ASe+349X_e<2#XPQ#u5eU@ P00000NkvXXu0mjfISGvt diff --git a/graphics/pokemon/salamence/icon.png b/graphics/pokemon/salamence/icon.png index 16cdf981f4926a7fcc1de42ea6db07a4eefafc98..74b4ae776abf62bd8932e146f73a39b7d084fc95 100644 GIT binary patch delta 346 zcmV-g0j2($1Ed3x7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SB1uF+R7i>Kl+mt( zFbqRkD@6&4;{X5K>$FhHCN^DZZ^I7*;j=Ueo0sL*{{-sN$`7F$^h!b-kw`eOQfCC( z2o?!|xtHyhsQ3Wwq~@N8OQ7*5V^f1yn$w*46+W(d{KSzm)zy zNkrckpIMn&#J&>FyAxMGL2SUaP_4cNu8ZILitYe82M9hn1_(X`$dM0IfUK*Oo(<=G sIR2WY^Z>cc2i|E5koWlz@w@r(2X0O#d0zv)&;S4c07*qoM6N<$f`03ka{vGU delta 336 zcmV-W0k8g~1DXSn7zqRe0001qplF?uER|oE3z?SfUCpzb|E~QS)-E{SM09sCrNkK zShVyzQ*9HXRDurOK%noErB62D);DY(LfO513JAJ})433{Ug|9OVEsM6v}E{3`-tM4 zp**n^tKzZCWVc$mEc|^+5HNh{@@YH-2L1o0rX);07KX>dct1K}qHD3E_ruRnT%@~! iAHdp<{dhf0&W|54S4oiKltFI9 zAPhxgb%U|wfB)OgHxmX7$yBP;MXPak@xvGk-f?{5Hv{+%sFwuLSEB9&lfroZhin9j zidYAN$N;qPGw}gr0xfU70D)Wrs`iCyisNh)k_(7gt>y}%5>zJO1l(OUdSR!9q|HE$ z5vZyQG|tK@?ipZz)65f)HVqyp_t1(ke@3id2UVl5hC~rhJDf$>tDS&j%O9^illulw zpdB^xdVL+xMnRz5T^Ft`z`N@-ZpMIW0VR()(GCVliq z^6Q`U(e$wTVb(_pV)4VQ4^`RyF!bT*&p-KL(#PqK)el1=AGdz!`ndN))5kyd!vjOD V7RotH21Wn?002ovPDHLkV1oG}lLG(% delta 301 zcmV+|0n+}B1NQ=u7zqRe0001qplF?uEZt~5I|9GFq$@z)<@a% zQAO@RD=j@KH~(?0IMFKRa2^nbbJ#f~F9nC>v3`7lr zDKDM>|J$8H$VM(@lifGB8e^QXr6ru>cxV6{U3>#1e`nYy$k}x;!KOl9W`MPiVvy-1 zC;_6TGbRoiRNgUjXp$IHq^hbjLt<2!k8!0)F(pf`iyGiZOF*5kW3MQ`CF;m_OW!Nb zP%MfIf>{-uB{YM5m(>}j1zJJ~HY%Ih*rrY5vY=_PUpOhViiXvO+B$%+)Z3OihGyFs z{_$Bn8X(vKq}28RVg?@|Ja0Zg@Oyw@)b9Z4nw#L#BSAWVOle#Ja`^x;eRcjD kVb*-8gz*4U*LGjv3*r$J8c63G*#H0l07*qoM6N<$f+je4CjbBd delta 273 zcmV+s0q*|p0^tIX7zqRe0001qplF?uE<}Ggjm?rV3c^4TMRS9>Lk^(ef~8%+0~oNj z$Vn8wO}2F#b2mXTO$-UjZnY+mWU~XJl{(#g=I{JjUJ!h>EbB=!L1%9S+LugFY(gtG zVY~@jl2M0I5R>U#0nTKOXv;;T^EO(dxH%z?n;tI8Jz68h=n;(-t`b8O0(Pl97|4B2 zp&5`qw03)HAr@J7gdIHfEXTgNl7fKwS9S`aLkj zfoc3cFr+vzh67_i2BzOL0E13(!1Sgb7&&-4VB9$^FdGI;GMV~;2i diff --git a/graphics/pokemon/shiftry/icon.png b/graphics/pokemon/shiftry/icon.png index 14b4bdab6ab77fef9955db78c56ac63f9cbb6908..3d2be13a6852587ce145da424e68055b05aea63d 100644 GIT binary patch delta 385 zcmV-{0e=3r1Iq)D7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SNl8ROR7i>KRMC#Z zAPidq1nnjH|GzyO+6}tG-Rnt zmmrJ?GY`F?95^?qp{g^Z%R@gUH{x=^bME^m5m#586_D`Qf8#Il?+xU@mj?3M|K31gj_KVP2u5vdAk5zyNE?Km zfpmqPf%F;UIratubTW`ngW=c?2119~8A#3?@UfYGHIO`gvet;Jf!zATU?An*Bi;tG fynDYG$OZZVIAI$m;pI8u00000NkvXXu0mjf{S~w| delta 364 zcmV-y0h9jA1GWQ@7zqRe0001qplF?uEbsT(VRgu+abAsWOD|^kDTxB6tf{+!i#?} z$(LdQ3tfrHG^lqLAJklu38*{9&d@MP$D+>+Rm^U5)v~Zd9J>9!=Zx`9 zPm-42qCxtb9)TZ7{z3eOFk~al)L~d9j6MHG7(DsH&}<`&J)19#&DaQIpMEP$!<;Y{ z%)%Ha3}WC5lNIj#)GWf}ZhGs-BFxHPbXFR7i>KR6z>E zFbpdV$dH5e|KH9|mo{;dj$HXahYj@?Sz_Tc|O@}3rv8wnu}@DOiS=HPJ6FVso?v<>;#%o1*L_CIjp}6><+aA z;vhDJAZJ%}Te(VqWMi2!N_W@TRyswtYpC*Er)?!R0m``bISrr2OShv%{=tJU5PqkT z9)I+X$7TO@KD_O}&WCFMRX&{dU*tn$|7kw7_MhiNV}E!&#C+)NKZ%Fl{+Mm8vHvt4 og8e7)u!Zk6iH9iv!2b|0;ztt7x(>cD00000NkvXXu0mh|f~g6I9smFU delta 274 zcmV+t0qy?m0^I_T7zqRe0001qplF?uE5m z?lPU-ZEizB!KIKWD8fic;|{NhXV4@iq5^k$`i_61*EHWXpsQ!$B}vQ_8;CC|2HGe( z#=ODw=r$u0W&#-CJcWeB!9gEnV3eMD?~ydH&1i4Z46bN^kZz^N8F@k$OJt%KI$nO* z>&){wp6&-yMQZcT=`e|%)NWgL`aV3<_gLDiAB4Al)(;NoQU~*cVhz%)!@`e0(_!I< znhsL?@zkOA!*!_qa2+Z?Tn8M=8E_qhLuunWSe;NJvkscLD-qWL(r%>#wCm4~Yw)T0 Y2M{cy3}ioYx&QzG07*qoM6N<$f^*Y+ng9R* diff --git a/graphics/pokemon/solrock/icon.png b/graphics/pokemon/solrock/icon.png index 4a0410cb55d9afd00e0f985a84ea7bedf5bcdfd3..07a416c283246b82975a468c69a7bf27924f185a 100644 GIT binary patch delta 232 zcmVKlQ|N_ zFbG4#3`>XZf7{5o`yuu(Q&=qznZ;b!Q7i1?wjp2(0u|R+01QD@7C;dd2O4YuqXfKG z0+ld{KzaQJD=|u9`Y>QJ{lh#WNi>~c_)}>{qHSav7!}esF>3dKBVES0x>r~ME!=&S z)YX}cr6*^J=OeR64-zi@v>`PKN%qq(bnc+`VX7TbeUv>GE1%z?AHxK;e{u&L{i}2S ipE>_>IOqS(^S=SoY7gW9A5hi+0000<^TXR;HGLlNEI+_TH)F}r5fj2+>eCJyR_-ut;kL@0qLV~d90>lty2^1;- z3Jff5;5I0S%14!3g4MZ;&Xc2{p&OmZFECbaG&j$_u{MJ_*ThKU`{|%JLY*_Vm#0RT z3(Cn(*Fag3##k%r&0;2)?~yG4pK0`w=htA-GlF~A3BGm_=9tJ06w0G U<5S@u{Qv*}07*qoM6N<$g8B+wZ2$lO diff --git a/graphics/pokemon/swablu/icon.png b/graphics/pokemon/swablu/icon.png index c1aa25e996421e92170246dfeb4833486e3a8b7e..46be1f4033f1585999dd75f3f8680e96850c0187 100644 GIT binary patch delta 261 zcmV+g0s8*H0?-1G7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&PhZ;R7i>KlsgW? zFbqQ-aZvz+y8mq}scmW?mNRt85U!;4G3?jcqdUs%!dJCr%4}D&-WPRD*{vu+G7{x+ zLWJH#S)6wt@cunVICo+Cs_%s9xeR3!0~8+M#E&7}hk6$lV>H9IK|6u>MzaKVb>AgL z!pEdQ>V!v(QA4U^z_HQF|6co}M}O*yAMNwwRs>1HtN@aPSv5++6dvQP*8mBE3;>z> zG5};wm;oSj!VCbZ2=fC-vE%`enhpVw;0LPj9RNuNm5H49c7%BWb(IU{H_d7_00000 LNkvXXu0mjfDlc%V delta 245 zcmVA>07zqRe0001qplF?uE!LbD6z zmI_i|uq10AD%e*DW^s_T&?Q6R#0d7TlZ%7kjeq_mH+(|;_^5FeWG9dX*rDg8d`A+< zBven2V-?WSg3)L1`{h|#L2kWA_pV$wQ+@Kc<&qqro-YGk^ssGXlSnchEr1E6lC5FZ zu&0+WfuTY9EAT)j@t=zQ8O6qYD@!$P_R{(5`@? vf(n>Go-JS)k8CRdT2UAQ8n&y{UljBJz%pYq8hqHC00000NkvXXu0mjf>i1_Y diff --git a/graphics/pokemon/swalot/icon.png b/graphics/pokemon/swalot/icon.png index 3611b27feea1fd75ad4cee5839fa44005d0ed6f9..09f7162d2a3399f4659bcc50c7a391cc9861267a 100644 GIT binary patch delta 236 zcmVKl+6mn zAPj_sp4^1w{oi);qp%RiUKY9w&LM}+r%79#){Y*MnzlBZFcNkkH$Ecn0Oc6rLWFj+ ziTMQp?ex)N4R{OcfY2_v!yu?^p-SXK8p$kFfo6cqT8a5mcW_sN@G6DScp5}hDNSsM z1hTHDNXHiYz{Q_SZ{lm=A9rJWVvhbt=kkB!^5<7VfZw})I*fRj>44*5rUQ mW;)<_h>%&1>Br?a^WhD)br{LC*g|>$0000 zWsg`8g?ZrXv!SQt}Q;1h;~UNfzOe$Wizo~mK4+TTX0 z0ql1nAFh91SFu4TTHxTU2YmEU8@exk*JGO?@z8@+n3{O#fpZf-q^fhOYrpm54L*O+ Ur#U^KBLDyZ07*qoM6N<$g31nD*8l(j diff --git a/graphics/pokemon/tropius/icon.png b/graphics/pokemon/tropius/icon.png index 647767ca3de1b28329db67c794779eed76fb908e..9e7b61b531a138941fd2398b1c0ca04525a639f0 100644 GIT binary patch delta 368 zcmV-$0gwKw1G)o{7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SI7vi7R7i>Kl)(90L*ht8_>FW z#UEe>REQcuMr`l7XTlP zn76$sksT_z>nqDn!AYzd=%~X-dP}_fc>ZhqJIw4bX)G{LJIpEGJIvWYP7X5}$k|~Q z2GTps+CZAa+!=^F%$JOI&;$QaX26E{S_JKdF>}#OD^oJ*vb|9??h;h;Y O0000DxTHBye|DwxrDK%cA@r}MG@#wavCvGOGtqKl*1*h}==}rzKiEAj!%qKUx7|;6Tlzz}YwJG| jhW^SSQ-8gS|E~WFL{uA(?SW=X00000NkvXXu0mjf7nXzQ delta 288 zcmV+*0pI@U0_p;g7zqRe0001qplF?uEt)S8lfX6cx1}ce#E4_}jbf_mPX(Pe)j1gWNtXFi+c0C$OET+ z6sAAjce?G}gCU(*0Muz7H2A>yI8@I5H4e`05QoNf{t}0+`>=I?SlkcXxgX+SAD+Zv m87;)&W$lXM;3oY?9KK-K^x!41Ghhq=0000*Q%z2WKn$H5^a7usw{u}) zxEG1ufqkKI^R1}Ftw9(ztUA<^2y}4iM!Oi&m;Sy!LikgrG4}zx91*PVGawcerG)AF8G|PP(%YF;4gbP^%qew_7|*BU zw>6*i!Jg1HBpIjP7n;!PW66&nfF#$4*saIv004We+Gz(=a3REMD`Ha;%pys4!BB)- zQ9Q{u8dz?6EQ{2+KL9>n?D)&*)@Lv>eH;<%sG13;xePI7au_%!zwdPA2st6Y(8m|~ WLf$zUu8wX10000V71Dpep7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S8c9S!R7i>Kl)-Am zFbqU(39_KT=>Pw=BPCgOWxJuYr?R?*d6peHd98iw=jC^~+z?N|=b+00xZ4WoVB)sO zn|D>^auxgOE2s1km@5!2S;cJR;-B3qT_FFpF5?q2!!G z9MLrT2V2JKTx7d{WbS&G4f24^sI=+i_tbnxI`Xdr`CxmfY7=+vpzri1iZ_v4t5Kec*i zPm`a3Mqo5RpD+k|Dsj#L=~W(31aK(x-orrc52QMuS1>_$Ya%qGxoh(P4U26`HTkOit> zU{zeapy9?l9VvwX)nrng)0s#epxvJT$)YY8-9Z*WaUZ5mdc`2@$QAoSeb6#TCnm`D z9Qk5E;lJVt5En2Jtrf=O4;OwSSeQ`74=l`>Eq)+j=GBjzFuN~5Heu-MM{>KNB50lr zu Date: Sat, 1 Apr 2023 08:02:14 +0200 Subject: [PATCH 087/129] Fix gen 4 icons --- graphics/pokemon/arceus/icon.png | Bin 397 -> 423 bytes graphics/pokemon/azelf/icon.png | Bin 429 -> 425 bytes graphics/pokemon/chatot/icon.png | Bin 384 -> 337 bytes graphics/pokemon/cherrim/icon.png | Bin 266 -> 280 bytes graphics/pokemon/cresselia/icon.png | Bin 474 -> 482 bytes graphics/pokemon/darkrai/icon.png | Bin 474 -> 481 bytes graphics/pokemon/dialga/icon.png | Bin 450 -> 480 bytes graphics/pokemon/drifblim/icon.png | Bin 389 -> 381 bytes graphics/pokemon/empoleon/icon.png | Bin 368 -> 384 bytes graphics/pokemon/froslass/icon.png | Bin 366 -> 376 bytes graphics/pokemon/gallade/icon.png | Bin 360 -> 378 bytes graphics/pokemon/giratina/icon.png | Bin 442 -> 465 bytes graphics/pokemon/gliscor/icon.png | Bin 458 -> 492 bytes graphics/pokemon/infernape/icon.png | Bin 510 -> 518 bytes graphics/pokemon/leafeon/icon.png | Bin 399 -> 408 bytes graphics/pokemon/luxray/icon.png | Bin 449 -> 462 bytes graphics/pokemon/manaphy/icon.png | Bin 351 -> 373 bytes graphics/pokemon/mesprit/icon.png | Bin 455 -> 441 bytes graphics/pokemon/mismagius/icon.png | Bin 379 -> 399 bytes graphics/pokemon/monferno/icon.png | Bin 435 -> 446 bytes graphics/pokemon/mothim/icon.png | Bin 425 -> 435 bytes graphics/pokemon/palkia/icon.png | Bin 437 -> 461 bytes graphics/pokemon/phione/icon.png | Bin 332 -> 345 bytes graphics/pokemon/probopass/icon.png | Bin 399 -> 408 bytes graphics/pokemon/rotom/icon.png | Bin 387 -> 395 bytes graphics/pokemon/staraptor/icon.png | Bin 446 -> 432 bytes graphics/pokemon/staravia/icon.png | Bin 388 -> 381 bytes graphics/pokemon/wormadam/icon.png | Bin 374 -> 374 bytes graphics/pokemon/wormadam/sandy_cloak/icon.png | Bin 423 -> 385 bytes graphics/pokemon/wormadam/trash_cloak/icon.png | Bin 406 -> 370 bytes 30 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/arceus/icon.png b/graphics/pokemon/arceus/icon.png index 155bfc35bdb7bea870e2a37805ea174d55befe79..6141c35e8c926a862374753d37273d70b7660e5a 100644 GIT binary patch delta 349 zcmV-j0iynm1E&L!7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SB}qgKlu>WP zFbISTEDsy_U-0N}Z)B(Y<+q;PO z07stg68r=pnCJdD=|@8@4KQ?+A4`|qbAOK=m0l|~0|qM*e&{*^`PDS_$8ljrY}I6X zZ05{EKLzk70C&}Y2(twI3=sBi?D*N>kC%@PV@l9-mx#IogT*wkU=-k--9p4+%Shpp zkdUGRttwX!00h~x23qyH5mZT92CGh#6XnpFgHA+H0-TRS_y>-_Kqd=JNQm~^2=nLw zz28sNZO%_l~ zIg-Ep?33+}v0p6GcXPZ2 zfGcleM~#aK7|lpv<$;K>Fg^%SU_0zd-RB9fVCY4N1(N+qW3L)*Y51g7k#qsr^?-jh zuM&9=Qp7D*8a8U#x3b`6D~|h1ruYcr>dbkWmhv?AZb@;JlIM{-OehqJoD1$wOcdfg zJLbzN62@6s%4e4_CP+^64|NShvl^rQM!k&*Sj>#j?OMLOB@M-ahC|*=U}u+W0tWz6 zx1Xzv{tf_pQ2nJaeR;yTj!qc+VvH~O!cgbQjW9`<_z%J~cfuSzKL%mEOKyJR#~0)_ VR7i>Kl)-KT zF$hF0IbGoug8%>94kpbOgI7KDQZ?kZGaihCUTgoa6m=^TYU^-$Z+OZyHij>K7x2>E zkX)BO9h!2K&hgCwf1Foo^dlG!64qciPMcsLXAlBT82Cz=Um$-xx;ezIBz*7{qVssy zM@Il6)B?`X#7=g9=*)1KUzx)w_Rxdn+1ch)US?GlAr^lq5+tmSX5Wa_-ytO+*>tgk zf`HtC1y`Wyutv#XePNkrr3mm_`X%QK)&GtR{A?O2b?;)YEc?AtnyY!U+x7~#tN*Sa z)t>^$jlMz50+6(_D?k!rR)8eL6adMHSpbp{69Li+#4G?l$%qL6sS$Glq(n>rNQIaM xAks2}B0#Duya2K%hyz3|VM7pcPX8`JJ^@~tAMfcw(W3wW002ovPDHLkV1k;=mDB(L delta 355 zcmV-p0i6D+1FZv)7zqRe0001qplF?uEPtw^d_O2eUD#fcWO8wyz+0}@CS62dr zT5kmog54P|g5Mg#3@9dkTP%PQJ)p0n@MyXu+@n5W!%v1558zop9~$k@e2|YrPq%*u ztt}5=bu zMp{>9DwxAi4xd>Q>3bR7CKE6{j#Y|c8SCH$c8B<{@7I8-43`;Dgb0kv8E0S=TS-C$ z#`E3ayR;-= zRtgtj#IFB?f&k3yHUz0Tklt4zv7oJT1}{~;z8_>x40>!3e)RwV002ovPDHLkV1l88 Bl%4

    ua1JMGI7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0MAK8K~zYI?Uca| zgdhw=g$gkwO#lCHx9ys^K*8I_gFSGWM>`74w!P&S-|2zZ2#2sn6cA*tBM5>8paU3l zf^9cX0NKkn-ghY?a5Wzov#$W3_+THV1H?A0*GmSnE+8QWmz;};#H4_TLx&%Lh@$fq zT;%uI2omUU0M6NFEXF8=1DJ8squbzQVu*-1rohG(b*ZPl*19-r^^x{;bLDQXlod+QcpLx# delta 311 zcmV-70m%N*0)PXM7zqRe0001qplF?uE@l08nuFc5`(gONEvEJ7b7 z+$SfXqo<=tk#lUvEmF{MB39a1TBX?+8^j82;UPlVtj9e_Q=d<~RvZcuE1YQItryz?AMnT4S2?>)^O6fJX6ILp|CK*2gnAzI08E+OvNE z&fcz5=ry*TtH%pCc0g$_KoMgo@tkh{el?5&(002K$9~?wiCgC`506R)d-ZQ3KZQ(2 zNM~gJO(Q@wT0U7Y450~=iU}YNUL`K1fUI5@_{lFt1PwSp3zxD}x9{N^=4CLoz59Th zHq0rocVBDY6VDQx*nyvb;igXPz!4*5HKv=;bya2lI2?Y{AK$>%ob>NwqtO5W002ov JPDHLkV1ispi*5h_ diff --git a/graphics/pokemon/cherrim/icon.png b/graphics/pokemon/cherrim/icon.png index 145074d7a3b26085ad1fb7b7b06110a2c24805b2..6915d775b4e5d11b6dae57ad782bb3b2f6695dd7 100644 GIT binary patch delta 205 zcmV;;05boI0+<4j7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SmPtfGR7i>Kl(7oH zFbG651r6By|G%x8c8j{SLm;=lhb9Qu+R1N0#()Ni4UEwtu>f>8VnK9;k60^UWeP=t zEmM$!&mp`rOaRE9z>xqZQbUEnAdgPT1qy_UH&8L4;C6}2ar6gQ{1%)Teds++Tk|Vb&InGXe3Nu}&B(DvBSw3+!ScJ!^6($`mW9f8z=t4;^#JhBIhEHGe9fk<;e#LUnx zDmt10+NTx^25(w+vxAxY2!IWs+v+#Fg9GScBGHo>_LG$!xfFYmvmUVF)|2a=d{HY) t|5Pz;5C#asJZgS3$O{Afv@rPGj~AJwqb$^$SEB#`002ovPDHLkV1jgjQI`M! diff --git a/graphics/pokemon/cresselia/icon.png b/graphics/pokemon/cresselia/icon.png index 76b9b36390deb598deed97a45d4f3f6cf7323b23..8189ad7d1658b3fbf8f4af24065a026a71f8d583 100644 GIT binary patch delta 408 zcmV;J0cZZ&1L6aa7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SU`a$lR7i>CltFI9 zAPhw#6{N^P{`bFazwH?U4w_(Arcm@z1m?3Zm`%)&roxiy;IIS z4&8Sr<~CZGqY@Aj1w=5#Imx%`1r&HnObJ*Lw3ZU-{Y=LcQL)_!>$#n4I*V~H-p0j+ zNSpHOaSKGMr-$@k$L|{E<{;sC;(fmbvKN(0 z+$#%#*p_7`B0(3(!jtjp2Z5~ha0=vB4=;iINDtqgYarZ28dVtp0000F34eNq_wzx>UoEQFfUm)39b(rZ zXZ9RIs|Y9-O3j87>Y>lX_W^hSm;i;&G6W%@&!9KVx9FM)+&gQS(*!3#D||5w!=`^p zXPEl!-R|`asAYV^DH7M`G?25~ZNTPQGPCt?Q9=!$rF^?P3B`C$44qMf5?}e-iBZA# zag-BqLa9B-Lp`=BK&aNTQJysloj|MauiH@~@#&w?7iy~7ce$2yk){p63?7jUw9lLmN-ZP_Grt#-gmKWVUf!~)^ZEgAs27=3D&r3T0000O@O>Hq)R1)Nb7opaVyQpvm)P_%Ph-#UO-0^}gLAD|Qn4jhA*l5-G%y&wiy zxUUemfLm#$2?p({Rnf4EE`c$=bKpP6pXaQ1AfGh#XQnY1RU5jWC#3$;9e4lgw84#C|I5^FM zE+EKhQ#PGDhi#h$AQK+ie1h#nh?0*pIXJ6e+36*~sPT9KTN+ac+wlS>n=uQ3Wb=P9 zgjQD|Krsu4b#&}`%ENH~vF_sFSChc)@$=F*IN)^k?m*Xf?;DWm?-#+J7w>8A!?(z; z>sNF2{I$RCpBS?sbbWh#W@3tViIxJdyH4l65s~!q=q{ZWA>LxE2Lv_njm!ll_|lOmch)i~+I) zCN-o017lNXV3J$`WA+zdv{5EtEmXjaP8DEi%DXKvW@ZJ9Dm5^%0Ao0er5P})C@^vA uj{`=mfMEk>;XiW?jM6|PH4%S!S&Uzw9Zc+v_Zjy90000KR6$Y$ zF$`;L=fc7I|8J3;v`sewP7DLX&USi`BHMCSx7+V}0KN4)!Ux6Fx~2yGObgpyC21twu>6WN2X z1g!dXadK(XBU}}Kx(H&JHCz3VId39Jf(;SB`|&WTW?&^CB1owMlfx!$%ov?u{bens z-w6Pc6(Ph2k4uUEuxhwRLTDG!xs>2$;$Asy; z2O6I>YSa^h{xrxfkz?zDC)@Ob45J(_=aWVoCc(pFCy;@4p-o%-gtN}n#(r%v@8hO@ zb?d6VF*fZ#_WTFP4+hAy$zy=jMV@0G1B74UJz{RB0EtV290FwfdY1sv*MGejuK{w% zhc!UX`LG1Y2l=oD$T=S>Kt9a}diF&=;2ZMc9mO{uWGhh#bpQYW07*qoM6N<$f-v&5 ALI3~& delta 376 zcmV-;0f+wJ1HuE47zqRe0001qplF?uEn)g(4d#^V&s-S-XObEOErQd znBvq{8fiOag>2c$$|IoJa8rQ5UbTdyOS#P^i@COibQqRr}R)I9wxXbMbDu%`t$e?z)VFK zz##C?!1(d}0?hr~4`9+QBQQ1h>6Q_g2Okj_zu;p61}*p)CSaC)m{&eLdF8|ZfRAtG WmIue5Afs{s0000VqCXHXO9=0aF*rY3W%$|On?mJjFe^sQm&Owh-TFwJOU;FwDf>6@g5*GQ86t6&}a-((G?ift(5gvGu_^=jqf5DHcQaAdv+IYAHMn@laW!C$$+|Bn~?feR6+y z#$Am&+-(5uxbzSb=E05tXU07)m*Xv6s~XjIIS&Zm6?b#H!%p`Aylxme^Vxf)V0>KL?H63Boaa;r2tOf|Kj{BVK~3M4#MQj!zZ&KltB)J zFbGA}LQ*#T``>mxwUdmM>Sk6(7B0#YD4Mq{4-DMp^_qZO0)VQ@oPe-^UX*|cS^-QL zh;v5AY|tnm0n7$%1%!aAr^Mc&I-hKlAng(aDl53vGr<{nN3*I-C;7HUEhwsao^4%Y zQ7xY|@R*L9W)H-FGRC}_@!a-w#E8Vjuvsl-^_@5`16u%Vyo?E8)k-63N(8VKF99@S zoI-eB)~FB!cRp?duS-i{d~AG)DXXfb^60jl6LiuRtCk5R3vD^E8L~uRs!i zFb)Dq+6)3o{csS-KtK)x$qaH7NNNy#{eg)=g6V$1|NQV30mB6vY7rdxlmGw#07*qo IM6N<$f=#Z1H~;_u delta 294 zcmV+>0one51MmWn7zqRe0001qplF?uEX7is5*1-0w4~|O! z7S#d_16E6*${zC2z!m4U@HSMO*TTD1jJyDjEK36F=sG0Rrw$y=r)jcNaR2(DQ>%YW zC8B9kf*8xTnPTbK%GvLU0s(F&}CP@u;jpe7vv`51hyw~O$4BHQ4s5|E@Z^` zMshmMCjL+cmkkTn-v>y3C+X)OYCVrI@*_+D(6)RRhU3eM%);<5VKP5vVS++%n1z|5 sQ!)#qDa-~wPb^xeVddtB{K=0i0=g39+dMu*JOBUy07*qoM6N<$g4eBv%>V!Z diff --git a/graphics/pokemon/froslass/icon.png b/graphics/pokemon/froslass/icon.png index dfaec88ceb5d4edcb9e5f6db4d0447f26f6adea3..2869fb8de14d36f3c07b30086270477dfffd0a59 100644 GIT binary patch delta 302 zcmV+}0nz^M0{8-u7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S_DMuRR7i>Kl)Dnc zFbD(_ZlaOK68Haq8<3nw0Z!7SGKCv4*QCD#{pRPyt1d#I81WjEHJ^gXeG+0z*p%e9 z#e@yXq0p_A7!V787XwNRP-J-Dt||zsq&dVf(Cq)G3fR;A??IQ@#l#5yVpeEflZW z&Kw<=SwVa?y8qYgyD*l(uP}B8O`KluHi7 zAPfZqm?gaX-?sh$QNSddN?kPGw2G&Wd7^V1|5pGWfEe!)1{iq)ZU|Hb!j1qDcZqg@ z_K9-d5s-eCA{Vd$3iwAAp!I8V5f}i3#N`kM0Eq#cFwa2{prqJ-j(i1BK^c-$)CtH} zfR`j_@rQh!j%)pY1BK+VAoGB#jZ%umFc0V}GeL=?MyBj$k%%+|Z2ED8POx170000`jm^j%2o`$PfIN`vEhI8 zYch-n3vAqD?bX7i@d5h!0WbhI`wZ)}GuGMY6027bTn@2B)J}0%$^*3ppq^YPcAqCL z@CIOj->W|m<~cJ86JB?wQ5Xw-di}dF7Ly-%3WG58^dmm|APiN)k5L#Ib`YkY3Bx2N kx`I2+;sEi;__-f9UK5X$tJV2A000UA07*qoM6N<$f?}9_Hvj+t diff --git a/graphics/pokemon/giratina/icon.png b/graphics/pokemon/giratina/icon.png index 7a6ba19e98762afcf46a6b8ae1802e24f70539b8..235ea4721e6cb91426e9ccfd9fe5c6f68d5ad7ab 100644 GIT binary patch delta 391 zcmV;20eJqp1JMJJ7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SPf0{UR7i>KR6%lt zFbs=B%+dP)Z)+)GOTt1=?ewsQSr{Zawv$yUpST8qXE*{kG=581cp1D2Z!Ys_@7;^_FcNl%)89fXzyV8_TKeGRj)QAJ}5=FO%Z z&$X?wRBBV)JWt4UVuB-7rbaPqS0zI6ol%#d6OzAt zToVv)5@sem7p6r%fGHR9+M3uhp8$Y!5#Mca&09wRM`S{}Pv>lO2zVOKl8e_LuBv~c zbASx=j0CV1IrsW<8UWQ894ws~q9g9qWh`>Q;cSW00L7&ouRTx|Z3y0I59Rc*(8Q(+ ze(PyBy>KH~ z%G7lpQK}jtH@39P5G9k++V+0Xap7FQ`w{Kl)-Mq zAPhvKu2?l#!vFubof(G!2}FD9X?-9l9t^hOZQIvAH}^U${3$udm4tpMJg0?30{Duh zWKNCCI==)8k)+{h#XCU@5oVUN`4|BU^WNOW+7?{r27&FCEZkaOj{ybz6c~^B-c9Rq z%;bjvUiiyT#%zCo{~FgTHyad)^P+^oT5dKhKxTyL0Wu@Z2#`Br@(7R%VI}~%5=PboWF$;H ze-}UyYC@PGIThf8mpfsO=Z{i|4>!UnMwClm7t^lyh5$ZW@Hr&@04EbBm9c}kDgXcg N07*qoM6N;tV1n$4w^9HA delta 384 zcmV-`0e}AN1Ih!C7zqRe0001qplF?uEX4v|FEde9o^ny@YU<_Wf1A-n1Q(*fc1ajoXQ>!RL zJtmF9*-e2RaM2~BfMdH~-^=ch5qS=fy$=sVFB01d(hcMs`T=uSaB+gdDCycGMzWmN z)=sU$Z@k#wk6SQR&=$-j=nhP}0b^``g3;g>j6UcV%p_<5Q-da`fia69%wSeQ4UAa@ zH8887v4L3xS-dqci=Y+EB1kXMz|4Y_gO}YguYzzPgmWCOf|Ns+!etSpC3+O)TW}Qv ey#(%ByNqw9#ZY^}4PSQv0000KmEDen zAPj}&r&PV@dH=WF7El2@yUAWplZnZkL$QT^ZreA!z+ZX+n&*0sB2>391xz$Ks#tX< z*40ch>kO0ZM_leaqd^K$2&$7fx*AfTkU~&hz2)_WW(X;%MVRGXfI3nS;lt|%N=mwM z)%Uv*m<;7S&te9DM*D}EF&N6J8BR;_=uat{O?8m&(G!Dt*aDQTPt2Ntvb7jfBariP z=n@u@Oj#YXzTwc&ghDY!(Owo_4&rF7fh3|Vg7NkHJ8n%+IVW9gXX*8-l$fGb4?VcI z0}>-*D;}AghNE67tyLe#zWcXRm)ctF_+U_}9u_`dZ|63Df8!r9+;g|1H$Q*{4{del zhl7WvUi|RKA2UDR<9`Fh@bJ8kwgn)j4_km%fGqiS z{0D##Ry@?{e*jYXFyjGY?XLjod{|1Xr>p?E_~4KK$OnJ?A3pfwKk-4w|2^I#A9j40 n|IUXEA3tv#oe#gndYgX$5f&M4y+&I900000NkvXXu0mjf2u{p8 delta 437 zcmV;m0ZRUc1pWh%7zqRe0001qplF?uE&ARgQv`dv!HVu#^Dwc>v- z-$LO66|Z{4lHJK4p6Au?cXQ}pP;WU=0Yn?Pd+9G91%ZI+G@#G)sm=+JY@`GDNjLpV zm7Q|^3p8cGyhTHREo^-=WAUnS-IKPkd^*EL?bL6@_TXGqv^{UGQts|f;Pvb(foSeZ zll1t6;h^gR+uAz|$-3jJ2ZUfK@^OEuvC!y3m6|j f_I&KM{Wl+9M-thOfd7V^xT(w#0*Z7TI;swfMO^#>q(MoKjdx{;U<0ZP zUK{=BB`G52b03OK3tiLQn}X3G6sz8Mx8WrYfwCOV)BIFGPmh*2d{TX_^DO!s?-{QG zNV7BoBuUW-dVusFa1W5w(J4Tqo{Qjhqz0mQBV;&+z- gnV*gX$Vd3_2k<=?h`9dUCjbBd07*qoM6N<$g74IqQ2+n{ delta 325 zcmV-L0lNN}1CIlc7#Rcu0001qplF={000DMK}|sb0I`n?{9y%=F+YC_Nkl(?T$iiV>=_xpW!CT-kc-OE!a-SK9yMj|^gFL%jm zEAlBKqjzcwFJ4ZT1b*;`?(pVPi+#wEzN*R0tthCPWLCc@XqwYy=jNfcl`V2s{Ezw- zF#XmE7*OAwfEms`00ZM}4h-k<{t+1BNK67|#clyioEU+zYXc!;OJHC>fYBK+SLNdy XFg(Wv>jNQY00000NkvXXu0mjfcrT6a diff --git a/graphics/pokemon/luxray/icon.png b/graphics/pokemon/luxray/icon.png index 20d02d897a13ad9b7658faddba1f47e2ef7309a7..9514dbc9b21280086cb805e914a149405341a8c2 100644 GIT binary patch delta 383 zcmV-_0f7F&1I`1G7#0Wv0000?P=%ZT0004VQb$4nuFf3kks(BXNQv!~%dW#93`Bzj z5s@s<|Nm|M0O9~`cXv@;7L^(ggKh9Rj-Ok=mw5UtK>8q%2zVBR6Twh}#JGb%i2{ZS z)B?53?3vgBtcfs( zR+28URYg?`>wdgBu9dA(Y(gxrXVeO+iPnc9j%K087tu8K1;)9Lx z{$_x{GLF+f0Yt~w0PzkWmaF)OwoCv?ZH&Y82Y?JdJn#?z()sY5kpYmK5A$_4fV}5} dZ2e(Aya3^m9QO*T^Edzi002ovPDHLkV1k#Nt=|9u delta 370 zcmV-&0ge971Hl837zqRe0001qplF?uE<}Ggjm46&PQ)+_K=TKdca(e$8)BkNC)oIw zo9N2M&vamjbl;E#bwG_XoODR17&~cmy%Q6|k)f)e65DZ}G1pss5rew`=^PM*1pw(M z0$M5|?+ch1kwEf7cUwSCh@4RV_uaFAL!ZzhY8rUx$iSOyK$oI|Cl=64jK`h)5oCWk zSAg?(M2SoRS;4U3C~1>ckrdVsn;a}txr6NZ^j|v+7ApXZkCW5V(bQTm!@ZmeHfEm6 z6^`Cx!VyEB>Re!aMVCD?EOX)@g+Fen&1>39f^Yx606Cha;roRE=;{}6K3}1B+Opy%SxE)%SxEy%UT##Urxd>xExl(aFlMe!$p`J zFjgIAVN$?AMTbQgi>~TWg~{s26iZ`881;j>K9>r^>PMS~2y^ZSk5~8O2eKl*tam zAP_@y2$3U=@c;j94WtW!nMl1v;q%dPK4GPVH(5!qRSm!NEua-JvTn`s8l zyO5Tx8O%0xku5#HmKrDDnqG;)Pp8DWK^;B?fm$G!h_m1-A8CbOqI6)wxZW|d4#(1- zhV2d?^@ia2?OZZ{wo=DSP*ZH$1LoZ|v8S?Va1>M*&=0iC)gO23Z^SEj;1V9~<@*8F zHUVC^6#fK%wnh9o03sP?i4TBGr|1E~u|y9L4sV=2K!(Fm(;grL!rGGy0fIL`<~LRu xlj?1_9J2}#c+XpWC;$-wF8C1sGrwTN17*Y%Njv8>bpQYg002ovPDHLkV1hm~fT#cf delta 277 zcmV+w0qXws0^b6V7zqRe0001qplF?uEg=(8Z8m!$nEE%p&w#wT+XybR%Y!|H+?8CNIl=eqr2bHi<**oY97NB2FEl zS^&mdhkh1QJ4P+tv(9P+5qa#_2sN|O>6X1TsZoe+ME5+%b+3)N=qYcN0aV9a-J5@y zab=zG=5~R88I9p=D`=-ItR!tPagcOAARYPhMO$3_2QKglE@U$DV`A*wkjy>wVh63I zL#W@GCornW0u05>0t`g}@B$_>M`i&gGRGglmKl);X} zFbG5=MT?M)nE(IV9qcBJ3F)z?(kh3}cuY z$>D$^>C#(h9wq?|dhM77m7U8)!qFO_qHZ|#Fi7j7X4B!?Xs}lb4H#RfsYWxyL4(*U zguXa~Zu+2nv=@pyQ(I7fbC z*tNdR!F+sqfAx*}EfHg z@FBz{$dbH;$gZrnWpNh0iAZQ)!DC=clVjK|9kXqdrXD@%+-CUyB=hHE><<;tw5KCZ zCiH;#ViUdZ5#JaKv%?-SN3H|az88P$ zq&Yn2tL=xt%~FeZmBi`0$nANtiVU>1auysb2 z;kAug5b#8yRHa%$K>$Tj38f4~hpP)gg=yl-;16Zax-kQ%HPuEYnF!5mo`l3mIzA1S zeg^$t>({`93cxTJ1OXT}WE_F9PIhTWkHEOA>ZD14d8|rGfvI_Q-F;>RMyRKr!vPr0 zn=-7@0Rs{y!1(`c0%ScfE-C^rU(qrE6B+A)AqgWO;DKpPLJ(^W7djz`fg>(cg8WJ} b>Bss8cu^mXAKp_O00000NkvXXu0mjfjn%C@ diff --git a/graphics/pokemon/mismagius/icon.png b/graphics/pokemon/mismagius/icon.png index ad707f8cdd931b158300811a4d57ed8f62f00d94..07e075c1e88c9669bf184b7fcaa763b49d068453 100644 GIT binary patch delta 325 zcmV-L0lNPC0*?cb7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S4M{{nR7i>KRNHFB zKnRTFrB!kM|8MIh$thjkz8+{@0s&{ejP4xA`xy>k>sLQ}fU0c};ioZ#r&n>r=vP2Q zR2PFOQgO1=6`$p7mzLO>>gc*rh5Cm?E+`apv~#7dPUK1>4f+`_!LuV8z?H--2D XoX8tnV~ldZ00000NkvXXu0mjfMEsB~ delta 305 zcmV-10nYx91N#Dy7zqRe0001qplF?uEs7!!Zlz?v8N>BR4pC|em^RxhnHAtxiPKAyVZraH+QI=52h|q50I!O!H}G>9)&xAhpqDQeVC{^w0<)mCByCI61#e@N5|DrU zbEWJZ=a1?wJYVY9f}Mv7Tr$07b07#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SJV``BR7i>Kl+lib zAPhv!B~nJKyE`A2`+x9(6Rh_i&4ru&Z@<(#_x~GUW*C{` SfqQuX0000Qi-C#hXQ+==`Ta|nPbm0d&bVQ1Wd`;B>DR^lNM2d0Job9AcEQlK-`Pn{S?jFG3 z2aZ9df=x37s1y5{`@5R#X5~O_h)e)bY9dl7M4tl-yQaiUr=0YYR!{V{i6TCcJ*IzI zEQ|e&b7aqH`jUG9A1OUpfRW3wOwQw6fo6a=#YI~P12j@fa|M|2Pg1=u&unEqKoU)P za=Dnf8?Oe1Jl)beziI$?cegQdijFmOKLCJv@l_1^X;i&|VW5J46XR0-^nU`aFd^uK zsg8tU9eQCq2 zFs(2P@mIe&@%If{s}~=6W5r(E5S-pr=NGf#1b9uZ_s8gH}f400000NkvXX Hu0mjfDNCWs diff --git a/graphics/pokemon/mothim/icon.png b/graphics/pokemon/mothim/icon.png index ce6f8f0f6f33146f85ab39cf5aab3e706b528154..33124586818efa1636ed2f262a6c27ef6b4f39ba 100644 GIT binary patch delta 361 zcmV-v0ha!$1G58=7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SF-b&0R7i>Kl(`ZE zAq+#84D7qEe|^0Gw8dV|8D$Z64)~%o1|hr~aCZa=!9Edp=oFF#6Cs+X6 zJBO~vI2bGdYM{=4K~x6D4#EI4=$u8Lr*!VN4yo$vSup|-u_2c9=D>v{w@1=L*xn`$ z6eXk-g6tf)C8eYX5hQI5{JUN#G-=y{9znVCgKj%LivRk-I=!bR@x$1C+}8sTeNlVB z_^Kb?>;#alVFbv*FazY>&;io)F=+u~Uf* z-I^t0Buh`-=zA!T|^MURLrgHC_0 zwr%e69e2Qm+*C<{t~`)3tCD`N5Q%>Z=c~F(lzPHLct>}p^v|=cyoBP}2v~czCX!6$xP}9Ot#w(j94LSyN8vk1XeM`nf^EzQn9sw&16claH z3ljk^ObmiB3t(Z~wPCYCn4qVah0#ky{hkf-!sO(HQSOWvhBH1hU}4Y-5;|Cz(HVq0 xKcN#Qb9q+E3e&7KR7sKp zAqvU-;QJ;1?eoOxn#zN6luw_F`(P+J0tT0teR_?Mb5RDut<(?hA2WqXpstz z$ZTOFilA*qW+3=iNf3~SEFf03%eHVaw2(&G>^ z*belqah&GcxfIS{bl)0glwxit0YZcmuz`~Y&O&GqB=?{K8KWr==vVwT19wmwCh|rBg!iu_ zKRlj45&s7A3kI^L^U6S$f4nr1!#}1!>;`h;l%YTD2J+w^(;qeid3gSIF_7o}Fb%}6 hk7xNqT7I8D`~akQCj*!l<7$|>z zz3f{;;}7i;8Gx)VM_UZNSoz+-Rlw~iaOjAA73j*!gOWkTih}04U3w@(fsePM$(639 z!?VG1d{M7VUsF!>qDqFwns(&8^&&mhdF^kU;Mhp004LwBH4>6Sap0=%8$Sr9bXpLV z6bqPime<6W4o>$JEn7-#f&K;>W9(P&S57XRxCvzFkEcKe{%`^r z_`?ar`vb`d#QVdR`za7VDoTwikjSG|Ap9S}_R>4#OY}M!5kOt#XMj9#FYJr5+|r zB3a}bsT4Jg3`nkt%wN>4TU9omK8(Rnso!5j{a%l*M|#5z$=7{!I|ZZAF+M zMKp*oWq4$hFzqafg`wCQ5{K0!F>9+x@$APJI=lhBH=$sq;!zF&0000KluM4o zFbqS36tHE$An$+M(I?G}Eqhi4x{0=AMO9YbaXgiaQF|Sw)>^Q2utx0+1YF0a1uF`y z3f4U|0L2QM5W>2{a@H9v_Y7rWAi;9Yu+)2puE=LFZ~D3Fq8U6XCm=F9D9sw^8j06S zWx=>_Ggt#NK)ULG<{ur=K*v|j4Sfm$YZycg=?y`c7_8eQaS7 zHI~plqfd9E)5n%PqP6@O>VTgcnpNJlW+2MKSC2`Li8c%Q`me`77yZ;n>j4NyfaI%p zKHLDA@No0PKYu@bNq89fFcIXJA8$U)1aW@+;X@|K&5!skcoziWzz4|$$$XdylK8M9 g$iRoR%Wv}G2QY;nEBHV3B>(^b07*qoM6N<$f`nI;kpKVy delta 325 zcmV-L0lNN}1CIlc7zqRe0001qplF?uEnFpL;>4_L1l717-H4v$MW1I)y5}2lA^xD;i(Q0-P4%$;-q(i z5TZ;4GYEl+hZQ+uUZ#$o^C1<60#PJYS^it&xW#6+HTYI^RWx%>(LylJ`sEF!Pho#& z&{_HQDk}>6{P;m8qm=>HL zp_#hS28mls`w>SqNMvre&uu*h5oNu-g)uaGzhq*&@L!#$0EQee6z^et08@u}ec*sH z0JFS%KBT^TVRU>{;QFwOMI@klR00000NkvXXu0mjfWAT*r diff --git a/graphics/pokemon/rotom/icon.png b/graphics/pokemon/rotom/icon.png index 354b6fd3dc9280ca29a0d15a14eb1cacd8c6ab45..e2ecc8b804e0284cbfb797d6c81613a316ae8b47 100644 GIT binary patch delta 321 zcmV-H0lxl&1B(NY7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S2}wjjR7i={mCFvq zAP7ZGNwfzf z98b|A>hUCmQ6B`biXa^)M*)l!Tmcw3PKX+S2&IRd;XD+8!yM-#6rm<~WVk*NCy6;z zNv9O3eabc5h_VNN5Fkne?ZngoUMZ+FfY=_$`LU_Ha4+%bwpKKWUUdg-i%f6s5#E6K zBlOqnrv{?3!$5RN4S$$E=PF78RzWPXPM4}zIf%@=fheLBF?R!b=tImeP-kfado zZM@yOSg@`qQ2SwSl5}=saO9C(AdoeP83)q4=*49vY~v!(^3k-MB8K(*5g~jv>vJNlt3!zUxxGlOP}~I zFxA}!7*Vk%nE4>-Kji|5K&5>|8w42GQaHuG0+Ys31VRR83oK1WfFV3##isy+xLqRy zQ)Qfisir^zOr5y^)AX8vY1&-7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SE=fc|R7i>Kl)-WY zAqYf8tMmr{|F@yRWMl^2J#1ADiMzLM5Eyx-{JkUcLS{ZWR6ZJ{_kMCrT@9N;U=XcB zge0q2Ah$-U+b!me29;YSG99YkwmLMDpfgvkg6A(5p|WtTYz9wpt8%p7DjGqdbWb5X z#;CRN;#dtBWADv>b=>usyGU*5!wqC9Zj)k-*FW-`;W1D_c(Zt%r>>&)w$ZIjB%Y4s zi%m%_xn5jxPpXfO-ic}VXb`6#_0fOKf_Jgkkz|}-{;SRSKgGs)p7I$FSnfCRaMri{ zz(bM9j}mGYU#uT~B*07zqRe0001qplF?uESHT6KMGAWV2+teR}hDg%1u^-K#khvE^cR+5MwUUz@Y z@IDPp{JHN~jAEu>=K{r8Yv<9=of8CLng80H#TYXegbLOOECs}3)n`BzGOIU6Xmbh# z+zRL&T-W)EFpS6uvF6y9dnX*LGS-LrCjqQ-F5N(VUm7O*r2wK|B>&wAKzsz!7IAS8 zh#Oo^d375TM1mbsd*2$quPEe6`(j{pD})m`d1`#yH>~iG$y4-o*hYWA>ZGdNJLYgr zTTh~Najpq~vGX6*ojc^$rwlxBql|S&i{`dyzT;k#@ S123Zh0000;xA2Gh3&t5G*)!sBtj z_Il2G?*Iq}{dNGC3i#iW39z?I;8K1HJ}vR zqd7302`FD4s?&CV@!(C(nrHp?xMs*xLt<&n&4x|q!6Gs;9gBIfmma>HCr?)nKTNe} zXGk`Pt^Taf)<59k$NU%w68XVw5fFhN%+?bm@WbU!5ByLW01^4&^#()a2L=EHezfbq z<_C{E=fj&Hi|dcZj~yRW7{BHNtH72I*31JRtblLu;RQt#+!ehdg5F{P0000zl08lXF%X6K22Z|#DORFH z3hup!i4+ciM9SPXD?#^WHU>$k#&^?|z@1no1}_>t3c&jy{g!!suxLoRjR50OIS3c&rA zq}_b5^DZneyuW=WLhL!0ek7$p|$2kbX~d;$n$x6h8Nms0=$ N002ovPDHLkV1kzhi~axr diff --git a/graphics/pokemon/wormadam/icon.png b/graphics/pokemon/wormadam/icon.png index eb622fca237ba80cb52986b29f1014a02c3397a2..866acd17ba6425807c2609c6e7bead681929f53b 100644 GIT binary patch delta 35 qcmeyy^o?o4G{%b)r=JkFw0}1-KHx-U$2B}}F&Z$8F zSSk)vbxdBC0Z*tSta!4z+;E=3q{eXkxkE4FE|JZ_jnMdg3wYB&TQ4hxkl( z4+g3Uj)r!O3P4+ghuoQ+JF|N6p%2jzR^pyLR8SL$)s2fXp0gT%gO)}B4_JR z9YjEortb!mbF~%O?b*$a`^W3CKfNFE;RAlO-@MAuHp+@0cFa0IvZJkf=f?^UogZ11 zfgcORJn+N&8Cx0oVKW6hO#GNm{~P?6@eueCmMich9rSw_`Edh;*%#?^PXgos0000< KMNUMnLSTZB(1}U_ delta 350 zcmV-k0iphZ1E&L!7zqRe0001qplF?uE1R5*>zQ@d`%Fbwn`5JdI}{RDq5 z0Z00dLJ2wtO`ADrjLcpvtDOk9WtBG8Yw6f>gv)Kp0dhD;5h z%jo1L_L+pWcE(FWcpQyKHc7&RM^s~4O{5I~Q53Nc45yvk=D^0cxI!UE?gm_f;!c0@ zK)1ns@PRQua0EIwBKBUEvA{gr-OJv@he00g?yS>l4b#(MpzIvzH)L`Xp(j&1#8f#3 zwdw!3>Q&*ld7kh=3kO7R8AodXSKY6f)2T5kE7VK+OWrf%()=Q|k4~a^8MTr1($1B6il1!i@iOkl--NYDc`)&U2djR%B weol9OrYu0s$LT~e6#$hcL&5(ZTYtG!U-$6I+_o@yFaQ7m07*qoM6N<$f+Aa?8~^|S diff --git a/graphics/pokemon/wormadam/trash_cloak/icon.png b/graphics/pokemon/wormadam/trash_cloak/icon.png index f971e3fb59a5b9e2fc726d298ad46fac50e30af5..6834629e9ab3f4cfe1e0bb744ab5201f6b8e0a06 100644 GIT binary patch delta 297 zcmV+^0oMMO1M&ip7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0PsmfK~zYI?Uca| z!Y~X&S9Z&!N#j0U|EQo|9J1+qNGqvxVHA8eCr(+M>g@PH4&vW|@r{ zZR}&>6{axwpE1Q0j^-n99SIFZ8ej&oJspuiA`b7KdN`!U*x`mf^gT1A#F&Hw0k@n} zM1?v$A>u;U-r$*kaS(5QczH;<(l~~=rudCh!h&xhE4eGQNmId1ll(Y8obtmG4s(7a9t8ZLe7IgK7T2bHIr%|fea{cF8I>Q^!}!sy vC*em~-^z~wNHO&MAX8R;3zlTB`fFbsv~29`DZMm+*2 z=zZTvcu%C^J|MM8yE9T<&kTf+S#;TEg&)s9I3K6e-yUn@aEvLpLP$-@lY>9%g5Dt~ zDt!nr%Soj;z9E?nsd8lIP)%m?<^pzQ$?nJsTazf}j?Zp^JQTW&p79zK{n|)lcE^7* zVp^wDs054A`mKoSa*gvK`>g(Y9{PRMlV0Wls5U_8C#jc6WrmW2W@FSY{U4upRQin% z Date: Sat, 1 Apr 2023 08:18:13 +0200 Subject: [PATCH 088/129] Fix gen v icons --- graphics/pokemon/accelgor/icon.png | Bin 387 -> 400 bytes graphics/pokemon/amoonguss/icon.png | Bin 352 -> 349 bytes graphics/pokemon/beartic/icon.png | Bin 370 -> 386 bytes graphics/pokemon/cobalion/icon.png | Bin 367 -> 366 bytes graphics/pokemon/cofagrigus/icon.png | Bin 535 -> 553 bytes graphics/pokemon/crustle/icon.png | Bin 505 -> 447 bytes graphics/pokemon/deino/icon.png | Bin 261 -> 291 bytes graphics/pokemon/duosion/icon.png | Bin 310 -> 324 bytes graphics/pokemon/dwebble/icon.png | Bin 344 -> 333 bytes graphics/pokemon/emboar/icon.png | Bin 514 -> 516 bytes graphics/pokemon/escavalier/icon.png | Bin 401 -> 416 bytes graphics/pokemon/foongus/icon.png | Bin 266 -> 280 bytes graphics/pokemon/genesect/icon.png | Bin 421 -> 395 bytes graphics/pokemon/golett/icon.png | Bin 332 -> 348 bytes graphics/pokemon/gothita/icon.png | Bin 333 -> 277 bytes graphics/pokemon/gothorita/icon.png | Bin 388 -> 318 bytes graphics/pokemon/gurdurr/icon.png | Bin 378 -> 388 bytes graphics/pokemon/hydreigon/icon.png | Bin 506 -> 532 bytes graphics/pokemon/karrablast/icon.png | Bin 253 -> 273 bytes graphics/pokemon/keldeo/icon.png | Bin 399 -> 407 bytes graphics/pokemon/kyurem/icon.png | Bin 595 -> 573 bytes graphics/pokemon/landorus/icon.png | Bin 554 -> 533 bytes graphics/pokemon/larvesta/icon.png | Bin 408 -> 367 bytes graphics/pokemon/meloetta/icon.png | Bin 312 -> 325 bytes graphics/pokemon/mienfoo/icon.png | Bin 372 -> 362 bytes graphics/pokemon/mienshao/icon.png | Bin 386 -> 395 bytes graphics/pokemon/minccino/icon.png | Bin 329 -> 352 bytes graphics/pokemon/munna/icon.png | Bin 247 -> 255 bytes graphics/pokemon/musharna/icon.png | Bin 355 -> 377 bytes graphics/pokemon/pignite/icon.png | Bin 379 -> 396 bytes graphics/pokemon/reshiram/icon.png | Bin 529 -> 551 bytes graphics/pokemon/rufflet/icon.png | Bin 325 -> 336 bytes graphics/pokemon/scraggy/icon.png | Bin 304 -> 282 bytes graphics/pokemon/sewaddle/icon.png | Bin 250 -> 272 bytes graphics/pokemon/sigilyph/icon.png | Bin 432 -> 423 bytes graphics/pokemon/thundurus/icon.png | Bin 6946 -> 526 bytes graphics/pokemon/tirtouga/icon.png | Bin 330 -> 344 bytes graphics/pokemon/tornadus/icon.png | Bin 525 -> 530 bytes graphics/pokemon/trubbish/icon.png | Bin 316 -> 332 bytes graphics/pokemon/vanilluxe/icon.png | Bin 372 -> 379 bytes graphics/pokemon/virizion/icon.png | Bin 417 -> 359 bytes graphics/pokemon/volcarona/icon.png | Bin 463 -> 471 bytes graphics/pokemon/watchog/icon.png | Bin 435 -> 414 bytes graphics/pokemon/woobat/icon.png | Bin 321 -> 333 bytes graphics/pokemon/zekrom/icon.png | Bin 473 -> 506 bytes graphics/pokemon/zoroark/icon.png | Bin 460 -> 433 bytes graphics/pokemon/zweilous/icon.png | Bin 416 -> 423 bytes 47 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/accelgor/icon.png b/graphics/pokemon/accelgor/icon.png index d8538bec1d870cbfcafbaec753b868eec69eed5e..5d971a97b24cb4a2b9798f8fecaf822d847a5928 100644 GIT binary patch delta 321 zcmV-H0lxl&1CRrd7#0Wv0000?P=%ZT0004VQb$4nuFf3kks(BXNQv!}L6*ZH3`2uc z9;~GM-?p}gv_LSs&dj2I-852!2>j#t&L@WCUaqxnEGE~QbL43HqeKqEb)c*btZI1V zf?@`3GM6C$TcE&n5z1_^gj|XRFp16RV6h6iLQ;d!GHwyIWSmUY-*KzpI>3`iSN7;( zvJIYq#rr28Yf^N7f4UKWN^8imrvBBJwY{zH4w3QbbO|wofLF%c(gL(0Tv;5vwt$Bq zJWh>G*5Vfaa?nfeuGLoj&ackD!hdxod;B@y`D4WYhwdHz!UYy@{EhC#Zr}K~m!}pT z{*Xprh(8pf586}Ezc8C Tr8T_#00000NkvXXu0mjf0Q8>X delta 308 zcmV-40n7f71A_yQ7zqRe0001qplF?uE<}Ggjn$GdZo@DPMRfzBIzSBZ0Ok#{<^nA` z<_sMIZ}Czix@O&>nG{JK;>oNMS+?XYK$mba^dWwW{7;DID&W<5(4{hH{butET6epB zE}ZqNY4eWr=lf497*gA4y4}$NdOP3fn#MXrnuM$Fjvv-DrhkJzd^@hh{FdQlen)>9 z43eue?Y3uPF}XtBm8UkMHpXWih|Q zigO{f7sscrf5TzfNyGt=OB_P_B@W&v8X^u{%>YFlZb2uLI}RHPP!%|M@+tj@!;*f) z0qm0g9S3i-^lvzf`E;W}r6>~sm82kIBP`V_eqQbHq51>Q+ozuPuE!_<0000Kl(7=S zFbG2^l!s zEK==NY}a(mgLyl%kA6xIVg83O1(1Osgf~D2evlSGMt-~jGV$XC$jFbv!wo;qk^3$r YUjJVa0^T;WvH$=807*qoM6N<$f;}C4AOHXW delta 278 zcmV+x0qOqT0^kCW7zqRe0001qplF?uEM z!y`C=&tx~IrDCi2jP9r$-~dq;&*(vsKEvPbr^l`|Us3$4c<=XhOExFI22duVv^%xn zVGdxao$kPF0$95isCayY6Ln`x-ZCdpjeVa0$&Fh*2A~OimlM~}<_D1VE8-yP^^||X zOd4##OA^PDIrO&!a$u+7;*5_-HD6rY4}Qcgz8{IEp-NjmZ$wYH1T+z?R;POxB5UZJ z`ltnF_F3aX?W%+2$Odh~WY1geCd|Z{K_X1U$P5x;8l2)=-ol&-nIB%-u9O=gU#Rw< c_;-E*@@A0Sgzy>t00000NkvXXu0jG}g30ZI?f?J) diff --git a/graphics/pokemon/beartic/icon.png b/graphics/pokemon/beartic/icon.png index c4ed605a0ef34e9e866e125ba5a1f8cb2e5f9d52..991f9f265d21e4a6fc28676badba498a99034eb1 100644 GIT binary patch delta 313 zcmV-90mlCF0)hjO7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0RTxvK~zYI?Uca| z!ypKTD_k@&@cwT*er&c@(8DgxlG)q%1_E>n1K> ztb*oE;Af>Of+iBeYZt1$_d0;-wg5zGUlJ&e1pastoqAOw)!sUCI3aT@mQh<{u8kWP z&PS?*s9{owl8M@XpsD#aNfb5XRXxgM9bv2I8qSjp6F_-G*+$Vqv9K%v>k6|V#X4e# zJ_)>T_LM>?aLHwbwy)L5^*>LaCj~M}uLS~s>;&TekhMTge_RC;0sHe>Aj2OwfyhkQ zH**untQg=|fe;17_#8h1NrvuzXyfY_jf$E45ET>rkSOLDcm41JVPX+Evy2WW00000 LNkvXXu0mjfoJWPi delta 297 zcmV+^0oMM41M&ip7zqRe0001qplF?uE*l09z2Fbsu#0|M?1#3fxS zSZ~S_9WGM=ZJBbT6!0N}WKUFU539zqe!Lb1T5f!JA}R9gx<4M`S2=8xlYwb10j9E$ zj{;YYM<;Ai1cGdCTvZJiHsdJ@l7*Xd;~t*Us|mexZVx-9SES@)bSL1t6c#$-eLH{H zP&!SA!*SPho|eoj!`vsG8ym#Xlnnq!p-e^?zNPBFLA~&`5=bf07pUS8@&2<{?TUz5 zw}Pzq{BPr@z)05uL+2GR!9E&b;+gsxm@Mor4KT!mnt?edrY4<$k<^L&42*fpb;vw{ vDf0)jjX2yDbZ-3QLze4iJ{EF+pN|zU)bo=sC>|6{00000NkvXXu0mjf1;T-E diff --git a/graphics/pokemon/cobalion/icon.png b/graphics/pokemon/cobalion/icon.png index 376226b242ff93026a7935c3e6575d4f4ccae4e3..5dcdd6cb0e912e463f735dfa70f59fd09b8786d5 100644 GIT binary patch delta 292 zcmV+<0o(rX0`3Bk7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S>`6pHR7i>Klu-}E zAP9tq)(sL1|Nr0au=b_UE_++D`qIYlJP?z6JpOW-eZb8wRKU)sD&dQB!{>yz1=cV* z;Xq2{$4@yCDO~n`Ea7cw#M?D`KMKH~RfNUw(If9`w^tSB$@NeId+XY}46gW#7T6>= zFk@y3+|MbvXj5i?N)$%bJJ8ltA)vr(sZa=}-Q0u2xD32N0f}>tEx@6O_lIGlRMKQA zrQ)#oi)kiM9fEDt7)xlPYc-Q8SkpoI6j^ON%(2G4HLF{A?R_ipPK_=U(feNMx&!16 qkRkXwKw>_O0J+Qu50Kx?hc~eF8O{;ChKK+F002ovPDHK)LSTa61c@8~ delta 293 zcmV+=0owlV0`CHl7zqRe0001qplF?uE-hRm-WAzY{y@Q}{veZJioObpx=MUt_%X6Fa~ zGv{GC&Ymxx(a-Sb%zLN`{xf&a%=p0n_6%Ih-!qaO|9^DMIS;qx-HgtsFB&@$h8lm* z=nH+<*a$b&$k=j9Xy}U$xZ6G(E62eLp0{D)f$WbxmDn+SER9GU?C{|^j<6O1Mp rA`%QDeY{hCiJCsn+5e|)`TzjU#NZK~E}pgm00000NkvXXu0mjfJ;soN diff --git a/graphics/pokemon/cofagrigus/icon.png b/graphics/pokemon/cofagrigus/icon.png index 19476138c140f9d720f9c5b967c7ea16be54d526..1ae2b6609952723b628b01d46ddd28c29342fff6 100644 GIT binary patch delta 480 zcmV<60U!RC1gQj&7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sr%6OXR7i>KRLhdX zAPi#)PGKgt|Nn1SHYDNI&fa(Fp_524!dMF7PcBvcjxy&BMT0t=(s?qMqAQG7nkg~! zS#q8U>KiLX0s(kR`qX{!d=iOpCQ6l|7o`e^JdsF}P$*@6zN{1@$Z=3I0%wz<;UTz2 zl0!kjE;wqg@K6DN0^Wd+Lr%^nqU%}J00wYO^-?)B%eow2QN&d) z1TcsSIMz%fXjtw<@o@sjPEj^E7`O{7A~J*R8Mm2)teMNl+Ef^0#kDOX;77Xx4r@oK z7pz?c`;U%dpUMwUp*C`qV#T|S$39?(7#ktXu)mV0!Z0v@(}9MK|JQzf4-mi@+RqfV zp=4h2;l|2XksY?$f9Zo6+v9=rlt5RbsHn$7`EVUt z(;o4#1HHsQr+Bz}3F}%6Z3xX$AM>FF#9;sFlzuUt{a5dY+5WrX9PGcT5QfUXHvbR( Wp&-UXpdU5>0000HD4O^oGpb$W1)2y4KO`y)m(t~vW)kdm_mGp?y>F4W>2&HQRT%R61>qNGt zHO9lWv}YTE!JJ#Xw+S`(SxmMO?FH2C6?E?K(QchdL^%tGa(h*xrcTuP8Uuue}hyyTL)E^5D6+z?# z9BW5V(S`W-F*BPxNkx#O?qOzHfIpW2VRgk|S^|4shlh``HzO$<1 zi5J`(uka!EDjc9vh)NuoJ(eX7?5h?PFiS?<>F;Rx2FCv%s3JVwGynhq07*qoM6N<$ Eg3Qa>g8%>k diff --git a/graphics/pokemon/crustle/icon.png b/graphics/pokemon/crustle/icon.png index e6a99fe634cf1d556cb5851b49a47d807c0b25bf..5b70147792e6acc74b2c181879d9d000f77077d6 100644 GIT binary patch delta 373 zcmV-*0gC?l1HS{17#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SJxN4CR7i>Kl-rKO zFbG6zRl>0!;Q#-2889~SCS7U!8l*O@Ipxx1=Jk5wA0Zz1$!bAYj0hox7vAd5AWfdC z0cAw$%vCR>2vs>1I1&Cm0n8iX!)AbKM<@ei1o;-^6I0$pa9{}40TG{oW=CEoKBf*L zEeMYH)IxgKlZ9A+zO|f}_krKEQ61^FM$jF#1&;*o6fWEYkWz}YL->8@E{(euM44VB z0FlDz(=?%1Be-*!CBW!uJ6H(+sRDum`EKf_x{9`EZK&;at+GEf_K0909Z9-2y?pY< zK)7C|V<4+{0~qtf_wg9Smj(g-e=-Qu-EV`)`9BOo^`8t>0{VwRth|YB8ieT|29W^O z>@}4!VT%pA4324{@~1Ke>levLTVvc TK4Y9M00000NkvXXu0mjfFtMp| delta 432 zcmV;h0Z;zF1Nj4x7zqRe0001qplF?uEJ0IhT=1F+OmUoL;( z1f>HiXCq)(({~qE+A`g2B+eGsIAA^xP|$u`)LjG)FVvjS*JTsHz{lgq5iX_y_ZH3= zFrS($Ovd>39spy)ydV7R47MWuj~-2jciv7;e7{i7I2TjCy;;V@&@qucRX_9@K7)+? zGM~RLMuNPw4~lJ5hIxu!Nxff(yoP^Z1ffKjN>NKCWr|KN+0$nNPOg5a1=y9Oa9PM+ zDG^mZ+fs0000KR51?3 zFbE40OjYpze_Io&RR^HD;g-92$PgQFP~V7cNrOt~tDsikA0mKG)zm5u2#g%j8*7l5yT zD!t?*cux}=EvgPT1Iu6YY0BbfmyO@S4v;?y5EiZg>GC1imwYJvJ-hV$=QsgNPYlwI SiBpLH00003|L73 delta 186 zcmV;r07d_!0)+yQ7zqRe0001qplF?uElE47#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S!bwCyR7i>Kl)(za zKnO(RM$OIr|G(`h?9EvyEiEk(a+;@W6z4eZ_)bj3R#pT@QjQ29Og9U2V+8c`40jLh zi2^*I=u4o1Ot<`6VnUD7-BF_lrjG)g07xIhg90e*m!nKJ(RLYzNo13(2MsY(HDQ0D znt+MWITRtek#>?;wM(SuFxk3lpGtPI%FLaqyn#Fbv#$>&+0TES00000NkvXXu0mjfyoYO& delta 235 zcmV7zqRe0001qplF?uEsE`SH?Q0Mz zyx-ygg#?>GqQ=6A9z~6HLx!-UEp>z*5= lgqaOe!emwYAWZauFgJqqeuzp^a9RKW002ovPDHLkV1lkoX_x>2 diff --git a/graphics/pokemon/dwebble/icon.png b/graphics/pokemon/dwebble/icon.png index 32a23fd05a22cf0b8ca3c386287373e11a398e01..4b356d5aaa9f0daaf7f32ac30087eca1b5593275 100644 GIT binary patch delta 258 zcmV+d0sa2i0?h)D7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S%Sl8*R7i>Kl)(za zFbqQz5A2)t|9?9g~QlXtMBn z-xdTugtsg)3W0Wqk)w|S!C(NQ2%`Q)z=%LZVvsvr1)lvuf$0G+0Ehdapq}8OyC)?T z)r#YgN%88)b5yWl61t<807*qo IM6N<$f{&ea3;+NC delta 269 zcmV+o0rLLM0@wnO7zqRe0001qplF?uEj429W1XDz^41CSB2 zP0~@K&dh2G=o|uf&{;7B{-H~aE9*PSlKfs(-SU9UC0OuL#9~q9DS%p20x&NMDa(MT zCDJ+p@sEYj)-jjdf}N*c93`+B?u~2Q=d9rN#gnnI3v{xz%r1Mg0{`MMb)9*S zviDXj7s{YqzQ6oNHDAH)k4PCquKp2wrRyAg33CexXhm6utR9IlNyjn>=_ZQ1^X}F! zCABv;EN;*z2)a%@@!;GEIvEc;LDzeit89$Zwe5?oX+`-dHV$98QH TWRMAN00000NkvXXu0mjfK?rqb diff --git a/graphics/pokemon/emboar/icon.png b/graphics/pokemon/emboar/icon.png index 8d6f99628e9988db0e6275eac3211f8d6bb16954..d79f6f004ba6bc4ec99b93c6b8a02c3b125a5fb6 100644 GIT binary patch delta 443 zcmV;s0Yv_S1cU^T7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sf=NU{R7i>Cl)-v~ zKnR432;7+Wf7=3T+-38{9(ro`5R=U8fUf*sU;k|3NmqRKKox``3X7fwM9gVZtU9?F zJPpXeZg3*A_y|M(Tn*tU-3{n^Ih-lwD5I{@9S~(xC9p;vm1Y1;j3XpeHWCq=b=ocd zi|~k#LL%g&AzPwR;jd^4E?h}1pmN-Yf+5e9vWSl_SxafwWF+y-V&UCQIWS0rJq zkO8ub=l;^ekq2`+nBf_aOVYqxUELY=^kX|^ipPen3_ji}s{ZW7YF!Y>fz8EI+gI@JM4*~ErB!72*{R9sWh6Nz&@HT+-(U}3# z0C5Hk0O^2u2arY(8vzn8uB?2x0g`-J4R!-WS3oQPnF6o^#D?KMTJ8WD2~xv80c0k~ z!4FITnFvz+zyy$)AT_rb0n!PQ{D^_P0df%puOi3kya4i!Ajh3t0C_`@gAW%#k|5p* la&&Y8L_dxiFZ_4;@C~c!94j)swWI(5002ovPDHLkV1kMBz1;u+ delta 441 zcmV;q0Y?6W1cC&R7zqRe0001qplF?uE`;vzqVe$EE1~ZM!Nm^v;8YYI z5G)9aa}r1}4XjSO0I6P9vOrS{Hr+KcpfgCj8$4(d?T#-*nWc*+0keBz!)(tTfS-SO zn7)60@Ys#0XTHv|H{?CxHYCef$|aANZURHe7o5)yFU(Hd;a$D#8B4+qEb#rqxq!M52cA{pxw)Ko=4ZA%~{HS|>s^9|>l8iTL+t0h!mu;L(38Lwj9Z{`e07;R9-fY0GYeX_|7vz^MgRm{a4! zSr`XkWrQhd*7{+D+4B~}MwkU(dBSjaNh{1p?(S%W$zBamNLHA1X^MfXKC{BeQ&P`B zCn~Kl6AbIB0I@W}j1;1%+de*m5oV;K%7;2qSYhOGfT?tr8DWG9ODjm_M=d3cxXHo2 jy{fqqhP<}RfBW$Z0uAR-WPr3800000NkvXXu0mjfna;~Z diff --git a/graphics/pokemon/escavalier/icon.png b/graphics/pokemon/escavalier/icon.png index 32c3988341d4d8ec9a552c1833fb5b68e9be20b3..94f646ecf70a69b2d5aabffc4e5afa8b0049c28c 100644 GIT binary patch delta 342 zcmV-c0jd6x1E2$t7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S9!W$&R7i>Kl)-ky zAP7YTY);|={{L_L(3vKKm@ay{n!!zy_cVZdOL@nz9yfApZQHh$#k$%fb=Z%bJBF@G zsy7BD#z-Bmn+asMH-H}v^PbMC&lSo#nkzgPPcV%^S{R=uWwZ3LB zu!wFI^T`*m=`SXKtg7M*c$Tw{HfpV~AWQe!q@x6?^-%N@j;M?F66x4?@1zF9nBP0S zA9##s!h9dPj{HsA)P>PTrcqy89GI~QUhV40Au!kS`RA|h^oQpYe~%A9{s|!QdIf+) zLf9)nCPLu#0uY)AVW{i`2oMtpVYu)w011S!jqM7MNC?L@!v!G42@#uAPJoo05GO!Z ogm?m^ED7)c$Sol(*@0i;8{_pAI;n^8t^fc407*qoM6N<$f;5eoQvd(} delta 327 zcmV-N0l5C41Caxe7zqRe0001qplF?uEl#A_w8P%JA{byOHkFoze5Q59@ z+KN64TFynBfur%f5PcFjXt+#*H|DvLRaoB$fT-j<##et~ zvnd417<@L(eOKPFb?6KGJLEO&DDaitDt_`b1FhX#RVhos(BakXhv;f5Y*CfZk9}Lm zLQ`J9AZ-MUN6zc%us-R$Dx@3J1xa}Vm98)Z14&^S8?vp>C3YF-^1x7uzz`7l1+xP2 zXE1_*fSzVBWko=|IfEe}@Gvc4ECDka!UE=LI?%V+0){0(7BDH084SyS{D5IO5O9A2 Z`39lhuSKpdl!E{O002ovPDHLkV1ni;k^=w$ diff --git a/graphics/pokemon/foongus/icon.png b/graphics/pokemon/foongus/icon.png index f6e6171a4618a436bbf3097eaf40dde62d6701cb..c6e4ab426bdb76528e9d941daad9a86480b43276 100644 GIT binary patch delta 205 zcmV;;05boI0+<4j7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SmPtfGR7i>KlsgVX zF$e^`AUz}(=Ki-0pC$#6E=l2O85xZ1UF-6nXfTu+hIER8LCgn&+E8X3W`am5Se>(l z)J6!=p%W+s!XxsO0@Cmv^^^)%$j9jJsR;U2sUBn4BqX>LzeuyD*%Qs~AoQ zW11l!#8kgr-njuRvc44{kq^`7-k$;_?lFZ>=ED>KKgov|JE92aSI9M$00000NkvXX Hu0mjfd2v!+ delta 191 zcmV;w06_nk0*V5V7zqRe0001qplF?uEw*MQ3Q+I^ zP`o{UQbgsF|KwME0D|c`+;Quc3dD9Etyfo!b3YeV<@YEXOZ=+C<+K=pErx8s1NBQj zTYw{h0>pKm-rybp$vZPDA&Qt$ry@d^`RDaUmzJ_W5b%8(76NnPiVqm6QBUIy=anl9 t|1|kxVfxevGq=J7M6Ogn*oTk&cmW37M^9|MvxNWv002ovPDHLkV1l#MQEdPK diff --git a/graphics/pokemon/genesect/icon.png b/graphics/pokemon/genesect/icon.png index 6ab5e6f03546866e91cb635e3d243ff0500670b3..a448db60332e0a00942b3368569876e37b08a4f7 100644 GIT binary patch delta 321 zcmV-H0lxmF1B(NY7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S2}wjjR7i>Kl)(>)MZ~)?Ly>AMa5?#auJ~dMNy_O zgT|=I6z=%hqBIk@;;&u7F=rQEEZR+znDoL1+FPxb=Jb^l)~!tXR6N$Q6&%C!lMK=m zsL|m$gex}SRa9bskywVG`!tRYRsauNfie>*S8lJ=8NLX{lDwFZhrijA1Oc%{73=P z_%R1a=f@l%dn`PA$Q&T#gEc;+00}Ji{VNqThwpQaa8pYd^QWgnM^_pN7Dic~qJGdzFw zK?j{S8*nv&v1S^qi>di}b1z4sSJa4M(z#{Y)iX#YwTQz!9hsW6@2HG>J4N=0TsEeo zVkdf~`&rtnWvl@;cC~tD_5WktB*87wIHG|>gN8LikNgR`f-s0u)+5*gMxX5n)=Wug z3zwDY=cM!&JieqK7vSYp2&Cxo=@>^)grOnVfDmTX^+Fgra9jv;|3>0mRSJ{Lxdj(t tvL9*ZyFvQF+Jg(oesK1qY~+{y_y$t=_D>M9|8W2S002ovPDHLkV1kgdq)`9> diff --git a/graphics/pokemon/golett/icon.png b/graphics/pokemon/golett/icon.png index 20dd1f45ab2552b2c1f94630299e46c30bf3ec8a..a3513174898f6a17a50a6affe1e539e346299da8 100644 GIT binary patch delta 273 zcmV+s0q*|H0^9Kl*?rPT_7znNciIr2xkU?KXeyJZV00000NkvXXu0mjfUL15L delta 257 zcmV+c0sj8n0?Y!C7zqRe0001qplF?uEy9mxs z?b!D@LyXT}xR8wsm z@yY_Ap2s072Q(;a_uxrQ)U59>eenGh{A07ZFt8S8OnqTMq_Z%gG9cH&M6xtMXkkKH zMnjHT7*1@dd8b+!elq}OVX$L%juvMBFw)I_$Y$`C-_(x}gyWUPg$Nti00000NkvXX Hu0mjfwgPm* diff --git a/graphics/pokemon/gothita/icon.png b/graphics/pokemon/gothita/icon.png index 19da4895baded46899d0f2d313d07909ed9adb5f..8d280f51746defd2c090b23b5bc68898efba218d 100644 GIT binary patch delta 202 zcmV;*05$*30+j-g7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SlSxEDR7i>Kl)(9q^taN_cgA?$gh7`8ya|J#wx$$IsjkF78JV?C-~owEidb2BzZ+L=_->KmY&$07*qoM6N<$ Ef^mRZ`~Uy| delta 258 zcmV+d0sa1!0?h)D7zqRe0001qplF?uEB zW$HQs=1uDYtMT?kFI%xYmP9pju%OzO931W!Q}K8F^Q@2D2iE$^3!p?3g!OS^T48P# z@FN$ zZ~Lv~)?oEmi+p&E!~>*!ft`#;i%!NNWT|WpLKfu%;(2_d4>aRmha)60+yDRo07*qo IM6N<$f@=K~zYI?Uca| zgfIw1rRZgY%>V!G0&5e4ST7#dM2rWW*BRO-Ow(I;7jPjnV*r^r! u{?;SvogW+VwE1y%D~S2=2Lt5(`S1mMUJnBITYZcG0000@lCe(2FbszC29cHZ+3_#LpNh19Q`jI$peYnO zX_cWAR-H7?deD~AteazS4FFQb3qYO$QU)U`0JtDM>GO0njLWf-xSsD!g7un`-cDMK>$oSKlu3?+ zFbqYJSR|IG``@;|Qxp|MY!)r`rrKhKA09&Vw(X0;{UP6)R}AtI1>>qEgM386;N=tJ zW>zvT#uejDOqg%XR6tN-#Kfrj1dIw-#%wNOLd?WOL4d*7dKsdbs0#TWd1l|Piv*x( zy6?M1zTZw_5Neoz#X9nL02R9#5n1moIxND+rvUnV0&^2W9wYWugIKi1qS(`te~!Z> zJbhXIO^CE6k`f4JA*yb$JBig-yu9B3@$2{^!^neShCnLAyaiGi<`l@pF M07*qoM6N<$f{iMOqzb4G)1S9Se2l9e+Zp(dz@^5V9%KheW6ta_#U&jd_M;d2)Zd zarUFF&v?Lgd=zA}*v=fTe+TK7_GtE~rpYcYE7bgr{O@V~tR7cn1G&QebVEQ@K|X>Zf}qM(Nd+Y^RFLQcm?a$D3HVCR7sKp zAq;D#;E47A-^P*~aIdGFGO12wk??{oZQFl*;T6ONdt?AG!yBP@!p@m_0Hot&bjQ1Y zE6{(X6wK3pd=Oy#pYX~@uw%Rjz9Q@~0vAEJAyw?58)~gg!Gek%VBxJ*f1)1Zs(n=n z;_xsm)p%ZQ%s$|Mr<*ygB5;4FKAi1%6Rzvz15q$@N!2>wsPvIxSY-Z@5 zzcHxa0r-m{Vd*9toWRnGA7(imYq|)QsKcy^?X;%!d7S%%Kmx<5;WUgOLpRQ5bT6%3 z)<+e9aIJT^7t_^)t^{}Mr__yvr{#>|y^vP{_}aeXzy5lE6Tdzl)vvY1c0Zpbey&4a zqjfrqf2`5k`IGo<*+;1cjYd|S^S~>oMVYUG#mD? z++myI-`&A3?l8o^w10L7iQmd#1Z6ZKcaSk9cQ}Y&?!Yl5cgWKUcaZv*I~;6uPN)xe zs1onV9p;@X?v~feMgNHUdQ7I=>{n9%LnNoMGYtye}nx^hhOAD(CWx8NA4gPfr$R%QLQh9b->5>f4YgB*d zYYQ;~qX=gHR~LyX-g+AXb8vzrklW^Hq0YP{ZKc2IHL7^P92R;$x_-p)Ii$d1Z(DA<5yL z{llRR{DYv8v-$IQq#+whKZO=RxTk-e1_X0TI}Okmp}zi3gLGc(uxvC)*8DQAe$b%2 z497u3OnZ%!2AO)RgN7J)#;DT}W0E-V$Qun&@kj?AP#QWO>A(Xb7o7z$?RZF(j>mYo z4G)x#$G)xNVG1@p_JtJ>gP?ePxn05-7mj&4PD$?pSDxSQhpS7yo<+JPQ>`6OuTM{Z b)&Isf<7`_ymAV|{00000NkvXXu0mjf5E03g diff --git a/graphics/pokemon/karrablast/icon.png b/graphics/pokemon/karrablast/icon.png index f155236f285b5f2658706b68bd6097812a024435..9db6f2f4d390c517b263e1faaacd671ce89dff3e 100644 GIT binary patch delta 198 zcmV;%06G8t0g(cb7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sk4Z#9R7i>KlrauN zF$hD08d4%5xc_bI=vQionk*gu5Hs>*V8E>%-BgJx`;ICBbK6*K`dc8)N@A^05vlGT zHYu@y5TzCw5}{9}L((21(#1l46KQY&V-d_k;UJj6mr$s<0z~g~7C=jgt@s7i{iCCg zPJpz(1_%YlJ3!ba`=*XDR)8=I5LbW{hu$+EUUXFn3y6mj-~a#s07*qoM6N<$f@OeB AV*mgE delta 178 zcmV;j08Rgq0{sDy7zqRe0001qplF?uED6en1s?7=bLn|L|RS1hO9fWwsRZ*LS)dJ=U{GTFYg%H*KNKEA gfC&aQ`l*{f0PDk0c>OgKZ~y=R07*qoM6N<$g8Ji22LJ#7 diff --git a/graphics/pokemon/keldeo/icon.png b/graphics/pokemon/keldeo/icon.png index 4d8c580f229661a7219821a4d4192d1774b0c86e..a7b3f96ab5d96455bea80439c9482a554004d4f9 100644 GIT binary patch delta 333 zcmV-T0kZy&1D6Ak7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S6-h)vR7i>Kl*tal zFbqU1SxIbUdH(-zv0V_&hQx&nSUIH3bh4PfLDZ?FMI8~8(5m2eA3rnqYKsv%;X4PwTQcxo?cF|Ht zoUAvHk*FbW?0~9&Lec32;`|ArDTU=~xDn}7ciA7PU&3!t)wd7RoaV!@&&c()qOH8r zBQ+}$~-%0KxF} z_W(%(42}yxa1vk-5IqaMeg#N;=K~&kfW&+_Ne2*J;o%A_kT9=M*#TtMUjSM2;RTR) fd?>-DZ}Z^}ZRi;Ymtp5}00000NkvXXu0mjfOEZ(C delta 325 zcmV-L0lNN|1CIlc7zqRe0001qplF?uE4l);YV zFbG5koJb&9)c^nO7Vg+>JKjC*X>w_`sX&3r`}z6R4}kq-3)fWu7`__RS`~8=6s;Ad zA3((Te@+7DOI-lbYEo@3f-oBjsJf`kf-FHr3RpQ9)rd6%n1B+nyhuny^{r2sxrd0V zM2%A1eRP4|J9G1YiCRiAR~?@C+r(gI$pnSP{L<+061bZ^W{wtT&sm~(Q1!lYxXc_X z&FmECT&uhv1AjG>8YTF$0O?1;>?d{^+b!g=euoh|X2t^7;CecktdS8N~3uYLCEzGl4+YQ@7F z5E~v2fLQQw0>pxc10W_mJOy?@3_Ls^`2i3O4+9`OAfC=`0AvTmu-X7}0K^+0Ga%jo z*#L0>$N>;j8$f12900Nc;sB5b5Mx4bfUJD@0tDUx5`O^*k`W1pi4QYCK3`mWb>hPe qkk44lXC($7P5{~X@B+wx<-;H4{3QIlQUk{T0000j91k(hN7zqRe0001qplF?uEa}1Q~ zv>MIMjCP;n{Odvx5>(0krOnu2STwHZRmspcj7!F=UuUuI(x<5%8~bSxjj0w~fOMLgd1;tmuBhbs zZwb4gtfrX9RJ47(QeAM)F~nFG?XJJfgK2pjqPX*^ME3b31`qBMF}t7i6T^=y#Ju!o z-zv-#%DDc3`GfLirC--nvx|iLb_IX+a^W&IqQLz7`%rFO#a0U)*x;K_d7_dLmkrll zqT5N7fNWa{>jf22n9<>?{$SUo{(XCp{lYytxCD6Oqr*U_iWm3fNaue%Fw8u#7zR@} zMofn%+7O&#t8JKbCzR{_>P=kT-E!P1!&4d=jSZy+t$OM5Y>)dws+e9-0 z^AyC1C8Qz(6HM>uF7;SF7+y`qy?+2k7!QBJWa0%Fk>z6|wFiUIWk2#BOpQn^_h49E z|8$;%;ns%+vn4Q#XJAy)gE2k~7?8lN4+EwjryYFk!3;hIFt7IU2R>Ip3=)Ybb^rhX M07*qoM6N<$f@vxE7ytkO diff --git a/graphics/pokemon/landorus/icon.png b/graphics/pokemon/landorus/icon.png index b86a7cf7a84c0c2a3b37df31ace5b3593dc8d446..4b2ec8d4f791e3c238098ad842091aa980cc31db 100644 GIT binary patch delta 460 zcmV;-0Wq8BM#GZ@}^z5bYqn*W^rF~LOqdGf2kL?+o| zH^DSn+!-biFh@?zUD5J1cV-BPD?UTwQ6MN*JB||-E|7S(7^8TA>PjfyfdZ8fH40Q+ z(CQJUOlkq4Jjz3W3n+h*h~96~R6`K7#I8t*vZw(5o+4!SB2YsLR(vc)BeXuPN+<-! z5<_AgFpt|-L8&4I0`!RL1Kd=`O==Mtj#4Wm1yRr`)w(G%I#+>x)nEPgrT_snfqBXM z#N=g3f4>=!rX%J`n2wkeVPxThB4#Jd10cqSjWA(Cf9oJMsFV3-;VQ*;dGP>f@i z7llge9106!WWLG@>GOY(X;Q+DkZSO-TwSV^h1Rfj`MnT*fjNzFygiCXv2w;9@I93C zrw{SWY{@tVideRwd>5|O3()q3Na z*#oFTt*WtrLPbrl4XC>zT`Zx#+?T-<3r_R z>~1xCPO%N_ycL<^|=@R6OHbK;z=ng^Dd)svg!rvyQO%NKh4nfFAbS8+_ ze8lQRPy0oneT1MdQm7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0PRUcK~zYI?UYdq z!!QVhtA@y+c>n+3E=k)pt7c^n+Za^H(;em%{HE!u4;9Yz{Mvy$G~lE`Qvj$A9LNf= zh_E(iZ%&+TLaN-Q4R>p>M<7Y*z}uOGdV~5!3;B11Dl%zFf*cgE;^G@ zBHtqm5pf+OTk?*7vMGKHnoElmd{Sd_3y@MUYFRbdiky&q$i*_DD29Q&bZNGceAR!| zukkRA>Co`7^CQGV$B!^c&kqfg^!y0*H~HaD`^XP>xd(puP sctFn&3-7=2164-2h^0$?U+2ReP;d^mcE0+<7k7zqRe0001qplF?uE@lCe(1Fc60G2B)Bos0evr zON4KzSXxzLZr=eA-HOy98S^H6m+pvnNYgpC400D_b4H5on1vN?%dh|byZF8=`||~< zpk-osjs>#A%h(RKjvcyD$eYZDmIp-SCW?6{p{_yZ80X?+uK57#0Wv0000?P=%ZT0004VQb$4nuFf3kks(BXNQv!~F%H8p2t{K) zRtH=B``@+@r&}P6x^xI0dBT9Lw{1_{5Be$d%}))qMpg)$nQD$O(%QRb1Wf^ygbWer z=n24q35aM`f}X}0l9nJMW^{1|_;iF|PQT)`K&*%_?;&krr+gD5pOUm@MS-|O&6(nc z<`vAcMXmR=qKQ~kwi7*>a}hAIoD*Ct$%#Dm#6QI&kOeG(Grl|c9r vNDdqVDHO8=Vzq-V1;Sb&`=_ga&E0qd{9Ft%EcQkh00000NkvXXu0mjfLgi(g delta 232 zcmVC!igTEHIJi z0y7WcoB3yQWc4LTaIFQMJ=yH94mc8T>zBLh-Q^Qv(cv7vDUJgmV@5LA90=LGsQfn6 zYg6z1l<|<1jh}IBQ{~rCt1s&81FhGl{s3~1KlsgW? zKnO%*xmY1SbN}0Bz)BIBU6+;;(>aV7V8eU8p131`i@Yk98knfsLW6Bn)nJ{O0|lj- z322Z4nOR^rwjk_ck`GsvoswRF!Mv)^@@!Fpfd#ig3G_v6F(CFzz^Qlnjd+( z2S2=+ycaT?;ym&iXa3;ex5o(+002ovPDHLkV1kf;gJS>y delta 298 zcmV+_0oDHM0`vlq7zqRe0001qplF?uEyT=;E%W7a0Mf-wyg1U4nJfLl%~*`jt+bH wT5T=?)pS~99c{^)!LkWS&`4Klu--A zAPj`t_~1jb-2eZ#OJW^U(+uaW4=_LdnI-b$BN znSiYye>#76JVu=9gO@ITs%f=ZlW% TzqG=E00000NkvXXu0mjf!9$Ej delta 312 zcmV-80muG}1A+sP7zqRe0001qplF?uE04a$=eoy%s_(B*wBM(Ix1 zUdecII_Ng-Eo~-Y&dmmn$Lv`ck>n)Ysl<@{ayrlaxCrxoKRy63ZK=4gF_)hJ0000< KMNUMnLSTZBcZKl(7zj zFbqUvTVi1F{r}(AmjnTc3rp3Z#X|<}adDjJN_pzb1>jm&vr7VIJAuRwCK>=Xx5*B+ zEUM7>wdymVtE#)Yz*QszM8!4M(5u;e456%CWTieJ;cVJVXn=8-Xpo|HJp-HoDX)6c zC;w%mC@H`;*np#S(>_^Td&N1cm@fh*N+hLpcRVI<-T9gIV} bpN)tYF3k;X?=f`q00000NkvXXu0mjf6p(w? delta 254 zcmV3DWd z)K_DN$qr#t4d%d>FDPZ&G0<(D$WBDkHEo1_khJ2z_cP z?x$WT8c~rWgw_+SQuGM;O4(r=!|*$?C@%vEB;FnwJl{0}?oKfsi3ijsO4v07*qoM6N<$ Ef;6gf8vpKlR*jq zAqYi-K+F$$|J#l>!ECHyHnRvH?f%2ku$1If)Y-)_c&UsSOvJIFsMQ4~Mrddqf*A+} zD}aZqU`v126 izTGP8QR+PBaRFBoZVhsRUZ+$50000 zXzNF^W%sUCD?8>RIqcWERqtORISlBPS07M4!+^#e1%$v5P7do|{a=rg96tQ#N9GvQ a9{>QdRdQJDO}$3|0000Kl*lRxL{uFz=wxuG`jKI%KpRDu zr9`p15=|5ft4`kmXar;pvKnw;NFo1nSm`$jO`P*Bq1(=!nS(&*7l6fxX%Yf*1H^7Z zlm@5)5`izElqFDq>JEC~N*||hL-)d-iUYJ%R?+BYfenM67smxsUPV33L!A3fJ_vq6_74J zZ5I#&9teoO|Gfg@0{=unT002ovPDHLkV1gez BeGUKs delta 281 zcmV+!0p|Ys0^gTjzBzx&~;PKjU^zCb|1%?&0~K6 z`wHx~8MxHa^)`cau@J63Oa3gtDO>=2z6ZN?xOA%J`N9rE^LZ)}^zaNAir7yyZ=qHG z*Fn`|u!1?!2nGC9gl#~GX{p*coDX8X+SxUOFgpF0moRyPd@c+v31j4AVW9ewFj5PH fo=O<~PM9Yk90~uj^~(AH0000Kl*tam zFbG7WIG7vr|9@MSNOb~ss~)Nz%F#0{#>v~Ze|!+Y3tg}_nZZrd>X;kQRD;M=7umt$ zQ8_?*?mBBA&j}_pm%BNn-5t=h9lf*cuBSd=Xlj>^##{~paBo&!i!fD_!uoeL*_cE} zHW0DT=l5Wwjf0MV$TbIiX~`khp3V`G=CBjdGGRcvN$fE?oR(XGodx5r)4JnO_u+R~ z1X_BCRBEmN<2T|heynU^m=fg7Mg9K=T;Sj8lrSrRc;P2N3Y}yGNKKdlAQfRQ04WJG z0Hh|&0Fat6BS31x3;?MJa{)+2n3E4j@Bv7KF+Mmzyg@J_=2jxI27pu>xA;CE9?tm~ UD`uDpasU7T07*qoM6N<$f>7#-h5!Hn delta 305 zcmV-10nYx61N#Dy7zqRe0001qplF?uESwi|0CuUt~vis{Y%Y4y79uN~RkY1$x~6q#%2qye`e zNWlbP=KvEiBLd7)W8(WW_{{F50>3-C2mV9}iC_G2dD1ckP&_i9$G(Ct@#*Mz*jIlr zzcFhYPle2{JoKXvQf8sv4ZYS(r3wLi08;ztpa-y$l5%wkBYUYuNk}65&CVV}3w~_% z{~X#rRsX(a3Q_|o5Ue2jBgro4Cao}(g;`VPX%WU7gBD@18kB`G24!K4L0K4MP!`4- zvHfDJO8&%-oy=x7O^X%{X<16m_xXJH<^G3W%Iu&$SNM}I&Ubzv4K6CF zcZ08v)XgcUt@>!_4hIF3yrPx#g+2^THxr~P0xLEQQGi-_tksdwZ7pDirdbv!Fsq}x zAPrI-1}fC~!M<~UG!<|NzM(M;3Y5CkO+5;zT2%3Dg1<`PjaY*^6?f!n$zE9=(AF#Z zQ=!Dy4@L*l_5NH1t$*q$a$Vz(@wR{VFLbSXdSc9?Y%fO2l2{Im!<6L0`)KLJFM z3BJdF0EB!!c#8i3$V2?Y(ExIcf8|4NAB;G}zwsfoH$DVFUipv!dErBC{oncU3-sP3 UMNJ<%QUCw|07*qoM6N<$f_;?Z$p8QV delta 456 zcmV;(0XP1q1d#-g7zqRe0001qplF?uE7!G5CCA_;NHQL2P++J zNhO5eEnYH2$vcIGO2~c(vm%PZ8igJ|j-9M+ku1ac4&(F3*k6zMwuZ)+yN?Xg zgxIs-*8uF%Lkjp>5(W_idKP-7^>z4*ZC=JM07+I*~eae4tZ@)(m^uv&aqar5LSph@6fC zQOYlwwxIV&3Zz|8IDN%5`rHKCfnLEi1?uM;+qQO~f~odpJYBny>(j;8PTkK+kH*Ah z9o5ll>!xK5N~?Lg^Xb{z+c|a~hG&0(#R$~@hxTkcfUh+r5H4@ODZWHMAuM$;ZVSw>`5*h5*XEPIb<|2TMq0& yVD!p?d=MC`R}SRE>Ng+r^yZ`UuRb9D#>WrNr8MZH*j(=b0000Kl*tOi zFbqVk_RUsC6nCdMdKw*YqvfTQY)K8Sf&U>#C=C5K1tZ|N=-nX zK2^jXa02BBWWaU;M6U$IeA`^ia+$>ls3c&f`-mz79s?wOt|A(k+<-l!TqOG#!~x`X zs)N87qkBX!dw>OG;KRd7iE}}~+?gbwTuYUqMn*&ynp~HLrFj&S3x{{8s+W5>2sHHG z7yr~TWeK!5_N|}MT_FEbAVFLTq$Vx}QddlTxh#;g9~K4DzS0j5N0$$&;MdZy00000 LNkvXXu0mjf@rZ4H delta 250 zcmVuK57zqRe0001qplF?uE zey3S4Q A4gdfE diff --git a/graphics/pokemon/scraggy/icon.png b/graphics/pokemon/scraggy/icon.png index e63301f36bcf3c7ed744c5691dbdaa5edcc04c48..f1baf8d0783dcf1f9f38795ff9905a8118403140 100644 GIT binary patch delta 207 zcmV;=05Jcs0-6Gl7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sm`OxIR7i>Kl)(za zFbqROeX!Mo_5XjncxxGh$gtC3L{}-UE$AC#>wiVEch9p4Fc7T|AObQ`ekoLf=71UG z2-*Q-6Bs^u{t%K4i)VpSit4iAdnE3H`(N8^Nsn%hy$b)&j@C|Vu5f86+uLt z2IIa?8vyGa0$SB+4qYc}p(!2OVu+yQVjXKj+KluHW4 zFbqQrRSfZfb^qIr5@u6~-Q|=LZS~@B@NsNCRU~WMtO8`CB4`mXAR~zQc!Z)PgaY_L zvK$25y9=;&CzL-G>q2S${1I4IA%Mdbg=Hh^VLqq#WE3K14*5wRWZ>+rnkALqTRO=} zn0YJLHDcT>y#5d*TU!_H1M;Q=a(5s2kNfZivBC^#eDwZM00000NkvXXu0mjfCTmi8 delta 175 zcmV;g08sys0{Q`v7zqRe0001qplF?uE3~g2Q+>fssMkQTRw`w zw|8zX$V&MAcD+mUM;6Fix9b_QiZ5O(S3S!|68W-f)v9$!#`0%c0Y%*WkpzCNTD-~y zNx*N_s`V?8o%ZGNs#VjF1^E9tPepYq{}QhdRL}fMTZ-npC0^+M|IaWA@PUz)V9*=W d2R{Yr0|0BIXTmgKRLc&- zAPhsLRGJjx|Nq-LJhVbXr%5|ai#QS232E#Q{_zUn9YBD45DrOcKumb3?gX@3qmvOX zl>utkNJ);VU}tE6U3CT+g(5~KNI(Xe5g>&=Du4ttL#4394tNBGB9X&-@d)f?Vnx)B zM_}*RBHK%G)9g%tm3hq)8CgWV!SgDLWIOD@>mlGl7Ud{d!s)V=;V5#3|NpTeThwto z2&+;^wwuksZi83@aOgoqS|Ye6Ldd)fXGE}Fat1wtZu9?G#~1D4j2gaZ;tqYAXM^bW z&;eJ2==M*y!>Uksw)&+_*K`l0+6zrV`=_w@e+N2VGh>4XU<00000NkvXXu0mjf8quBJ delta 358 zcmV-s0h#`%1F!>-7zqRe0001qplF?uEZrE5JmR}bBG+kQfQNO zv{Yz=ofHP76rP<1SF4>Y26kB__nyjnnw`Oao)Aw{yat+A2zHXj zA2b1s$@T#232574Nc7vi@Erq4)C|g_iWJE0j^@2hc2JPw++l~L*sv^Xx7VZ@#tDDU zF9ho*YtfIeYhI*$z54Gpc#5J^<^KWj+xOQAjh_LZc=@;*w|02+_x=m6L%`;I{-H%M zK#aHvGf6TPfLqtLv;t>I4#0rKvlq}B)VxBsV?Kp7MP`~@42d(3x3tH<1CS-T z4v3Vn=XVBWd{Cly=LZujt3&V3Z--J0IxG#s)au|30R6?vW15WULMt9=j;AJdCX>_Ddj$>so|G>#!fyKg31Z%uLg|&Hw-a07*qoM6N<$ Ef;5w+C;$Ke diff --git a/graphics/pokemon/thundurus/icon.png b/graphics/pokemon/thundurus/icon.png index 9295bb7526a977998ece954ea069cab5a1feff33..9b116651160765ef9d259797932fde36d79383e6 100644 GIT binary patch delta 455 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 S^{G7o0000Kl)Vna zFbIT$0!s$&{ol6Wzgl3oODnZfZg2+3aai(q9Jl^fz?-_fZh(x2wUrsT7FOuL5veL> zt9f)S+W`)B68Cj?tvw+D%u&iAbqIxoUScqF`I<@Ez|G04q}EZ_h zg6s&>39=NKi=4z(j)3ZomjZ6)-{&6K=o=K_xJ6f=YcP=mp1~eCfbZk<$PG002ovPDHLk FV1oGta*6-| diff --git a/graphics/pokemon/tornadus/icon.png b/graphics/pokemon/tornadus/icon.png index a95eccdb309843c52a329a9cc99d8b737386ab3e..271e4c6b691a45a06dac96873b52aae1bc3037c5 100644 GIT binary patch delta 457 zcmV;)0XF`P1d;@h7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SkV!;AR7i>Kl*^KZ zAPht=k5md4o&W#a=>Q5>#oa8XYNEx$ZXkqsKA%4v_NGy^w0Bsd*oON&Uzrlcm{R<9 zSgjOI4V04WH$$mrq8cb8UUg3OKn{u+;lt`Mt5l6HR1rWm1DFnOU$o_Du?Ry0=sOM6 ztM()C^hu=FoFrp^S%B#s6-Y^nRgUWprJ^qYq>x%j&RB9p+rfnEx+Ss-SoDvn=U|!X z!7VXRmu#!StC&^kP$Wp;NmOkbN^>+rdzcsPR$%95GbN>p|4lKrd5ohwqMmY4<&5x`SI?8paFlP0*&h z!ERk^{1{tUy!P9%4d15Oefr{h`(^&)7QaE5-obmqG{n3SrvJlR!VJXh2s07$Oqhw7 zXTnUxYzQ+Evmwlhm@Q!jV)lgTh6F&xwuif-LW|Y-c~qpd%$GLSe+gso?b59N9ve?=%(a47=*#*{)VKjV#w8YsI}rjXcJ~P zV7}tK$9sEE04uJI{|biv-}MtgcGjLCR?U4uteSX&>Kl)(67238%EUwMSnPcJ;m{(6@l?07nBgtGm#nPkmT2 zUbPLoLIddHMI9Ieil`GRI5^}k& za#S#Z1TbXqr79v|#_TRWhMd!H!lUq8u*sZ2-gbY^qrcE^2S_|z1W4}xDnJmsv_-nnVm611M|F00000NkvXX Hu0mjf3aoL^ delta 241 zcmVJ~PM`uKwCCaULvMB{(f_kke+3|WeS8Ep& rhVem9U=of4b=g>_ypVD##{aDzTySRI6asRp00000NkvXXu0mjfp66&U diff --git a/graphics/pokemon/vanilluxe/icon.png b/graphics/pokemon/vanilluxe/icon.png index a7814563b43dcecc853e464c5a9bead356477096..c2f85c1e31a6b8efcc4f75844b2b09fc038c7abb 100644 GIT binary patch delta 305 zcmV-10nYyP0{a4x7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S`AI}UR7i>Klfe#z zFbG6VVNM+Q|G!;2t!_%SZanNsjMm62LSeS;wFl|6+=*+i@95D-ZQ-cR?%NO>{s<)>3>&$*Z;Nr8~JbfZ#VL< z6Tg&yoz=Dcnc)NZPcZt~5Jl$(a|pB-;NyzI zQhPOIDE3O05ETVG2{y1UQl#2^38Z=OhcWYs-b%bCV1lPJTVaVcv5y7? zO_TETbvJy$Ptcv+0iYF{Fji$M6U8ef`u^P&82yLCrkqc|$`Ie8oD&*4p-*B~SUH$Mo zuuI!6Zm)?vH&?cF65lNOGobmklnb3gR(69*u6+LFE{@h2ZsH795{&sElC_` wPUFD8#KA`p;}8Zr;t&Qq;ti_@%07*qoM6N<$f~+xzZU6uP diff --git a/graphics/pokemon/virizion/icon.png b/graphics/pokemon/virizion/icon.png index 4f7390e1f0bc7ba9cb8d5fbf9b3033ef1512f83c..68c0abd73026cb1b1fb2829aedf1d1ae3796f02e 100644 GIT binary patch delta 285 zcmV+&0pk9l1Lp#e7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0Od(UK~zYI?UYNB zgfI+4N&IQAtoz@#?S!i7nmDkfdL~;vgd>BF9lPVIEmjt3@XYZ*}P-^ffE*J=~oG?4EkID delta 344 zcmV-e0jK`w0-*zt7zqRe0001qplF?uErlCe(1Fc60G1}6{6ir@iQ z+!+vRG7=%BVQYnmPnqh0M`(pQ(PykgB&IYaY1FAl8j1L9Rw{1uZ~N}|@6YqjRphJz zD@Vv&LEqUzi)0^ZOL0LSnAS((V?s?j9NPtWD)l3Pz%oUZ3|Am{y7`#IrUl4@47Y!L z4$0ADzP8>HMXQRx2r%1vq$?))iX!8~t9u&{OnAX@iWm>VmsD6>`X-j+6;AKvHR+*g z86nBF84SxJuMRWjZ2$RIwVDfi-37_LcPp@Bw6=S}`G|k1UnW}DW*fUgKR6&x% zAPlR^4CcVd|Nm`enlxZ1>1Fp;pOQ!@#vnZ&zgo)7?(tgXD`VC$i;`BI@`0<@%rN1* zygzO5f{#CV8`K?-$ONSTM8rs|PKYh24O|4(RHFbHs@67wGZ1!d2DMJO3w2x~;G$Hf zLT~V1HLkA;MS-Ayaed_z;vQ90_`Pr(Kq=5=u7g1ZFF+hum35Hjx`Xi?H1b2AhFxl`)rF2yz+zCK;Bag1c3vEQ(Rd7kivemAZd zw#(h$&tLs_-5tPg+Dm-o%VGah#$x{zF@tc}KS#_6n8W^TIbw#jCi~YEF*N*a{~R$M z53~JK#2B#HpWa+?(O`d#8Hd&WCjk=dp93V?KL^Na{~RET{d0hL+JEdXdKw_I+n)_v r43O>0xc%ShaN+MS>2PTMX*#?BeCHWnrL$_l00000NkvXXu0mjfLxjBZ delta 389 zcmV;00eb$|1J47H7zqRe0001qplF?uEq&aC3L60Ro3+wfK6VM&%9?^;JLW$80%N1++q<^myE3$(`|!` zuE!(m*M*dgPa*YNw|adkWgafa&ni8CYTe-Vp}MBUS1)O32Qfqy9}xENhrJ9W_24j)R?J&tT&@@KbmO={fLIAf=7t zAfvI~bI>jBJWAxS!vqV)acCo$0y#u5EpoVlK@JfNcn%Rv0**tz07ET@sh9#7+oADd jd632PlLsCy?Kd7jcC*^pca&b100000NkvXXu0mjfqIR*~ diff --git a/graphics/pokemon/watchog/icon.png b/graphics/pokemon/watchog/icon.png index 9ea2f1330861e104e87b225c4fd50e2e9400ef5a..4051ebde8b71f9f4a58c1da358a2315cce32c7e5 100644 GIT binary patch delta 340 zcmV-a0jvJA1D*qr7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S97#k$R7i>Kl);X} zFbG7!mWar~^Z$RlKvHdONF!BMPo;+{nb8=7@`!%*MgcdvjF%P+7LjWUT()AjfRYdD z>KGnE=%X(VY`g0_5AlHBvjM|&HHQZ@`(ZI`yzS5<0R35b|S_szPrr=K;Wk#;sfi#3bCK zrq+6II5x`l$`Na3spJ1`c?s#HJHw6stFP2o`9T>W6F>ZULCDMx$_SbG5&D9VnIA+M zAu~UyK*+=ossQlJkLvrM_)!Kt_;EIw3G&2`D~O%^@W1ji3&z0@i>SYF8(#3k+T1HvsuKAN~Ma?-DTT2m%WL0000 delta 361 zcmV-v0ha!r1G58=7zqRe0001qplF?uE@D7kQbAsrBk1&6g*^T-2w&{pkZb z0_HF!@QGqVIz;3ezy~TUTGaj5kotMW{X($*(SuX*zB|BbwH`pZwYydyZ-)e+oWFmi z8kYVqeJ15hgBb5&WZE!j#*1>Yf&~d zVEwW?uR8+LkfhP09hcLY!8!)m5spDmVE0K|DVsB1o{# zplL#-K#)QT3<8Cio1p*xUa6`JgduYK(xh&>x{2zi%l-HTZ>O0s;z+3w00000NkvXX Hu0mjf@fN3J diff --git a/graphics/pokemon/woobat/icon.png b/graphics/pokemon/woobat/icon.png index 354353e885e38969667231ae5d07a79acb8d47d9..c3640d5ad0786927671a74c72b046f028f54ae73 100644 GIT binary patch delta 258 zcmV+d0sa2L0?h)D7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S%Sl8*R7i>KR6!2I zAPg%z1&Hkb|8{{g#0Ye^X`1S)7i>ZZvXA4&FM|9)hf4tw27xa|7;L!_z8X;^NJ{17zqRe0001qplF?uEI443~ z#|ma)#6pX0r=*W(9*EdlqIl-EKs*td0N}VsY)Ck)1H&+mE0eATx~v<$%r?7kwbo*s z0XXk;odabLb@4u1zW1Mx!~EW@(;=&q4k_YwNFzW_hc^8!7_Woj@cm$%4jVEOK;?B1 wq6oYWb{>G@Nr!9Zv)2J~!JQ6JtpCkC0iaxiI5gyV1^@s607*qoM6N<$g24o9eElMpVFv#YH@)<*>qC`>F<_keTKgZ%eBBD9uRD>cc7=+KgvS(&oBcel zsUn9_dn&~gePyET-R2*OP9TVo&bq7;t+Eiry2P0vPof^RZU43fO_c)r`&14C^{c?1 zXu=rZ29{gYPs99wvc}P(sXrJ;(ld=I zpWT$IN-a>*$fHr9H400000NkvXXu0mjfjpoKw delta 399 zcmV;A0dW5M1K9(R7zqRe0001qplF?uEh?klIwKjNBa0HDWgw=>#TW25mD`X@BSIr5r}#WXc`K-GV= zuATo=<`{g7KzN`>wFw4BShEIgl@vUySgOI%IG9+S6&=o6t;VTd>77f^Ik`+xTa>U@ zK!IcU&{L3TgKa(f-jH_5@aOvHTV%W2kq!MO$WZ&k!M9%Y@0U>4-UP1hK2j_r^EKpH zz~su6iU_)rj+L8Hz=$r-D`WvP&~tkiS-{}TIDsk8ZFi|;;&E~aw}n*S-=?ghKrA` t%G)+D4lBE9XbBZ#}7&S7{cUkE>-{l002ovPDHLkV1iOYx4-}Z diff --git a/graphics/pokemon/zoroark/icon.png b/graphics/pokemon/zoroark/icon.png index 08d5206f3bf1c434dd0a06819cc6a94cd2487d5d..338a576a4a19c8d1a7be3bced263f4d324c7acce 100644 GIT binary patch delta 359 zcmV-t0hs>G1F-{;7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SFG)l}R7i>KluHi6 zFbqUvkg~9XegE6yaniLKm@HHM!l1H0m<*K-YGI-fNhG-@8MZ zU{MJUH}IYUVSciIL8}*$_6QDSu>V*kp}sQF))d3bmH<{HFhj+<3r3iZ{%CuIfx>w4 za7R~chIQ4@ZPSGDtdrDXZH(Nn9s5Yxc^*>LOGCMSasTln@d3c#gUR2f378Zy2f$>A zIRGX@Oax4dm@{CODks3KT?D{vh|!3k2^a@NAjkq3nglsUB4`6l2gD%ABOs_-Oy3Ol z)LMkpz=IdlsvVOu0Wb>!3`Ko{5?ne2g@hiV zN6ONnLvkiB892yyXxA3KK@l$85vQtO)35s%%!4Ha}zMh-rZ->aR%!yaI zlPU!ujcQL!L`*K+1W(S8yH#X5^o~L|EBUZRr(O70iCb*b*aW7tBEDhvr67+*fcAgY zvL_0_T#kYkZO%+O9CJ6_BL`z%h)-Yahf-lA8cgIapP7mvT@!melfVF}?9s1jF^)&V zG)rcmVr2;IFhI1GknEu2R3*iWWR@m2a##tlvibi6h%EEuj>}vhsk;1-3PIhx39P=N zuV?^6)R(uOD?IHsN>!3sct#ay#tv@oabxQyfDccW3sS>`RK&|;j$_*ise~v2`)@6| zA|=8Kj7}3iCZtqBR-u#k5h+!e6WaaI2-A4Ub8n^V3LoNK5u{bTWaQ)SI5jCtd;34G grtDWXu3Vhs2jjZ+NZw28Kl+6wU zAqa#u3#TT``@d}ge0fUbPMV6y@ZY7LP0Vo5)}d;yo`p#T zv51zlNbo|<*%(x{oT6iFRP`29TH1nc5TBqL1oohNs{`D0TPZ%y&;-P8C@WE7;*^hv zI>3^BzgcKL3=7nM7zX=3i6|QEp;!zX=f@uT|2CV?M3D+EP;7=oswa!2W25EQ@d vs{#a_5KId`bb!c`4+B6pe1LYs5BTr|uaFjZ1^bxY00000NkvXXu0mjfzbKzs delta 342 zcmV-c0jd6{1E2$t7zqRe0001qplF?uEb>!3`KPVf)@}^k-1Af z2SuZ`I%TGu#z1FFMC2)eSkks^C2N5nn9P;X*lU7ZOy zk(mw$B8r-NK`>!%Bg%F(I9gPLovR(u6rqQ?gDjYYLn~ooqjZtw#B*%+-I-A#ODUAYPI{ zb7=MLGeF$PSfYA1 zA-Nr?6mdaH8d5_<8ny1!5+7HdN47%Wy&(lsLi}JnkfL-8mC-jogsaG;NNoa~6qwop oV|>^JzT;y7CUtzkJ^qG|AK$;aS~SZP_5c6?07*qoM6N<$f?AuFT>t<8 From 48f90a715556d737948f92916862d14a94620aa8 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Sat, 1 Apr 2023 14:12:50 -0700 Subject: [PATCH 089/129] Update explanation in include/config/battle.h Changed the comment in include/config/battle.h per PR comment: https://github.com/rh-hideout/pokeemerald-expansion/pull/2878#discussion_r1154322931 Co-authored-by: Eduardo Quezada D'Ottone --- include/config/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/battle.h b/include/config/battle.h index 66d4b92aa..24f4ad4f1 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -183,7 +183,7 @@ // Other settings #define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. -#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, when the player only has one Pokémon in the party, randomly generated wild battles will always be a Single battle, regardless of the number used in B_DOUBLE_WILD_CHANCE. +#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, Wild Double Battles will default to Single Battles when the player only has 1 usuable Pokémon, ignoring B_DOUBLE_WILD_CHANCE and B_FLAG_FORCE_DOUBLE_WILD. #define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight. #define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. #define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) From f292fefca34db71fb44dd675ce1bb0fa8e0dc01c Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Mon, 3 Apr 2023 09:18:47 -0700 Subject: [PATCH 090/129] fixed bad switchinabilities call in TerrainSeedLoop --- data/battle_scripts_1.s | 1 - 1 file changed, 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 200a04461..8a47217ff 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8839,7 +8839,6 @@ BattleScript_TerrainSeedLoop_NextBattler: addbyte gBattlerTarget, 0x1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TerrainSeedLoopIter restoretarget - call BattleScript_ActivateSwitchInAbilities return BattleScript_ActivateSwitchInAbilities: From d9ab2d1976468d8d3f251bab267205a619c53924 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Mon, 3 Apr 2023 18:53:34 -0700 Subject: [PATCH 091/129] combined TerrainSeed and TerrainAbility loops + added terrain tests --- data/battle_scripts_1.s | 44 ++++--------- test/terrain_electric.c | 63 ++++++++++++++++++ test/terrain_grassy.c | 71 ++++++++++++++++++++- test/terrain_misty.c | 80 +++++++++++++++++++++++ test/terrain_psychic.c | 138 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 364 insertions(+), 32 deletions(-) create mode 100644 test/terrain_electric.c create mode 100644 test/terrain_misty.c create mode 100644 test/terrain_psychic.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8a47217ff..ea7ef493c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2610,8 +2610,7 @@ BattleScript_EffectPsychicTerrain: printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects goto BattleScript_MoveEnd BattleScript_EffectTopsyTurvy: @@ -6867,7 +6866,7 @@ BattleScript_OverworldTerrain:: printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects end3 BattleScript_SideStatusWoreOff:: @@ -7346,8 +7345,7 @@ BattleScript_SeedSowerActivates:: printstring STRINGID_TERRAINBECOMESGRASSY waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects return BattleScript_AngerShellActivates:: @@ -8828,16 +8826,18 @@ BattleScript_SnowWarningActivates:: call BattleScript_WeatherFormChanges end3 -BattleScript_TerrainSeedLoop: +BattleScript_ActivateTerrainEffects: savetarget setbyte gBattlerTarget, 0 -BattleScript_TerrainSeedLoopIter: +BattleScript_ActivateTerrainSeed: copybyte sBATTLER, gBattlerTarget - doterrainseed BS_TARGET, BattleScript_TerrainSeedLoop_NextBattler + doterrainseed BS_TARGET, BattleScript_ActivateTerrainAbility removeitem BS_TARGET -BattleScript_TerrainSeedLoop_NextBattler: +BattleScript_ActivateTerrainAbility: + activateterrainchangeabilities BS_TARGET +BattleScript_ActivateTerrainEffects_Increment: addbyte gBattlerTarget, 0x1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TerrainSeedLoopIter + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateTerrainSeed restoretarget return @@ -8852,25 +8852,13 @@ BattleScript_ActivateSwitchInAbilities_Increment: copybyte gBattlerAttacker, sBATTLER return -BattleScript_ActivateTerrainAbilities: - copybyte sBATTLER, gBattlerAttacker - setbyte gBattlerAttacker, 0 -BattleScript_ActivateTerrainAbilities_Loop: - activateterrainchangeabilities BS_ATTACKER -BattleScript_ActivateTerrainAbilities_Increment: - addbyte gBattlerAttacker, 1 - jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateTerrainAbilities_Loop - copybyte gBattlerAttacker, sBATTLER - return - BattleScript_ElectricSurgeActivates:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_TERRAINBECOMESELECTRIC waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects end3 BattleScript_MistySurgeActivates:: @@ -8879,8 +8867,7 @@ BattleScript_MistySurgeActivates:: printstring STRINGID_TERRAINBECOMESMISTY waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects end3 BattleScript_GrassySurgeActivates:: @@ -8889,8 +8876,7 @@ BattleScript_GrassySurgeActivates:: printstring STRINGID_TERRAINBECOMESGRASSY waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects end3 BattleScript_PsychicSurgeActivates:: @@ -8899,8 +8885,7 @@ BattleScript_PsychicSurgeActivates:: printstring STRINGID_TERRAINBECOMESPSYCHIC waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects end3 BattleScript_HurtTarget_NoString: @@ -10183,7 +10168,6 @@ BattleScript_EffectHitSetRemoveTerrain: setterrain BattleScript_TryFaint playanimation BS_ATTACKER, B_ANIM_RESTORE_BG printfromtable gTerrainStringIds - call BattleScript_ActivateTerrainAbilities BattleScript_TryFaint: tryfaintmon BS_TARGET goto BattleScript_MoveEnd diff --git a/test/terrain_electric.c b/test/terrain_electric.c new file mode 100644 index 000000000..b5608e661 --- /dev/null +++ b/test/terrain_electric.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Electric Terrain protects grounded battlers from falling asleep") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CLAYDOL) { Ability(ABILITY_LEVITATE); } + } WHEN { + TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); MOVE(opponent, MOVE_SPORE); } + TURN { MOVE(player, MOVE_SPORE); } + } SCENE { + MESSAGE("Wobbuffet used ElctrcTrrain!"); + MESSAGE("Foe Claydol used Spore!"); + MESSAGE("Wobbuffet surrounds itself with electrified terrain!"); + MESSAGE("Wobbuffet used Spore!"); + MESSAGE("Foe Claydol fell asleep!"); + STATUS_ICON(opponent, sleep: TRUE); + } +} + +SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gItems[ITEM_ELECTRIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItems[ITEM_ELECTRIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ELECTRIC_SEED); } + OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + } WHEN { + TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Electric Seed, the defense of Wobbuffet rose!"); + ABILITY_POPUP(opponent); + MESSAGE("Foe Stunfisk's type changed to Electr!"); + } FINALLY { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_ELECTRIC); + } +} + +SINGLE_BATTLE_TEST("Electric Terrain increases power of Electric-type moves by 30/50 percent", s16 damage) +{ + bool32 terrain; + PARAMETRIZE { terrain = FALSE; } + PARAMETRIZE { terrain = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); } + TURN { MOVE(player, MOVE_THUNDER_SHOCK); } + } SCENE { + MESSAGE("Wobbuffet used ThunderShock!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + if (B_TERRAIN_TYPE_BOOST >= GEN_8) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.3), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c index 77f8a9927..cf8304875 100644 --- a/test/terrain_grassy.c +++ b/test/terrain_grassy.c @@ -15,5 +15,72 @@ SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") } } -TO_DO_BATTLE_TEST("Grassy Terrain increases power of Grass-type moves by 30/50 percent") -TO_DO_BATTLE_TEST("Grassy Terrain decreases power of Earthquake, Magnitude and Bulldoze by 50 percent") +SINGLE_BATTLE_TEST("Grassy Terrain activates Grassy Seed and Mimicry") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gItems[ITEM_GRASSY_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItems[ITEM_GRASSY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_GRASSY_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GRASSY_SEED); } + OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + } WHEN { + TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Grassy Seed, the defense of Wobbuffet rose!"); + ABILITY_POPUP(opponent); + MESSAGE("Foe Stunfisk's type changed to Grass!"); + } FINALLY { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_GRASS); + } +} + +SINGLE_BATTLE_TEST("Grassy Terrain increases power of Grass-type moves by 30/50 percent", s16 damage) +{ + bool32 terrain; + PARAMETRIZE { terrain = FALSE; } + PARAMETRIZE { terrain = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + TURN { MOVE(player, MOVE_ABSORB); } + } SCENE { + MESSAGE("Wobbuffet used Absorb!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + if (B_TERRAIN_TYPE_BOOST >= GEN_8) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.3), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +// Magnitude is not tested because its damage is variable. +SINGLE_BATTLE_TEST("Grassy Terrain decreases power of Earthquake and Bulldoze by 50 percent", s16 damage) +{ + bool32 terrain; + u16 move; + PARAMETRIZE { terrain = FALSE; move = MOVE_EARTHQUAKE; } // 0 + PARAMETRIZE { terrain = TRUE; move = MOVE_EARTHQUAKE; } // 1 + PARAMETRIZE { terrain = FALSE; move = MOVE_BULLDOZE; } // 2 + PARAMETRIZE { terrain = TRUE; move = MOVE_BULLDOZE; } // 3 + GIVEN { + ASSUME(gBattleMoves[MOVE_EARTHQUAKE].effect == EFFECT_EARTHQUAKE); + ASSUME(gBattleMoves[MOVE_BULLDOZE].effect == EFFECT_BULLDOZE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + EXPECT_MUL_EQ(results[2].damage, Q_4_12(0.5), results[3].damage); + } +} diff --git a/test/terrain_misty.c b/test/terrain_misty.c new file mode 100644 index 000000000..dda5253f2 --- /dev/null +++ b/test/terrain_misty.c @@ -0,0 +1,80 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Misty Terrain protects grounded battlers from non-volatile status conditions") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CLAYDOL) { Ability(ABILITY_LEVITATE); } + } WHEN { + TURN { MOVE(player, MOVE_MISTY_TERRAIN); MOVE(opponent, MOVE_TOXIC); } + TURN { MOVE(player, MOVE_TOXIC); } + } SCENE { + MESSAGE("Wobbuffet used MistyTerrain!"); + MESSAGE("Foe Claydol used Toxic!"); + MESSAGE("Wobbuffet surrounds itself with a protective mist!"); + NOT { STATUS_ICON(opponent, badPoison: TRUE); } + MESSAGE("Wobbuffet used Toxic!"); + STATUS_ICON(opponent, badPoison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gItems[ITEM_MISTY_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItems[ITEM_MISTY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_MISTY_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MISTY_SEED); } + OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + } WHEN { + TURN { MOVE(player, MOVE_MISTY_TERRAIN); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Misty Seed, the sp. defense of Wobbuffet rose!"); + ABILITY_POPUP(opponent); + MESSAGE("Foe Stunfisk's type changed to Fairy!"); + } FINALLY { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_FAIRY); + } +} + +SINGLE_BATTLE_TEST("Misty Terrain does not increase the power of Fairy-type moves", s16 damage) +{ + bool32 terrain; + PARAMETRIZE { terrain = FALSE; } + PARAMETRIZE { terrain = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_MISTY_TERRAIN); } + TURN { MOVE(player, MOVE_MOONBLAST); } + } SCENE { + MESSAGE("Wobbuffet used Moonblast!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Misty Terrain decreases power of Dragon-type moves by 50 percent", s16 damage) +{ + bool32 terrain; + PARAMETRIZE { terrain = FALSE; } + PARAMETRIZE { terrain = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_MISTY_TERRAIN); } + TURN { MOVE(player, MOVE_DRAGON_CLAW); } + } SCENE { + MESSAGE("Wobbuffet used Dragon Claw!"); + 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/terrain_psychic.c b/test/terrain_psychic.c new file mode 100644 index 000000000..eb5103f31 --- /dev/null +++ b/test/terrain_psychic.c @@ -0,0 +1,138 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Psychic Terrain protects grounded battlers from priority moves") +{ + GIVEN { + PLAYER(SPECIES_CLAYDOL) { Ability(ABILITY_LEVITATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_QUICK_ATTACK); MOVE(opponent, MOVE_QUICK_ATTACK); } + } SCENE { + MESSAGE("Claydol used PsychcTrrain!"); + MESSAGE("Claydol cannot use Quick Attack!"); + NOT { HP_BAR(opponent); } + MESSAGE("Foe Wobbuffet used Quick Attack!"); + HP_BAR(player); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gItems[ITEM_PSYCHIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItems[ITEM_PSYCHIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_PSYCHIC_SEED); } + OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Psychic Seed, the sp. defense of Wobbuffet rose!"); + ABILITY_POPUP(opponent); + MESSAGE("Foe Stunfisk's type changed to Psychc!"); + } FINALLY { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_PSYCHIC); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain increases power of Psychic-type moves by 30/50 percent", s16 damage) +{ + bool32 terrain; + PARAMETRIZE { terrain = FALSE; } + PARAMETRIZE { terrain = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_CONFUSION); } + } SCENE { + MESSAGE("Wobbuffet used Confusion!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + if (B_TERRAIN_TYPE_BOOST >= GEN_8) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.3), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target the user", s16 damage) +{ + GIVEN { + PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_RECOVER); } + } SCENE { + MESSAGE("Sableye used PsychcTrrain!"); + MESSAGE("Sableye used Recover!"); + HP_BAR(player); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all battlers", s16 damage) +{ + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_HAZE); } + } SCENE { + MESSAGE("Sableye used PsychcTrrain!"); + MESSAGE("Sableye used Haze!"); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all opponents", s16 damage) +{ + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_SPIKES); } + } SCENE { + MESSAGE("Sableye used PsychcTrrain!"); + MESSAGE("Sableye used Spikes!"); + } +} + +DOUBLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target allies", s16 damage) +{ + GIVEN { + PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(playerLeft, MOVE_HEAL_PULSE, target: playerRight); } + } SCENE { + MESSAGE("Sableye used PsychcTrrain!"); + MESSAGE("Sableye used Heal Pulse!"); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority field moves", s16 damage) +{ + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_SUNNY_DAY); } + } SCENE { + MESSAGE("Sableye used PsychcTrrain!"); + MESSAGE("Sableye used Sunny Day!"); + } +} From 35952cf7ad81390e90d550b705f128ca24d9d76d Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Wed, 5 Apr 2023 13:07:02 +0100 Subject: [PATCH 092/129] Clamp RandomPercentage to 0...100 --- include/random.h | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/include/random.h b/include/random.h index fd340c26d..e7c2a3e28 100644 --- a/include/random.h +++ b/include/random.h @@ -80,8 +80,21 @@ enum RandomTag #define RandomPercentage(tag, t) \ ({ \ - const u8 weights[] = { 100 - t, t }; \ - RandomWeightedArray(tag, 100, ARRAY_COUNT(weights), weights); \ + u32 r; \ + if (t <= 0) \ + { \ + r = FALSE; \ + } \ + else if (t >= 100) \ + { \ + r = TRUE; \ + } \ + else \ + { \ + const u8 weights[] = { 100 - t, t }; \ + r = RandomWeightedArray(tag, 100, ARRAY_COUNT(weights), weights); \ + } \ + r; \ }) #define RandomElement(tag, array) \ From dfee8a4759c65bc222abf77c2371ccda0815d638 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Thu, 6 Apr 2023 00:26:52 +0200 Subject: [PATCH 093/129] OW Poison configs --- include/config/overworld.h | 3 +++ include/strings.h | 1 + src/field_control_avatar.c | 2 ++ src/field_poison.c | 14 ++++++++++++++ src/strings.c | 1 + 5 files changed, 21 insertions(+) diff --git a/include/config/overworld.h b/include/config/overworld.h index 7831858d2..f62588b5f 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -4,6 +4,9 @@ // Movement config #define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. +// Other settings +#define OW_POISON_DAMAGE GEN_LATEST // In Gen4, Pokémon no longer faint from Poison in the overworld. In Gen5+, they no longer take damage at all. + // Overworld flags // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. // Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. diff --git a/include/strings.h b/include/strings.h index 959bb8c22..984247b21 100644 --- a/include/strings.h +++ b/include/strings.h @@ -180,6 +180,7 @@ extern const u8 gText_Confirm3[]; extern const u8 gText_Cancel4[]; extern const u8 gText_IsThisTheCorrectTime[]; extern const u8 gText_PkmnFainted_FldPsn[]; +extern const u8 gText_PkmnSurvived_FldPsn[]; extern const u8 gText_Coins[]; extern const u8 gText_Silver[]; extern const u8 gText_Gold[]; diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 96e9173c9..b784a2ab8 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -565,11 +565,13 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior)) { + #if OW_POISON_DAMAGE < GEN_5 if (UpdatePoisonStepCounter() == TRUE) { ScriptContext_SetupScript(EventScript_FieldPoison); return TRUE; } + #endif if (ShouldEggHatch()) { IncrementGameStat(GAME_STAT_HATCHED_EGGS); diff --git a/src/field_poison.c b/src/field_poison.c index f254a6d14..89463a1e3 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -44,7 +44,9 @@ static void FaintFromFieldPoison(u8 partyIdx) struct Pokemon *pokemon = &gPlayerParty[partyIdx]; u32 status = STATUS1_NONE; +#if OW_POISON_DAMAGE < GEN_4 AdjustFriendship(pokemon, FRIENDSHIP_EVENT_FAINT_FIELD_PSN); +#endif SetMonData(pokemon, MON_DATA_STATUS, &status); GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1); StringGet_Nickname(gStringVar1); @@ -53,7 +55,11 @@ static void FaintFromFieldPoison(u8 partyIdx) static bool32 MonFaintedFromPoison(u8 partyIdx) { struct Pokemon *pokemon = &gPlayerParty[partyIdx]; +#if OW_POISON_DAMAGE < GEN_4 if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 0 && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) +#else + if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 1 && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) +#endif return TRUE; return FALSE; @@ -73,7 +79,11 @@ static void Task_TryFieldPoisonWhiteOut(u8 taskId) if (MonFaintedFromPoison(tPartyIdx)) { FaintFromFieldPoison(tPartyIdx); + #if OW_POISON_DAMAGE < GEN_4 ShowFieldMessage(gText_PkmnFainted_FldPsn); + #else + ShowFieldMessage(gText_PkmnSurvived_FldPsn); + #endif tState++; return; } @@ -127,7 +137,11 @@ s32 DoPoisonFieldEffect(void) { // Apply poison damage hp = GetMonData(pokemon, MON_DATA_HP); + #if OW_POISON_DAMAGE < GEN_4 if (hp == 0 || --hp == 0) + #else + if (hp == 1 || --hp == 1) + #endif numFainted++; SetMonData(pokemon, MON_DATA_HP, &hp); diff --git a/src/strings.c b/src/strings.c index 8815212e0..d297c4535 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1192,6 +1192,7 @@ const u8 gText_IcePunch48BP[] = _("ICE PUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_ThunderPunch48BP[] = _("THUNDERPUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_FirePunch48BP[] = _("FIRE PUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_PkmnFainted_FldPsn[] = _("{STR_VAR_1} fainted…\p\n"); +const u8 gText_PkmnSurvived_FldPsn[] = _("{STR_VAR_1} survived the poisoning.\nThe poison faded away!\p"); const u8 gText_Marco[] = _("MARCO"); const u8 gText_TrainerCardName[] = _("NAME: "); const u8 gText_TrainerCardIDNo[] = _("IDNo."); From 50b5dba6559c6804c5cb3e760243058c6a6321ad Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Thu, 6 Apr 2023 10:13:32 +0200 Subject: [PATCH 094/129] Fix string issue as requested by Jaizu --- include/strings.h | 1 - src/field_poison.c | 4 ---- src/strings.c | 5 ++++- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/include/strings.h b/include/strings.h index 984247b21..959bb8c22 100644 --- a/include/strings.h +++ b/include/strings.h @@ -180,7 +180,6 @@ extern const u8 gText_Confirm3[]; extern const u8 gText_Cancel4[]; extern const u8 gText_IsThisTheCorrectTime[]; extern const u8 gText_PkmnFainted_FldPsn[]; -extern const u8 gText_PkmnSurvived_FldPsn[]; extern const u8 gText_Coins[]; extern const u8 gText_Silver[]; extern const u8 gText_Gold[]; diff --git a/src/field_poison.c b/src/field_poison.c index 89463a1e3..da162e413 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -79,11 +79,7 @@ static void Task_TryFieldPoisonWhiteOut(u8 taskId) if (MonFaintedFromPoison(tPartyIdx)) { FaintFromFieldPoison(tPartyIdx); - #if OW_POISON_DAMAGE < GEN_4 ShowFieldMessage(gText_PkmnFainted_FldPsn); - #else - ShowFieldMessage(gText_PkmnSurvived_FldPsn); - #endif tState++; return; } diff --git a/src/strings.c b/src/strings.c index d297c4535..847b2849a 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1191,8 +1191,11 @@ const u8 gText_PsychUp48BP[] = _("PSYCH UP{CLEAR_TO 0x4E}48BP"); const u8 gText_IcePunch48BP[] = _("ICE PUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_ThunderPunch48BP[] = _("THUNDERPUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_FirePunch48BP[] = _("FIRE PUNCH{CLEAR_TO 0x4E}48BP"); +#if OW_POISON_DAMAGE < GEN_4 const u8 gText_PkmnFainted_FldPsn[] = _("{STR_VAR_1} fainted…\p\n"); -const u8 gText_PkmnSurvived_FldPsn[] = _("{STR_VAR_1} survived the poisoning.\nThe poison faded away!\p"); +#else +const u8 gText_PkmnFainted_FldPsn[] = _("{STR_VAR_1} survived the poisoning.\nThe poison faded away!\p"); +#endif const u8 gText_Marco[] = _("MARCO"); const u8 gText_TrainerCardName[] = _("NAME: "); const u8 gText_TrainerCardIDNo[] = _("IDNo."); From bd4736cc97dba7dd5409d49175ca8a89750c51e2 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 5 Apr 2023 21:50:26 +0200 Subject: [PATCH 095/129] initial commit test multi battle final remove empty line --- include/battle_main.h | 2 ++ src/battle_main.c | 6 ++---- src/battle_tower.c | 45 +++++++++++++++++++++++++++--------------- test/trainer_control.c | 2 +- 4 files changed, 34 insertions(+), 21 deletions(-) diff --git a/include/battle_main.h b/include/battle_main.h index 8d1aad454..4f20e4c17 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -70,6 +70,8 @@ void SpecialStatusesClear(void); void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk); 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); extern struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE]; diff --git a/src/battle_main.c b/src/battle_main.c index efbf1b819..fb2f3cb4c 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -120,8 +120,6 @@ static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite); static void TrySpecialEvolution(void); static u32 Crc32B (const u8 *data, u32 size); static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i); -static void ModifyPersonalityForNature(u32 *personality, u32 newNature); -static u32 GeneratePersonalityForGender(u32 gender, u32 species); EWRAM_DATA u16 gBattle_BG0_X = 0; EWRAM_DATA u16 gBattle_BG0_Y = 0; @@ -1925,7 +1923,7 @@ static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i) return Crc32B(buffer, n); } -static void ModifyPersonalityForNature(u32 *personality, u32 newNature) +void ModifyPersonalityForNature(u32 *personality, u32 newNature) { u32 nature = GetNatureFromPersonality(*personality); s32 diff = abs(nature - newNature); @@ -1938,7 +1936,7 @@ static void ModifyPersonalityForNature(u32 *personality, u32 newNature) *personality -= (diff * sign); } -static u32 GeneratePersonalityForGender(u32 gender, u32 species) +u32 GeneratePersonalityForGender(u32 gender, u32 species) { const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[species]; if (gender == MON_MALE) diff --git a/src/battle_tower.c b/src/battle_tower.c index a4758b930..4e16467f0 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3103,25 +3103,38 @@ static void FillPartnerParty(u16 trainerId) case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: { const struct TrainerMonCustomized *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.EverythingCustomized; + u32 otIdType = OT_ID_RANDOM_NO_SHINY; - CreateMon(&gPlayerParty[i], partyData[i].species, partyData[i].lvl, 0, TRUE, j, TRUE, otID); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + 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); // TODO: Figure out a default strategy when moves are not set, to generate a good moveset for (j = 0; j < MAX_MON_MOVES; ++j) { - SetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); - SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + 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); } - SetMonData(&gPlayerParty[i], MON_DATA_IVS, &(partyData[i].iv)); + SetMonData(&gPlayerParty[i+3], MON_DATA_IVS, &(partyData[i].iv)); if (partyData[i].ev != NULL) { - SetMonData(&gPlayerParty[i], MON_DATA_HP_EV, &(partyData[i].ev[0])); - SetMonData(&gPlayerParty[i], MON_DATA_ATK_EV, &(partyData[i].ev[1])); - SetMonData(&gPlayerParty[i], MON_DATA_DEF_EV, &(partyData[i].ev[2])); - SetMonData(&gPlayerParty[i], MON_DATA_SPATK_EV, &(partyData[i].ev[3])); - SetMonData(&gPlayerParty[i], MON_DATA_SPDEF_EV, &(partyData[i].ev[4])); - SetMonData(&gPlayerParty[i], MON_DATA_SPEED_EV, &(partyData[i].ev[5])); + 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) { @@ -3133,19 +3146,19 @@ static void FillPartnerParty(u16 trainerId) break; } if (j < maxAbilities) - SetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM, &j); + SetMonData(&gPlayerParty[i+3], MON_DATA_ABILITY_NUM, &j); } - SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); + SetMonData(&gPlayerParty[i+3], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); if (partyData[i].ball != ITEM_NONE) { ball = partyData[i].ball; - SetMonData(&gPlayerParty[i], MON_DATA_POKEBALL, &ball); + SetMonData(&gPlayerParty[i+3], MON_DATA_POKEBALL, &ball); } if (partyData[i].nickname != NULL) { - SetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, partyData[i].nickname); + SetMonData(&gPlayerParty[i+3], MON_DATA_NICKNAME, partyData[i].nickname); } - CalculateMonStats(&gPlayerParty[i]); + CalculateMonStats(&gPlayerParty[i+3]); } } diff --git a/test/trainer_control.c b/test/trainer_control.c index 307942207..2a21dcdf6 100644 --- a/test/trainer_control.c +++ b/test/trainer_control.c @@ -81,7 +81,7 @@ TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon") EXPECT(GetMonData(&testParty[0], MON_DATA_HELD_ITEM, 0) == ITEM_ASSAULT_VEST); EXPECT(GetMonData(&testParty[1], MON_DATA_HELD_ITEM, 0) == ITEM_NONE); - + EXPECT(GetMonData(&testParty[0], MON_DATA_HP_IV, 0) == 25); EXPECT(GetMonData(&testParty[0], MON_DATA_ATK_IV, 0) == 26); EXPECT(GetMonData(&testParty[0], MON_DATA_DEF_IV, 0) == 27); From 4709d2b46fdc70eb1e02ba83abf5e6712e3bfebd Mon Sep 17 00:00:00 2001 From: Jaizu Date: Fri, 7 Apr 2023 10:53:44 +0200 Subject: [PATCH 096/129] Fix trainers having empty movesets --- src/battle_main.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index efbf1b819..4bd0ce907 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -122,6 +122,7 @@ static u32 Crc32B (const u8 *data, u32 size); static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i); static void ModifyPersonalityForNature(u32 *personality, u32 newNature); static u32 GeneratePersonalityForGender(u32 gender, u32 species); +static void CustomTrainerPartyAssignMoves(struct Pokemon *mon, const struct TrainerMonCustomized *partyEntry); EWRAM_DATA u16 gBattle_BG0_X = 0; EWRAM_DATA u16 gBattle_BG0_Y = 0; @@ -1947,6 +1948,29 @@ static u32 GeneratePersonalityForGender(u32 gender, u32 species) return speciesInfo->genderRatio / 2; } +static void CustomTrainerPartyAssignMoves(struct Pokemon *mon, const struct TrainerMonCustomized *partyEntry) +{ + bool32 noMoveSet = TRUE; + u32 j; + + for (j = 0; j < MAX_MON_MOVES; ++j) + { + if (partyEntry->moves[j] != MOVE_NONE) + noMoveSet = FALSE; + } + if (noMoveSet) + { + // TODO: Figure out a default strategy when moves are not set, to generate a good moveset + return; + } + + for (j = 0; j < MAX_MON_MOVES; ++j) + { + SetMonData(mon, MON_DATA_MOVE1 + j, &partyEntry->moves[j]); + SetMonData(mon, MON_DATA_PP1 + j, &gBattleMoves[partyEntry->moves[j]].pp); + } +} + u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags) { u32 personalityValue; @@ -2049,12 +2073,7 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer CreateMon(&party[i], partyData[i].species, partyData[i].lvl, 0, TRUE, personalityValue, otIdType, fixedOtId); SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); - // TODO: Figure out a default strategy when moves are not set, to generate a good moveset - 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); - } + CustomTrainerPartyAssignMoves(&party[i], &partyData[i]); SetMonData(&party[i], MON_DATA_IVS, &(partyData[i].iv)); if (partyData[i].ev != NULL) { From e1beb55a51406ab9f9932b82dbc5b668b3aa9287 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Fri, 7 Apr 2023 11:07:52 +0200 Subject: [PATCH 097/129] Fix overworld poison not working on newer generations config --- src/field_control_avatar.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index b784a2ab8..96e9173c9 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -565,13 +565,11 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior)) { - #if OW_POISON_DAMAGE < GEN_5 if (UpdatePoisonStepCounter() == TRUE) { ScriptContext_SetupScript(EventScript_FieldPoison); return TRUE; } - #endif if (ShouldEggHatch()) { IncrementGameStat(GAME_STAT_HATCHED_EGGS); From d57d8e6e71ddfee8fea737db5b2c30c540fd196e Mon Sep 17 00:00:00 2001 From: Philipp AUER Date: Fri, 7 Apr 2023 11:35:30 +0200 Subject: [PATCH 098/129] Revert "Fix overworld poison not working on newer generations config" This reverts commit e1beb55a51406ab9f9932b82dbc5b668b3aa9287. --- src/field_control_avatar.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 96e9173c9..b784a2ab8 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -565,11 +565,13 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior)) { + #if OW_POISON_DAMAGE < GEN_5 if (UpdatePoisonStepCounter() == TRUE) { ScriptContext_SetupScript(EventScript_FieldPoison); return TRUE; } + #endif if (ShouldEggHatch()) { IncrementGameStat(GAME_STAT_HATCHED_EGGS); From 59dfc7c3ad513ee2bc05b43e80eedf7dfccb43ee Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Fri, 7 Apr 2023 06:07:12 -0700 Subject: [PATCH 099/129] Update include/config/battle.h Took suggestions from https://github.com/rh-hideout/pokeemerald-expansion/pull/2875#discussion_r1160574308 Co-authored-by: LOuroboros --- include/config/battle.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 77e0e0f4d..790ad78cc 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -155,8 +155,8 @@ #define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active #define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) -//Flag and Var settings -#define B_RESET_FLAGS_VARS_AFTER_WHITEOUT TRUE // If set to TRUE, Flag and Var settings (B_FLAG_INVERSE_BATTLE,B_FLAG_FORCE_DOUBLE_WILD,B_SMART_WILD_AI_FLAG,B_FLAG_NO_BAG_USE,B_FLAG_NO_CATCHING,B_VAR_WILD_AI_FLAGS, and VAR_TERRAIN) will be reset when the player whites out. +// Flag and Var settings +#define B_RESET_FLAGS_VARS_AFTER_WHITEOUT TRUE // If TRUE, Overworld_ResetBattleFlagsAndVars will reset battle-related Flags and Vars when the player whites out. // Terrain settings #define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades. From 903b56756d8ed1b860917e61e05528796e56cb01 Mon Sep 17 00:00:00 2001 From: sbird Date: Sat, 8 Apr 2023 02:21:19 +0200 Subject: [PATCH 100/129] fix an oversight that caused battles to continuesly be double battles --- src/battle_main.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/battle_main.c b/src/battle_main.c index efbf1b819..9d4c9dc9c 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -2111,7 +2111,13 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir return 0; retVal = CreateNPCTrainerPartyFromTrainer(party, &gTrainers[trainerNum], firstTrainer, gBattleTypeFlags); - gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_TRAINER_HILL))) + { + gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; + } + return retVal; } void VBlankCB_Battle(void) From 02af4d0943ccd5f982808727deff6999bc3216e9 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 8 Apr 2023 18:53:04 +0200 Subject: [PATCH 101/129] Fixes Ominous Wind targeting --- src/data/battle_moves.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 64ce24686..3dc21a538 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -7884,7 +7884,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 100, .pp = 5, .secondaryEffectChance = 10, - .target = MOVE_TARGET_BOTH, + .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, From bd54c70020f732fd047018019867212c7c013141 Mon Sep 17 00:00:00 2001 From: aaghaht Date: Mon, 10 Apr 2023 10:47:31 +0530 Subject: [PATCH 102/129] Add PLA evo items --- .../items/icon_palettes/black_augurite.pal | 19 +++++++++ graphics/items/icon_palettes/linking_cord.pal | 19 +++++++++ graphics/items/icon_palettes/peat_block.pal | 19 +++++++++ graphics/items/icons/black_augurite.png | Bin 0 -> 385 bytes graphics/items/icons/linking_cord.png | Bin 0 -> 380 bytes graphics/items/icons/peat_block.png | Bin 0 -> 403 bytes include/constants/items.h | 6 ++- include/constants/pokemon.h | 1 + include/graphics.h | 6 +++ src/data/graphics/items.h | 9 ++++ src/data/item_icon_table.h | 3 ++ src/data/items.h | 36 ++++++++++++++++ src/data/pokemon/evolution.h | 40 ++++++++++++------ src/data/pokemon/item_effects.h | 3 ++ src/data/text/item_descriptions.h | 15 +++++++ src/pokemon.c | 5 +++ 16 files changed, 167 insertions(+), 14 deletions(-) create mode 100644 graphics/items/icon_palettes/black_augurite.pal create mode 100644 graphics/items/icon_palettes/linking_cord.pal create mode 100644 graphics/items/icon_palettes/peat_block.pal create mode 100644 graphics/items/icons/black_augurite.png create mode 100644 graphics/items/icons/linking_cord.png create mode 100644 graphics/items/icons/peat_block.png diff --git a/graphics/items/icon_palettes/black_augurite.pal b/graphics/items/icon_palettes/black_augurite.pal new file mode 100644 index 000000000..0d67abee3 --- /dev/null +++ b/graphics/items/icon_palettes/black_augurite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +0 0 0 +111 108 124 +58 48 49 +206 206 214 +151 149 160 +142 93 117 +89 62 76 +255 255 255 +111 109 124 +194 192 202 +88 62 76 +80 74 88 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/linking_cord.pal b/graphics/items/icon_palettes/linking_cord.pal new file mode 100644 index 000000000..8be2b522f --- /dev/null +++ b/graphics/items/icon_palettes/linking_cord.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 192 168 +87 87 88 +155 158 156 +117 114 116 +0 0 0 +36 37 42 +62 66 68 +56 57 61 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/peat_block.pal b/graphics/items/icon_palettes/peat_block.pal new file mode 100644 index 000000000..8d4b5e3b6 --- /dev/null +++ b/graphics/items/icon_palettes/peat_block.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 198 168 +32 32 32 +230 217 213 +199 189 184 +156 135 143 +102 83 83 +143 118 130 +65 56 56 +179 162 151 +117 100 100 +210 183 192 +180 158 167 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icons/black_augurite.png b/graphics/items/icons/black_augurite.png new file mode 100644 index 0000000000000000000000000000000000000000..8be2bc188c9b3d35e52d8fe0f09e3c6dcd62f9c5 GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w_7YEDSN7*jl0s${dOxN}0fod% zTq88foYA|NsB|+?qoNPDR-H z1b9UN)j+_MpjF3#EXE{ncbET5**_fxa+Z3!IEGZrNls{Ba${s;5pa5BFiWAZ#Z^$o zFE|#N9}!~hJ-tw7fslgqF~-f^t!alWkERJN zOt3w4%%N=4!yp6qTQ_d#?7UN=b|gdLwuP>;iNKkgIXQEtO*73_JaW*XY}S>a4y(k? zTTBjLn;973o7on$I*iq6PGv+u+Ota%D^{oaottCnF7S-mQ6a&Bongs&%|BLa|9%1a N!_(EzWt~$(69B6(f(ZZs literal 0 HcmV?d00001 diff --git a/graphics/items/icons/linking_cord.png b/graphics/items/icons/linking_cord.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f92da04b753298958b4a21333b3732d5ecabb4 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w_7YEDSN7*jQtZl#rF9~^fkNUX zt`Q}{`DrEPiAAXl?mjL+V-(6#ixiCYObT0EHc6ehi9>Q98Tw zV!4Qf$#R>u38|0je70)el9zf?yJzz~6KBWA4u+ tk(HM8&b}7oSqW8k<^3Ob?Rr&I!_53wgT>=z`d5&TJYD@<);T3K0RRPqddL6( literal 0 HcmV?d00001 diff --git a/graphics/items/icons/peat_block.png b/graphics/items/icons/peat_block.png new file mode 100644 index 0000000000000000000000000000000000000000..9c106598756eeef0a1e141e71fd46d1569c72001 GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w_7YEDSN7*jQXC@Uiu2R7fkNUX zt`Q}{`DrEPiAAXl?mjL+V-(6#ixiCYObT0Gowy z&x<4^#DqS2^hjz}*gHGc6E|h=J&JoY&2F>Ip_eP7-i28n6+ZHjPxt=bt!pkFJ<59I zrqtfsq9+QO3(N9v?!9eVljbFLLhj(*-R0Hq=S+LVQ6|%|UG=Oh!z)t-b=G%^j+x@_ fD(ktp9`K7Z97{B*?YwkR0OU7MS3j3^P6= 0 && gLocalTime.hours < 12 && gEvolutionTable[species][i].param == evolutionItem) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; } } break; From 0f958806eaba35ee9fe11eaf9609461b3ee92672 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Mon, 10 Apr 2023 14:39:14 +0200 Subject: [PATCH 103/129] Remove unused battle funcs --- include/battle_interface.h | 1 - src/battle_interface.c | 18 ------------------ 2 files changed, 19 deletions(-) diff --git a/include/battle_interface.h b/include/battle_interface.h index e0f30b309..e2937748a 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -81,7 +81,6 @@ u8 CreateSafariPlayerHealthboxSprites(void); void SetBattleBarStruct(u8 battler, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue); void SetHealthboxSpriteInvisible(u8 healthboxSpriteId); void SetHealthboxSpriteVisible(u8 healthboxSpriteId); -void DestoryHealthboxSprite(u8 healthboxSpriteId); void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBankOnly); void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHpBoxes); void InitBattlerHealthboxCoords(u8 battler); diff --git a/src/battle_interface.c b/src/battle_interface.c index 35c0e60c6..9138dcf6e 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -186,7 +186,6 @@ static void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible); static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level); static void MegaIndicator_CreateSprites(u32 battlerId, u32 healthboxSpriteId); static void MegaIndicator_UpdateOamPriorities(u32 healthboxId, u32 oamPriority); -static void MegaIndicator_DestroySprites(u32 healthboxSpriteId); static void SpriteCb_MegaIndicator(struct Sprite *); static u8 GetStatusIconForBattlerId(u8, u8); @@ -884,14 +883,6 @@ static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) gSprites[spriteId].y = y; } -void DestoryHealthboxSprite(u8 healthboxSpriteId) -{ - MegaIndicator_DestroySprites(healthboxSpriteId); - DestroySprite(&gSprites[gSprites[healthboxSpriteId].oam.affineParam]); - DestroySprite(&gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId]); - DestroySprite(&gSprites[healthboxSpriteId]); -} - void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBattlerOnly) { @@ -1599,15 +1590,6 @@ static void MegaIndicator_CreateSprites(u32 battlerId, u32 healthboxSpriteId) } } -static void MegaIndicator_DestroySprites(u32 healthboxSpriteId) -{ - u32 i; - u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxSpriteId); - - for (i = 0; i < INDICATOR_COUNT; i++) - DestroySprite(&gSprites[spriteIds[i]]); -} - static void SpriteCb_MegaIndicator(struct Sprite *sprite) { u32 battlerId = sprite->tBattler; From 5c0e5d213311c8c72c119b2450ad5b45d4716f3a Mon Sep 17 00:00:00 2001 From: Jaizu Date: Mon, 10 Apr 2023 14:40:56 +0200 Subject: [PATCH 104/129] Don't toggle mega indicator visibility on the Safari Zone --- src/battle_interface.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/battle_interface.c b/src/battle_interface.c index 9138dcf6e..7f7e1d20f 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1531,6 +1531,9 @@ void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible) u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxId); u32 battlerId = gSprites[healthboxId].hMain_Battler; + if (GetSafariZoneFlag()) + return; + for (i = 0; i < INDICATOR_COUNT; i++) { if (invisible == TRUE) From e49bb21ee48e7e4dc6d1f14420622ddf50488a5e Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 10 Apr 2023 09:48:44 -0400 Subject: [PATCH 105/129] some IsBattlerAIControlled replacements w BattlerHasAi --- src/battle_ai_util.c | 6 +++--- src/battle_script_commands.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 51f4ef046..3160dfa3f 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -537,7 +537,7 @@ void ClearBattlerItemEffectHistory(u8 battlerId) void SaveBattlerData(u8 battlerId) { - if (!IsBattlerAIControlled(battlerId)) + if (!BattlerHasAi(battlerId)) { u32 i; @@ -588,7 +588,7 @@ static bool32 ShouldFailForIllusion(u16 illusionSpecies, u32 battlerId) void SetBattlerData(u8 battlerId) { - if (!IsBattlerAIControlled(battlerId)) + if (!BattlerHasAi(battlerId)) { u32 i, species, illusionSpecies; @@ -631,7 +631,7 @@ void SetBattlerData(u8 battlerId) void RestoreBattlerData(u8 battlerId) { - if (!IsBattlerAIControlled(battlerId)) + if (!BattlerHasAi(battlerId)) { u32 i; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 28bf60c39..22c20c698 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7036,7 +7036,7 @@ static void Cmd_switchineffects(void) gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); gSpecialStatuses[gActiveBattler].faintedHasReplacement = FALSE; - if (!IsBattlerAIControlled(gActiveBattler)) + if (!BattlerHasAi(gActiveBattler)) gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; // Neutralizing Gas announces itself before hazards From e3ca217d6412b4eccd325006904ca88a2f3a631c Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 10 Apr 2023 11:36:17 -0400 Subject: [PATCH 106/129] rename IsBattlerAIControlled --- include/battle_ai_util.h | 2 +- src/battle_ai_main.c | 2 +- src/battle_ai_util.c | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 68c0dbd99..d1319f0ca 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -10,7 +10,7 @@ bool32 AI_RandLessThan(u8 val); void RecordLastUsedMoveByTarget(void); bool32 BattlerHasAi(u32 battlerId); -bool32 IsBattlerAIControlled(u32 battlerId); +bool32 IsAiBattlerAware(u32 battlerId); void ClearBattlerMoveHistory(u8 battlerId); void RecordLastUsedMoveBy(u32 battlerId, u32 move); void RecordKnownMove(u8 battlerId, u32 move); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 95e85ab89..2fb9c2640 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -367,7 +367,7 @@ void GetAiLogicData(void) for (battlerAtk = 0; battlerAtk < gBattlersCount; battlerAtk++) { if (!IsBattlerAlive(battlerAtk) - || !IsBattlerAIControlled(battlerAtk)) { + || !IsAiBattlerAware(battlerAtk)) { continue; } diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 22c7bb633..05e7aec58 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -473,7 +473,7 @@ bool32 BattlerHasAi(u32 battlerId) } } -bool32 IsBattlerAIControlled(u32 battlerId) +bool32 IsAiBattlerAware(u32 battlerId) { if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_OMNISCIENT) return TRUE; @@ -1231,7 +1231,7 @@ s32 AI_GetAbility(u32 battlerId) return gBattleStruct->overwrittenAbilities[battlerId]; // The AI knows its own ability. - if (IsBattlerAIControlled(battlerId)) + if (IsAiBattlerAware(battlerId)) return knownAbility; // Check neutralizing gas, gastro acid @@ -1264,7 +1264,7 @@ u16 AI_GetHoldEffect(u32 battlerId) { u32 holdEffect; - if (!IsBattlerAIControlled(battlerId)) + if (!IsAiBattlerAware(battlerId)) holdEffect = AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].heldEffect; else holdEffect = GetBattlerHoldEffect(battlerId, FALSE); @@ -1889,7 +1889,7 @@ bool32 CanIndexMoveFaintTarget(u8 battlerAtk, u8 battlerDef, u8 index, u8 numHit u16 *GetMovesArray(u32 battler) { - if (IsBattlerAIControlled(battler) || IsBattlerAIControlled(BATTLE_PARTNER(battler))) + if (IsAiBattlerAware(battler) || IsAiBattlerAware(BATTLE_PARTNER(battler))) return gBattleMons[battler].moves; else return gBattleResources->battleHistory->usedMoves[battler]; @@ -3144,7 +3144,7 @@ u16 GetAllyChosenMove(u8 battlerId) { u8 partnerBattler = BATTLE_PARTNER(battlerId); - if (!IsBattlerAlive(partnerBattler) || !IsBattlerAIControlled(partnerBattler)) + if (!IsBattlerAlive(partnerBattler) || !IsAiBattlerAware(partnerBattler)) return MOVE_NONE; else if (partnerBattler > battlerId) // Battler with the lower id chooses the move first. return gLastMoves[partnerBattler]; From 86242c1c7097a66f66efa0ff4be4c0982d47e9c2 Mon Sep 17 00:00:00 2001 From: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Date: Tue, 11 Apr 2023 17:14:25 -0700 Subject: [PATCH 107/129] MOVE_REVIVAL_BLESSING Effect (#2883) * implemented Revival Blessing --- asm/macros/battle_script.inc | 5 + data/battle_scripts_1.s | 19 ++++ include/battle_script_commands.h | 1 + include/constants/battle_move_effects.h | 3 +- include/constants/battle_script_commands.h | 1 + include/constants/battle_string_ids.h | 3 +- include/constants/party_menu.h | 1 + src/battle_ai_main.c | 13 +++ src/battle_controller_opponent.c | 16 ++- src/battle_controller_player.c | 3 +- src/battle_controller_player_partner.c | 36 ++++--- src/battle_controller_recorded_opponent.c | 2 + src/battle_controller_recorded_player.c | 2 + src/battle_main.c | 4 + src/battle_message.c | 2 + src/battle_script_commands.c | 81 ++++++++++++++ src/data/battle_moves.h | 2 +- src/party_menu.c | 19 ++++ test/move_effect_revival_blessing.c | 117 +++++++++++++++++++++ 19 files changed, 309 insertions(+), 21 deletions(-) create mode 100644 test/move_effect_revival_blessing.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 3419e2e56..30df11232 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2263,3 +2263,8 @@ .macro hitswitchtargetfailed various 0, VARIOUS_HIT_SWITCH_TARGET_FAILED .endm + + .macro tryrevivalblessing, jumpInstr:req + various 0, VARIOUS_TRY_REVIVAL_BLESSING + .4byte \jumpInstr + .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ea7ef493c..4848b7322 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -423,6 +423,25 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHitSetEntryHazard @ EFFECT_HIT_SET_ENTRY_HAZARD .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE + .4byte BattleScript_EffectRevivalBlessing @ EFFECT_REVIVAL_BLESSING + +BattleScript_EffectRevivalBlessing:: + attackcanceler + attackstring + ppreduce + attackanimation + waitanimation + tryrevivalblessing BattleScript_ButItFailed + printstring STRINGID_PKMNREVIVEDREADYTOFIGHT + waitmessage B_WAIT_TIME_LONG + jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_EffectRevivalBlessingSendOut + goto BattleScript_MoveEnd + +BattleScript_EffectRevivalBlessingSendOut: + switchinanim BS_SCRIPTING, FALSE + waitstate + switchineffects BS_SCRIPTING + goto BattleScript_MoveEnd BattleScript_StealthRockActivates:: setstealthrock BattleScript_MoveEnd diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index d65728628..dcf601e80 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -46,6 +46,7 @@ u8 GetCatchingBattler(void); u32 GetHighestStatId(u32 battlerId); bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType); bool32 DoSwitchInAbilitiesItems(u32 battlerId); +u8 GetFirstFaintedPartyIndex(u8 battlerId); extern void (* const gBattleScriptingCommandsTable[])(void); extern const u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 27ad6601f..d1562dec9 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -404,7 +404,8 @@ #define EFFECT_HIT_SET_ENTRY_HAZARD 398 #define EFFECT_DIRE_CLAW 399 #define EFFECT_BARB_BARRAGE 400 +#define EFFECT_REVIVAL_BLESSING 401 -#define NUM_BATTLE_MOVE_EFFECTS 401 +#define NUM_BATTLE_MOVE_EFFECTS 402 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 26064bcfb..be2410f94 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -259,6 +259,7 @@ #define VARIOUS_STORE_HEALING_WISH 167 #define VARIOUS_HIT_SWITCH_TARGET_FAILED 168 #define VARIOUS_JUMP_IF_SHELL_TRAP 169 +#define VARIOUS_TRY_REVIVAL_BLESSING 170 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index b94176334..1124c3a60 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -647,8 +647,9 @@ #define STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM 645 #define STRINGID_COULDNTFULLYPROTECT 646 #define STRINGID_STOCKPILEDEFFECTWOREOFF 647 +#define STRINGID_PKMNREVIVEDREADYTOFIGHT 648 -#define BATTLESTRINGS_COUNT 648 +#define BATTLESTRINGS_COUNT 649 // 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/party_menu.h b/include/constants/party_menu.h index 2c632d30c..f28b75122 100644 --- a/include/constants/party_menu.h +++ b/include/constants/party_menu.h @@ -48,6 +48,7 @@ #define PARTY_ACTION_MOVE_TUTOR 12 #define PARTY_ACTION_MINIGAME 13 #define PARTY_ACTION_REUSABLE_ITEM 14 // Unused. The only reusable items are handled separately +#define PARTY_ACTION_CHOOSE_FAINTED_MON 15 // IDs for DisplayPartyMenuStdMessage, to display the message at the bottom of the party menu #define PARTY_MSG_CHOOSE_MON 0 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 2fb9c2640..6c60705d5 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2623,6 +2623,15 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) if (gBattleMons[battlerAtk].hp <= gBattleMons[battlerAtk].maxHP / 3) score -= 10; break;*/ + case EFFECT_REVIVAL_BLESSING: + if (GetFirstFaintedPartyIndex(battlerAtk) == PARTY_SIZE) + score -= 10; + else if (CanAIFaintTarget(battlerAtk, battlerDef, 0)) + score -= 10; + else if (CanTargetFaintAi(battlerDef, battlerAtk) + && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + score -= 10; + break; case EFFECT_PLACEHOLDER: return 0; // cannot even select } // move effect checks @@ -4808,6 +4817,10 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score++; } break; + case EFFECT_REVIVAL_BLESSING: + if (GetFirstFaintedPartyIndex(battlerAtk) != PARTY_SIZE) + score += 2; + break; //case EFFECT_EXTREME_EVOBOOST: // TODO //break; //case EFFECT_CLANGOROUS_SOUL: // TODO diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 79283b067..7a5149313 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -20,6 +20,7 @@ #include "main.h" #include "m4a.h" #include "palette.h" +#include "party_menu.h" #include "pokeball.h" #include "pokemon.h" #include "random.h" @@ -33,6 +34,7 @@ #include "constants/battle_anim.h" #include "constants/items.h" #include "constants/moves.h" +#include "constants/party_menu.h" #include "constants/songs.h" #include "constants/trainers.h" #include "trainer_hill.h" @@ -1674,7 +1676,13 @@ static void OpponentHandleChoosePokemon(void) s32 chosenMonId; s32 pokemonInBattle = 1; - if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == PARTY_SIZE) + // Choosing Revival Blessing target + if ((gBattleResources->bufferA[gActiveBattler][1] & 0xF) == PARTY_ACTION_CHOOSE_FAINTED_MON) + { + chosenMonId = gSelectedMonPartyId = GetFirstFaintedPartyIndex(gActiveBattler); + } + // Switching out + else if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == PARTY_SIZE) { chosenMonId = GetMostSuitableMonToSwitchInto(); @@ -1709,17 +1717,17 @@ static void OpponentHandleChoosePokemon(void) } } } + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; } else { chosenMonId = *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler); *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; } - - - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; BtlController_EmitChosenMonReturnValue(BUFFER_B, chosenMonId, NULL); OpponentBufferExecCompleted(); + } static u8 CountAIAliveNonEggMonsExcept(u8 slotToIgnore) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 82a9d7b7a..106599416 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -2907,7 +2907,8 @@ static void PlayerHandleChoosePokemon(void) for (i = 0; i < ARRAY_COUNT(gBattlePartyCurrentOrder); i++) gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[gActiveBattler][4 + i]; - if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleResources->bufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH) + if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleResources->bufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH + && (gBattleResources->bufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CHOOSE_FAINTED_MON) { BtlController_EmitChosenMonReturnValue(BUFFER_B, gBattlerPartyIndexes[gActiveBattler] + 1, gBattlePartyCurrentOrder); PlayerBufferExecCompleted(); diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 88bc4f974..4c54b68aa 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -16,6 +16,7 @@ #include "main.h" #include "m4a.h" #include "palette.h" +#include "party_menu.h" #include "pokeball.h" #include "pokemon.h" #include "reshow_battle_screen.h" @@ -27,6 +28,7 @@ #include "window.h" #include "constants/battle_anim.h" #include "constants/songs.h" +#include "constants/party_menu.h" #include "constants/trainers.h" static void PlayerPartnerHandleGetMonData(void); @@ -1549,25 +1551,33 @@ static void PlayerPartnerHandleChooseItem(void) static void PlayerPartnerHandleChoosePokemon(void) { - s32 chosenMonId = GetMostSuitableMonToSwitchInto(); - - if (chosenMonId == PARTY_SIZE) // just switch to the next mon + s32 chosenMonId; + // Choosing Revival Blessing target + if ((gBattleResources->bufferA[gActiveBattler][1] & 0xF) == PARTY_ACTION_CHOOSE_FAINTED_MON) { - u8 playerMonIdentity = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - u8 selfIdentity = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - - for (chosenMonId = PARTY_SIZE / 2; chosenMonId < PARTY_SIZE; chosenMonId++) + chosenMonId = gSelectedMonPartyId = GetFirstFaintedPartyIndex(gActiveBattler); + } + // Switching out + else + { + chosenMonId = GetMostSuitableMonToSwitchInto(); + if (chosenMonId == PARTY_SIZE) // just switch to the next mon { - if (GetMonData(&gPlayerParty[chosenMonId], MON_DATA_HP) != 0 - && chosenMonId != gBattlerPartyIndexes[playerMonIdentity] - && chosenMonId != gBattlerPartyIndexes[selfIdentity]) + u8 playerMonIdentity = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + u8 selfIdentity = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + + for (chosenMonId = PARTY_SIZE / 2; chosenMonId < PARTY_SIZE; chosenMonId++) { - break; + if (GetMonData(&gPlayerParty[chosenMonId], MON_DATA_HP) != 0 + && chosenMonId != gBattlerPartyIndexes[playerMonIdentity] + && chosenMonId != gBattlerPartyIndexes[selfIdentity]) + { + break; + } } } + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; } - - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; BtlController_EmitChosenMonReturnValue(BUFFER_B, chosenMonId, NULL); PlayerPartnerBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 2e93d625d..1fe8addcc 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -15,6 +15,7 @@ #include "main.h" #include "m4a.h" #include "palette.h" +#include "party_menu.h" #include "pokeball.h" #include "pokemon.h" #include "recorded_battle.h" @@ -1442,6 +1443,7 @@ static void RecordedOpponentHandleChooseItem(void) static void RecordedOpponentHandleChoosePokemon(void) { *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, gActiveBattler); + gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[gActiveBattler]; // Revival Blessing BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); RecordedOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 1906df8a8..869a5e18e 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -12,6 +12,7 @@ #include "main.h" #include "m4a.h" #include "palette.h" +#include "party_menu.h" #include "pokeball.h" #include "pokemon.h" #include "recorded_battle.h" @@ -1466,6 +1467,7 @@ static void RecordedPlayerHandleChooseItem(void) static void RecordedPlayerHandleChoosePokemon(void) { *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, gActiveBattler); + gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[gActiveBattler]; // Revival Blessing BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); RecordedPlayerBufferExecCompleted(); } diff --git a/src/battle_main.c b/src/battle_main.c index b80042ee9..7b6af8a23 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3196,6 +3196,7 @@ static void BattleStartClearSetData(void) } gBattleStruct->swapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky + gSelectedMonPartyId = PARTY_SIZE; // Revival Blessing } void SwitchInClearSetData(void) @@ -3308,6 +3309,9 @@ void SwitchInClearSetData(void) gBattleStruct->overwrittenAbilities[gActiveBattler] = ABILITY_NONE; + // Clear selected party ID so Revival Blessing doesn't get confused. + gSelectedMonPartyId = PARTY_SIZE; + Ai_UpdateSwitchInData(gActiveBattler); } diff --git a/src/battle_message.c b/src/battle_message.c index 2ecfac0c7..cb1f64050 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -782,9 +782,11 @@ static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a she static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); +static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and\nis ready to fight again!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_PKMNREVIVEDREADYTOFIGHT - BATTLESTRINGS_TABLE_START] = sText_PkmnRevivedReadyToFight, [STRINGID_STOCKPILEDEFFECTWOREOFF - BATTLESTRINGS_TABLE_START] = sText_StockpiledEffectWoreOff, [STRINGID_COULDNTFULLYPROTECT - BATTLESTRINGS_TABLE_START] = sText_CouldntFullyProtect, [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN - BATTLESTRINGS_TABLE_START] = sText_AttackerGainedStrengthFromTheFallen, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bba3bdd29..a0d8181d6 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -11225,6 +11225,50 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->nextInstr; return; } + case VARIOUS_TRY_REVIVAL_BLESSING: + { + VARIOUS_ARGS(const u8 *failInstr); + u32 side = GetBattlerSide(gBattlerAttacker); + u8 index = GetFirstFaintedPartyIndex(gBattlerAttacker); + + // Move fails if there are no battlers to revive. + if (index == PARTY_SIZE) + { + gBattlescriptCurrInstr = cmd->failInstr; + return; + } + + // Battler selected! Revive and go to next instruction. + if (gSelectedMonPartyId != PARTY_SIZE) + { + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + + u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE, gBitTable[gSelectedMonPartyId], sizeof(hp), &hp); + MarkBattlerForControllerExec(gBattlerAttacker); + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gSelectedMonPartyId], MON_DATA_SPECIES)); + + // If an on-field battler is revived, it needs to be sent out again. + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && + gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId) + { + gBattleScripting.battler = BATTLE_PARTNER(gBattlerAttacker); + gBattleCommunication[MULTIUSE_STATE] = TRUE; + } + + gSelectedMonPartyId = PARTY_SIZE; + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + + // Open party menu, wait to go to next instruction. + else + { + BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); + MarkBattlerForControllerExec(gBattlerAttacker); + } + return; + } } // End of switch (cmd->id) gBattlescriptCurrInstr = cmd->nextInstr; @@ -16346,3 +16390,40 @@ static void TryUpdateRoundTurnOrder(void) } } +u8 GetFirstFaintedPartyIndex(u8 battlerId) +{ + u32 i; + u32 start = 0; + u32 end = PARTY_SIZE; + struct Pokemon *party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + + // Check whether partner is separate trainer. + if ((GetBattlerSide(battlerId) == B_SIDE_PLAYER && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + || (GetBattlerSide(battlerId) == B_SIDE_OPPONENT && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) + { + if (GetBattlerPosition(battlerId) == B_POSITION_OPPONENT_LEFT + || GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT) + { + end = PARTY_SIZE / 2; + } + else + { + start = PARTY_SIZE / 2; + } + } + + // Loop through to find fainted battler. + for (i = start; i < end; ++i) + { + u32 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + if (species != SPECIES_NONE + && species != SPECIES_EGG + && GetMonData(&party[i], MON_DATA_HP) == 0) + { + return i; + } + } + + // Returns PARTY_SIZE if none found. + return PARTY_SIZE; +} diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 3dc21a538..4a89222a9 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13048,7 +13048,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_REVIVAL_BLESSING] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_REVIVAL_BLESSING + .effect = EFFECT_REVIVAL_BLESSING, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, diff --git a/src/party_menu.c b/src/party_menu.c index 9185657a7..30f2f8150 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1354,6 +1354,24 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) TryEnterMonForMinigame(taskId, (u8)*slotPtr); } break; + case PARTY_ACTION_CHOOSE_FAINTED_MON: + { + u8 partyId = GetPartyIdFromBattleSlot((u8)*slotPtr); + if (GetMonData(&gPlayerParty[*slotPtr], MON_DATA_HP) > 0 + || GetMonData(&gPlayerParty[*slotPtr], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG + || ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && partyId >= (PARTY_SIZE / 2))) + { + // Can't select if egg, alive, or doesn't belong to you + PlaySE(SE_FAILURE); + } + else + { + PlaySE(SE_SELECT); + gSelectedMonPartyId = partyId; + Task_ClosePartyMenu(taskId); + } + break; + } default: case PARTY_ACTION_ABILITY_PREVENTS: case PARTY_ACTION_SWITCHING: @@ -1379,6 +1397,7 @@ static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr) switch (gPartyMenu.action) { case PARTY_ACTION_SEND_OUT: + case PARTY_ACTION_CHOOSE_FAINTED_MON: PlaySE(SE_FAILURE); break; case PARTY_ACTION_SWITCH: diff --git a/test/move_effect_revival_blessing.c b/test/move_effect_revival_blessing.c new file mode 100644 index 000000000..6bc76ec85 --- /dev/null +++ b/test/move_effect_revival_blessing.c @@ -0,0 +1,117 @@ +#include "global.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 +// revive their first fainted party member in order. + +#define MOVE_MESSAGE(name) \ + do { \ + if (B_EXPANDED_MOVE_NAMES == FALSE) \ + MESSAGE(name" used RevivlBlesng!"); \ + else \ + MESSAGE(name" used Revival Blessing!"); \ + } while (0); \ + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_REVIVAL_BLESSING].effect == EFFECT_REVIVAL_BLESSING); +} + +SINGLE_BATTLE_TEST("Revival Blessing revives a chosen fainted party member for the player") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { HP(0); } + PLAYER(SPECIES_WYNAUT) { HP(0); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_REVIVAL_BLESSING); SEND_OUT(player, 2); } + } SCENE { + MOVE_MESSAGE("Wobbuffet") + MESSAGE("Wynaut was revived and is ready to fight again!"); + } +} + +SINGLE_BATTLE_TEST("Revival Blessing revives a fainted party member for an opponent") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAICHU); + OPPONENT(SPECIES_PICHU) { HP(0); } + OPPONENT(SPECIES_PIKACHU) { HP(0); } + } WHEN { + TURN { MOVE(opponent, MOVE_REVIVAL_BLESSING); SEND_OUT(opponent, 1); } + } SCENE { + MOVE_MESSAGE("Foe Raichu") + MESSAGE("Pichu was revived and is ready to fight again!"); + } +} + +SINGLE_BATTLE_TEST("Revival Blessing fails if no party members are fainted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_REVIVAL_BLESSING); } + } SCENE { + MOVE_MESSAGE("Wobbuffet") + MESSAGE("But it failed!"); + } +} + +// Note: There isn't a good way to test multi battles at the moment, but +// this PASSES in game! +TO_DO_BATTLE_TEST("Revival Blessing cannot revive a partner's party member"); +// DOUBLE_BATTLE_TEST("Revival Blessing cannot revive a partner's party member") +// { +// struct BattlePokemon *user; +// gBattleTypeFlags |= BATTLE_TYPE_TWO_OPPONENTS; +// PARAMETRIZE { user = opponentLeft; } +// PARAMETRIZE { user = opponentRight; } +// GIVEN { +// ASSUME((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) != FALSE); +// PLAYER(SPECIES_WOBBUFFET); +// PLAYER(SPECIES_WOBBUFFET); +// OPPONENT(SPECIES_WOBBUFFET); +// OPPONENT(SPECIES_WOBBUFFET); +// OPPONENT(SPECIES_WOBBUFFET); +// OPPONENT(SPECIES_WYNAUT); +// OPPONENT(SPECIES_WYNAUT) { HP(0); } +// OPPONENT(SPECIES_WYNAUT); +// } WHEN { +// TURN { MOVE(user, MOVE_REVIVAL_BLESSING); } +// } SCENE { +// if (user == opponentLeft) { +// MOVE_MESSAGE(Foe Wobbuffet) +// MESSAGE("But it failed!"); +// } else { +// MOVE_MESSAGE(Foe Wynaut) +// MESSAGE("Wynaut was revived and is ready to fight again!"); +// } +// } +// } + +// Note: The test runner gets upset about "sending out" a battler on the field, +// but this PASSES in game! +TO_DO_BATTLE_TEST("Revived battlers still lose their turn"); +// DOUBLE_BATTLE_TEST("Revived battlers still lose their turn") +// { +// GIVEN { +// PLAYER(SPECIES_WOBBUFFET); +// PLAYER(SPECIES_WYNAUT); +// OPPONENT(SPECIES_WOBBUFFET); +// OPPONENT(SPECIES_WYNAUT) { HP(1); } +// } WHEN { +// TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); +// MOVE(opponentLeft, MOVE_REVIVAL_BLESSING); +// SEND_OUT(opponentLeft, 1); } +// } SCENE { +// MESSAGE("Wobbuffet used Tackle!"); +// MESSAGE("Foe Wynaut fainted!"); +// MOVE_MESSAGE("Foe Wobbuffet") +// MESSAGE("Wynaut was revived and is ready to fight again!"); +// NOT { MESSAGE("Wynaut used Celebrate!"); } +// } +// } From eaddeabe1688bca79a85174a2dd668f88839b5bd Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 13 Apr 2023 13:17:25 -0400 Subject: [PATCH 108/129] Improve PR Template --- .github/pull_request_template.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c381b50f1..930d20a01 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -3,6 +3,14 @@ ## Description +## Images + + + +## Issue(s) that this PR fixes + + + ## **Discord contact info** - - \ No newline at end of file + + \ No newline at end of file From 958bc34cdf527f6c4130c0d13ed4a2f3b541f726 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 14 Apr 2023 09:42:48 -0400 Subject: [PATCH 109/129] Fixed AI not considering Hidden Abilities in its team during switching logic --- src/battle_ai_switch_items.c | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index d1272d67d..113e14cb8 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -198,9 +198,8 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) - continue; - if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) + species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + if (species == SPECIES_NONE || species == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[battlerIn1]) continue; @@ -213,12 +212,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) if (IsAceMon(gActiveBattler, i)) continue; - - species = GetMonData(&party[i], MON_DATA_SPECIES); - if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0) - monAbility = gSpeciesInfo[species].abilities[1]; - else - monAbility = gSpeciesInfo[species].abilities[0]; + monAbility = GetMonAbility(&party[i]); if (absorbingTypeAbility == monAbility && Random() & 1) { @@ -570,9 +564,8 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent) if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) - continue; - if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) + species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + if (species == SPECIES_NONE || species == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[battlerIn1]) continue; @@ -585,12 +578,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent) if (IsAceMon(gActiveBattler, i)) continue; - - species = GetMonData(&party[i], MON_DATA_SPECIES); - if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0) - monAbility = gSpeciesInfo[species].abilities[1]; - else - monAbility = gSpeciesInfo[species].abilities[0]; + monAbility = GetMonAbility(&party[i]); CalcPartyMonTypeEffectivenessMultiplier(gLastLandedMoves[gActiveBattler], species, monAbility); if (gMoveResultFlags & flags) @@ -964,7 +952,9 @@ u8 GetMostSuitableMonToSwitchInto(void) // Get invalid slots ids. for (i = firstId; i < lastId; i++) { - if (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE + u16 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + if (species == SPECIES_NONE + || species == SPECIES_EGG || GetMonData(&party[i], MON_DATA_HP) == 0 || gBattlerPartyIndexes[battlerIn1] == i || gBattlerPartyIndexes[battlerIn2] == i From 2eabcea86e2d4816a30ce7deb52d32ead3339448 Mon Sep 17 00:00:00 2001 From: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Date: Fri, 14 Apr 2023 11:25:50 -0700 Subject: [PATCH 110/129] Battle Item Refactor (#2902) * items that can be used in battle now use battlescripts * removed ExecuteTableBasedItemEffect_ * taught AI how to use items, removed AI_itemtype/flag * X-Items store stages raised in holdEffectParam * USE_ITEM in tests --- asm/macros/battle_script.inc | 16 + data/battle_scripts_2.s | 381 ++++++++++++---------- include/battle.h | 3 +- include/battle_ai_switch_items.h | 30 -- include/constants/battle_string_ids.h | 5 +- include/constants/item_effects.h | 12 +- include/constants/items.h | 29 +- include/item.h | 4 +- include/item_use.h | 9 +- include/party_menu.h | 3 + include/recorded_battle.h | 1 + src/battle_ai_switch_items.c | 102 ++---- src/battle_controller_opponent.c | 2 +- src/battle_controller_recorded_opponent.c | 5 + src/battle_controller_recorded_player.c | 5 + src/battle_main.c | 4 +- src/battle_message.c | 23 +- src/battle_pyramid_bag.c | 17 +- src/battle_script_commands.c | 144 +++++++- src/battle_util.c | 88 +---- src/data/items.h | 337 ++++++++----------- src/data/pokemon/item_effects.h | 2 - src/item.c | 70 +++- src/item_menu.c | 17 +- src/item_use.c | 168 ++++++---- src/party_menu.c | 222 +++++++++---- src/pokemon.c | 220 +------------ test/item_effect_increase_stat.c | 25 ++ test/item_effect_restore_hp.c | 37 +++ test/item_effect_restore_pp.c | 19 ++ test/test_battle.h | 21 +- test/test_runner_battle.c | 38 +++ 32 files changed, 1102 insertions(+), 957 deletions(-) create mode 100644 test/item_effect_increase_stat.c create mode 100644 test/item_effect_restore_hp.c create mode 100644 test/item_effect_restore_pp.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 30df11232..6e351e62f 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1330,6 +1330,22 @@ .4byte \jumpInstr .endm + .macro itemrestorehp + callnative BS_ItemRestoreHP + .endm + + .macro itemcurestatus + callnative BS_ItemCureStatus + .endm + + .macro itemincreasestat + callnative BS_ItemIncreaseStat + .endm + + .macro itemrestorepp + callnative BS_ItemRestorePP + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index f4c8bd5a7..dee482d1d 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -3,219 +3,256 @@ #include "constants/battle_script_commands.h" #include "constants/battle_anim.h" #include "constants/battle_string_ids.h" -#include "constants/items.h" +#include "constants/moves.h" #include "constants/songs.h" #include "constants/game_stat.h" - .include "asm/macros.inc" - .include "asm/macros/battle_script.inc" - .include "constants/constants.inc" + .include "asm/macros.inc" + .include "asm/macros/battle_script.inc" + .include "constants/constants.inc" - .section script_data, "aw", %progbits + .section script_data, "aw", %progbits - .align 2 + .align 2 gBattlescriptsForUsingItem:: - .4byte BattleScript_PlayerUsesItem - .4byte BattleScript_OpponentUsesHealItem @ AI_ITEM_FULL_RESTORE - .4byte BattleScript_OpponentUsesHealItem @ AI_ITEM_HEAL_HP - .4byte BattleScript_OpponentUsesStatusCureItem @ AI_ITEM_CURE_CONDITION - .4byte BattleScript_OpponentUsesXItem @ AI_ITEM_X_STAT - .4byte BattleScript_OpponentUsesGuardSpec @ AI_ITEM_GUARD_SPEC + .4byte BattleScript_ItemRestoreHP @ EFFECT_ITEM_RESTORE_HP + .4byte BattleScript_ItemCureStatus @ EFFECT_ITEM_CURE_STATUS + .4byte BattleScript_ItemHealAndCureStatus @ EFFECT_ITEM_HEAL_AND_CURE_STATUS + .4byte BattleScript_ItemIncreaseStat @ EFFECT_ITEM_INCREASE_STAT + .4byte BattleScript_ItemSetMist @ EFFECT_ITEM_SET_MIST + .4byte BattleScript_ItemSetFocusEnergy @ EFFECT_ITEM_SET_FOCUS_ENERGY + .4byte BattleScript_RunByUsingItem @ EFFECT_ITEM_ESCAPE + .4byte BattleScript_BallThrow @ EFFECT_ITEM_THROW_BALL + .4byte BattleScript_ItemRestoreHP @ EFFECT_ITEM_REVIVE + .4byte BattleScript_ItemRestorePP @ EFFECT_ITEM_RESTORE_PP + .4byte BattleScript_ItemIncreaseAllStats @ EFFECT_ITEM_INCREASE_ALL_STATS - .align 2 -gBattlescriptsForRunningByItem:: - .4byte BattleScript_RunByUsingItem - - .align 2 + .align 2 gBattlescriptsForSafariActions:: - .4byte BattleScript_ActionWatchesCarefully - .4byte BattleScript_ActionGetNear - .4byte BattleScript_ActionThrowPokeblock - .4byte BattleScript_ActionWallyThrow + .4byte BattleScript_ActionWatchesCarefully + .4byte BattleScript_ActionGetNear + .4byte BattleScript_ActionThrowPokeblock + .4byte BattleScript_ActionWallyThrow + +BattleScript_ItemEnd: + end + +BattleScript_UseItemMessage: + printstring STRINGID_EMPTYSTRING3 + pause B_WAIT_TIME_MED + playse SE_USE_ITEM + getbattlerside BS_ATTACKER + copybyte cMULTISTRING_CHOOSER, gBattleCommunication + printfromtable gTrainerUsedItemStringIds + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_ItemRestoreHP:: + call BattleScript_UseItemMessage + itemrestorehp + printstring STRINGID_ITEMRESTOREDSPECIESHEALTH + waitmessage B_WAIT_TIME_LONG + jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_ItemRestoreHP_SendOutRevivedBattler + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + updatestatusicon BS_ATTACKER + end + +BattleScript_ItemRestoreHP_SendOutRevivedBattler: + switchinanim BS_ATTACKER, FALSE + waitstate + switchineffects BS_ATTACKER + end + +BattleScript_ItemCureStatus:: + call BattleScript_UseItemMessage + itemcurestatus + printstring STRINGID_ITEMCUREDSPECIESSTATUS + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_ATTACKER + end + +BattleScript_ItemHealAndCureStatus:: + call BattleScript_UseItemMessage + itemrestorehp + curestatus BS_ATTACKER + printstring STRINGID_ITEMRESTOREDSPECIESHEALTH + waitmessage B_WAIT_TIME_LONG + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + updatestatusicon BS_ATTACKER + end + +BattleScript_ItemIncreaseStat:: + call BattleScript_UseItemMessage + itemincreasestat + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_ItemEnd + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + end + +BattleScript_ItemSetMist:: + call BattleScript_UseItemMessage + setmist + playmoveanimation BS_ATTACKER, MOVE_MIST + waitanimation + printfromtable gMistUsedStringIds + waitmessage B_WAIT_TIME_LONG + end + +BattleScript_ItemSetFocusEnergy:: + call BattleScript_UseItemMessage + jumpifstatus2 BS_ATTACKER, STATUS2_FOCUS_ENERGY, BattleScript_ButItFailed + setfocusenergy + playmoveanimation BS_ATTACKER, MOVE_FOCUS_ENERGY + waitanimation + printstring STRINGID_PKMNUSEDXTOGETPUMPED + waitmessage B_WAIT_TIME_LONG + end + +BattleScript_ItemRestorePP:: + call BattleScript_UseItemMessage + itemrestorepp + printstring STRINGID_ITEMRESTOREDSPECIESPP + waitmessage B_WAIT_TIME_LONG + end + +BattleScript_ItemIncreaseAllStats:: + call BattleScript_UseItemMessage + call BattleScript_AllStatsUp + end BattleScript_BallThrow:: - jumpifword CMP_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally - printstring STRINGID_PLAYERUSEDITEM - handleballthrow + jumpifword CMP_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally + printstring STRINGID_PLAYERUSEDITEM + handleballthrow BattleScript_BallThrowByWally:: - printstring STRINGID_WALLYUSEDITEM - handleballthrow + printstring STRINGID_WALLYUSEDITEM + handleballthrow BattleScript_SafariBallThrow:: - printstring STRINGID_PLAYERUSEDITEM - updatestatusicon BS_ATTACKER - handleballthrow + printstring STRINGID_PLAYERUSEDITEM + updatestatusicon BS_ATTACKER + handleballthrow BattleScript_SuccessBallThrow:: - setbyte sMON_CAUGHT, TRUE - incrementgamestat GAME_STAT_POKEMON_CAPTURES + setbyte sMON_CAUGHT, TRUE + incrementgamestat GAME_STAT_POKEMON_CAPTURES BattleScript_PrintCaughtMonInfo:: - printstring STRINGID_GOTCHAPKMNCAUGHTPLAYER - jumpifbyte CMP_NOT_EQUAL, sEXP_CATCH, TRUE, BattleScript_TryPrintCaughtMonInfo - setbyte sGIVEEXP_STATE, 0 - getexp BS_TARGET - sethword gBattle_BG2_X, 0 + printstring STRINGID_GOTCHAPKMNCAUGHTPLAYER + jumpifbyte CMP_NOT_EQUAL, sEXP_CATCH, TRUE, BattleScript_TryPrintCaughtMonInfo + setbyte sGIVEEXP_STATE, 0 + getexp BS_TARGET + sethword gBattle_BG2_X, 0 BattleScript_TryPrintCaughtMonInfo: - trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon - printstring STRINGID_PKMNDATAADDEDTODEX - waitstate - setbyte gBattleCommunication, 0 - displaydexinfo + trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon + printstring STRINGID_PKMNDATAADDEDTODEX + waitstate + setbyte gBattleCommunication, 0 + displaydexinfo BattleScript_TryNicknameCaughtMon:: - printstring STRINGID_GIVENICKNAMECAPTURED - waitstate - setbyte gBattleCommunication, 0 - trygivecaughtmonnick BattleScript_GiveCaughtMonEnd - givecaughtmon - printfromtable gCaughtMonStringIds - waitmessage B_WAIT_TIME_LONG - goto BattleScript_SuccessBallThrowEnd + printstring STRINGID_GIVENICKNAMECAPTURED + waitstate + setbyte gBattleCommunication, 0 + trygivecaughtmonnick BattleScript_GiveCaughtMonEnd + givecaughtmon + printfromtable gCaughtMonStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_SuccessBallThrowEnd BattleScript_GiveCaughtMonEnd:: - givecaughtmon + givecaughtmon BattleScript_SuccessBallThrowEnd:: - setbyte gBattleOutcome, B_OUTCOME_CAUGHT - finishturn + setbyte gBattleOutcome, B_OUTCOME_CAUGHT + finishturn BattleScript_WallyBallThrow:: - printstring STRINGID_GOTCHAPKMNCAUGHTWALLY - setbyte gBattleOutcome, B_OUTCOME_CAUGHT - finishturn + printstring STRINGID_GOTCHAPKMNCAUGHTWALLY + setbyte gBattleOutcome, B_OUTCOME_CAUGHT + finishturn BattleScript_ShakeBallThrow:: - printfromtable gBallEscapeStringIds - waitmessage B_WAIT_TIME_LONG - jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_ShakeBallThrowEnd - jumpifbyte CMP_NOT_EQUAL, gNumSafariBalls, 0, BattleScript_ShakeBallThrowEnd - printstring STRINGID_OUTOFSAFARIBALLS - waitmessage B_WAIT_TIME_LONG - setbyte gBattleOutcome, B_OUTCOME_NO_SAFARI_BALLS + printfromtable gBallEscapeStringIds + waitmessage B_WAIT_TIME_LONG + jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_ShakeBallThrowEnd + jumpifbyte CMP_NOT_EQUAL, gNumSafariBalls, 0, BattleScript_ShakeBallThrowEnd + printstring STRINGID_OUTOFSAFARIBALLS + waitmessage B_WAIT_TIME_LONG + setbyte gBattleOutcome, B_OUTCOME_NO_SAFARI_BALLS BattleScript_ShakeBallThrowEnd:: - finishaction + finishaction BattleScript_TrainerBallBlock:: - waitmessage B_WAIT_TIME_LONG - printstring STRINGID_TRAINERBLOCKEDBALL - waitmessage B_WAIT_TIME_LONG - printstring STRINGID_DONTBEATHIEF - waitmessage B_WAIT_TIME_LONG - finishaction - -BattleScript_PlayerUsesItem:: - moveendcase MOVEEND_MIRROR_MOVE - end - -BattleScript_OpponentUsesHealItem:: - printstring STRINGID_EMPTYSTRING3 - pause B_WAIT_TIME_MED - playse SE_USE_ITEM - printstring STRINGID_TRAINER1USEDITEM - waitmessage B_WAIT_TIME_LONG - bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT - useitemonopponent - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - printstring STRINGID_PKMNSITEMRESTOREDHEALTH - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_ATTACKER - moveendcase MOVEEND_MIRROR_MOVE - finishaction - -BattleScript_OpponentUsesStatusCureItem:: - printstring STRINGID_EMPTYSTRING3 - pause B_WAIT_TIME_MED - playse SE_USE_ITEM - printstring STRINGID_TRAINER1USEDITEM - waitmessage B_WAIT_TIME_LONG - useitemonopponent - printfromtable gTrainerItemCuredStatusStringIds - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_ATTACKER - moveendcase MOVEEND_MIRROR_MOVE - finishaction - -BattleScript_OpponentUsesXItem:: - printstring STRINGID_EMPTYSTRING3 - pause B_WAIT_TIME_MED - playse SE_USE_ITEM - printstring STRINGID_TRAINER1USEDITEM - waitmessage B_WAIT_TIME_LONG - useitemonopponent - printfromtable gStatUpStringIds - waitmessage B_WAIT_TIME_LONG - moveendcase MOVEEND_MIRROR_MOVE - finishaction - -BattleScript_OpponentUsesGuardSpec:: - printstring STRINGID_EMPTYSTRING3 - pause B_WAIT_TIME_MED - playse SE_USE_ITEM - printstring STRINGID_TRAINER1USEDITEM - waitmessage B_WAIT_TIME_LONG - useitemonopponent - printfromtable gMistUsedStringIds - waitmessage B_WAIT_TIME_LONG - moveendcase MOVEEND_MIRROR_MOVE - finishaction + waitmessage B_WAIT_TIME_LONG + printstring STRINGID_TRAINERBLOCKEDBALL + waitmessage B_WAIT_TIME_LONG + printstring STRINGID_DONTBEATHIEF + waitmessage B_WAIT_TIME_LONG + finishaction BattleScript_RunByUsingItem:: - playse SE_FLEE - setbyte gBattleOutcome, B_OUTCOME_RAN - finishturn + playse SE_FLEE + setbyte gBattleOutcome, B_OUTCOME_RAN + finishturn BattleScript_ActionWatchesCarefully: - printstring STRINGID_PKMNWATCHINGCAREFULLY - waitmessage B_WAIT_TIME_LONG - end2 + printstring STRINGID_PKMNWATCHINGCAREFULLY + waitmessage B_WAIT_TIME_LONG + end2 BattleScript_ActionGetNear: - printfromtable gSafariGetNearStringIds - waitmessage B_WAIT_TIME_LONG - end2 + printfromtable gSafariGetNearStringIds + waitmessage B_WAIT_TIME_LONG + end2 BattleScript_ActionThrowPokeblock: - printstring STRINGID_THREWPOKEBLOCKATPKMN - waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_POKEBLOCK_THROW, NULL - printfromtable gSafariPokeblockResultStringIds - waitmessage B_WAIT_TIME_LONG - end2 + printstring STRINGID_THREWPOKEBLOCKATPKMN + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_POKEBLOCK_THROW, NULL + printfromtable gSafariPokeblockResultStringIds + waitmessage B_WAIT_TIME_LONG + end2 BattleScript_ActionWallyThrow: - printstring STRINGID_RETURNMON - waitmessage B_WAIT_TIME_LONG - returnatktoball - waitstate - trainerslidein BS_TARGET - waitstate - printstring STRINGID_YOUTHROWABALLNOWRIGHT - waitmessage B_WAIT_TIME_LONG - end2 + printstring STRINGID_RETURNMON + waitmessage B_WAIT_TIME_LONG + returnatktoball + waitstate + trainerslidein BS_TARGET + waitstate + printstring STRINGID_YOUTHROWABALLNOWRIGHT + waitmessage B_WAIT_TIME_LONG + end2 BattleScript_TrainerASlideMsgRet:: - handletrainerslidemsg BS_SCRIPTING, 0 - trainerslidein B_POSITION_OPPONENT_LEFT - handletrainerslidemsg BS_SCRIPTING, 1 - waitstate - trainerslideout B_POSITION_OPPONENT_LEFT - waitstate - handletrainerslidemsg BS_SCRIPTING, 2 - return + handletrainerslidemsg BS_SCRIPTING, 0 + trainerslidein B_POSITION_OPPONENT_LEFT + handletrainerslidemsg BS_SCRIPTING, 1 + waitstate + trainerslideout B_POSITION_OPPONENT_LEFT + waitstate + handletrainerslidemsg BS_SCRIPTING, 2 + return BattleScript_TrainerASlideMsgEnd2:: - call BattleScript_TrainerASlideMsgRet - end2 - + call BattleScript_TrainerASlideMsgRet + end2 + BattleScript_TrainerBSlideMsgRet:: - handletrainerslidemsg BS_SCRIPTING, 0 - trainerslidein B_POSITION_OPPONENT_RIGHT - handletrainerslidemsg BS_SCRIPTING, 1 - waitstate - trainerslideout B_POSITION_OPPONENT_RIGHT - waitstate - handletrainerslidemsg BS_SCRIPTING, 2 - return + handletrainerslidemsg BS_SCRIPTING, 0 + trainerslidein B_POSITION_OPPONENT_RIGHT + handletrainerslidemsg BS_SCRIPTING, 1 + waitstate + trainerslideout B_POSITION_OPPONENT_RIGHT + waitstate + handletrainerslidemsg BS_SCRIPTING, 2 + return BattleScript_TrainerBSlideMsgEnd2:: - call BattleScript_TrainerBSlideMsgRet - end2 + call BattleScript_TrainerBSlideMsgRet + end2 diff --git a/include/battle.h b/include/battle.h index 19f9df13d..46975bec3 100644 --- a/include/battle.h +++ b/include/battle.h @@ -581,8 +581,6 @@ struct BattleStruct void (*savedCallback)(void); u16 usedHeldItems[PARTY_SIZE][NUM_BATTLE_SIDES]; // For each party member and side. For harvest, recycle u16 chosenItem[MAX_BATTLERS_COUNT]; - u8 AI_itemType[2]; - u8 AI_itemFlags[2]; u16 choicedMove[MAX_BATTLERS_COUNT]; u16 changedItems[MAX_BATTLERS_COUNT]; u8 switchInItemsCounter; @@ -662,6 +660,7 @@ struct BattleStruct u8 storedHealingWish:4; // Each battler as a bit. u8 storedLunarDance:4; // Each battler as a bit. u16 supremeOverlordModifier[MAX_BATTLERS_COUNT]; + u8 itemPartyIndex[MAX_BATTLERS_COUNT]; }; #define F_DYNAMIC_TYPE_1 (1 << 6) diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index 70dc41b34..622593b6d 100644 --- a/include/battle_ai_switch_items.h +++ b/include/battle_ai_switch_items.h @@ -1,36 +1,6 @@ #ifndef GUARD_BATTLE_AI_SWITCH_ITEMS_H #define GUARD_BATTLE_AI_SWITCH_ITEMS_H -enum -{ - AI_ITEM_FULL_RESTORE = 1, - AI_ITEM_HEAL_HP, - AI_ITEM_CURE_CONDITION, - AI_ITEM_X_STAT, - AI_ITEM_GUARD_SPEC, - AI_ITEM_NOT_RECOGNIZABLE -}; - -enum { - AI_HEAL_CONFUSION, - AI_HEAL_PARALYSIS, - AI_HEAL_FREEZE, - AI_HEAL_BURN, - AI_HEAL_POISON, - AI_HEAL_SLEEP, -}; - -enum { - AI_X_ATTACK, - AI_X_DEFEND, - AI_X_SPEED, - AI_X_SPATK, - AI_X_SPDEF, // Unused - AI_X_ACCURACY, - AI_X_EVASION, // Unused - AI_DIRE_HIT, -}; - void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId); void AI_TrySwitchOrUseItem(void); u8 GetMostSuitableMonToSwitchInto(void); diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 1124c3a60..e55207753 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -648,8 +648,11 @@ #define STRINGID_COULDNTFULLYPROTECT 646 #define STRINGID_STOCKPILEDEFFECTWOREOFF 647 #define STRINGID_PKMNREVIVEDREADYTOFIGHT 648 +#define STRINGID_ITEMRESTOREDSPECIESHEALTH 649 +#define STRINGID_ITEMCUREDSPECIESSTATUS 650 +#define STRINGID_ITEMRESTOREDSPECIESPP 651 -#define BATTLESTRINGS_COUNT 649 +#define BATTLESTRINGS_COUNT 652 // 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/item_effects.h b/include/constants/item_effects.h index c3970b9c1..7cd4a58f4 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -7,12 +7,12 @@ #define ITEM0_INFATUATION 0x80 // new field 1 masks -#define ITEM1_X_ATTACK 0x1 -#define ITEM1_X_DEFENSE 0x2 -#define ITEM1_X_SPEED 0x4 -#define ITEM1_X_SPATK 0x8 -#define ITEM1_X_SPDEF 0x10 -#define ITEM1_X_ACCURACY 0x20 +#define ITEM1_X_ATTACK STAT_ATK +#define ITEM1_X_DEFENSE STAT_DEF +#define ITEM1_X_SPEED STAT_SPEED +#define ITEM1_X_SPATK STAT_SPATK +#define ITEM1_X_SPDEF STAT_SPDEF +#define ITEM1_X_ACCURACY STAT_ACC // field 3 masks #define ITEM3_CONFUSION 0x1 diff --git a/include/constants/items.h b/include/constants/items.h index 2b6ba5c8f..442118166 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -1030,14 +1030,27 @@ #define EXP_30000 5 // Item type IDs (used to determine the exit callback) -#define ITEM_USE_MAIL 0 -#define ITEM_USE_PARTY_MENU 1 -#define ITEM_USE_FIELD 2 -#define ITEM_USE_PBLOCK_CASE 3 -#define ITEM_USE_BAG_MENU 4 // No exit callback, stays in bag menu +#define ITEM_USE_MAIL 0 +#define ITEM_USE_PARTY_MENU 1 +#define ITEM_USE_FIELD 2 +#define ITEM_USE_PBLOCK_CASE 3 +#define ITEM_USE_BAG_MENU 4 // No exit callback, stays in bag menu +#define ITEM_USE_PARTY_MENU_MOVES 5 -// Item battle usage IDs (only checked to see if nonzero) -#define ITEM_B_USE_MEDICINE 1 -#define ITEM_B_USE_OTHER 2 +// Item battle script IDs (need to be non-zero) +#define EFFECT_ITEM_RESTORE_HP 1 +#define EFFECT_ITEM_CURE_STATUS 2 +#define EFFECT_ITEM_HEAL_AND_CURE_STATUS 3 +#define EFFECT_ITEM_INCREASE_STAT 4 +#define EFFECT_ITEM_SET_MIST 5 +#define EFFECT_ITEM_SET_FOCUS_ENERGY 6 +#define EFFECT_ITEM_ESCAPE 7 +#define EFFECT_ITEM_THROW_BALL 8 +#define EFFECT_ITEM_REVIVE 9 +#define EFFECT_ITEM_RESTORE_PP 10 +#define EFFECT_ITEM_INCREASE_ALL_STATS 11 + +// Enigma Berry dummy constant +#define EFFECT_ITEM_ENIGMA_BERRY_EREADER 1 #endif // GUARD_CONSTANTS_ITEMS_H diff --git a/include/item.h b/include/item.h index cf2209e0e..a99782f80 100644 --- a/include/item.h +++ b/include/item.h @@ -19,7 +19,6 @@ struct Item u8 type; ItemUseFunc fieldUseFunc; u8 battleUsage; - ItemUseFunc battleUseFunc; u8 secondaryId; u8 flingPower; }; @@ -72,8 +71,9 @@ u8 ItemId_GetPocket(u16 itemId); u8 ItemId_GetType(u16 itemId); ItemUseFunc ItemId_GetFieldFunc(u16 itemId); u8 ItemId_GetBattleUsage(u16 itemId); -ItemUseFunc ItemId_GetBattleFunc(u16 itemId); u8 ItemId_GetSecondaryId(u16 itemId); u8 ItemId_GetFlingPower(u16 itemId); +u32 GetItemStatus1Mask(u16 itemId); +u32 GetItemStatus2Mask(u16 itemId); #endif // GUARD_ITEM_H diff --git a/include/item_use.h b/include/item_use.h index 812e984ec..afa87c697 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -30,12 +30,9 @@ void ItemUseOutOfBattle_FormChange(u8); void ItemUseOutOfBattle_FormChange_ConsumedOnUse(u8); void ItemUseOutOfBattle_Honey(u8); void ItemUseOutOfBattle_CannotUse(u8); -void ItemUseInBattle_PokeBall(u8); -void ItemUseInBattle_StatIncrease(u8); -void ItemUseInBattle_Medicine(u8); -void ItemUseInBattle_PPRecovery(u8); -void ItemUseInBattle_Escape(u8); -void ItemUseInBattle_EnigmaBerry(u8); +void ItemUseInBattle_BagMenu(u8 taskId); +void ItemUseInBattle_PartyMenu(u8 taskId); +void ItemUseInBattle_PartyMenuChooseMove(u8 taskId); void Task_UseDigEscapeRopeOnField(u8 taskId); u8 CanUseDigOrEscapeRopeOnCurMap(void); u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId); diff --git a/include/party_menu.h b/include/party_menu.h index afb320e18..31e591074 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -48,6 +48,8 @@ void LoadHeldItemIcons(void); void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty); void LoadPartyMenuAilmentGfx(void); void CB2_ShowPartyMenuForItemUse(void); +void ItemUseCB_BattleScript(u8 taskId, TaskFunc task); +void ItemUseCB_BattleChooseMove(u8 taskId, TaskFunc task); void ItemUseCB_Medicine(u8 taskId, TaskFunc task); void ItemUseCB_AbilityCapsule(u8 taskId, TaskFunc task); void ItemUseCB_AbilityPatch(u8 taskId, TaskFunc task); @@ -64,6 +66,7 @@ void ItemUseCB_SacredAsh(u8 taskId, TaskFunc task); void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task); void ItemUseCB_FormChange(u8 taskId, TaskFunc task); void ItemUseCB_FormChange_ConsumedOnUse(u8 taskId, TaskFunc task); +const u8* GetItemEffect(u16 item); u8 GetItemEffectType(u16 item); void CB2_PartyMenuFromStartMenu(void); void CB2_ChooseMonToGiveItem(void); diff --git a/include/recorded_battle.h b/include/recorded_battle.h index fbe14a656..d04e89c36 100644 --- a/include/recorded_battle.h +++ b/include/recorded_battle.h @@ -44,6 +44,7 @@ enum RECORDED_MOVE_TARGET, RECORDED_PARTY_INDEX, RECORDED_BATTLE_PALACE_ACTION, + RECORDED_ITEM_ID, }; extern u32 gRecordedBattleRngSeed; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 113e14cb8..29911d798 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -10,6 +10,8 @@ #include "constants/hold_effects.h" #include "battle_setup.h" #include "data.h" +#include "item.h" +#include "party_menu.h" #include "pokemon.h" #include "random.h" #include "util.h" @@ -995,22 +997,6 @@ u8 GetMostSuitableMonToSwitchInto(void) return PARTY_SIZE; } -static u8 GetAI_ItemType(u16 itemId, const u8 *itemEffect) -{ - if (itemId == ITEM_FULL_RESTORE) - return AI_ITEM_FULL_RESTORE; - else if (itemEffect[4] & ITEM4_HEAL_HP) - return AI_ITEM_HEAL_HP; - else if (itemEffect[3] & ITEM3_STATUS_ALL) - return AI_ITEM_CURE_CONDITION; - else if ((itemEffect[0] & ITEM0_DIRE_HIT) || itemEffect[1]) - return AI_ITEM_X_STAT; - else if (itemEffect[3] & ITEM3_GUARD_SPEC) - return AI_ITEM_GUARD_SPEC; - else - return AI_ITEM_NOT_RECOGNIZABLE; -} - static bool32 AiExpectsToFaintPlayer(void) { bool32 canFaintPlayer; @@ -1070,96 +1056,70 @@ static bool8 ShouldUseItem(void) u8 paramOffset; u8 battlerSide; - if (i != 0 && validMons > (gBattleResources->battleHistory->itemsNo - i) + 1) - continue; item = gBattleResources->battleHistory->trainerItems[i]; if (item == ITEM_NONE) continue; - if (gItemEffectTable[item] == NULL) + itemEffects = GetItemEffect(item); + if (itemEffects == NULL) continue; - if (item == ITEM_ENIGMA_BERRY_E_READER) - itemEffects = gSaveBlock1Ptr->enigmaBerry.itemEffect; - else - itemEffects = gItemEffectTable[item]; - - *(gBattleStruct->AI_itemType + gActiveBattler / 2) = GetAI_ItemType(item, itemEffects); - - switch (*(gBattleStruct->AI_itemType + gActiveBattler / 2)) + switch (ItemId_GetBattleUsage(item)) { - case AI_ITEM_FULL_RESTORE: + case EFFECT_ITEM_HEAL_AND_CURE_STATUS: shouldUse = AI_ShouldHeal(0); break; - case AI_ITEM_HEAL_HP: + case EFFECT_ITEM_RESTORE_HP: shouldUse = AI_ShouldHeal(itemEffects[GetItemEffectParamOffset(item, 4, 4)]); break; - case AI_ITEM_CURE_CONDITION: - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) = 0; + case EFFECT_ITEM_CURE_STATUS: if (itemEffects[3] & ITEM3_SLEEP && gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_SLEEP); shouldUse = TRUE; - } if (itemEffects[3] & ITEM3_POISON && (gBattleMons[gActiveBattler].status1 & STATUS1_POISON || gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_POISON)) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_POISON); shouldUse = TRUE; - } if (itemEffects[3] & ITEM3_BURN && gBattleMons[gActiveBattler].status1 & STATUS1_BURN) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_BURN); shouldUse = TRUE; - } if (itemEffects[3] & ITEM3_FREEZE && gBattleMons[gActiveBattler].status1 & STATUS1_FREEZE) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_FREEZE); shouldUse = TRUE; - } if (itemEffects[3] & ITEM3_PARALYSIS && gBattleMons[gActiveBattler].status1 & STATUS1_PARALYSIS) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_PARALYSIS); shouldUse = TRUE; - } if (itemEffects[3] & ITEM3_CONFUSION && gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_CONFUSION); shouldUse = TRUE; - } break; - case AI_ITEM_X_STAT: - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) = 0; - if (gDisableStructs[gActiveBattler].isFirstTurn == 0) + case EFFECT_ITEM_INCREASE_STAT: + case EFFECT_ITEM_INCREASE_ALL_STATS: + if (!gDisableStructs[gActiveBattler].isFirstTurn + || AI_OpponentCanFaintAiWithMod(0)) break; - if (itemEffects[1] & ITEM1_X_ATTACK) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_ATTACK); - if (itemEffects[1] & ITEM1_X_DEFENSE) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_DEFEND); - if (itemEffects[1] & ITEM1_X_SPEED) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPEED); - if (itemEffects[1] & ITEM1_X_SPATK) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPATK); - if (itemEffects[1] & ITEM1_X_SPDEF) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPDEF); - if (itemEffects[1] & ITEM1_X_ACCURACY) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_ACCURACY); - if (itemEffects[0] & ITEM0_DIRE_HIT) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_DIRE_HIT); shouldUse = TRUE; break; - case AI_ITEM_GUARD_SPEC: + case EFFECT_ITEM_SET_FOCUS_ENERGY: + if (!gDisableStructs[gActiveBattler].isFirstTurn + || gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY + || AI_OpponentCanFaintAiWithMod(0)) + break; + shouldUse = TRUE; + break; + case EFFECT_ITEM_SET_MIST: battlerSide = GetBattlerSide(gActiveBattler); - if (gDisableStructs[gActiveBattler].isFirstTurn != 0 && gSideTimers[battlerSide].mistTimer == 0) + if (gDisableStructs[gActiveBattler].isFirstTurn && gSideTimers[battlerSide].mistTimer == 0) shouldUse = TRUE; break; - case AI_ITEM_NOT_RECOGNIZABLE: + case EFFECT_ITEM_REVIVE: + gBattleStruct->itemPartyIndex[gActiveBattler] = GetFirstFaintedPartyIndex(gActiveBattler); + if (gBattleStruct->itemPartyIndex[gActiveBattler] != PARTY_SIZE) // Revive if possible. + shouldUse = TRUE; + break; + default: return FALSE; } - if (shouldUse) { + // Set selected party ID to current battler if none chosen. + if (gBattleStruct->itemPartyIndex[gActiveBattler] == PARTY_SIZE) + gBattleStruct->itemPartyIndex[gActiveBattler] = gBattlerPartyIndexes[gActiveBattler]; BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_ITEM, 0); - *(gBattleStruct->chosenItem + (gActiveBattler / 2) * 2) = item; + gBattleStruct->chosenItem[gActiveBattler] = item; gBattleResources->battleHistory->trainerItems[i] = 0; return shouldUse; } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 7a5149313..cb0499ac8 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1667,7 +1667,7 @@ static void OpponentHandleChooseMove(void) static void OpponentHandleChooseItem(void) { - BtlController_EmitOneReturnValue(BUFFER_B, *(gBattleStruct->chosenItem + (gActiveBattler / 2) * 2)); + BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); OpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 1fe8addcc..e7fc6fd84 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -10,6 +10,7 @@ #include "battle_tv.h" #include "bg.h" #include "data.h" +#include "item_menu.h" #include "item_use.h" #include "link.h" #include "main.h" @@ -1437,6 +1438,10 @@ static void RecordedOpponentHandleChooseMove(void) static void RecordedOpponentHandleChooseItem(void) { + u8 byte1 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); + u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); + gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; + BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); RecordedOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 869a5e18e..87f575839 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -7,6 +7,7 @@ #include "battle_interface.h" #include "bg.h" #include "data.h" +#include "item_menu.h" #include "item_use.h" #include "link.h" #include "main.h" @@ -1461,6 +1462,10 @@ static void RecordedPlayerHandleChooseMove(void) static void RecordedPlayerHandleChooseItem(void) { + u8 byte1 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); + u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); + gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; + BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); RecordedPlayerBufferExecCompleted(); } diff --git a/src/battle_main.c b/src/battle_main.c index 7b6af8a23..a5a9b5bbf 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4162,6 +4162,7 @@ static void HandleTurnActionSelectionState(void) } else { + gBattleStruct->itemPartyIndex[gActiveBattler] = PARTY_SIZE; BtlController_EmitChooseAction(BUFFER_A, gChosenActionByBattler[0], gBattleResources->bufferB[0][1] | (gBattleResources->bufferB[0][2] << 8)); MarkBattlerForControllerExec(gActiveBattler); gBattleCommunication[gActiveBattler]++; @@ -4229,10 +4230,11 @@ static void HandleTurnActionSelectionState(void) return; } - if ((gBattleTypeFlags & (BATTLE_TYPE_LINK + if (((gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER_NO_PYRAMID | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK)) + && !gTestRunnerEnabled) // Or if currently held by Sky Drop || gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED) { diff --git a/src/battle_message.c b/src/battle_message.c index cb1f64050..7d10b19f1 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -467,7 +467,7 @@ const u8 *const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); -static const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!"); +static const u8 sText_Trainer1UsedItem[] = _("{B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}\nused {B_LAST_ITEM}!"); static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); static const u8 sText_DontBeAThief[] = _("Don't be a thief!"); static const u8 sText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can't be caught!"); @@ -783,9 +783,15 @@ static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and\nis ready to fight again!"); +static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_LAST_ITEM} restored\n{B_BUFF1}'s health!"); +static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_LAST_ITEM} cured\n{B_BUFF1}'s status!"); +static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_LAST_ITEM} restored\n{B_BUFF1}'s PP!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_ITEMRESTOREDSPECIESHEALTH - BATTLESTRINGS_TABLE_START] = sText_ItemRestoredSpeciesHealth, + [STRINGID_ITEMCUREDSPECIESSTATUS - BATTLESTRINGS_TABLE_START] = sText_ItemCuredSpeciesStatus, + [STRINGID_ITEMRESTOREDSPECIESPP - BATTLESTRINGS_TABLE_START] = sText_ItemRestoredSpeciesPP, [STRINGID_PKMNREVIVEDREADYTOFIGHT - BATTLESTRINGS_TABLE_START] = sText_PkmnRevivedReadyToFight, [STRINGID_STOCKPILEDEFFECTWOREOFF - BATTLESTRINGS_TABLE_START] = sText_StockpiledEffectWoreOff, [STRINGID_COULDNTFULLYPROTECT - BATTLESTRINGS_TABLE_START] = sText_CouldntFullyProtect, @@ -1424,6 +1430,11 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNSABILITYPREVENTSABILITY - BATTLESTRINGS_TABLE_START] = sText_PkmnsAbilityPreventsAbility, }; +const u16 gTrainerUsedItemStringIds[] = +{ + STRINGID_PLAYERUSEDITEM, STRINGID_TRAINER1USEDITEM +}; + const u16 gZEffectStringIds[] = { [B_MSG_Z_RESET_STATS] = STRINGID_ZMOVERESETSSTATS, @@ -1820,16 +1831,6 @@ const u16 gSafariPokeblockResultStringIds[] = [B_MSG_MON_IGNORED] = STRINGID_PKMNIGNOREDX }; -const u16 gTrainerItemCuredStatusStringIds[] = -{ - [AI_HEAL_CONFUSION] = STRINGID_PKMNSITEMSNAPPEDOUT, - [AI_HEAL_PARALYSIS] = STRINGID_PKMNSITEMCUREDPARALYSIS, - [AI_HEAL_FREEZE] = STRINGID_PKMNSITEMDEFROSTEDIT, - [AI_HEAL_BURN] = STRINGID_PKMNSITEMHEALEDBURN, - [AI_HEAL_POISON] = STRINGID_PKMNSITEMCUREDPOISON, - [AI_HEAL_SLEEP] = STRINGID_PKMNSITEMWOKEIT -}; - const u16 gBerryEffectStringIds[] = { [B_MSG_CURED_PROBLEM] = STRINGID_PKMNSITEMCUREDPROBLEM, diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index d580cf680..9d5cee94a 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -1299,11 +1299,18 @@ static void TryCloseBagToGiveItem(u8 taskId) static void BagAction_UseInBattle(u8 taskId) { - if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL) - { - CloseMenuActionWindow(); - ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); - } + // Safety check + u16 type = ItemId_GetType(gSpecialVar_ItemId); + if (!ItemId_GetBattleUsage(gSpecialVar_ItemId)) + return; + + CloseMenuActionWindow(); + if (type == ITEM_USE_BAG_MENU) + ItemUseInBattle_BagMenu(taskId); + else if (type == ITEM_USE_PARTY_MENU) + ItemUseInBattle_PartyMenu(taskId); + else if (type == ITEM_USE_PARTY_MENU_MOVES) + ItemUseInBattle_PartyMenuChooseMove(taskId); } static void Task_BeginItemSwap(u8 taskId) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a0d8181d6..d313697b0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -52,6 +52,7 @@ #include "constants/battle_string_ids.h" #include "constants/hold_effects.h" #include "constants/items.h" +#include "constants/item_effects.h" #include "constants/map_types.h" #include "constants/moves.h" #include "constants/party_menu.h" @@ -11264,7 +11265,7 @@ static void Cmd_various(void) // Open party menu, wait to go to next instruction. else { - BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); + BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); MarkBattlerForControllerExec(gBattlerAttacker); } return; @@ -16427,3 +16428,144 @@ u8 GetFirstFaintedPartyIndex(u8 battlerId) // Returns PARTY_SIZE if none found. return PARTY_SIZE; } + +void BS_ItemRestoreHP(void) { + NATIVE_ARGS(); + u16 healAmount; + u32 battlerId = MAX_BATTLERS_COUNT; + u32 healParam = GetItemEffect(gLastUsedItem)[6]; + u32 side = GetBattlerSide(gBattlerAttacker); + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + u16 hp = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP); + u16 maxHP = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_MAX_HP); + gBattleCommunication[MULTIUSE_STATE] = 0; + + // Track the number of Revives used in a battle. + if (hp == 0 && side == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) + gBattleResults.numRevivesUsed++; + + // Check if the recipient is an active battler. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + battlerId = gBattlerAttacker; + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + battlerId = BATTLE_PARTNER(gBattlerAttacker); + + // Get amount to heal. + switch (healParam) + { + case ITEM6_HEAL_HP_FULL: + healAmount = maxHP; + break; + case ITEM6_HEAL_HP_HALF: + healAmount = maxHP / 2; + break; + case ITEM6_HEAL_HP_QUARTER: + healAmount = maxHP / 4; + break; + default: + healAmount = healParam; + break; + } + if (hp + healAmount > maxHP) + healAmount = maxHP - hp; + + // Heal is applied as move damage if battler is active. + if (battlerId != MAX_BATTLERS_COUNT && hp != 0) + { + gBattleMoveDamage = -healAmount; + } + else + { + hp += healAmount; + SetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP, &hp); + + // Revived battlers on the field need to be brought back. + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && battlerId != MAX_BATTLERS_COUNT) + { + gAbsentBattlerFlags &= ~gBitTable[battlerId]; + gBattleCommunication[MULTIUSE_STATE] = TRUE; + } + } + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_ItemCureStatus(void) { + NATIVE_ARGS(); + struct Pokemon *party = (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + + // Heal Status1 conditions. + HealStatusConditions(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], gBattleStruct->itemPartyIndex[gBattlerAttacker], GetItemStatus1Mask(gLastUsedItem), gBattlerAttacker); + + // Heal Status2 conditions if battler is active. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + gBattleMons[gBattleStruct->itemPartyIndex[gBattlerAttacker]].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + { + gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + gBattlerTarget = BATTLE_PARTNER(gBattlerAttacker); + if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; + } + + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_ItemIncreaseStat(void) { + NATIVE_ARGS(); + u16 statId = GetItemEffect(gLastUsedItem)[1]; + u16 stages = ItemId_GetHoldEffectParam(gLastUsedItem); + SET_STATCHANGER(statId, stages, FALSE); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_ItemRestorePP(void) { + NATIVE_ARGS(); + const u8 *effect = GetItemEffect(gLastUsedItem); + u32 i, pp, maxPP, moveId; + u32 loopEnd = MAX_MON_MOVES; + u32 battlerId = MAX_BATTLERS_COUNT; + struct Pokemon *mon = (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) ? &gPlayerParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]] : &gEnemyParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]]; + + // Check whether to apply to all moves. + if (effect[4] & ITEM4_HEAL_PP_ONE) + { + i = gChosenMovePos; + loopEnd = gChosenMovePos + 1; + } + + // Check if the recipient is an active battler. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + battlerId = gBattlerAttacker; + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + battlerId = BATTLE_PARTNER(gBattlerAttacker); + + // Heal PP! + for (i = 0; i < loopEnd; i++) + { + pp = GetMonData(mon, MON_DATA_PP1 + i, NULL); + moveId = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); + maxPP = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), i); + if (pp != maxPP) + { + pp += effect[6]; + if (pp > maxPP) + pp = maxPP; + SetMonData(mon, MON_DATA_PP1 + i, &pp); + + // Update battler PP if needed. + if (battlerId != MAX_BATTLERS_COUNT + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[battlerId] + && MOVE_IS_PERMANENT(battlerId, i)) + { + gBattleMons[battlerId].pp[i] = pp; + } + } + } + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(mon, MON_DATA_SPECIES)); + gBattlescriptCurrInstr = cmd->nextInstr; +} diff --git a/src/battle_util.c b/src/battle_util.c index 46b2de442..ac274bf0f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -21,6 +21,7 @@ #include "sprite.h" #include "string_util.h" #include "task.h" +#include "test_runner.h" #include "trig.h" #include "window.h" #include "battle_message.h" @@ -550,93 +551,13 @@ void HandleAction_Switch(void) void HandleAction_UseItem(void) { - gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; gBattle_BG0_X = 0; gBattle_BG0_Y = 0; ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); gLastUsedItem = gBattleResources->bufferB[gBattlerAttacker][1] | (gBattleResources->bufferB[gBattlerAttacker][2] << 8); - - if (gLastUsedItem <= LAST_BALL) // is ball - { - gBattlescriptCurrInstr = BattleScript_BallThrow; - } - else if (gLastUsedItem == ITEM_POKE_DOLL || gLastUsedItem == ITEM_FLUFFY_TAIL) - { - gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[0]; // BattleScript_RunByUsingItem - } - else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; // BattleScript_PlayerUsesItem - } - else - { - gBattleScripting.battler = gBattlerAttacker; - - switch (*(gBattleStruct->AI_itemType + (gBattlerAttacker >> 1))) - { - case AI_ITEM_FULL_RESTORE: - case AI_ITEM_HEAL_HP: - break; - case AI_ITEM_CURE_CONDITION: - gBattleCommunication[MULTISTRING_CHOOSER] = AI_HEAL_CONFUSION; - if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & (1 << AI_HEAL_CONFUSION)) - { - if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 0x3E) - gBattleCommunication[MULTISTRING_CHOOSER] = AI_HEAL_SLEEP; - } - else - { - // Check for other statuses, stopping at first (shouldn't be more than one) - while (!(*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1)) - { - *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; - gBattleCommunication[MULTISTRING_CHOOSER]++; - // MULTISTRING_CHOOSER will be either AI_HEAL_PARALYSIS, AI_HEAL_FREEZE, - // AI_HEAL_BURN, AI_HEAL_POISON, or AI_HEAL_SLEEP - } - } - break; - case AI_ITEM_X_STAT: - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAT_ROSE_ITEM; - if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & (1 << AI_DIRE_HIT)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_USED_DIRE_HIT; - } - else - { - PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK) - PREPARE_STRING_BUFFER(gBattleTextBuff2, CHAR_X) - - while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1)) - { - *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; - gBattleTextBuff1[2]++; - } - - gBattleScripting.animArg1 = gBattleTextBuff1[2] + 14; - gBattleScripting.animArg2 = 0; - } - break; - case AI_ITEM_GUARD_SPEC: - // It seems probable that at some point there was a special message for - // an AI trainer using Guard Spec in a double battle. - // There isn't now however, and the assignment to 2 below goes out of - // bounds for gMistUsedStringIds and instead prints "{mon} is getting pumped" - // from the next table, gFocusEnergyUsedStringIds. - // In any case this isn't an issue in the retail version, as no trainers - // are ever given any Guard Spec to use. -#ifndef UBFIX - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - else -#endif - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_MIST; - break; - } - - gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + gBattlerAttacker / 2)]; - } + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[ItemId_GetBattleUsage(gLastUsedItem) - 1]; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; } @@ -914,7 +835,7 @@ void HandleAction_ActionFinished(void) u32 i, j; bool32 afterYouActive = gSpecialStatuses[gBattlerByTurnOrder[gCurrentTurnActionNumber + 1]].afterYou; #endif - *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = PARTY_SIZE; + *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = gSelectedMonPartyId = PARTY_SIZE; gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; SpecialStatusesClear(); @@ -8207,7 +8128,6 @@ u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) return ItemId_GetHoldEffect(gBattleMons[battlerId].item); } -// static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item) { if (item == ITEM_ENIGMA_BERRY_E_READER) diff --git a/src/data/items.h b/src/data/items.h index 6998aa573..fc99e1037 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -20,9 +20,8 @@ const struct Item gItems[] = .price = 200, .description = sPokeBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_POKE_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_POKE_BALL - FIRST_BALL, }, @@ -33,9 +32,8 @@ const struct Item gItems[] = .price = 600, .description = sGreatBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_GREAT_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_GREAT_BALL - FIRST_BALL, }, @@ -46,9 +44,8 @@ const struct Item gItems[] = .price = 800, .description = sUltraBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_ULTRA_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_ULTRA_BALL - FIRST_BALL, }, @@ -59,9 +56,8 @@ const struct Item gItems[] = .price = 0, .description = sMasterBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_MASTER_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_MASTER_BALL - FIRST_BALL, }, @@ -72,9 +68,8 @@ const struct Item gItems[] = .price = 20, .description = sPremierBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_PREMIER_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_PREMIER_BALL - FIRST_BALL, }, @@ -85,9 +80,8 @@ const struct Item gItems[] = .price = 300, .description = sHealBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_HEAL_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_HEAL_BALL - FIRST_BALL, }, @@ -98,9 +92,8 @@ const struct Item gItems[] = .price = 1000, .description = sNetBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_NET_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_NET_BALL - FIRST_BALL, }, @@ -111,9 +104,8 @@ const struct Item gItems[] = .price = 1000, .description = sNestBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_NEST_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_NEST_BALL - FIRST_BALL, }, @@ -124,9 +116,8 @@ const struct Item gItems[] = .price = 1000, .description = sDiveBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_DIVE_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_DIVE_BALL - FIRST_BALL, }, @@ -137,9 +128,8 @@ const struct Item gItems[] = .price = 1000, .description = sDuskBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_DUSK_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_DUSK_BALL - FIRST_BALL, }, @@ -150,9 +140,8 @@ const struct Item gItems[] = .price = 1000, .description = sTimerBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_TIMER_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_TIMER_BALL - FIRST_BALL, }, @@ -163,9 +152,8 @@ const struct Item gItems[] = .price = 1000, .description = sQuickBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_QUICK_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_QUICK_BALL - FIRST_BALL, }, @@ -176,9 +164,8 @@ const struct Item gItems[] = .price = 1000, .description = sRepeatBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_REPEAT_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_REPEAT_BALL - FIRST_BALL, }, @@ -189,9 +176,8 @@ const struct Item gItems[] = .price = 1000, .description = sLuxuryBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_LUXURY_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_LUXURY_BALL - FIRST_BALL, }, @@ -202,9 +188,8 @@ const struct Item gItems[] = .price = 0, .description = sLevelBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_LEVEL_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_LEVEL_BALL - FIRST_BALL, }, @@ -215,9 +200,8 @@ const struct Item gItems[] = .price = 0, .description = sLureBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_LURE_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_LURE_BALL - FIRST_BALL, }, @@ -228,9 +212,8 @@ const struct Item gItems[] = .price = 0, .description = sMoonBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_MOON_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_MOON_BALL - FIRST_BALL, }, @@ -241,9 +224,8 @@ const struct Item gItems[] = .price = 0, .description = sFriendBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_FRIEND_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_FRIEND_BALL - FIRST_BALL, }, @@ -254,9 +236,8 @@ const struct Item gItems[] = .price = 0, .description = sLoveBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_LOVE_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_LOVE_BALL - FIRST_BALL, }, @@ -267,9 +248,8 @@ const struct Item gItems[] = .price = 0, .description = sFastBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_FAST_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_FAST_BALL - FIRST_BALL, }, @@ -280,9 +260,8 @@ const struct Item gItems[] = .price = 0, .description = sHeavyBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_HEAVY_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_HEAVY_BALL - FIRST_BALL, }, @@ -293,9 +272,8 @@ const struct Item gItems[] = .price = 0, .description = sDreamBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_DREAM_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_DREAM_BALL - FIRST_BALL, }, @@ -306,9 +284,8 @@ const struct Item gItems[] = .price = 0, .description = sSafariBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_SAFARI_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_SAFARI_BALL - FIRST_BALL, }, @@ -319,9 +296,8 @@ const struct Item gItems[] = .price = 0, .description = sSportBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_SPORT_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_SPORT_BALL - FIRST_BALL, }, @@ -332,9 +308,8 @@ const struct Item gItems[] = .price = 0, .description = sParkBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_PARK_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_PARK_BALL - FIRST_BALL, }, @@ -345,9 +320,8 @@ const struct Item gItems[] = .price = 0, .description = sBeastBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_BEAST_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_BEAST_BALL - FIRST_BALL, }, @@ -358,9 +332,8 @@ const struct Item gItems[] = .price = 0, .description = sCherishBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_CHERISH_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_CHERISH_BALL - FIRST_BALL, }, @@ -376,8 +349,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -391,8 +363,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -406,8 +377,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -421,8 +391,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -436,8 +405,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_HEAL_AND_CURE_STATUS, .flingPower = 30, }, @@ -450,8 +418,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_REVIVE, .flingPower = 30, }, @@ -464,8 +431,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_REVIVE, .flingPower = 30, }, @@ -479,8 +445,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -494,8 +459,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -509,8 +473,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -524,8 +487,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -538,8 +500,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -552,8 +513,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -566,8 +526,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -580,8 +539,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_REVIVE, .flingPower = 30, }, @@ -594,8 +552,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -608,8 +565,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -622,8 +578,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -636,8 +591,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -650,8 +604,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -664,8 +617,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -677,10 +629,9 @@ const struct Item gItems[] = .holdEffectParam = 10, .description = sEtherDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, + .type = ITEM_USE_PARTY_MENU_MOVES, .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_PPRecovery, + .battleUsage = EFFECT_ITEM_RESTORE_PP, .flingPower = 30, }, @@ -692,10 +643,9 @@ const struct Item gItems[] = .holdEffectParam = 255, .description = sMaxEtherDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, + .type = ITEM_USE_PARTY_MENU_MOVES, .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_PPRecovery, + .battleUsage = EFFECT_ITEM_RESTORE_PP, .flingPower = 30, }, @@ -709,8 +659,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_PPRecovery, + .battleUsage = EFFECT_ITEM_RESTORE_PP, .flingPower = 30, }, @@ -724,8 +673,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_PPRecovery, + .battleUsage = EFFECT_ITEM_RESTORE_PP, .flingPower = 30, }, @@ -740,8 +688,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -767,8 +714,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -781,8 +727,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_REVIVE, .flingPower = 30, }, @@ -797,8 +742,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -811,8 +755,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -825,8 +768,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -839,8 +781,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -853,8 +794,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -867,8 +807,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -881,8 +820,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -895,8 +833,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -1454,8 +1391,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -1468,8 +1404,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -1482,8 +1417,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -1618,17 +1552,19 @@ const struct Item gItems[] = // X Items +#define X_ITEM_STAGES (B_X_ITEMS_BUFF >= GEN_7) ? 2 : 1 + [ITEM_X_ATTACK] = { .name = _("X Attack"), .itemId = ITEM_X_ATTACK, .price = 1000, + .holdEffectParam = X_ITEM_STAGES, .description = sXAttackDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1637,12 +1573,12 @@ const struct Item gItems[] = .name = _("X Defense"), .itemId = ITEM_X_DEFENSE, .price = 2000, + .holdEffectParam = X_ITEM_STAGES, .description = sXDefenseDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1651,12 +1587,12 @@ const struct Item gItems[] = .name = _("X Sp. Atk"), .itemId = ITEM_X_SP_ATK, .price = 1000, + .holdEffectParam = X_ITEM_STAGES, .description = sXSpAtkDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1665,12 +1601,12 @@ const struct Item gItems[] = .name = _("X Sp. Def"), .itemId = ITEM_X_SP_DEF, .price = 2000, + .holdEffectParam = X_ITEM_STAGES, .description = sXSpDefDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1679,12 +1615,12 @@ const struct Item gItems[] = .name = _("X Speed"), .itemId = ITEM_X_SPEED, .price = 1000, + .holdEffectParam = X_ITEM_STAGES, .description = sXSpeedDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1693,12 +1629,12 @@ const struct Item gItems[] = .name = _("X Accuracy"), .itemId = ITEM_X_ACCURACY, .price = 1000, + .holdEffectParam = X_ITEM_STAGES, .description = sXAccuracyDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1711,8 +1647,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_SET_FOCUS_ENERGY, .flingPower = 30, }, @@ -1725,8 +1660,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_SET_MIST, .flingPower = 30, }, @@ -1739,8 +1673,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_Escape, + .battleUsage = EFFECT_ITEM_ESCAPE, .flingPower = 30, }, @@ -1753,8 +1686,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_Escape, + .battleUsage = EFFECT_ITEM_ESCAPE, .flingPower = 30, }, @@ -1767,8 +1699,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_Escape, + .battleUsage = EFFECT_ITEM_ESCAPE, .flingPower = 30, }, @@ -1781,11 +1712,12 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, // Todo + .battleUsage = EFFECT_ITEM_INCREASE_ALL_STATS, .flingPower = 30, }, +#undef X_ITEM_STAGES + // Treasures [ITEM_BOTTLE_CAP] = @@ -6874,8 +6806,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6889,8 +6820,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6904,8 +6834,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6919,8 +6848,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6934,8 +6862,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6948,10 +6875,9 @@ const struct Item gItems[] = .holdEffectParam = 10, .description = sLeppaBerryDesc, .pocket = POCKET_BERRIES, - .type = ITEM_USE_PARTY_MENU, + .type = ITEM_USE_PARTY_MENU_MOVES, .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_PPRecovery, + .battleUsage = EFFECT_ITEM_RESTORE_PP, .flingPower = 10, }, @@ -6966,8 +6892,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 10, }, @@ -6981,8 +6906,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6996,8 +6920,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -7017,8 +6940,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 10, }, @@ -7794,8 +7716,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, // Type handled by ItemUseOutOfBattle_EnigmaBerry .fieldUseFunc = ItemUseOutOfBattle_EnigmaBerry, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_EnigmaBerry, + .battleUsage = EFFECT_ITEM_ENIGMA_BERRY_EREADER, .flingPower = 10, }, diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 632fb6b26..087c6db0c 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -533,8 +533,6 @@ const u8 *const gItemEffectTable[ITEMS_COUNT] = [ITEM_DIRE_HIT] = gItemEffect_DireHit, [ITEM_GUARD_SPEC] = gItemEffect_GuardSpec, - //[ITEM_MAX_MUSHROOMS] = gItemEffect_MaxMushrooms, // Todo - // Evolution Items [ITEM_FIRE_STONE] = gItemEffect_EvoItem, [ITEM_WATER_STONE] = gItemEffect_EvoItem, diff --git a/src/item.c b/src/item.c index db24cb82e..da57c4076 100644 --- a/src/item.c +++ b/src/item.c @@ -7,12 +7,15 @@ #include "malloc.h" #include "secret_base.h" #include "item_menu.h" +#include "party_menu.h" #include "strings.h" #include "load_save.h" #include "item_use.h" #include "battle_pyramid.h" #include "battle_pyramid_bag.h" +#include "constants/battle.h" #include "constants/items.h" +#include "constants/item_effects.h" #include "constants/hold_effects.h" static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count); @@ -922,14 +925,36 @@ ItemUseFunc ItemId_GetFieldFunc(u16 itemId) return gItems[SanitizeItemId(itemId)].fieldUseFunc; } +// Returns an item's battle effect script ID. u8 ItemId_GetBattleUsage(u16 itemId) { - return gItems[SanitizeItemId(itemId)].battleUsage; -} - -ItemUseFunc ItemId_GetBattleFunc(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].battleUseFunc; + u16 item = SanitizeItemId(itemId); + // Handle E-Reader berries. + if (item == ITEM_ENIGMA_BERRY_E_READER) + { + switch (GetItemEffectType(gSpecialVar_ItemId)) + { + case ITEM_EFFECT_X_ITEM: + return EFFECT_ITEM_INCREASE_STAT; + case ITEM_EFFECT_HEAL_HP: + return EFFECT_ITEM_RESTORE_HP; + case ITEM_EFFECT_CURE_POISON: + case ITEM_EFFECT_CURE_SLEEP: + case ITEM_EFFECT_CURE_BURN: + case ITEM_EFFECT_CURE_FREEZE: + case ITEM_EFFECT_CURE_PARALYSIS: + case ITEM_EFFECT_CURE_ALL_STATUS: + case ITEM_EFFECT_CURE_CONFUSION: + case ITEM_EFFECT_CURE_INFATUATION: + return EFFECT_ITEM_CURE_STATUS; + case ITEM_EFFECT_HEAL_PP: + return EFFECT_ITEM_RESTORE_PP; + default: + return 0; + } + } + else + return gItems[item].battleUsage; } u8 ItemId_GetSecondaryId(u16 itemId) @@ -941,3 +966,36 @@ u8 ItemId_GetFlingPower(u16 itemId) { return gItems[SanitizeItemId(itemId)].flingPower; } + + +u32 GetItemStatus1Mask(u16 itemId) +{ + const u8 *effect = GetItemEffect(itemId); + switch (effect[3]) + { + case ITEM3_FREEZE: + return STATUS1_FREEZE; + case ITEM3_BURN: + return STATUS1_BURN; + case ITEM3_POISON: + return STATUS1_POISON | STATUS1_TOXIC_POISON; + case ITEM3_SLEEP: + return STATUS1_SLEEP; + case ITEM3_STATUS_ALL: + return STATUS1_ANY; + } + return 0; +} + +u32 GetItemStatus2Mask(u16 itemId) +{ + const u8 *effect = GetItemEffect(itemId); + if (effect[3] & ITEM3_STATUS_ALL) + return STATUS2_INFATUATION | STATUS2_CONFUSION; + else if (effect[0] & ITEM0_INFATUATION) + return STATUS2_INFATUATION; + else if (effect[3] & ITEM3_CONFUSION) + return STATUS2_CONFUSION; + else + return 0; +} diff --git a/src/item_menu.c b/src/item_menu.c index 4c66b0923..2a382b064 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1985,11 +1985,18 @@ static void ItemMenu_Cancel(u8 taskId) static void ItemMenu_UseInBattle(u8 taskId) { - if (ItemId_GetBattleFunc(gSpecialVar_ItemId)) - { - RemoveContextWindow(); - ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); - } + // Safety check + u16 type = ItemId_GetType(gSpecialVar_ItemId); + if (!ItemId_GetBattleUsage(gSpecialVar_ItemId)) + return; + + RemoveContextWindow(); + if (type == ITEM_USE_BAG_MENU) + ItemUseInBattle_BagMenu(taskId); + else if (type == ITEM_USE_PARTY_MENU) + ItemUseInBattle_PartyMenu(taskId); + else if (type == ITEM_USE_PARTY_MENU_MOVES) + ItemUseInBattle_PartyMenuChooseMove(taskId); } void CB2_ReturnToBagMenuPocket(void) diff --git a/src/item_use.c b/src/item_use.c index 9c925945a..8bcadfb2e 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -75,6 +75,7 @@ static void Task_CloseCantUseKeyItemMessage(u8); static void SetDistanceOfClosestHiddenItem(u8, s16, s16); static void CB2_OpenPokeblockFromBag(void); static void ItemUseOnFieldCB_Honey(u8 taskId); +static bool32 CannotUseBagBattleItem(u16 itemId); // EWRAM variables EWRAM_DATA static void(*sItemUseOnFieldCB)(u8 taskId) = NULL; @@ -86,9 +87,10 @@ EWRAM_DATA static void(*sItemUseOnFieldCB)(u8 taskId) = NULL; // Never occurs in vanilla, but can occur with improperly created items static const MainCallback sItemUseCallbacks[] = { - [ITEM_USE_PARTY_MENU - 1] = CB2_ShowPartyMenuForItemUse, - [ITEM_USE_FIELD - 1] = CB2_ReturnToField, - [ITEM_USE_PBLOCK_CASE - 1] = NULL, + [ITEM_USE_PARTY_MENU - 1] = CB2_ShowPartyMenuForItemUse, + [ITEM_USE_FIELD - 1] = CB2_ReturnToField, + [ITEM_USE_PBLOCK_CASE - 1] = NULL, + [ITEM_USE_PARTY_MENU_MOVES - 1] = CB2_ShowPartyMenuForItemUse, }; static const u8 sClockwiseDirections[] = {DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST}; @@ -1105,25 +1107,6 @@ static void Task_UseStatIncreaseItem(u8 taskId) } } -// e.g. X Attack, Guard Spec -void ItemUseInBattle_StatIncrease(u8 taskId) -{ - u16 partyId = gBattlerPartyIndexes[gBattlerInMenuId]; - - if (ExecuteTableBasedItemEffect(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE) - { - if (!InBattlePyramid()) - DisplayItemMessage(taskId, FONT_NORMAL, gText_WontHaveEffect, CloseItemMessage); - else - DisplayItemMessageInBattlePyramid(taskId, gText_WontHaveEffect, Task_CloseBattlePyramidBagMessage); - } - else - { - gTasks[taskId].func = Task_UseStatIncreaseItem; - gTasks[taskId].data[8] = 0; - } -} - static void ItemUseInBattle_ShowPartyMenu(u8 taskId) { if (!InBattlePyramid()) @@ -1138,41 +1121,119 @@ static void ItemUseInBattle_ShowPartyMenu(u8 taskId) } } -void ItemUseInBattle_Medicine(u8 taskId) +void ItemUseInBattle_PartyMenu(u8 taskId) { - gItemUseCB = ItemUseCB_Medicine; + gItemUseCB = ItemUseCB_BattleScript; ItemUseInBattle_ShowPartyMenu(taskId); } -// Unused. Sacred Ash cannot be used in battle -void ItemUseInBattle_SacredAsh(u8 taskId) +void ItemUseInBattle_PartyMenuChooseMove(u8 taskId) { - gItemUseCB = ItemUseCB_SacredAsh; + gItemUseCB = ItemUseCB_BattleChooseMove; ItemUseInBattle_ShowPartyMenu(taskId); } -void ItemUseInBattle_PPRecovery(u8 taskId) +// Returns whether an item can be used in battle and sets the fail text. +static bool32 CannotUseBagBattleItem(u16 itemId) { - gItemUseCB = ItemUseCB_PPRecovery; - ItemUseInBattle_ShowPartyMenu(taskId); -} + u8 cannotUse = FALSE; + u16 battleUsage = ItemId_GetBattleUsage(itemId); + const u8* failStr = NULL; -// Fluffy Tail / Poke Doll -void ItemUseInBattle_Escape(u8 taskId) -{ - - if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE) + // Embargo Check + if ((gPartyMenu.slotId == 0 && gStatuses3[B_POSITION_PLAYER_LEFT] & STATUS3_EMBARGO) + || (gPartyMenu.slotId == 1 && gStatuses3[B_POSITION_PLAYER_RIGHT] & STATUS3_EMBARGO)) { + return TRUE; + } + // X-Items + if (battleUsage == EFFECT_ITEM_INCREASE_STAT + && gBattleMons[gBattlerInMenuId].statStages[gItemEffectTable[itemId][1]] == MAX_STAT_STAGE) + { + cannotUse++; + } + // Dire Hit + if (battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY + && !(gBattleMons[gBattlerInMenuId].status2 & STATUS2_FOCUS_ENERGY)) + { + cannotUse++; + } + // Guard Spec + if (battleUsage == EFFECT_ITEM_SET_MIST + && gSideStatuses[GetBattlerSide(gBattlerInMenuId)] & SIDE_STATUS_MIST) + { + cannotUse++; + } + // Escape Items + if (battleUsage == EFFECT_ITEM_ESCAPE + && gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + cannotUse++; + } + // Poke Balls + if (battleUsage == EFFECT_ITEM_THROW_BALL) + { + switch (GetBallThrowableState()) + { + case BALL_THROW_UNABLE_TWO_MONS: + failStr = sText_CantThrowPokeBall_TwoMons; + cannotUse++; + break; + case BALL_THROW_UNABLE_NO_ROOM: + failStr = gText_BoxFull; + cannotUse++; + break; + #if B_SEMI_INVULNERABLE_CATCH >= GEN_4 + case BALL_THROW_UNABLE_SEMI_INVULNERABLE: + failStr = sText_CantThrowPokeBall_SemiInvulnerable; + cannotUse++; + break; + #endif + case BALL_THROW_UNABLE_DISABLED_FLAG: + failStr = sText_CantThrowPokeBall_Disabled; + cannotUse++; + break; + } + } + // Max Mushrooms + if (battleUsage == EFFECT_ITEM_INCREASE_ALL_STATS) + { + u32 i; + for (i = 1; i < NUM_STATS; i++) + { + if (CompareStat(gBattlerInMenuId, i, MAX_STAT_STAGE, CMP_EQUAL)) + { + cannotUse++; + break; + } + } + } + + if (failStr != NULL) + StringExpandPlaceholders(gStringVar4, failStr); + else + StringExpandPlaceholders(gStringVar4, gText_WontHaveEffect); + return cannotUse; +} + +void ItemUseInBattle_BagMenu(u8 taskId) +{ + if (CannotUseBagBattleItem(gSpecialVar_ItemId)) + { + if (!InBattlePyramid()) + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); + else + DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage); + } + else + { + PlaySE(SE_SELECT); RemoveUsedItem(); if (!InBattlePyramid()) DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_FadeAndCloseBagMenu); else DisplayItemMessageInBattlePyramid(taskId, gStringVar4, CloseBattlePyramidBag); } - else - { - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); - } } void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) @@ -1219,33 +1280,6 @@ void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) } } -void ItemUseInBattle_EnigmaBerry(u8 taskId) -{ - switch (GetItemEffectType(gSpecialVar_ItemId)) - { - case ITEM_EFFECT_X_ITEM: - ItemUseInBattle_StatIncrease(taskId); - break; - case ITEM_EFFECT_HEAL_HP: - case ITEM_EFFECT_CURE_POISON: - case ITEM_EFFECT_CURE_SLEEP: - case ITEM_EFFECT_CURE_BURN: - case ITEM_EFFECT_CURE_FREEZE: - case ITEM_EFFECT_CURE_PARALYSIS: - case ITEM_EFFECT_CURE_ALL_STATUS: - case ITEM_EFFECT_CURE_CONFUSION: - case ITEM_EFFECT_CURE_INFATUATION: - ItemUseInBattle_Medicine(taskId); - break; - case ITEM_EFFECT_HEAL_PP: - ItemUseInBattle_PPRecovery(taskId); - break; - default: - ItemUseOutOfBattle_CannotUse(taskId); - break; - } -} - void ItemUseOutOfBattle_FormChange(u8 taskId) { gItemUseCB = ItemUseCB_FormChange; diff --git a/src/party_menu.c b/src/party_menu.c index 30f2f8150..dd46b1063 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -390,8 +390,8 @@ static void Task_DisplayHPRestoredMessage(u8); static u16 ItemEffectToMonEv(struct Pokemon *, u8); static void ItemEffectToStatString(u8, u8 *); static void ReturnToUseOnWhichMon(u8); -static void SetSelectedMoveForPPItem(u8); -static void TryUsePPItem(u8); +static void SetSelectedMoveForItem(u8); +static void TryUseItemOnMove(u8); static void Task_LearnedMove(u8); static void Task_ReplaceMoveYesNo(u8); static void Task_DoLearnedMoveFanfareAfterText(u8); @@ -480,6 +480,9 @@ static bool8 SetUpFieldMove_Fly(void); static bool8 SetUpFieldMove_Waterfall(void); static bool8 SetUpFieldMove_Dive(void); void TryItemHoldFormChange(struct Pokemon *mon); +static void ShowMoveSelectWindow(u8 slot); +static void Task_HandleWhichMoveInput(u8 taskId); +static bool32 CannotUsePartyBattleItem(u16 itemId, struct Pokemon* mon); // static const data #include "data/party_menu.h" @@ -4301,12 +4304,7 @@ static void Task_SetSacredAshCB(u8 taskId) static bool8 IsHPRecoveryItem(u16 item) { - const u8 *effect; - - if (item == ITEM_ENIGMA_BERRY_E_READER) - effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; - else - effect = gItemEffectTable[item]; + const u8 *effect = GetItemEffect(item); if (effect == NULL) return FALSE; @@ -4396,18 +4394,97 @@ static bool8 IsItemFlute(u16 item) return FALSE; } -static bool8 ExecuteTableBasedItemEffect_(u8 partyMonIndex, u16 item, u8 monMoveIndex) +static bool32 CannotUsePartyBattleItem(u16 itemId, struct Pokemon* mon) { - if (gMain.inBattle) + u8 i; + u8 cannotUse = FALSE; + u16 battleUsage = ItemId_GetBattleUsage(itemId); + u16 hp = GetMonData(mon, MON_DATA_HP); + + // Embargo Check + if ((gPartyMenu.slotId == 0 && gStatuses3[B_POSITION_PLAYER_LEFT] & STATUS3_EMBARGO) + || (gPartyMenu.slotId == 1 && gStatuses3[B_POSITION_PLAYER_RIGHT] & STATUS3_EMBARGO)) { - if ((partyMonIndex == 0 && gStatuses3[B_POSITION_PLAYER_LEFT] & STATUS3_EMBARGO) - || (partyMonIndex == 1 && gStatuses3[B_POSITION_PLAYER_RIGHT] & STATUS3_EMBARGO)) - return TRUE; // cannot use on this mon - else - return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, GetPartyIdFromBattleSlot(partyMonIndex), monMoveIndex); + return FALSE; + } + // Items that restore HP (Potions, Sitrus Berry, etc.) + if (battleUsage == EFFECT_ITEM_RESTORE_HP && (hp == 0 || hp == GetMonData(mon, MON_DATA_MAX_HP))) + { + cannotUse++; + } + // Items that cure status (Burn Heal, Awakening, etc.) + if (battleUsage == EFFECT_ITEM_CURE_STATUS + && !((GetMonData(mon, MON_DATA_STATUS) & GetItemStatus1Mask(itemId)) + || (gPartyMenu.slotId == 0 && gBattleMons[gBattlerInMenuId].status2 & GetItemStatus2Mask(itemId)))) + { + cannotUse++; + } + // Items that restore HP and cure status (Full Restore) + if (battleUsage == EFFECT_ITEM_HEAL_AND_CURE_STATUS + && (hp == 0 || hp == GetMonData(mon, MON_DATA_MAX_HP)) + && !((GetMonData(mon, MON_DATA_STATUS) & GetItemStatus1Mask(itemId)) + || (gPartyMenu.slotId == 0 && gBattleMons[gBattlerInMenuId].status2 & GetItemStatus2Mask(itemId)))) + { + cannotUse++; + } + // Items that revive a party member + if (battleUsage == EFFECT_ITEM_REVIVE && hp != 0) + { + cannotUse++; + } + // Items that restore PP (Elixir, Ether, Leppa Berry) + if (battleUsage == EFFECT_ITEM_RESTORE_PP) + { + if (GetItemEffect(itemId)[6] == ITEM4_HEAL_PP) + { + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (GetMonData(mon, MON_DATA_PP1 + i) < CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + i), GetMonData(mon, MON_DATA_PP_BONUSES), i)); + break; + } + if (i == MAX_MON_MOVES) + cannotUse++; + } + else if (GetMonData(mon, MON_DATA_PP1 + gPartyMenu.data1) == CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + gPartyMenu.data1), GetMonData(mon, MON_DATA_PP_BONUSES), gPartyMenu.data1)) + { + cannotUse++; + } + } + return cannotUse; +} + +// Battle scripts called in HandleAction_UseItem +void ItemUseCB_BattleScript(u8 taskId, TaskFunc task) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + if (CannotUsePartyBattleItem(gSpecialVar_ItemId, mon)) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = task; } else - return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, partyMonIndex, monMoveIndex); + { + gBattleStruct->itemPartyIndex[gBattlerInMenuId] = GetPartyIdFromBattleSlot(gPartyMenu.slotId); + gPartyMenuUseExitCallback = TRUE; + PlaySE(SE_SELECT); + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + RemoveBagItem(gSpecialVar_ItemId, 1); + gTasks[taskId].func = task; + } +} + +void ItemUseCB_BattleChooseMove(u8 taskId, TaskFunc task) +{ + PlaySE(SE_SELECT); + DisplayPartyMenuStdMessage(PARTY_MSG_RESTORE_WHICH_MOVE); + ShowMoveSelectWindow(gPartyMenu.slotId); + gTasks[taskId].func = Task_HandleWhichMoveInput; } void ItemUseCB_Medicine(u8 taskId, TaskFunc task) @@ -4430,7 +4507,7 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) if (hp == GetMonData(mon, MON_DATA_MAX_HP)) canHeal = FALSE; } - cannotUse = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0); + cannotUse = ExecuteTableBasedItemEffect(mon, item, gPartyMenu.slotId, 0); } if (cannotUse != FALSE) @@ -4691,7 +4768,7 @@ void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task) u8 effectType = GetItemEffectType(item); u16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP); u16 ev = ItemEffectToMonEv(mon, effectType); - bool8 cannotUseEffect = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0); + bool8 cannotUseEffect = ExecuteTableBasedItemEffect(mon, item, gPartyMenu.slotId, 0); u16 newFriendship = GetMonData(mon, MON_DATA_FRIENDSHIP); u16 newEv = ItemEffectToMonEv(mon, effectType); @@ -4807,25 +4884,19 @@ static void Task_HandleWhichMoveInput(u8 taskId) else { PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); - SetSelectedMoveForPPItem(taskId); + SetSelectedMoveForItem(taskId); } } } void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task) { - const u8 *effect; - u16 item = gSpecialVar_ItemId; - - if (item == ITEM_ENIGMA_BERRY_E_READER) - effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; - else - effect = gItemEffectTable[item]; + const u8 *effect = GetItemEffect(gSpecialVar_ItemId); if (effect == NULL || !(effect[4] & ITEM4_HEAL_PP_ONE)) { gPartyMenu.data1 = 0; - TryUsePPItem(taskId); + TryUseItemOnMove(taskId); } else { @@ -4836,11 +4907,11 @@ void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task) } } -static void SetSelectedMoveForPPItem(u8 taskId) +static void SetSelectedMoveForItem(u8 taskId) { PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); gPartyMenu.data1 = Menu_GetCursorPos(); - TryUsePPItem(taskId); + TryUseItemOnMove(taskId); } static void ReturnToUseOnWhichMon(u8 taskId) @@ -4851,34 +4922,61 @@ static void ReturnToUseOnWhichMon(u8 taskId) DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON); } -static void TryUsePPItem(u8 taskId) +static void TryUseItemOnMove(u8 taskId) { - u16 move = MOVE_NONE; - s16 *moveSlot = &gPartyMenu.data1; - u16 item = gSpecialVar_ItemId; struct PartyMenu *ptr = &gPartyMenu; - struct Pokemon *mon; - - if (ExecuteTableBasedItemEffect_(ptr->slotId, item, *moveSlot)) + struct Pokemon *mon = &gPlayerParty[ptr->slotId]; + // In battle, set appropriate variables to be used in battle script. + if (gMain.inBattle) { - gPartyMenuUseExitCallback = FALSE; - PlaySE(SE_SELECT); - DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); - ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = Task_ClosePartyMenuAfterText; + if (CannotUsePartyBattleItem(gSpecialVar_ItemId, mon)) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } + else + { + gBattleStruct->itemPartyIndex[gBattlerInMenuId] = GetPartyIdFromBattleSlot(gPartyMenu.slotId); + gChosenMovePos = ptr->data1; + gPartyMenuUseExitCallback = TRUE; + RemoveBagItem(gSpecialVar_ItemId, 1); + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } } + // Outside of battle, only PP items are used on moves. else { - gPartyMenuUseExitCallback = TRUE; - mon = &gPlayerParty[ptr->slotId]; - PlaySE(SE_USE_ITEM); - RemoveBagItem(item, 1); - move = GetMonData(mon, MON_DATA_MOVE1 + *moveSlot); - StringCopy(gStringVar1, gMoveNames[move]); - GetMedicineItemEffectMessage(item); - DisplayPartyMenuMessage(gStringVar4, TRUE); - ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = Task_ClosePartyMenuAfterText; + u16 move = MOVE_NONE; + s16 *moveSlot = &gPartyMenu.data1; + u16 item = gSpecialVar_ItemId; + + if (ExecuteTableBasedItemEffect(mon, item, ptr->slotId, *moveSlot)) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } + else + { + gPartyMenuUseExitCallback = TRUE; + PlaySE(SE_USE_ITEM); + RemoveBagItem(item, 1); + move = GetMonData(mon, MON_DATA_MOVE1 + *moveSlot); + StringCopy(gStringVar1, gMoveNames[move]); + GetMedicineItemEffectMessage(item); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } } } @@ -5192,7 +5290,7 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task) if (sInitialLevel != MAX_LEVEL) { BufferMonStatsToTaskData(mon, arrayPtr); - cannotUseEffect = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, *itemPtr, 0); + cannotUseEffect = ExecuteTableBasedItemEffect(mon, gPartyMenu.slotId, *itemPtr, 0); BufferMonStatsToTaskData(mon, &ptr->data[NUM_STATS]); } else @@ -5459,7 +5557,7 @@ static void UseSacredAsh(u8 taskId) } hp = GetMonData(mon, MON_DATA_HP); - if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0)) + if (ExecuteTableBasedItemEffect(mon, gSpecialVar_ItemId, gPartyMenu.slotId, 0)) { gTasks[taskId].func = Task_SacredAshLoop; return; @@ -5526,7 +5624,7 @@ void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task) { PlaySE(SE_SELECT); gCB2_AfterEvolution = gPartyMenu.exitCallback; - if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0)) + if (ExecuteTableBasedItemEffect(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId, gPartyMenu.slotId, 0)) { gPartyMenuUseExitCallback = FALSE; DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); @@ -5691,16 +5789,18 @@ void TryItemHoldFormChange(struct Pokemon *mon) #undef tAnimWait #undef tNextFunc +const u8* GetItemEffect(u16 item) +{ + if (item == ITEM_ENIGMA_BERRY_E_READER) + return gSaveBlock1Ptr->enigmaBerry.itemEffect; + else + return gItemEffectTable[item]; +} + u8 GetItemEffectType(u16 item) { - const u8 *itemEffect; u32 statusCure; - - // Read the item's effect properties. - if (item == ITEM_ENIGMA_BERRY_E_READER) - itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect; - else - itemEffect = gItemEffectTable[item]; + const u8 *itemEffect = GetItemEffect(item); if (itemEffect == NULL) return ITEM_EFFECT_NONE; diff --git a/src/pokemon.c b/src/pokemon.c index 10a4d0efd..d985ef95d 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5736,55 +5736,16 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Get item hold effect heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); if (heldItem == ITEM_ENIGMA_BERRY_E_READER) - { - if (gMain.inBattle) - holdEffect = gEnigmaBerries[gBattlerInMenuId].holdEffect; - else - holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; - } + holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; else - { holdEffect = ItemId_GetHoldEffect(heldItem); - } - - // Get battler id (if relevant) - gPotentialItemEffectBattler = gBattlerInMenuId; - if (gMain.inBattle) - { - gActiveBattler = gBattlerInMenuId; - i = (GetBattlerSide(gActiveBattler) != B_SIDE_PLAYER); - while (i < gBattlersCount) - { - if (gBattlerPartyIndexes[i] == partyIndex) - { - battlerId = i; - break; - } - i += 2; - } - } - else - { - gActiveBattler = 0; - battlerId = MAX_BATTLERS_COUNT; - } // Skip using the item if it won't do anything if (gItemEffectTable[item] == NULL && item != ITEM_ENIGMA_BERRY_E_READER) return TRUE; // Get item effect - if (item == ITEM_ENIGMA_BERRY_E_READER) - { - if (gMain.inBattle) - itemEffect = gEnigmaBerries[gActiveBattler].itemEffect; - else - itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect; - } - else - { - itemEffect = gItemEffectTable[item]; - } + itemEffect = GetItemEffect(item); // Do item effect for (i = 0; i < ITEM_EFFECT_ARG_START; i++) @@ -5793,85 +5754,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov { // Handle ITEM0 effects (infatuation, Dire Hit, X Attack). ITEM0_SACRED_ASH is handled in party_menu.c + // Now handled in item battle scripts. case 0: - // Cure infatuation - if ((itemEffect[i] & ITEM0_INFATUATION) - && gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && (gBattleMons[battlerId].status2 & STATUS2_INFATUATION)) - { - gBattleMons[battlerId].status2 &= ~STATUS2_INFATUATION; - retVal = FALSE; - } - - // Dire Hit - if ((itemEffect[i] & ITEM0_DIRE_HIT) - && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY)) - { - gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY; - retVal = FALSE; - } break; // Handle ITEM1 effects (in-battle stat boosting effects) + // Now handled in item battle scripts. case 1: - // X Attack - if ((itemEffect[i] & ITEM1_X_ATTACK) - && gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_ATK] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_ATK] = MAX_STAT_STAGE; - retVal = FALSE; - } - - // X Defense - if ((itemEffect[i] & ITEM1_X_DEFENSE) - && gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_DEF] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_DEF] = MAX_STAT_STAGE; - retVal = FALSE; - } - - // X Speed - if ((itemEffect[i] & ITEM1_X_SPEED) - && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_SPEED] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_SPEED] = MAX_STAT_STAGE; - retVal = FALSE; - } - - // X Sp Attack - if ((itemEffect[i] & ITEM1_X_SPATK) - && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_SPATK] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_SPATK] = MAX_STAT_STAGE; - retVal = FALSE; - } - - // X Sp Defense - if ((itemEffect[i] & ITEM1_X_SPDEF) - && gBattleMons[gActiveBattler].statStages[STAT_SPDEF] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_SPDEF] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_SPDEF] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_SPDEF] = MAX_STAT_STAGE; - retVal = FALSE; - } - - // X Accuracy - if ((itemEffect[i] & ITEM1_X_ACCURACY) - && gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_ACC] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_ACC] = MAX_STAT_STAGE; - retVal = FALSE; - } break; // Formerly used by the item effects of the X Sp. Atk and the X Accuracy case 2: @@ -5879,14 +5768,6 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Handle ITEM3 effects (Guard Spec, Rare Candy, cure status) case 3: - // Guard Spec - if ((itemEffect[i] & ITEM3_GUARD_SPEC) - && gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0) - { - gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5; - retVal = FALSE; - } - // Rare Candy / EXP Candy if ((itemEffect[i] & ITEM3_LEVEL_UP) && GetMonData(mon, MON_DATA_LEVEL, NULL) != MAX_LEVEL) @@ -5915,13 +5796,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } // Cure status - if ((itemEffect[i] & ITEM3_SLEEP) - && HealStatusConditions(mon, partyIndex, STATUS1_SLEEP, battlerId) == 0) - { - if (battlerId != MAX_BATTLERS_COUNT) - gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE; + if ((itemEffect[i] & ITEM3_SLEEP) && HealStatusConditions(mon, partyIndex, STATUS1_SLEEP, battlerId) == 0) retVal = FALSE; - } if ((itemEffect[i] & ITEM3_POISON) && HealStatusConditions(mon, partyIndex, STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER, battlerId) == 0) retVal = FALSE; if ((itemEffect[i] & ITEM3_BURN) && HealStatusConditions(mon, partyIndex, STATUS1_BURN, battlerId) == 0) @@ -5930,12 +5806,6 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov retVal = FALSE; if ((itemEffect[i] & ITEM3_PARALYSIS) && HealStatusConditions(mon, partyIndex, STATUS1_PARALYSIS, battlerId) == 0) retVal = FALSE; - if ((itemEffect[i] & ITEM3_CONFUSION) // heal confusion - && gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)) - { - gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; - retVal = FALSE; - } break; // Handle ITEM4 effects (Change HP/Atk EVs, HP heal, PP heal, PP up, Revive, and evolution stones) @@ -6022,38 +5892,12 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; case 2: // ITEM4_HEAL_HP - // If Revive, update number of times revive has been used - if (effectFlags & (ITEM4_REVIVE >> 2)) + // Check use validity. + if ((effectFlags & (ITEM4_REVIVE >> 2) && GetMonData(mon, MON_DATA_HP, NULL) != 0) + || (!(effectFlags & (ITEM4_REVIVE >> 2)) && GetMonData(mon, MON_DATA_HP, NULL) == 0)) { - if (GetMonData(mon, MON_DATA_HP, NULL) != 0) - { - itemEffectParam++; - break; - } - if (gMain.inBattle) - { - if (battlerId != MAX_BATTLERS_COUNT) - { - gAbsentBattlerFlags &= ~gBitTable[battlerId]; - CopyPlayerPartyMonToBattleData(battlerId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battlerId])); - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) - gBattleResults.numRevivesUsed++; - } - else - { - gAbsentBattlerFlags &= ~gBitTable[gActiveBattler ^ 2]; - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) - gBattleResults.numRevivesUsed++; - } - } - } - else - { - if (GetMonData(mon, MON_DATA_HP, NULL) == 0) - { - itemEffectParam++; - break; - } + itemEffectParam++; + break; } // Get amount of HP to restore @@ -6081,35 +5925,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Only restore HP if not at max health if (GetMonData(mon, MON_DATA_MAX_HP, NULL) != GetMonData(mon, MON_DATA_HP, NULL)) { - if (!usedByAI) - { - // Restore HP - dataUnsigned = GetMonData(mon, MON_DATA_HP, NULL) + dataUnsigned; - if (dataUnsigned > GetMonData(mon, MON_DATA_MAX_HP, NULL)) - dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL); - SetMonData(mon, MON_DATA_HP, &dataUnsigned); - - // Update battler (if applicable) - if (gMain.inBattle && battlerId != MAX_BATTLERS_COUNT) - { - gBattleMons[battlerId].hp = dataUnsigned; - if (!(effectFlags & (ITEM4_REVIVE >> 2)) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - if (gBattleResults.numHealingItemsUsed < 255) - gBattleResults.numHealingItemsUsed++; - - temp2 = gActiveBattler; - gActiveBattler = battlerId; - BtlController_EmitGetMonData(BUFFER_A, REQUEST_ALL_BATTLE, 0); - MarkBattlerForControllerExec(gActiveBattler); - gActiveBattler = temp2; - } - } - } - else - { - gBattleMoveDamage = -dataUnsigned; - } + // Restore HP + dataUnsigned = GetMonData(mon, MON_DATA_HP, NULL) + dataUnsigned; + if (dataUnsigned > GetMonData(mon, MON_DATA_MAX_HP, NULL)) + dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL); + SetMonData(mon, MON_DATA_HP, &dataUnsigned); retVal = FALSE; } effectFlags &= ~(ITEM4_REVIVE >> 2); @@ -6134,11 +5954,6 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), temp2); } SetMonData(mon, MON_DATA_PP1 + temp2, &dataUnsigned); - - // Heal battler PP too (if applicable) - if (gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && MOVE_IS_PERMANENT(battlerId, temp2)) - gBattleMons[battlerId].pp[temp2] = dataUnsigned; - retVal = FALSE; } } @@ -6160,11 +5975,6 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); } SetMonData(mon, MON_DATA_PP1 + moveIndex, &dataUnsigned); - - // Heal battler PP too (if applicable) - if (gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && MOVE_IS_PERMANENT(battlerId, moveIndex)) - gBattleMons[battlerId].pp[moveIndex] = dataUnsigned; - retVal = FALSE; } } diff --git a/test/item_effect_increase_stat.c b/test/item_effect_increase_stat.c new file mode 100644 index 000000000..70c89bdd4 --- /dev/null +++ b/test/item_effect_increase_stat.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("X-Attack sharply raises battler's attack stat", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + ASSUME(gItems[ITEM_X_ATTACK].battleUsage == EFFECT_ITEM_INCREASE_STAT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (useItem) TURN { USE_ITEM(player, ITEM_X_ATTACK); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Tackle!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + if (B_X_ITEMS_BUFF >= GEN_7) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/item_effect_restore_hp.c b/test/item_effect_restore_hp.c new file mode 100644 index 000000000..971ec2400 --- /dev/null +++ b/test/item_effect_restore_hp.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Potion restores a battler's HP by 20") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_POTION, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + EXPECT_EQ(damage, -20); + } +} + +SINGLE_BATTLE_TEST("Sitrus Berry restores a battler's HP") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_SITRUS_BERRY].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_SITRUS_BERRY, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + if (I_SITRUS_BERRY_HEAL >= GEN_4) + EXPECT_EQ(damage, -25); + else + EXPECT_EQ(damage, -30); + } +} diff --git a/test/item_effect_restore_pp.c b/test/item_effect_restore_pp.c new file mode 100644 index 000000000..234d4ae4e --- /dev/null +++ b/test/item_effect_restore_pp.c @@ -0,0 +1,19 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Ether restores the PP of one of a battler's moves") +{ + GIVEN { + ASSUME(gItems[ITEM_ETHER].battleUsage == EFFECT_ITEM_RESTORE_PP); + ASSUME(gItems[ITEM_ETHER].type == ITEM_USE_PARTY_MENU_MOVES); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_CONFUSION); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_CONFUSION); } + TURN { USE_ITEM(player, ITEM_ETHER, partyIndex: 0, move: MOVE_TACKLE); } + } FINALLY { + EXPECT_EQ(player->pp[0], 35); + EXPECT_EQ(player->pp[1], 24); + } +} diff --git a/test/test_battle.h b/test/test_battle.h index 60d0dc33c..967bb661d 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -333,6 +333,13 @@ * Used when the battler chooses to switch to another Pokémon but not * via Switch, e.g. after fainting or due to a U-turn. * SEND_OUT(player, 1); + * + * USE_ITEM(battler, itemId, [partyIndex:], [move:]) + * Used when the battler chooses to use an item from the Bag. The item + * ID must be specified, and party index and move slot if applicable, e.g: + * USE_ITEM(player, ITEM_X_ATTACK); + * USE_ITEM(player, ITEM_POTION, partyIndex: 0); + * USE_ITEM(player, ITEM_LEPPA_BERRY, partyIndex: 0, move: MOVE_TACKLE); * * SCENE * Contains an abridged description of the UI during the THEN. The order @@ -765,7 +772,7 @@ enum { TURN_CLOSED, TURN_OPEN, TURN_CLOSING }; #define SWITCH(battler, partyIndex) Switch(__LINE__, battler, partyIndex) #define SKIP_TURN(battler) SkipTurn(__LINE__, battler) #define SEND_OUT(battler, partyIndex) SendOut(__LINE__, battler, partyIndex) - +#define USE_ITEM(battler, ...) UseItem(__LINE__, battler, (struct ItemContext) { APPEND_TRUE(__VA_ARGS__) }) #define WITH_RNG(tag, value) rng: ((struct TurnRNG) { tag, value }) struct MoveContext @@ -791,13 +798,23 @@ struct MoveContext bool8 explicitRNG; }; +struct ItemContext +{ + u16 itemId; + u16 explicitItemId:1; + u16 partyIndex; + u16 explicitPartyIndex:1; + u16 move; + u16 explicitMove:1; +}; + void OpenTurn(u32 sourceLine); void CloseTurn(u32 sourceLine); void Move(u32 sourceLine, struct BattlePokemon *, struct MoveContext); void ForcedMove(u32 sourceLine, struct BattlePokemon *); void Switch(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); void SkipTurn(u32 sourceLine, struct BattlePokemon *); - +void UseItem(u32 sourceLine, struct BattlePokemon *, struct ItemContext); void SendOut(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); /* Scene */ diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 1b03341a4..365120f13 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -3,6 +3,7 @@ #include "battle_anim.h" #include "battle_controllers.h" #include "characters.h" +#include "item_menu.h" #include "main.h" #include "malloc.h" #include "random.h" @@ -1251,6 +1252,9 @@ void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 case B_ACTION_SWITCH: actualMacro = "SWITCH"; break; + case B_ACTION_USE_ITEM: + actualMacro = "USE_ITEM"; + break; } break; case RECORDED_PARTY_INDEX: @@ -1508,6 +1512,40 @@ void SendOut(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex) DATA.currentMonIndexes[battlerId] = partyIndex; } +void UseItem(u32 sourceLine, struct BattlePokemon *battler, struct ItemContext ctx) +{ + s32 i; + s32 battlerId = battler - gBattleMons; + bool32 requirePartyIndex = ItemId_GetType(ctx.itemId) == ITEM_USE_PARTY_MENU || ItemId_GetType(ctx.itemId) == ITEM_USE_PARTY_MENU_MOVES; + // Check general bad use. + INVALID_IF(DATA.turnState == TURN_CLOSED, "USE_ITEM outside TURN"); + INVALID_IF(DATA.actionBattlers & (1 << battlerId), "Multiple battler actions"); + INVALID_IF(ctx.itemId >= ITEMS_COUNT, "Illegal item: %d", ctx.itemId); + // Check party menu items. + INVALID_IF(requirePartyIndex && !ctx.explicitPartyIndex, "%S requires explicit party index", ItemId_GetName(ctx.itemId)); + INVALID_IF(requirePartyIndex && ctx.partyIndex >= ((battlerId & BIT_SIDE) == B_SIDE_PLAYER ? DATA.playerPartySize : DATA.opponentPartySize), \ + "USE_ITEM to invalid party index"); + // Check move slot items. + if (ItemId_GetType(ctx.itemId) == ITEM_USE_PARTY_MENU_MOVES) + { + INVALID_IF(!ctx.explicitMove, "%S requires an explicit move", ItemId_GetName(ctx.itemId)); + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (GetMonData(CurrentMon(battlerId), MON_DATA_MOVE1 + i, NULL) == ctx.move) + break; + } + INVALID_IF(i == MAX_MON_MOVES, "USE_ITEM on invalid move: %d", ctx.move); + } + PushBattlerAction(sourceLine, battlerId, RECORDED_ACTION_TYPE, B_ACTION_USE_ITEM); + PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_ID, (ctx.itemId >> 8) & 0xFF); + PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_ID, ctx.itemId & 0xFF); + if (ctx.explicitPartyIndex) + gBattleStruct->itemPartyIndex[battlerId] = ctx.partyIndex; + if (ctx.explicitMove) + gBattleStruct->itemPartyIndex[battlerId] = i; + DATA.actionBattlers |= 1 << battlerId; +} + static const char *const sQueueGroupTypeMacros[] = { [QUEUE_GROUP_NONE] = NULL, From 82dc1e3e93810f74f7abd377f76c2f4ceab70976 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Sat, 15 Apr 2023 09:27:28 -0700 Subject: [PATCH 111/129] fixed dupe strings in battle item use --- data/battle_scripts_2.s | 12 ++++++------ src/item_use.c | 5 +++-- src/party_menu.c | 8 +------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index dee482d1d..71d88ae84 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -49,14 +49,13 @@ BattleScript_UseItemMessage: BattleScript_ItemRestoreHP:: call BattleScript_UseItemMessage itemrestorehp - printstring STRINGID_ITEMRESTOREDSPECIESHEALTH - waitmessage B_WAIT_TIME_LONG jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_ItemRestoreHP_SendOutRevivedBattler bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER - updatestatusicon BS_ATTACKER + printstring STRINGID_ITEMRESTOREDSPECIESHEALTH + waitmessage B_WAIT_TIME_LONG end BattleScript_ItemRestoreHP_SendOutRevivedBattler: @@ -68,22 +67,22 @@ BattleScript_ItemRestoreHP_SendOutRevivedBattler: BattleScript_ItemCureStatus:: call BattleScript_UseItemMessage itemcurestatus + updatestatusicon BS_ATTACKER printstring STRINGID_ITEMCUREDSPECIESSTATUS waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_ATTACKER end BattleScript_ItemHealAndCureStatus:: call BattleScript_UseItemMessage itemrestorehp curestatus BS_ATTACKER - printstring STRINGID_ITEMRESTOREDSPECIESHEALTH - waitmessage B_WAIT_TIME_LONG bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER updatestatusicon BS_ATTACKER + printstring STRINGID_ITEMRESTOREDSPECIESHEALTH + waitmessage B_WAIT_TIME_LONG end BattleScript_ItemIncreaseStat:: @@ -256,3 +255,4 @@ BattleScript_TrainerBSlideMsgRet:: BattleScript_TrainerBSlideMsgEnd2:: call BattleScript_TrainerBSlideMsgRet end2 + end2 diff --git a/src/item_use.c b/src/item_use.c index 8bcadfb2e..26b48ac80 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1229,10 +1229,11 @@ void ItemUseInBattle_BagMenu(u8 taskId) { PlaySE(SE_SELECT); RemoveUsedItem(); + ScheduleBgCopyTilemapToVram(2); if (!InBattlePyramid()) - DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_FadeAndCloseBagMenu); + gTasks[taskId].func = Task_FadeAndCloseBagMenu; else - DisplayItemMessageInBattlePyramid(taskId, gStringVar4, CloseBattlePyramidBag); + gTasks[taskId].func = CloseBattlePyramidBag; } } diff --git a/src/party_menu.c b/src/party_menu.c index dd46b1063..95d64e546 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4470,11 +4470,8 @@ void ItemUseCB_BattleScript(u8 taskId, TaskFunc task) gBattleStruct->itemPartyIndex[gBattlerInMenuId] = GetPartyIdFromBattleSlot(gPartyMenu.slotId); gPartyMenuUseExitCallback = TRUE; PlaySE(SE_SELECT); - CopyItemName(gSpecialVar_ItemId, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); - DisplayPartyMenuMessage(gStringVar4, TRUE); - ScheduleBgCopyTilemapToVram(2); RemoveBagItem(gSpecialVar_ItemId, 1); + ScheduleBgCopyTilemapToVram(2); gTasks[taskId].func = task; } } @@ -4943,9 +4940,6 @@ static void TryUseItemOnMove(u8 taskId) gChosenMovePos = ptr->data1; gPartyMenuUseExitCallback = TRUE; RemoveBagItem(gSpecialVar_ItemId, 1); - CopyItemName(gSpecialVar_ItemId, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); - DisplayPartyMenuMessage(gStringVar4, TRUE); ScheduleBgCopyTilemapToVram(2); gTasks[taskId].func = Task_ClosePartyMenuAfterText; } From d3a090020bb062d88c0c162bc62292e4debfcd95 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Sat, 15 Apr 2023 15:30:07 -0700 Subject: [PATCH 112/129] added code review --- data/battle_scripts_2.s | 1 - src/battle_message.c | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index 71d88ae84..9ffad7d84 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -255,4 +255,3 @@ BattleScript_TrainerBSlideMsgRet:: BattleScript_TrainerBSlideMsgEnd2:: call BattleScript_TrainerBSlideMsgRet end2 - end2 diff --git a/src/battle_message.c b/src/battle_message.c index 7d10b19f1..640e7900d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -465,7 +465,7 @@ const u8 *const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = [FLAVOR_SOUR] = sText_PokeblockWasTooSour }; -static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); +static const u8 sText_PlayerUsedItem[] = _("You used\n{B_LAST_ITEM}!"); static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); static const u8 sText_Trainer1UsedItem[] = _("{B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}\nused {B_LAST_ITEM}!"); static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); @@ -783,9 +783,9 @@ static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and\nis ready to fight again!"); -static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_LAST_ITEM} restored\n{B_BUFF1}'s health!"); -static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_LAST_ITEM} cured\n{B_BUFF1}'s status!"); -static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_LAST_ITEM} restored\n{B_BUFF1}'s PP!"); +static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_BUFF1} had its\nHP restored!"); +static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_BUFF1} had\nits status healed!"); +static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_BUFF1} had its\nPP restored!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { From 7d4807d956c391e480c2be39afbeb4117ba431da Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Sun, 16 Apr 2023 13:11:49 +0200 Subject: [PATCH 113/129] fix nightmare status only being healed in doubles this came up in a conversation on discord. its not tested. --- src/battle_script_commands.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d313697b0..dcfaf0da4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16506,10 +16506,11 @@ void BS_ItemCureStatus(void) { { gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); gBattlerTarget = BATTLE_PARTNER(gBattlerAttacker); - if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; } + if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); gBattlescriptCurrInstr = cmd->nextInstr; } From 73ba8264e0f6d9a4e98f9ef3ded2c527c3f6ab5d Mon Sep 17 00:00:00 2001 From: Jaizu Date: Sun, 16 Apr 2023 21:34:07 +0200 Subject: [PATCH 114/129] Fix Rare Candies --- src/party_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/party_menu.c b/src/party_menu.c index dd46b1063..a7ab30545 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4948,7 +4948,7 @@ static void TryUseItemOnMove(u8 taskId) DisplayPartyMenuMessage(gStringVar4, TRUE); ScheduleBgCopyTilemapToVram(2); gTasks[taskId].func = Task_ClosePartyMenuAfterText; - } + } } // Outside of battle, only PP items are used on moves. else @@ -5290,7 +5290,7 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task) if (sInitialLevel != MAX_LEVEL) { BufferMonStatsToTaskData(mon, arrayPtr); - cannotUseEffect = ExecuteTableBasedItemEffect(mon, gPartyMenu.slotId, *itemPtr, 0); + cannotUseEffect = ExecuteTableBasedItemEffect(mon, *itemPtr, gPartyMenu.slotId, 0); BufferMonStatsToTaskData(mon, &ptr->data[NUM_STATS]); } else From efd7465c12a2ab52335bb0a90f1c6325f5af1aba Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Mon, 17 Apr 2023 13:34:11 +0200 Subject: [PATCH 115/129] fix gBattleMons using party indices instead of battle indices --- src/battle_script_commands.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index dcfaf0da4..4e1494ce3 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16500,7 +16500,9 @@ void BS_ItemCureStatus(void) { // Heal Status2 conditions if battler is active. if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) - gBattleMons[gBattleStruct->itemPartyIndex[gBattlerAttacker]].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + { + gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + } else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) { From 0531ab5d87ecdc959a331535719fabe180cddd81 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 17 Apr 2023 18:47:54 +0200 Subject: [PATCH 116/129] Fix Ability PopUp freeze --- data/battle_scripts_1.s | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 4848b7322..91bc37f76 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5612,7 +5612,7 @@ BattleScript_EffectStockpileSpDef:: BattleScript_EffectStockpileEnd: stockpile 1 goto BattleScript_MoveEnd - + BattleScript_MoveEffectStockpileWoreOff:: .if B_STOCKPILE_RAISES_DEFS >= GEN_4 dostockpilestatchangeswearoff BS_ATTACKER, BattleScript_StockpileStatChangeDown @@ -5620,7 +5620,7 @@ BattleScript_MoveEffectStockpileWoreOff:: waitmessage B_WAIT_TIME_SHORT .endif return - + BattleScript_StockpileStatChangeDown: statbuffchange MOVE_EFFECT_AFFECTS_USER, BattleScript_StockpileStatChangeDown_Ret setgraphicalstatchangevalues @@ -6943,7 +6943,7 @@ BattleScript_MagicRoomEnds:: printstring STRINGID_MAGICROOMENDS waitmessage B_WAIT_TIME_LONG end2 - + BattleScript_GrassyTerrainEnds: setbyte cMULTISTRING_CHOOSER, B_MSG_TERRAINENDS_GRASS BattleScript_TerrainEnds_Ret:: @@ -6951,7 +6951,7 @@ BattleScript_TerrainEnds_Ret:: waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG return - + BattleScript_TerrainEnds:: call BattleScript_TerrainEnds_Ret end2 @@ -7496,7 +7496,7 @@ BattleScript_StealthRockFree:: printstring STRINGID_PKMNBLEWAWAYSTEALTHROCK waitmessage B_WAIT_TIME_LONG return - + BattleScript_SpikesDefog:: printstring STRINGID_SPIKESDISAPPEAREDFROMTEAM waitmessage B_WAIT_TIME_LONG @@ -9181,6 +9181,7 @@ BattleScript_WanderingSpiritActivates:: destroyabilitypopup pause 40 + copybyte gBattlerAbility, gBattlerAttacker setbyte sFIXED_ABILITY_POPUP, TRUE copyhword sABILITY_OVERWRITE, gLastUsedAbility showabilitypopup BS_ATTACKER From 60c88d8fccb0c0fa3b1a44273b7210f228412a26 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 17 Apr 2023 19:12:39 +0200 Subject: [PATCH 117/129] Update data/battle_scripts_1.s Co-authored-by: Eduardo Quezada D'Ottone --- data/battle_scripts_1.s | 1 - 1 file changed, 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 91bc37f76..0be893412 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9180,7 +9180,6 @@ BattleScript_WanderingSpiritActivates:: pause 20 destroyabilitypopup pause 40 - copybyte gBattlerAbility, gBattlerAttacker setbyte sFIXED_ABILITY_POPUP, TRUE copyhword sABILITY_OVERWRITE, gLastUsedAbility From 9d93af2261101aee307ca6cc82c4c04dec36ab74 Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Tue, 18 Apr 2023 16:28:02 -0400 Subject: [PATCH 118/129] Fixed Budew evolution method (#2928) --- src/data/pokemon/evolution.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h index 6ec3c0a14..f22214817 100644 --- a/src/data/pokemon/evolution.h +++ b/src/data/pokemon/evolution.h @@ -316,7 +316,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_KRICKETOT] = {{EVO_LEVEL, 10, SPECIES_KRICKETUNE}}, [SPECIES_SHINX] = {{EVO_LEVEL, 15, SPECIES_LUXIO}}, [SPECIES_LUXIO] = {{EVO_LEVEL, 30, SPECIES_LUXRAY}}, - [SPECIES_BUDEW] = {{EVO_FRIENDSHIP, 0, SPECIES_ROSELIA}}, + [SPECIES_BUDEW] = {{EVO_FRIENDSHIP_DAY, 0, SPECIES_ROSELIA}}, [SPECIES_CRANIDOS] = {{EVO_LEVEL, 30, SPECIES_RAMPARDOS}}, [SPECIES_SHIELDON] = {{EVO_LEVEL, 30, SPECIES_BASTIODON}}, [SPECIES_BURMY] = {{EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM}, From 76d0d8a94eeab0aa2e0943ab5581c31cb893462a Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 18 Apr 2023 23:02:51 +0200 Subject: [PATCH 119/129] Fix battle message strings for stats (#2927) * Fix battle message strings for stats --- include/config/battle.h | 4 ++-- src/battle_message.c | 12 ++++++------ src/pokemon.c | 4 ++-- test/ability_contrary.c | 18 +++++++++--------- test/ability_download.c | 12 ++++++------ test/ability_intimidate.c | 2 +- test/ability_magic_bounce.c | 6 +++--- test/ability_oblivious.c | 2 +- test/ability_speed_boost.c | 2 +- test/ability_volt_absorb.c | 2 +- test/item_effect_increase_stat.c | 2 +- test/move.c | 4 ++-- test/move_effect_attack_down.c | 2 +- test/move_effect_attack_up.c | 2 +- test/move_effect_attack_up_user_ally.c | 6 +++--- test/move_effect_defense_down.c | 2 +- test/move_effect_defense_up.c | 2 +- test/move_effect_defog.c | 4 ++-- test/move_effect_special_attack_down.c | 2 +- test/move_effect_special_attack_up_3.c | 2 +- test/move_effect_stockpile.c | 20 ++++++++++---------- test/status1.c | 4 ++-- test/terrain_electric.c | 2 +- test/terrain_grassy.c | 2 +- test/terrain_misty.c | 2 +- test/terrain_psychic.c | 2 +- 26 files changed, 62 insertions(+), 62 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 24f4ad4f1..ad3162162 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -98,7 +98,7 @@ #define B_HEALING_WISH_SWITCH GEN_LATEST // In Gen5+, the mon receiving Healing Wish is sent out at the end of the turn. // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon. #define B_DEFOG_CLEARS_TERRAIN GEN_LATEST // In Gen8+, Defog also clears active Terrain. -#define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp.Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. +#define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp. Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. // Ability settings #define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. @@ -183,7 +183,7 @@ // Other settings #define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. -#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, Wild Double Battles will default to Single Battles when the player only has 1 usuable Pokémon, ignoring B_DOUBLE_WILD_CHANCE and B_FLAG_FORCE_DOUBLE_WILD. +#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, Wild Double Battles will default to Single Battles when the player only has 1 usuable Pokémon, ignoring B_DOUBLE_WILD_CHANCE and B_FLAG_FORCE_DOUBLE_WILD. #define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight. #define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. #define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) diff --git a/src/battle_message.c b/src/battle_message.c index 7d10b19f1..7df30cb29 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -435,11 +435,11 @@ static const u8 sText_ExclamationMark3[] = _("!"); static const u8 sText_ExclamationMark4[] = _("!"); static const u8 sText_ExclamationMark5[] = _("!"); static const u8 sText_HP[] = _("HP"); -static const u8 sText_Attack[] = _("attack"); -static const u8 sText_Defense[] = _("defense"); -static const u8 sText_Speed[] = _("speed"); -static const u8 sText_SpAttack[] = _("sp. attack"); -static const u8 sText_SpDefense[] = _("sp. defense"); +static const u8 sText_Attack[] = _("Attack"); +static const u8 sText_Defense[] = _("Defense"); +static const u8 sText_Speed[] = _("Speed"); +static const u8 sText_SpAttack[] = _("Sp. Atk"); +static const u8 sText_SpDefense[] = _("Sp. Def"); static const u8 sText_Accuracy[] = _("accuracy"); static const u8 sText_Evasiveness[] = _("evasiveness"); @@ -555,7 +555,7 @@ static const u8 sText_VanishedInstantly[] =_("{B_ATK_NAME_WITH_PREFIX} vanished\ static const u8 sText_ProtectedTeam[] =_("{B_CURRENT_MOVE} protected\n{B_ATK_TEAM2} team!"); static const u8 sText_SharedItsGuard[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\nguard with the target!"); static const u8 sText_SharedItsPower[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\npower with the target!"); -static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which the\nDefense and Sp.Def stats are swapped!"); +static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which the\nDefense and Sp. Def stats are swapped!"); static const u8 sText_BecameNimble[] =_("{B_ATK_NAME_WITH_PREFIX} became nimble!"); static const u8 sText_HurledIntoTheAir[] =_("{B_DEF_NAME_WITH_PREFIX} was hurled\ninto the air!"); static const u8 sText_HeldItemsLoseEffects[] =_("It created a bizarre area in which\nPokémon's held items lose their effects!"); diff --git a/src/pokemon.c b/src/pokemon.c index d985ef95d..46eca90b2 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1919,7 +1919,7 @@ const struct SpindaSpot gSpindaSpotGraphics[] = #include "data/pokemon/item_effects.h" const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] = -{ // Attack Defense Speed Sp.Atk Sp.Def +{ // Attack Defense Speed Sp.Atk Sp. Def [NATURE_HARDY] = { 0, 0, 0, 0, 0 }, [NATURE_LONELY] = { +1, -1, 0, 0, 0 }, [NATURE_BRAVE] = { +1, 0, -1, 0, 0 }, @@ -6626,7 +6626,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s RtcCalcLocalTime(); if (gLocalTime.hours >= 0 && gLocalTime.hours < 12 && gEvolutionTable[species][i].param == evolutionItem) targetSpecies = gEvolutionTable[species][i].targetSpecies; - break; + break; } } break; diff --git a/test/ability_contrary.c b/test/ability_contrary.c index 7fd902280..33cfa7ce8 100644 --- a/test/ability_contrary.c +++ b/test/ability_contrary.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Contrary raises Attack when Intimidated", s16 damage) if (ability == ABILITY_CONTRARY) { ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's attack rose!"); + MESSAGE("Foe Spinda's Attack rose!"); } HP_BAR(player, captureDamage: &results[i].damage); } @@ -49,11 +49,11 @@ SINGLE_BATTLE_TEST("Contrary raises stats after using a move which would normall if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's sp. attack sharply rose!"); + MESSAGE("Foe Spinda's Sp. Atk sharply rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's sp. attack harshly fell!"); + MESSAGE("Foe Spinda's Sp. Atk harshly fell!"); } // MESSAGE("Foe Spinda used Overheat!"); @@ -61,11 +61,11 @@ SINGLE_BATTLE_TEST("Contrary raises stats after using a move which would normall if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's sp. attack sharply rose!"); + MESSAGE("Foe Spinda's Sp. Atk sharply rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's sp. attack harshly fell!"); + MESSAGE("Foe Spinda's Sp. Atk harshly fell!"); } } FINALLY { @@ -95,11 +95,11 @@ SINGLE_BATTLE_TEST("Contrary lowers a stat after using a move which would normal if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's attack harshly fell!"); + MESSAGE("Foe Spinda's Attack harshly fell!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's attack sharply rose!"); + MESSAGE("Foe Spinda's Attack sharply rose!"); } // MESSAGE("Foe Spinda used Tackle!"); @@ -127,11 +127,11 @@ SINGLE_BATTLE_TEST("Contrary raises a stat after using a move which would normal if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's attack rose!"); + MESSAGE("Foe Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's attack fell!"); + MESSAGE("Foe Spinda's Attack fell!"); } MESSAGE("Foe Spinda used Tackle!"); diff --git a/test/ability_download.c b/test/ability_download.c index 132c0eb5b..d83d90196 100644 --- a/test/ability_download.c +++ b/test/ability_download.c @@ -7,7 +7,7 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_TRI_ATTACK].split == SPLIT_SPECIAL); } -SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp.Def", s16 damage) +SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp. Def", s16 damage) { u32 ability; PARAMETRIZE { ability = ABILITY_TRACE; } @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp.Def", { ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Porygon's Download raised its attack!"); + MESSAGE("Foe Porygon's Download raised its Attack!"); } HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp.Def", } } -SINGLE_BATTLE_TEST("Download raises Sp.Attack if enemy has lower Sp.Def than Def", s16 damage) +SINGLE_BATTLE_TEST("Download raises Sp.Attack if enemy has lower Sp. Def than Def", s16 damage) { u32 ability; PARAMETRIZE { ability = ABILITY_TRACE; } @@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Download raises Sp.Attack if enemy has lower Sp.Def than Def { ABILITY_POPUP(player, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Porygon's Download raised its sp. attack!"); + MESSAGE("Porygon's Download raised its Sp. Atk!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -79,10 +79,10 @@ SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet { ABILITY_POPUP(player, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Porygon's Download raised its attack!"); + MESSAGE("Porygon's Download raised its Attack!"); ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Porygon2's Download raised its sp. attack!"); + MESSAGE("Foe Porygon2's Download raised its Sp. Atk!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damagePhysical); diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index a891f9af8..40804cbb1 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -104,7 +104,7 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; OPPONENT(SPECIES_HITMONTOP) { Moves(MOVE_TACKLE); }; } WHEN { - TURN { + TURN { MOVE(player, MOVE_QUICK_ATTACK); MOVE(opponent, MOVE_TACKLE); SEND_OUT(opponent, 1); diff --git a/test/ability_magic_bounce.c b/test/ability_magic_bounce.c index d52b93c4a..848f632ab 100644 --- a/test/ability_magic_bounce.c +++ b/test/ability_magic_bounce.c @@ -74,11 +74,11 @@ DOUBLE_BATTLE_TEST("Magic Bounce bounces back moves hitting both foes at two foe MESSAGE("Abra's Leer was bounced back by Foe Espeon's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Abra's defense fell!"); + MESSAGE("Abra's Defense fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Kadabra's defense fell!"); + MESSAGE("Kadabra's Defense fell!"); // Also check if second original target gets hit by Leer as this was once bugged ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wynaut's defense fell!"); + MESSAGE("Foe Wynaut's Defense fell!"); } } diff --git a/test/ability_oblivious.c b/test/ability_oblivious.c index 0708845ed..efe2901ec 100644 --- a/test/ability_oblivious.c +++ b/test/ability_oblivious.c @@ -63,6 +63,6 @@ SINGLE_BATTLE_TEST("Oblivious prevents Intimidate") ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ABILITY_POPUP(player, ABILITY_OBLIVIOUS); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } - MESSAGE("Slowpoke's attack was not lowered!"); + MESSAGE("Slowpoke's Attack was not lowered!"); } } diff --git a/test/ability_speed_boost.c b/test/ability_speed_boost.c index b3e128931..39219a5cc 100644 --- a/test/ability_speed_boost.c +++ b/test/ability_speed_boost.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("Speed Boost gradually boosts speed") +SINGLE_BATTLE_TEST("Speed Boost gradually boosts Speed") { GIVEN { PLAYER(SPECIES_TORCHIC) { Ability(ABILITY_SPEED_BOOST); Speed(99); }; diff --git a/test/ability_volt_absorb.c b/test/ability_volt_absorb.c index bef35e2b4..18902eaa2 100644 --- a/test/ability_volt_absorb.c +++ b/test/ability_volt_absorb.c @@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Volt Absorb prevents Cell Battery from activating") NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Using Cell Battery, the attack of Jolteon rose!"); + MESSAGE("Using Cell Battery, the Attack of Jolteon rose!"); } } diff --git a/test/item_effect_increase_stat.c b/test/item_effect_increase_stat.c index 70c89bdd4..b459e3ac8 100644 --- a/test/item_effect_increase_stat.c +++ b/test/item_effect_increase_stat.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("X-Attack sharply raises battler's attack stat", s16 damage) +SINGLE_BATTLE_TEST("X-Attack sharply raises battler's Attack stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } diff --git a/test/move.c b/test/move.c index 9ad336330..9e23c2bd0 100644 --- a/test/move.c +++ b/test/move.c @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Turn order is determined by priority") } } -SINGLE_BATTLE_TEST("Turn order is determined by speed if priority ties") +SINGLE_BATTLE_TEST("Turn order is determined by Speed if priority ties") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(2); } @@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Turn order is determined by speed if priority ties") } } -SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and speed tie") +SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie") { KNOWN_FAILING; // The algorithm is significantly biased. PASSES_RANDOMLY(1, 2); diff --git a/test/move_effect_attack_down.c b/test/move_effect_attack_down.c index 6333bbea1..0df14f701 100644 --- a/test/move_effect_attack_down.c +++ b/test/move_effect_attack_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Growl lowers Attack", s16 damage) if (lowerAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's attack fell!"); + MESSAGE("Foe Wobbuffet's Attack fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/move_effect_attack_up.c b/test/move_effect_attack_up.c index 7b57fa0d2..4978d03f9 100644 --- a/test/move_effect_attack_up.c +++ b/test/move_effect_attack_up.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Meditate raises Attack", s16 damage) if (raiseAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_MEDITATE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's attack rose!"); + MESSAGE("Wobbuffet's Attack rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); diff --git a/test/move_effect_attack_up_user_ally.c b/test/move_effect_attack_up_user_ally.c index e98df30d8..e920752de 100644 --- a/test/move_effect_attack_up_user_ally.c +++ b/test/move_effect_attack_up_user_ally.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Howl raises user's Attack", s16 damage) if (raiseAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_HOWL, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's attack rose!"); + MESSAGE("Wobbuffet's Attack rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -50,9 +50,9 @@ DOUBLE_BATTLE_TEST("Howl raises user's and partner's Attack", s16 damageLeft, s1 if (raiseAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_HOWL, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Wobbuffet's attack rose!"); + MESSAGE("Wobbuffet's Attack rose!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Wynaut's attack rose!"); + MESSAGE("Wynaut's Attack rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); HP_BAR(opponentLeft, captureDamage: &results[i].damageLeft); diff --git a/test/move_effect_defense_down.c b/test/move_effect_defense_down.c index 6e5a45e84..9ecd1c25f 100644 --- a/test/move_effect_defense_down.c +++ b/test/move_effect_defense_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Tail Whip lowers Defense", s16 damage) if (lowerDefense) { ANIMATION(ANIM_TYPE_MOVE, MOVE_TAIL_WHIP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's defense fell!"); + MESSAGE("Foe Wobbuffet's Defense fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); diff --git a/test/move_effect_defense_up.c b/test/move_effect_defense_up.c index 8db9a7f7e..492ce7bc9 100644 --- a/test/move_effect_defense_up.c +++ b/test/move_effect_defense_up.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Harden raises Defense", s16 damage) if (raiseDefense) { ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's defense rose!"); + MESSAGE("Wobbuffet's Defense rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/move_effect_defog.c b/test/move_effect_defog.c index e9e55d57f..751ddf60f 100644 --- a/test/move_effect_defog.c +++ b/test/move_effect_defog.c @@ -165,7 +165,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Wobbuffet's speed fell!"); + MESSAGE("Wobbuffet's Speed fell!"); } else { NONE_OF { @@ -173,7 +173,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Wobbuffet's speed fell!"); + MESSAGE("Wobbuffet's Speed fell!"); } } } diff --git a/test/move_effect_special_attack_down.c b/test/move_effect_special_attack_down.c index a20b8558e..0511692d4 100644 --- a/test/move_effect_special_attack_down.c +++ b/test/move_effect_special_attack_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Confide lowers Special Attack", s16 damage) if (lowerSpecialAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFIDE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's sp. attack fell!"); + MESSAGE("Foe Wobbuffet's Sp. Atk fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/move_effect_special_attack_up_3.c b/test/move_effect_special_attack_up_3.c index f7e7e11d1..ad53bedb9 100644 --- a/test/move_effect_special_attack_up_3.c +++ b/test/move_effect_special_attack_up_3.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Tail Glow drastically raises Special Attack", s16 damage) if (raiseSpecialAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_TAIL_GLOW, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's sp. attack drastically rose!"); + MESSAGE("Wobbuffet's Sp. Atk drastically rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, player); HP_BAR(opponent, captureDamage: &results[i].damage); diff --git a/test/move_effect_stockpile.c b/test/move_effect_stockpile.c index 0530355ef..bd0d3a113 100644 --- a/test/move_effect_stockpile.c +++ b/test/move_effect_stockpile.c @@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("Swallow heals HP depending on Stockpile's count", s16 hpHeal } } -SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp.Def", s16 dmgPyhsical, s16 dmgSpecial) +SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp. Def", s16 dmgPyhsical, s16 dmgSpecial) { u16 move; PARAMETRIZE {move = MOVE_STOCKPILE;} @@ -161,8 +161,8 @@ SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp.Def", s16 dmgPyhsica if (move == MOVE_STOCKPILE) { MESSAGE("Wobbuffet stockpiled 1!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's defense rose!"); - MESSAGE("Wobbuffet's sp. defense rose!"); + MESSAGE("Wobbuffet's Defense rose!"); + MESSAGE("Wobbuffet's Sp. Def rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp.Def", s16 dmgPyhsica } } -DOUBLE_BATTLE_TEST("Stockpile's Def and Sp.Def boost is lost after using Spit Up or Swallow", s16 dmgPyhsicalBefore, s16 dmgPhysicalAfter, s16 dmgSpecialBefore, s16 dmgSpecialAfter) +DOUBLE_BATTLE_TEST("Stockpile's Def and Sp. Def boost is lost after using Spit Up or Swallow", s16 dmgPyhsicalBefore, s16 dmgPhysicalAfter, s16 dmgSpecialBefore, s16 dmgSpecialAfter) { u8 count; u16 move; @@ -217,24 +217,24 @@ DOUBLE_BATTLE_TEST("Stockpile's Def and Sp.Def boost is lost after using Spit Up ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); if (count == 1) { - MESSAGE("Wobbuffet's defense fell!"); + MESSAGE("Wobbuffet's Defense fell!"); } else if (count == 2) { - MESSAGE("Wobbuffet's defense harshly fell!"); + MESSAGE("Wobbuffet's Defense harshly fell!"); } else { - MESSAGE("Wobbuffet's defense severely fell!"); + MESSAGE("Wobbuffet's Defense severely fell!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); if (count == 1) { - MESSAGE("Wobbuffet's sp. defense fell!"); + MESSAGE("Wobbuffet's Sp. Def fell!"); } else if (count == 2) { - MESSAGE("Wobbuffet's sp. defense harshly fell!"); + MESSAGE("Wobbuffet's Sp. Def harshly fell!"); } else { - MESSAGE("Wobbuffet's sp. defense severely fell!"); + MESSAGE("Wobbuffet's Sp. Def severely fell!"); } MESSAGE("Wobbuffet's stockpiled effect wore off!"); diff --git a/test/status1.c b/test/status1.c index f4d3c7d94..c244b9a60 100644 --- a/test/status1.c +++ b/test/status1.c @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Burn deals 1/16th damage per turn") } } -SINGLE_BATTLE_TEST("Burn reduces attack by 50%", s16 damage) +SINGLE_BATTLE_TEST("Burn reduces Attack by 50%", s16 damage) { bool32 burned; PARAMETRIZE { burned = FALSE; } @@ -113,7 +113,7 @@ SINGLE_BATTLE_TEST("Freeze is thawed by user's Flame Wheel") } } -SINGLE_BATTLE_TEST("Paralysis reduces speed by 50%") +SINGLE_BATTLE_TEST("Paralysis reduces Speed by 50%") { u16 playerSpeed; bool32 playerFirst; diff --git a/test/terrain_electric.c b/test/terrain_electric.c index b5608e661..bb397fdf9 100644 --- a/test/terrain_electric.c +++ b/test/terrain_electric.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Using Electric Seed, the defense of Wobbuffet rose!"); + MESSAGE("Using Electric Seed, the Defense of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Electr!"); } FINALLY { diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c index cf8304875..ae6e6d9e9 100644 --- a/test/terrain_grassy.c +++ b/test/terrain_grassy.c @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain activates Grassy Seed and Mimicry") TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Using Grassy Seed, the defense of Wobbuffet rose!"); + MESSAGE("Using Grassy Seed, the Defense of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Grass!"); } FINALLY { diff --git a/test/terrain_misty.c b/test/terrain_misty.c index dda5253f2..668b03699 100644 --- a/test/terrain_misty.c +++ b/test/terrain_misty.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") TURN { MOVE(player, MOVE_MISTY_TERRAIN); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Using Misty Seed, the sp. defense of Wobbuffet rose!"); + MESSAGE("Using Misty Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Fairy!"); } FINALLY { diff --git a/test/terrain_psychic.c b/test/terrain_psychic.c index eb5103f31..2cddef070 100644 --- a/test/terrain_psychic.c +++ b/test/terrain_psychic.c @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Using Psychic Seed, the sp. defense of Wobbuffet rose!"); + MESSAGE("Using Psychic Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Psychc!"); } FINALLY { From e6505bda4bc9ebb23573ac9703ab09261742c110 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Wed, 19 Apr 2023 01:49:42 +0200 Subject: [PATCH 120/129] Fix some sprites (#2926) * Fix hisuian typlosion * Fix mega metagross backsprite * Fix shiny Reuniclus * Fix Duosion mouth * Fix front mega metagross * Fix front Yanmega * Fix Electivire front sprite * Fix shiny duskull * Fix Hariyama sprite * Fix Shiny masquerain --- graphics/pokemon/duosion/anim_front.png | Bin 802 -> 738 bytes graphics/pokemon/duosion/normal.pal | 2 +- graphics/pokemon/duskull/anim_front.png | Bin 725 -> 737 bytes graphics/pokemon/duskull/back.png | Bin 562 -> 524 bytes graphics/pokemon/duskull/shiny.pal | 2 +- graphics/pokemon/electivire/anim_front.png | Bin 1898 -> 1908 bytes graphics/pokemon/electivire/normal.pal | 2 +- graphics/pokemon/hariyama/anim_front.png | Bin 1405 -> 1405 bytes graphics/pokemon/hariyama/normal.pal | 2 +- graphics/pokemon/masquerain/anim_front.png | Bin 1282 -> 1284 bytes graphics/pokemon/masquerain/normal.pal | 2 +- graphics/pokemon/metagross/mega/back.png | Bin 966 -> 897 bytes graphics/pokemon/metagross/mega/front.png | Bin 1366 -> 1311 bytes graphics/pokemon/reuniclus/anim_front.png | Bin 1176 -> 1210 bytes .../pokemon/typhlosion/hisuian/normal.pal | 2 +- graphics/pokemon/typhlosion/hisuian/pal.pal | 19 ------------------ graphics/pokemon/yanmega/anim_front.png | Bin 1210 -> 1103 bytes 17 files changed, 6 insertions(+), 25 deletions(-) delete mode 100755 graphics/pokemon/typhlosion/hisuian/pal.pal diff --git a/graphics/pokemon/duosion/anim_front.png b/graphics/pokemon/duosion/anim_front.png index e8c48d6c05fa3b8fd5dfcce88789aae67968b2a4..c265b42524e803d4fe8096c459643f42f4aa2114 100644 GIT binary patch delta 692 zcmV;l0!#g(2I2*f7#0Wv0001tU!Pb20004VQb$4nuFf3kks&63us}d?I5>dVpa1{> z00000005ZOL^l8c0$@o*K~!jg?U>n;gCGz^MUc)U|Np;3vtvMSH6>(N}lIW#2*oX0XzYYALMtTLfjM5 z^7##ndHxF~L_mlZz@b6HC|?L5z>;;D9^i&x;sA*BVc#F|5b_Mjjo|ZsyJ7gT)a!@> zIL|{Mq84yT$N=l+&jgzRRssmS5Y`|9tPG(2yg%W}HlGN8IKUBXT74S|ydes~?L%GY zJ(&SyHStjt<5m9Vo0J|VoVNbQDSrP=ECfsXGdYyZaq&Fe|=e;6>*e}VreeQ)g__kW-7*uO;o z`}U9P|H%GP{U6&uX73mF4+1XiA2E(g`$x3#(*99@z}Wr)cfPiNtbcG}{|MmH{=xpi z*#5!(!AbvNd++PN;GQ-e{U?dO1Nsk6;jI54V5tB20Q&l0^&g-abo3v!*Q(Rd>i>>) zFoyb{+6Qn;G_GTAAE5n*t*if%{zE{V)Lqnn_?`#60pIg@05~IN`VR#$-GA6t|6$dC as$Vt}u^^N#nQ>$Q0000I!7zqRe0000=*q&4Ew`VenmEfg*hAf@C4+b2!Zrt=G2Vb^Z_ zbeY+On1dO*=%mO~SeEDW%$@I|zRz zzy(N@DrF#rK&iami9H6Om4FOa5UW~CQ&Jv4W1a_|;MaE;V$0+=@a6Oy;#eDkDdEHE zgcE3G2xg%^c8FD>lqD7=aF1w>9RjN5N)XTuz=11~0z}Gmz}N{uQyuQWyaxiEPQG2$ z*kcBm5p;EXQ%!}PB;a_yDBW3LHiUlxN_9I|1T;K=tH2o$$ORy%)Diz((ScwAc*gng zywn^(%Y;DJCK~R65)hSr(__Bn0D5Jjy6>AYzu3tw{@B;A!vO47`O90b8y?6%%5cU@*3TN=>OyP4%C16XBqoon>`+k28xOQ>c zw&IR`W;0+a%}2CEmaYTXW*{>01~EjKIT>Goh%A$nk9fp?8ynC2w3heq1>LR?o~VjL zebQd>-F3_@5v!QJ9&A{3Uoj9V`G>j`dt}C7&{fF;B>zE@(`C&9)*eK<6_(*n>;Z6F z<)b|a;;+0IIJ8HnQ;-y0(aL}J;73B@UT}(KZ`#C)d%>1)C+fcw?7?UsME}tDD!Bto z&5DZG{37}X8lmWq=PK`c6JvnxcD@#R0A@oFkSE9U8v(f>?&u3HiU3LdpOv~QoPia0 z*QzFlp#DbF;=vxU>OZju)(_5sm%sL4$S*3)?E%+fvm9?za9)v)^yuidBg!J*W$df&|y91_xGwhXJ4S#`*_CW+jB24)X mBa!XhOvqbpsd7#0Wv0001tU!Pb20004VQb$4nuFf3kks&{SUr9tkRA_Ds;JOjc^&*QW(J8^^0`mcY?J#&{SrAxD{bs=h3#MB^h;q;D z%YBR%EGFQSUe40Nf(tC>3W0!CWb8!`Uyd^V;0l4_x}N>lH^NV_Y#~!JqIdl6Xj3xI z{^#clsRt#vU0(qZytDuTBnQ$%CItEI-68_b0r0K*2;fM6;Og>PSXP~)E|fOWgNv$O zZ5iS$7JSer15JQ%lvf=?Tt68=#N79v^~FKn8wif7a?!7TDF8r|eZ5N3y#RbXPHp=a z2~Zchb2x1v^azv9MOgX-(4Ry$8$jCm;{+S}P)4CayMDJ($jLOv6QgtWg0XjD8o(O@ zf}1XV?4whEI%?FYQKSC78u`J<58CpB!?UtIKhP%;XGC*;kX}^Vd#p7-*dAp0MR&>% zYF|lEWqy%K8>jpL)%PlN*!%Y+9rJ_D$1S0dE1=8|_MNyPNRP5?23+%px(BU9DDwlj zd=?GU*Z^gIfUtk&ai)*@GCzpl>x~x9`GNgTQTnuaKjjAvw=#_4k{<*M@d01Il|+>7@w^#@&k%`TMO^<1EYbzKR>WB zZt??TCV7(|SfAi;^8@>T$&nuvgpnVN8fB|ru;LwU7|-Y200000NkvXXu0mjflw~=5 delta 653 zcmV;80&@M~1=R(R7zqRe0000c#H5ELlz0jGlyxHHMv zJ-KG#*3bh&UDkp=KmjUc5C^vYf?=qMTMPL^+PorpO!n?f%i`@(O@I{PwmY1ey(76Z znT++1N?Z>2r*~%vZq5NdFV09ri@P(3uVOaXj}tL8#}slQ#Ft`8?7~+Wb$dpaKyC( zkcPb22_F%^8U?L)W)R}>RHFM@x3IS+#6A%-53%0pCqQe0dw4QF(wHg$i0iF>B7#;ysXPZ%_wJ;v0!exOc)PcNM)3lZ z_&e4u8Ua(@2vitv8(6(rRF@IMad_?kB@`L+ZX@|e=!$#!WB0fUxgZ3-^$ULteLaW+ z&pQ%oBV2_66LLBU3OFA_-Lb~{KWoen1Nk9xTQZm*qC^@*Fh4}(%dEIielUFj#e063 z_kU8A%*~EVyZlh~mu|ci_UD|s{4ghyp3Tbry;GMTtc_C&T&4!#@`LUBr=8L7+2)5v z=7O8V09<~kM9Pjz8^Gm<29c0004VQb$4nuFf3kkv=bf_;^?V000000H#zU zHUIztib+I4R9J=Wmd&<aiz#R_^$u9N)MelJ7@K%4k)!zV5S=d{LW+gW=S+C<} zCKJMyg2ma$OHByzns)qzxH(CEE6r`r@qv+4SFtyI-h@vOJoPgY@ z27oyL_$1Qwv4;r(<4hTVnFTZra1Rp#ng-?;=rBfq#tKP6pE|&40Qlv2mI^+>x*iNd zt1tD~0yppuz`tL;2U#C`&^81cfNE?Q<;j8y=p*nN(63>C?m?RaY&+=Rd|ObXWM;4s ztPNEI2KyP$X;uh`p`>`6zA)-w_xA>82U~{oJD^Ky^*l^Rfa+h~@z(fRX|`Tm4NXjW!R+VL2s$ zamJ5nkOmtv03k^$7Q{G;7PPBc(90WICTROfCJax<1^DW#;|HNU7!Dx>jer0E002ov JPDHLkV1hoL$4CGG delta 505 zcmV7$yV*00013M{Ml?0004VQb$4nuFf3k00004XF*Lt006O%3;baP zkuEQPXjo7H000000H#D0gFjQK~zY`<&;5c z!!Qs(GeYB9KL{Ta9c*GqEl2Tdj=e@&D+Lq~fow zRrQ{&?{~V{X6mYjgI;Hd4uFVx0MR2_+l&c+l12tlWMXVy05IdQBoF{-ss#(J=i^jJ zLFi1Jo*+Q4ZN|gb;V=`Yg3!c#T45LcDksX-KGi4UT2-0}n9J=IXm!a1jQbw>ACLjf z2w2s?8~{#Vx7QsS30%eiufyA`hXNG9sLR$IoxA#qI}gBB3UtQNx_fNchPz3JlZ$JA z=u!f$SpYgi{tv33<2Lv}Ro#ZaAJ4k)QUEc=Md0YtG0=5t<(GM4>+YHH|9N_Jaia zV?(zOcNp*P{fP6M780_6Zm#UPJvx?w3v37{28#t_p`Y%v1F={IQ>Pi4^r v3%i^2uv7D968z0nOd@`o+@t&NR#E%{b%xFx8N_#800000NkvXXu0mjfv=ZOe diff --git a/graphics/pokemon/duskull/shiny.pal b/graphics/pokemon/duskull/shiny.pal index 2c59d3ae1..16dc97f5a 100644 --- a/graphics/pokemon/duskull/shiny.pal +++ b/graphics/pokemon/duskull/shiny.pal @@ -14,6 +14,6 @@ JASC-PAL 248 232 176 248 120 88 152 40 72 -104 88 80 +248 120 88 0 0 0 0 0 0 diff --git a/graphics/pokemon/electivire/anim_front.png b/graphics/pokemon/electivire/anim_front.png index a5f05a7e8b9552604a2c1903e92628e449dac87e..9aae7e5b5c7ef8497b1c49c6a0b2321a0309b3ed 100644 GIT binary patch delta 1865 zcmV-P2e$a?4)hL?7#0Wv0001tU!Pb20004VQb$4nuFf3kks&O9SV%xyfXKkib1MiZ0Vb9a92S?A72r==_qiPS91 z-y5&jzcQ!S`}1Rj$y&s(&-i9iRBLWX_7sxoqtf9GhJ^F@yUOX8fwJaBM`CFRk6 zpm6X&5nvf)P9>4SV>uvP10*#Qd-o#daNLymhK+KtX0GPa2^Is6&Z^bwu>_KED(D@LAdiaQakYCJyD}Ua`gAV{y*B8d%;0Voc zB@ohk3LxeNz_K<7RDdwpw;1XwvP`pwnUYrei7Nmy&Y~_Uob!m1u{mAT6_2?Tm{Z1H zrW|b7zuShN5WXEqPzYVrXk$$-hz7|w@{A*=s1V<6{jU16b-9p|ZiQP{fTHFCU^6ud zlR5x51S5BU>q{t@S*G(Kupah^Z>HO7A;LoG63E;((F-- z6d;+;bvpH~_GlrJexlR&;tEG`AP}&3**v*VjxWuC2J&7ksdfjeDE!KX(3LpG5lUVxdw?N|Rs{ExI@C!0=_pJ9YSraz z$MW>5X#haj0jfFY2EdAO0l-K-F-toDVt``M-ej1SuI=^EB_LRJ(*XM}@AEF~msW~^ zP&2gU>GR+gW3f-^7xv9a1J?swaqdR4Q&?Sp;IXtmQ%H7rYfV2PYnq(TrOgrdlP2`VeuhkTP+QCG=Kv6eDLm6wq9Dvabm3Gk$y%%_Ya2o@A zSk&~T4375w&0_`-{DxKd{ozqJkY|G3-Lhu(-V!SNwciNu*~)(R(W}!5KwBBJdpmnL zBS*(C9k`;f7S{PK#`a&MApT446#TvNM*)gnnyqKNc+D3WY0~xE{~-uC_E1}5??)%g z7qzt?~PGetBAi8qHX;-&PBs@7(a+?sp~} z;675U;ncX|-dE~vSJyA&$@0$5C3-$To zEid|&mXA_t5Gax#>|_B*%SQs8D#tC2LM2{fLl7@;7{Ol#w?LA)gL}F@aRI^scpp|p zytfZsTS3*Xmh~nd9Q6x-ol;`sc2Q=jRn>gZFN`X|0ceOvg#Fc70n&b~^`nYB2!LWt z+p`^^mk-RGT_rMmg#M}n(>SSokPV>IAGD&8Z9}=ZwX)U~MSu^x{vZI757<$Lk_%Vn z=H9=W4_)g`dhQ6VneM5OnDnT(`T=EAaLH@?3E)XTfb*WS7K+(_e{0<72flr|k)YH1 zGyTBDSTx2|?65Zy2Y}uCW!DdanwWy1|0Q7RF}^+6pXGzaMMov#3POFnoZ1h*ln<7l zDG2?EnF5%Ca1C&+9vFOIwyxH&uuoI`NkO<%4;-L+I0d*<51ikvgm9-G=y;M4Zq)-r zc#;rq)B|_nK|;7FQ4jq4X9?j_J#ZiXmk^A^L_+unt&nm=yg7=+00000NkvXXu0mjf D)t`z) delta 1855 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 delta 1231 zcmV;=1Tg!A3W5rd7zqRe0000 zzl-BW6vri82wdH2*XeIg-X@LMNn)0`i89t7V4qZ^+>?ea7fe<-=kB;5(q3_ha}fvu zbJdY8Lbz)Z6~^5BQF(7>^xL+I%!0vws zdTR6mCg}le!e%F%7%>(e1<`AgD_LveE!asHzC#d_6j4*;9_{Pw4x4*{l} z5CUoH9s+EFzy%9yz^Vr5{eKqm+cbUA1uRqu&|O;DU73J$uLkHQ ztgL8exD5d~Qvg2zY||e(lRfy61XO<$s{(kNmOv2sRhI=YOiKWsm5(WYb!7zw47U>S z0|YLx2_6Ru*tn_z4J>e8jL$d^@w>HBzz-NtL(V)2_?*q+7_+UiOaNfrN`M0(kJ>0= z%yD39$v)c)7}R~NDn!gXLtrpxvm1|)$sbv^+2qEV&x165$$7**wI}NMFm`_%3P6V3 zbS}ACjNj;~(D9r+nLs?-h(B$Qsd&WvpqMMA)U^~~6UXsY0>&1#(_>5#$i!cSFgY0( z=uH%BncE2DSHxj4Lnvy#v+J)Mhmj9RTtfPog>mzRTT{k7`XKTF2_iOw=>^T#X$`f% zSxiN4&|pq{?v1I@1b%baV+wyIU{f|32c#ai;DxiGe*!&V-gDS@J)W#ZVhjYtKNq6= z9$Sfkl^9cj@w^j2+CP{~YCG&~UXv#v&b5EArMAOI*ic?d3;*CS2c;B=$s`-b*tL`7VE4e%2A0V8F zU2=EKKWKv?c1QdJDy3RG=^xsvZD@M{24O1w!|&iQIuLk_e4_k;^bZ|(0BvBM=cRvW zyA-LFU>%P82bBL!!#^|$IPTdiD*Z!Y51MVPvNxr?qdhxVPFh8lwZ|*%fko+oc~rn@ t>85>vL9hGl!QlF60|n9ZAMF2c{S9y!fv3C#-A@1j002ovPDHLkV1gfqJcs}Q diff --git a/graphics/pokemon/masquerain/normal.pal b/graphics/pokemon/masquerain/normal.pal index bd8d9c4c7..3d0291bad 100644 --- a/graphics/pokemon/masquerain/normal.pal +++ b/graphics/pokemon/masquerain/normal.pal @@ -14,6 +14,6 @@ JASC-PAL 136 32 72 136 160 200 192 200 224 -16 16 16 224 104 40 248 144 96 +16 16 16 diff --git a/graphics/pokemon/metagross/mega/back.png b/graphics/pokemon/metagross/mega/back.png index 00bfdd18181e129eb963e142b922ecec66bcb9bb..86c2b6e145655c2717d7ad305e9625253be03337 100644 GIT binary patch delta 828 zcmV-C1H=5r2Z0BW7#0Wv0001;w}I>c0004VQb$4nuFf3kkv=|u0{=-wK~z|U?U&tB z>o5$2W2siAA-wRjMqU?}-kYyH?^S^n0~Rg?i_n5==kEmxY

    siT0sTOUYnhTZ)g zuFrD^YhSJr0zB&Q{pOK*2q+pqMDS@BtpvjJ1>X_L!O%$s?F%o&_qcV>G?2V0Fx>Dx zFB1#{;)_$@x(mskDh9*@b6DV8UM4StH#2U5Z+JH_@sWdn?gD%}MWh2H=kTGR0@u7I zY6%=Rya%fQU-4+RLGZ|a5xC^XLelfejbLE56pzP7_@G!uK&?q_GTCWDUI@gB2^*wL` z$`dEt2>ok+33dAtKBp~qPUA*o+V|tryPa1@1?q*@*hEq;B>Jcd`~HdRqAC#QabdW9 z%L~nWa-Rx{e}0h7obbs2c;Lz>&elGf%TNHm>lW<7sRH5$9-g(zcgLZ{h-On9_>P44 zs(=&7_?b?eZ}PUCsi=>tE-{g@9RT_z%Pc@D6Dfq;8=5QPuEnhC`N*3NT;-t;JYDfQtc( z=`V*ZkLpo!6VGd00SRML_t(Y$K8}qYZE~j#y2T=^58UdOM-{E zA@yo@m<{$U^qej;hn(CF`+_~0SQz>-ltS5~gyb-vp$GA*egeOY&pQ(<*|eU;Hzb5S zzkUBbGfDp4=m_!tFLGBLH_hU4r2F!^;aEI>s$acvZXr0HJ)jd^ojJ!v5TEw-6Tg_x~z2-4?2k>5LZM4>8y*JZax7;0n zLHQK`3&7B+*Hh>XeH?C5@Lxqby?V2Pg@C+6D^Uv z)`U+>N>AHHjJZOM7osFpW-UD#$r>}70O&%Uw-V4>=;#1zj6mMf{f5Gfm>>XhH^Bkh zL%OU@%uw2k-2_h<(5Ao+Ljq}AEe=?J*OlH@utmOGp#y){p?l&IBrjSC1kE==M+M$< z*4{z79gd8c}Cw{Z-fX@dBs#IL(w=Y5ed2+dbiS>@) z0d(rIE=5n?1^xTj_z2*rQ6?untXoqhFE=u0{i`zbRRBhkE{5ExUJ+HeQ=3vu?!JH3 z`Z6{#qI`HDah@bvg{|wl^ktSY5NmX^Veiy?Au(!o%ID_P8)ZlLK$6JlH7r90*gEiJ z>oLsnv5Af^Cj!8Xfi-L$tf`8BKpeCa_88qBz}C{>TLAzyBm)Y~v7e}6Q$DfAN|BEE zi8v_Nu4sZKQpL}ev-w)j4r59_n<>`VPb-Bcs&MZH-1ID5^O^y%psEpc1Yp8|@GBvd z7W_}6altw_FzRMO?8y-W%BNLIy%`Rf)#m^{3hLjwG{yf)1U}QT3;qF6D2GXZ0l+QN z%ESsYg^Fh%$QEI?Jn0KTFqr_z(Bq8WHMfgOMBqF*7V$a&2o-uIGTas-O}D^*5J~b2 XR@sk%RP-X-00000NkvXXu0mjfiYlXX diff --git a/graphics/pokemon/metagross/mega/front.png b/graphics/pokemon/metagross/mega/front.png index 6ed2cfbebc30f33e2e42d8de98a8817ab2324de0..1ebb0470aad180f323818652db2c8c4356ba1cb2 100644 GIT binary patch delta 1245 zcmV<31S0#^3ZDv)7#0Wv0001;w}I>c0004VQb$4nuFf3kkv=|u1f5AlK~z|UomY#N zqdE*DHc2S7JOBT;SCSo|vxV8Y+0*S5kRm^0rm2`s)8tl)xlg}eHqV4seK-3(1%Pue zrP@+J(cFG`zLesAmTGhFgj!kfZ9g!S@_0b$x*iCN612e2>4?$@#I5Ue3Li0ljbPpcc6C)Vxh$Z#~ z0X^t%cr!^rPHO))vfGHK1SDMq(m+54SO<9GQPPr-0-7k3AQ=ED5r;t#0o?H}37!Iu z0@eL+q>2K6abPl=1=@GK7+9C>4L{jnU@|axc`qqkRxIr#X~9tXVk6vBUf$ti zFkA*lU1QaTjZO@OuC`Hk;HLBaSa=i!JDiJFk|P-8=u_b`q2-5!`-TYn+73LE@|ioO zUgptTy~iDr+qQv)+wK#YcQZg#_F1K^u5qafzv-P43z^vT)m8n~wm5eiAVDBiS!kkr!UC zS4$rT{OKfsaAo@~-k78ycu7Lr@eI5&Pm`D47I@<#LMrIOm}Dq=v}F7E)AO& z_6LD~5pQ?a4}wZt|A-+72t+K<#(Mt;2_$g)vO(bfWg@WoL580Qpi~mRJP7O$$k>FT z0FwY1uE8!JvkQ25f&1GR@p0mGGF%ckoo>oRKJLQ;<_<&9Ab|{*_%*6AD$f0IVN?$} zt>a9%!dIm!N=U`>WFD9)h|$=XfQkRhk5M0gsy|wa{gFCwAFeBn_O@xn!%J^NgzmCy zj6U8hl2;AJGLO?dIk}xDp}^8@aW;~`?YXy~!6uO`l58mZ5so9RxDIC7DTomiMQ8DY z3~H%Xvn$qdVy?)J65GrC?3hnE#Wh&kz)wo2?7n$~SHRc3Ar#01P!&7JfYL00000NkvXX Hu0mjfgeXUa delta 1300 zcmV+v1?&2s3f2mc7$yV*00013M{Ml?0004VQb$4nuFf3k00004XF*Lt006O%3;baP zkuE-e010qNS#tmY4#NNd4#NS*Z>VGd00gf|L_t(Y$90u4Z`(!`$Im3t*_4<_$s`_S zTCLN@y#o)1!Pt zJM`YU0lOE^hmRL^;(h(jZE4*S4GHT}el zX`zyBiNS2-bn`1`u>t07o+!BmSb9Erl;h{|ArYR|T1cs6`UzlK4`z8DMc*8fkRlL& zegazNOB^9^9z~-)AYqCXN(0nI?EJQah){EFfYWS281+zKDMby~oIN_-B?7qC{V19u z(2wT+csx#c29yvk6`LZEr~v{aUoOag=S5g7moW&yA_NbU!7d3iIMV$K$9WLrO}5X9 zVyr+x+Ow0rI7H4)l2q?Id43raPhS>)#qwGJ3!n#am?#9S43zf1&ZEc+wxS+Z?q>Z@{9$fC$(QdRVLK~baOXHhSG^T(?-~4RuINmM7etUuOG_veAoc& z>sEEc8Ko$3>-%YfrZhQ!!uM`_EW^YM!V~Iqr;S4B?@$5`4CV-3=Q6_#IGsRymN%Mm z%4yHe5*UwTH1+pGZB|r}g4qwm9ZhMEnuBM!HJ13u?dlmWISw0xxuebD?XzMz9s@q} z^sMD)NeaORxa+`I1zr|40HxHM2^=$CTiCt3y))EQ0yhF~0%xLs+WJ4?fkpVklGECYC;Cg|6R|icXOSpFP z=pmT5mPm(s4vkl1t0mQZ_A-yA_3hehI1ieWZearY@@ljJh>cn9%^BC7N$Y$RsLc{X z*B&+jHapKpltOdGZ0G2_yt?q=vlsSOj{c|x>dUWuB+v&wA>@BlE<$)GQ2?$P#e^fphs( z>$1QGpX%p-4MJ810ny765jD0Y;PG$<+;1#IBLRkR4!m`UUavoYh(GE#rRNkmM-_Xv zF-dwFa+0M=N#GLXcv1fp{M%7x2bFAz9>foj{*EdOjsw z�j#+!)A@7W6Y}tOcrA7tbCdSK(9DPb2O7mf%NdWxyZh-co!7zvGTO?)Vk)sr!bD z=iokn@bXD|z(+X`f6SofyJHcD{D0TwmUrPx1gm@BUdO*ZEA0(QUMnj1?rwJ2{}-RT zzMi=e?fCx_3F+wGQ`f$C7+Uwf+V`Q?1?;%@G$vpw&A4;#7w}sBgL^+tcDnd*?%s!A zm(Jb$_{&-);M~2B5cJLWKOk`Yse2z{5Q4scdmkn^ckh=J9Nqf`g1&nnCOCKR;{<2! zeRv(QFtqM{kU*`v8P~?We~U*XjbKv{9fP=gue@)6J5?9S1Viku_JF!~wvbT#?>Pn9 zfJ3$G3`J9j#l2@ANpvX`KhHDhkY>Gfb?+2|F}RNX2m{%q0$(=II)`#4VRi4hXwxZw zO374)NY2Cg6D_P@Ml3^`g4V;N*ms+vm4 zFq(GJbMHErM1-0hPw-RUy&E;v<8eB}zX_uz8ayrUxZ^*FzbM@@PabE3pO_JEN->{UI$d3wwWN2YnmJ<@DA1Rsr}OYcdDSn{XBVV%NjqVVx=A zBYnBZ0XYER@};LvSe^uh4|jKb9|#;Syjv9_NDgeWO^;M0#|5yUz$KC0^*FZKCLLUC z?$3QCW-9|+1E3DQU9aDpx2`#{4SReF#o{^#W*R`q>EhwfdlFaXj05I>|KxuQEKLvv zK*$5{Vzc>MT|H>Ddbe?ydOoD`jZ=xjE;d}R#C8_8Fx{*>u-mEs5=pLwUZd*_Z; z!JLcqQ zw$Q`LXn8tiJY>#+Az4o(G97=*rSuNGm!(G}aFCOM=iB#P13W@CEL2{&K?8ush-a~c ze`@GV3rufhG8+3w05nFrlJf-B&=?_iarr};&^cejLG6%A z%QHl&99=i}6x9#;05}rg8hasrL40QY)n4sOn%CH|J8K>5$kObP>K>ZtlJ#qilkd+Of^RMh{7hpm75Hv@a>-w0IHzZux6f8$A^R!a460@|7azfk|0^16MEr|fh} z8tSi2RduU?c@)gQ^`PzPc&0pmpXd{wcyDCS7neB5F(!>YAFc|r+u+eW&DCEI0_o!? zVJS~so$2hmk3D#aa`m6$gD2nRVYQQ2juyXW8GA;SNsOAD58;0*98Uuub7|K}9# z(`6Js_ttkyGfyh&a5H@y_5Ue0>I;c~`;fgy`McUEwn@p%H_Uu??bd96a8W3BRsAtg zVqPp}cCr13u)9E6TuibXZoaws2CY@qpAqIo(}QmD_rN@@s6S|Jn^f1Ur=)fF$l9y@ a5B4vEDudj3#^-_n0000c>cDC*N5CWoahT(}n62_P>_2c*zg7o7T2+IE} zf~Z%-M}R!K`IMjl7IzbjuAV&*Y==6JSO7|Jjq671+5K$crD0!StyCjk2k>#_oTs?hgS0z2}5QoY1_ zYa0mGfTdx7aY52X+VcjudMKl}q`-iYs=%9I^l>Dd1q3gAo{d>&iEi`D^{L$El-ja z`_CN+`mGa6Qz}13R_(u21jPk_4Wcx{{Du90XRR*K86kbioQL;U_Fu>6Zca6ebsqlO z{wpDBH|;_``tZ*FGa~np4~VV1M$f=+>^~D^x8$mw^wQzFvj6J-o$8N$Y;$bRUD$s% z^|ZJ16pnptv+wO)*?+aZ6D5?jd%~_gcV++A_5q^J8DF%q<(c|y|F!#}?Sr*_YizA* zi>-hc`>&k?E`(UujZo<;<_5yv{_DYnyY9i-L$3DW*G5mV|7!lzv6m)@dSCNwEb8X} zx-VJ?*`xC5+GpN#Yw=I@eBAsJp9Fzzs~>w002ovPDHLk FV1gu;{`vp_ delta 1143 zcmV--1c>|32)YT77zqRe0000yDJS*qr3ALvX)l%6p}dF*x?(TWV34sRBe{yfq$0i-Q!k%Jws0D$snL%2L|9Rtwfs%SjKZ`|gDitw1&OXONf zl2$me@jhV0X5#;#b}(s4z$>t0hf?A9wDynO$@}R5Z}@b z{)_4^|M(CpO%`lpjC((lTjT<$HjjVfyfWJo5X~cqO%A-*?Cmb(F>wKSJjWQ;Pvk%x z9FZg4^!lCydE={v7)mkqBc1i5?lp{S?eqsLxh=Rq=>Ji7jzzJgJZ;^fr~R`TvbXJVgEmpRE|KWe-Y5&js zckH8IT$%=Qk6!elhG^?d4P2e3*4S=P$e(r4R&?2;^x}~vMnL6JFx=ij1v_$S#UzVB z`9c1}!8cbn${l+|bt(eT3-)yL(Sw5JDnO(Fxmbh^BDGVLP4dhn)*?VVb`(V&wQNYT zX`5tmpE8ke5AB~j#X|f;8Zdti>A-R^-Qn9aiEev~0F~}qZX?c#ZkhIC2TwQFWcQfo zv_*!*OV7ZgeSX!}Eze3nPScoPkx0Fq2IL7Kx9l@j@VMhzYquqtdSR3rVO;ldqrI;% z&l7#4cpbnWV9jTYEd$o>V|)|xaLEdMh_C(doIP(t?TZm5jI6K?uM>YhP^Zw|<>$=}tx`d@4BHStUj zgf*uJ%kIwvR%d!3E_td4OKPeI*}&p^ep;966Fm^e)!t8IJzyfD+QZI74tv1E=bIG1r3o(#P=Loawo>~fWa@J|nsIXkG7=788R;JB4rmLH9R Date: Wed, 19 Apr 2023 01:52:20 +0200 Subject: [PATCH 121/129] Reusable TMs (#2903) * Reusable TMs * Forgot about Gen9 making TMs expendable again * Change importance check based on Alex's suggestion * Prevent items with importance from being bought more than once * Change importance check to ghoul's suggestion * Update include/config/item.h Co-authored-by: Eduardo Quezada D'Ottone --------- Co-authored-by: Eduardo Quezada D'Ottone --- include/config/item.h | 3 ++ include/strings.h | 2 + src/data/items.h | 100 ++++++++++++++++++++++++++++++++++++++++++ src/party_menu.c | 2 +- src/shop.c | 22 ++++++++-- src/strings.c | 2 + 6 files changed, 126 insertions(+), 5 deletions(-) diff --git a/include/config/item.h b/include/config/item.h index 031af3724..f707b7a54 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -9,6 +9,9 @@ #define I_SITRUS_BERRY_HEAL GEN_LATEST // In Gen4+, Sitrus Berry was changed from healing 30 HP to healing 25% of Max HP. #define I_VITAMIN_EV_CAP GEN_LATEST // In Gen8, the Vitamins no longer have a cap of 100 EV per stat. +// TM config +#define I_REUSABLE_TMS FALSE // In Gen5-8, TMs are reusable. Setting this to TRUE will make all vanilla TMs reusable, though they can also be cherry-picked by setting their importance to 1. + // Repel/Lure config // These two settings are both independent and complementary. #define VAR_LAST_REPEL_LURE_USED 0 // If this var has been assigned, last Repel/Lure used will be saved and the player will get prompted with the vanilla repel YES/NO option, unless I_REPEL_LURE_MENU is set to TRUE. diff --git a/include/strings.h b/include/strings.h index 959bb8c22..f17d509e8 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1025,6 +1025,8 @@ extern const u8 gText_ThrowInPremierBall[]; extern const u8 gText_ShopBuy[]; extern const u8 gText_ShopSell[]; extern const u8 gText_ShopQuit[]; +extern const u8 gText_SoldOut[]; +extern const u8 gText_SoldOut2[]; extern const u8 gText_OhABite[]; extern const u8 gText_PokemonOnHook[]; diff --git a/src/data/items.h b/src/data/items.h index fc99e1037..84436be55 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -7728,6 +7728,7 @@ const struct Item gItems[] = .itemId = ITEM_TM01_FOCUS_PUNCH, .price = 3000, .description = sTM01Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7739,6 +7740,7 @@ const struct Item gItems[] = .itemId = ITEM_TM02_DRAGON_CLAW, .price = 3000, .description = sTM02Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7750,6 +7752,7 @@ const struct Item gItems[] = .itemId = ITEM_TM03_WATER_PULSE, .price = 3000, .description = sTM03Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7761,6 +7764,7 @@ const struct Item gItems[] = .itemId = ITEM_TM04_CALM_MIND, .price = 3000, .description = sTM04Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7772,6 +7776,7 @@ const struct Item gItems[] = .itemId = ITEM_TM05_ROAR, .price = 1000, .description = sTM05Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7783,6 +7788,7 @@ const struct Item gItems[] = .itemId = ITEM_TM06_TOXIC, .price = 3000, .description = sTM06Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7794,6 +7800,7 @@ const struct Item gItems[] = .itemId = ITEM_TM07_HAIL, .price = 3000, .description = sTM07Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7805,6 +7812,7 @@ const struct Item gItems[] = .itemId = ITEM_TM08_BULK_UP, .price = 3000, .description = sTM08Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7816,6 +7824,7 @@ const struct Item gItems[] = .itemId = ITEM_TM09_BULLET_SEED, .price = 3000, .description = sTM09Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7827,6 +7836,7 @@ const struct Item gItems[] = .itemId = ITEM_TM10_HIDDEN_POWER, .price = 3000, .description = sTM10Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7838,6 +7848,7 @@ const struct Item gItems[] = .itemId = ITEM_TM11_SUNNY_DAY, .price = 2000, .description = sTM11Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7849,6 +7860,7 @@ const struct Item gItems[] = .itemId = ITEM_TM12_TAUNT, .price = 3000, .description = sTM12Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7860,6 +7872,7 @@ const struct Item gItems[] = .itemId = ITEM_TM13_ICE_BEAM, .price = 3000, .description = sTM13Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7871,6 +7884,7 @@ const struct Item gItems[] = .itemId = ITEM_TM14_BLIZZARD, .price = 5500, .description = sTM14Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7882,6 +7896,7 @@ const struct Item gItems[] = .itemId = ITEM_TM15_HYPER_BEAM, .price = 7500, .description = sTM15Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7893,6 +7908,7 @@ const struct Item gItems[] = .itemId = ITEM_TM16_LIGHT_SCREEN, .price = 3000, .description = sTM16Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7904,6 +7920,7 @@ const struct Item gItems[] = .itemId = ITEM_TM17_PROTECT, .price = 3000, .description = sTM17Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7915,6 +7932,7 @@ const struct Item gItems[] = .itemId = ITEM_TM18_RAIN_DANCE, .price = 2000, .description = sTM18Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7926,6 +7944,7 @@ const struct Item gItems[] = .itemId = ITEM_TM19_GIGA_DRAIN, .price = 3000, .description = sTM19Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7937,6 +7956,7 @@ const struct Item gItems[] = .itemId = ITEM_TM20_SAFEGUARD, .price = 3000, .description = sTM20Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7948,6 +7968,7 @@ const struct Item gItems[] = .itemId = ITEM_TM21_FRUSTRATION, .price = 1000, .description = sTM21Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7959,6 +7980,7 @@ const struct Item gItems[] = .itemId = ITEM_TM22_SOLAR_BEAM, .price = 3000, .description = sTM22Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7970,6 +7992,7 @@ const struct Item gItems[] = .itemId = ITEM_TM23_IRON_TAIL, .price = 3000, .description = sTM23Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7981,6 +8004,7 @@ const struct Item gItems[] = .itemId = ITEM_TM24_THUNDERBOLT, .price = 3000, .description = sTM24Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7992,6 +8016,7 @@ const struct Item gItems[] = .itemId = ITEM_TM25_THUNDER, .price = 5500, .description = sTM25Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8003,6 +8028,7 @@ const struct Item gItems[] = .itemId = ITEM_TM26_EARTHQUAKE, .price = 3000, .description = sTM26Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8014,6 +8040,7 @@ const struct Item gItems[] = .itemId = ITEM_TM27_RETURN, .price = 1000, .description = sTM27Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8025,6 +8052,7 @@ const struct Item gItems[] = .itemId = ITEM_TM28_DIG, .price = 2000, .description = sTM28Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8036,6 +8064,7 @@ const struct Item gItems[] = .itemId = ITEM_TM29_PSYCHIC, .price = 2000, .description = sTM29Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8047,6 +8076,7 @@ const struct Item gItems[] = .itemId = ITEM_TM30_SHADOW_BALL, .price = 3000, .description = sTM30Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8058,6 +8088,7 @@ const struct Item gItems[] = .itemId = ITEM_TM31_BRICK_BREAK, .price = 3000, .description = sTM31Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8069,6 +8100,7 @@ const struct Item gItems[] = .itemId = ITEM_TM32_DOUBLE_TEAM, .price = 2000, .description = sTM32Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8080,6 +8112,7 @@ const struct Item gItems[] = .itemId = ITEM_TM33_REFLECT, .price = 3000, .description = sTM33Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8091,6 +8124,7 @@ const struct Item gItems[] = .itemId = ITEM_TM34_SHOCK_WAVE, .price = 3000, .description = sTM34Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8102,6 +8136,7 @@ const struct Item gItems[] = .itemId = ITEM_TM35_FLAMETHROWER, .price = 3000, .description = sTM35Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8113,6 +8148,7 @@ const struct Item gItems[] = .itemId = ITEM_TM36_SLUDGE_BOMB, .price = 1000, .description = sTM36Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8124,6 +8160,7 @@ const struct Item gItems[] = .itemId = ITEM_TM37_SANDSTORM, .price = 2000, .description = sTM37Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8135,6 +8172,7 @@ const struct Item gItems[] = .itemId = ITEM_TM38_FIRE_BLAST, .price = 5500, .description = sTM38Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8146,6 +8184,7 @@ const struct Item gItems[] = .itemId = ITEM_TM39_ROCK_TOMB, .price = 3000, .description = sTM39Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8157,6 +8196,7 @@ const struct Item gItems[] = .itemId = ITEM_TM40_AERIAL_ACE, .price = 3000, .description = sTM40Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8168,6 +8208,7 @@ const struct Item gItems[] = .itemId = ITEM_TM41_TORMENT, .price = 3000, .description = sTM41Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8179,6 +8220,7 @@ const struct Item gItems[] = .itemId = ITEM_TM42_FACADE, .price = 3000, .description = sTM42Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8190,6 +8232,7 @@ const struct Item gItems[] = .itemId = ITEM_TM43_SECRET_POWER, .price = 3000, .description = sTM43Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8201,6 +8244,7 @@ const struct Item gItems[] = .itemId = ITEM_TM44_REST, .price = 3000, .description = sTM44Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8212,6 +8256,7 @@ const struct Item gItems[] = .itemId = ITEM_TM45_ATTRACT, .price = 3000, .description = sTM45Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8223,6 +8268,7 @@ const struct Item gItems[] = .itemId = ITEM_TM46_THIEF, .price = 3000, .description = sTM46Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8234,6 +8280,7 @@ const struct Item gItems[] = .itemId = ITEM_TM47_STEEL_WING, .price = 3000, .description = sTM47Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8245,6 +8292,7 @@ const struct Item gItems[] = .itemId = ITEM_TM48_SKILL_SWAP, .price = 3000, .description = sTM48Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8256,6 +8304,7 @@ const struct Item gItems[] = .itemId = ITEM_TM49_SNATCH, .price = 3000, .description = sTM49Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8267,6 +8316,7 @@ const struct Item gItems[] = .itemId = ITEM_TM50_OVERHEAT, .price = 3000, .description = sTM50Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8278,6 +8328,7 @@ const struct Item gItems[] = .itemId = ITEM_TM51, .price = 3000, .description = sTM51Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8289,6 +8340,7 @@ const struct Item gItems[] = .itemId = ITEM_TM52, .price = 3000, .description = sTM52Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8300,6 +8352,7 @@ const struct Item gItems[] = .itemId = ITEM_TM53, .price = 3000, .description = sTM53Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8311,6 +8364,7 @@ const struct Item gItems[] = .itemId = ITEM_TM54, .price = 3000, .description = sTM54Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8322,6 +8376,7 @@ const struct Item gItems[] = .itemId = ITEM_TM55, .price = 3000, .description = sTM55Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8333,6 +8388,7 @@ const struct Item gItems[] = .itemId = ITEM_TM56, .price = 3000, .description = sTM56Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8344,6 +8400,7 @@ const struct Item gItems[] = .itemId = ITEM_TM57, .price = 3000, .description = sTM57Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8355,6 +8412,7 @@ const struct Item gItems[] = .itemId = ITEM_TM58, .price = 3000, .description = sTM58Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8366,6 +8424,7 @@ const struct Item gItems[] = .itemId = ITEM_TM59, .price = 3000, .description = sTM59Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8377,6 +8436,7 @@ const struct Item gItems[] = .itemId = ITEM_TM60, .price = 3000, .description = sTM60Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8388,6 +8448,7 @@ const struct Item gItems[] = .itemId = ITEM_TM61, .price = 3000, .description = sTM61Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8399,6 +8460,7 @@ const struct Item gItems[] = .itemId = ITEM_TM62, .price = 3000, .description = sTM62Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8410,6 +8472,7 @@ const struct Item gItems[] = .itemId = ITEM_TM63, .price = 3000, .description = sTM63Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8421,6 +8484,7 @@ const struct Item gItems[] = .itemId = ITEM_TM64, .price = 3000, .description = sTM64Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8432,6 +8496,7 @@ const struct Item gItems[] = .itemId = ITEM_TM65, .price = 3000, .description = sTM65Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8443,6 +8508,7 @@ const struct Item gItems[] = .itemId = ITEM_TM66, .price = 3000, .description = sTM66Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8454,6 +8520,7 @@ const struct Item gItems[] = .itemId = ITEM_TM67, .price = 3000, .description = sTM67Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8465,6 +8532,7 @@ const struct Item gItems[] = .itemId = ITEM_TM68, .price = 3000, .description = sTM68Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8476,6 +8544,7 @@ const struct Item gItems[] = .itemId = ITEM_TM69, .price = 3000, .description = sTM69Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8487,6 +8556,7 @@ const struct Item gItems[] = .itemId = ITEM_TM70, .price = 3000, .description = sTM70Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8498,6 +8568,7 @@ const struct Item gItems[] = .itemId = ITEM_TM71, .price = 3000, .description = sTM71Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8509,6 +8580,7 @@ const struct Item gItems[] = .itemId = ITEM_TM72, .price = 3000, .description = sTM72Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8520,6 +8592,7 @@ const struct Item gItems[] = .itemId = ITEM_TM73, .price = 3000, .description = sTM73Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8531,6 +8604,7 @@ const struct Item gItems[] = .itemId = ITEM_TM74, .price = 3000, .description = sTM74Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8542,6 +8616,7 @@ const struct Item gItems[] = .itemId = ITEM_TM75, .price = 3000, .description = sTM75Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8553,6 +8628,7 @@ const struct Item gItems[] = .itemId = ITEM_TM76, .price = 3000, .description = sTM76Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8564,6 +8640,7 @@ const struct Item gItems[] = .itemId = ITEM_TM77, .price = 3000, .description = sTM77Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8575,6 +8652,7 @@ const struct Item gItems[] = .itemId = ITEM_TM78, .price = 3000, .description = sTM78Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8586,6 +8664,7 @@ const struct Item gItems[] = .itemId = ITEM_TM79, .price = 3000, .description = sTM79Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8597,6 +8676,7 @@ const struct Item gItems[] = .itemId = ITEM_TM80, .price = 3000, .description = sTM80Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8608,6 +8688,7 @@ const struct Item gItems[] = .itemId = ITEM_TM81, .price = 3000, .description = sTM81Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8619,6 +8700,7 @@ const struct Item gItems[] = .itemId = ITEM_TM82, .price = 3000, .description = sTM82Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8630,6 +8712,7 @@ const struct Item gItems[] = .itemId = ITEM_TM83, .price = 3000, .description = sTM83Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8641,6 +8724,7 @@ const struct Item gItems[] = .itemId = ITEM_TM84, .price = 3000, .description = sTM84Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8652,6 +8736,7 @@ const struct Item gItems[] = .itemId = ITEM_TM85, .price = 3000, .description = sTM85Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8663,6 +8748,7 @@ const struct Item gItems[] = .itemId = ITEM_TM86, .price = 3000, .description = sTM86Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8674,6 +8760,7 @@ const struct Item gItems[] = .itemId = ITEM_TM87, .price = 3000, .description = sTM87Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8685,6 +8772,7 @@ const struct Item gItems[] = .itemId = ITEM_TM88, .price = 3000, .description = sTM88Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8696,6 +8784,7 @@ const struct Item gItems[] = .itemId = ITEM_TM89, .price = 3000, .description = sTM89Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8707,6 +8796,7 @@ const struct Item gItems[] = .itemId = ITEM_TM90, .price = 3000, .description = sTM90Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8718,6 +8808,7 @@ const struct Item gItems[] = .itemId = ITEM_TM91, .price = 3000, .description = sTM91Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8729,6 +8820,7 @@ const struct Item gItems[] = .itemId = ITEM_TM92, .price = 3000, .description = sTM92Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8740,6 +8832,7 @@ const struct Item gItems[] = .itemId = ITEM_TM93, .price = 3000, .description = sTM93Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8751,6 +8844,7 @@ const struct Item gItems[] = .itemId = ITEM_TM94, .price = 3000, .description = sTM94Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8762,6 +8856,7 @@ const struct Item gItems[] = .itemId = ITEM_TM95, .price = 3000, .description = sTM95Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8773,6 +8868,7 @@ const struct Item gItems[] = .itemId = ITEM_TM96, .price = 3000, .description = sTM96Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8784,6 +8880,7 @@ const struct Item gItems[] = .itemId = ITEM_TM97, .price = 3000, .description = sTM97Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8795,6 +8892,7 @@ const struct Item gItems[] = .itemId = ITEM_TM98, .price = 3000, .description = sTM98Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8806,6 +8904,7 @@ const struct Item gItems[] = .itemId = ITEM_TM99, .price = 3000, .description = sTM99Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8817,6 +8916,7 @@ const struct Item gItems[] = .itemId = ITEM_TM100, .price = 3000, .description = sTM100Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, diff --git a/src/party_menu.c b/src/party_menu.c index a7ab30545..3cc3efdcd 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5090,7 +5090,7 @@ static void Task_LearnedMove(u8 taskId) if (move[1] == 0) { AdjustFriendship(mon, FRIENDSHIP_EVENT_LEARN_TMHM); - if (item < ITEM_HM01_CUT) + if (!ItemId_GetImportance(item)) RemoveBagItem(item, 1); } GetMonNickname(mon, gStringVar1); diff --git a/src/shop.c b/src/shop.c index 8fea1e117..6f4e09356 100644 --- a/src/shop.c +++ b/src/shop.c @@ -639,7 +639,10 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y) 5); } - StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); + if (ItemId_GetImportance(itemId) && (CheckBagHasItem(itemId, 1) || CheckPCHasItem(itemId, 1))) + StringCopy(gStringVar4, gText_SoldOut2); + else + StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); x = GetStringRightAlignXOffset(FONT_NARROW, gStringVar4, 120); AddTextPrinterParameterized4(windowId, FONT_NARROW, x, y, 0, 0, sShopBuyMenuTextColors[COLORID_ITEM_LIST], TEXT_SKIP_DRAW, gStringVar4); } @@ -989,7 +992,9 @@ static void Task_BuyMenu(u8 taskId) else sShopData->totalCost = gDecorations[itemId].price; - if (!IsEnoughMoney(&gSaveBlock1Ptr->money, sShopData->totalCost)) + if (ItemId_GetImportance(itemId) && (CheckBagHasItem(itemId, 1) || CheckPCHasItem(itemId, 1))) + BuyMenuDisplayMessage(taskId, gText_SoldOut, BuyMenuReturnToItemList); + else if (!IsEnoughMoney(&gSaveBlock1Ptr->money, sShopData->totalCost)) { BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList); } @@ -998,7 +1003,15 @@ static void Task_BuyMenu(u8 taskId) if (sMartInfo.martType == MART_TYPE_NORMAL) { CopyItemName(itemId, gStringVar1); - if (ItemId_GetPocket(itemId) == POCKET_TM_HM) + if (ItemId_GetImportance(itemId)) + { + ConvertIntToDecimalStringN(gStringVar2, sShopData->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6); + StringExpandPlaceholders(gStringVar4, gText_YouWantedVar1ThatllBeVar2); + tItemCount = 1; + sShopData->totalCost = (ItemId_GetPrice(tItemId) >> IsPokeNewsActive(POKENEWS_SLATEPORT)) * tItemCount; + BuyMenuDisplayMessage(taskId, gStringVar4, BuyMenuConfirmPurchase); + } + else if (ItemId_GetPocket(itemId) == POCKET_TM_HM) { StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(itemId)]); BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany2, Task_BuyHowManyDialogueInit); @@ -1103,8 +1116,8 @@ static void BuyMenuTryMakePurchase(u8 taskId) { if (AddBagItem(tItemId, tItemCount) == TRUE) { - BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney); RecordItemPurchase(taskId); + BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney); } else { @@ -1170,6 +1183,7 @@ static void BuyMenuReturnToItemList(u8 taskId) s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrameToTransparent(WIN_MESSAGE, FALSE); + RedrawListMenu(tListTaskId); BuyMenuPrintCursor(tListTaskId, COLORID_ITEM_LIST); PutWindowTilemap(WIN_ITEM_LIST); PutWindowTilemap(WIN_ITEM_DESCRIPTION); diff --git a/src/strings.c b/src/strings.c index 847b2849a..dd632a32b 100644 --- a/src/strings.c +++ b/src/strings.c @@ -341,6 +341,8 @@ const u8 gText_Var1DisdainfullyAteVar2[] = _("{STR_VAR_1} disdainfully ate the\n const u8 gText_ShopBuy[] = _("BUY"); const u8 gText_ShopSell[] = _("SELL"); const u8 gText_ShopQuit[] = _("QUIT"); +const u8 gText_SoldOut[] = _("I'm sorry, but that item is sold out.\p"); +const u8 gText_SoldOut2[] = _("SOLD OUT"); const u8 gText_InBagVar1[] = _("IN BAG: {STR_VAR_1}"); const u8 gText_QuitShopping[] = _("Quit shopping."); const u8 gText_Var1CertainlyHowMany[] = _("{STR_VAR_1}? Certainly.\nHow many would you like?"); From 52ce39924051c3a94f96eabb4ac9fb5b7edebf81 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 19 Apr 2023 17:01:00 +0200 Subject: [PATCH 122/129] Fix TM reusability shortcomings (#2930) --- include/strings.h | 2 +- src/shop.c | 4 ++-- src/strings.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/strings.h b/include/strings.h index f17d509e8..72109ed94 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1025,8 +1025,8 @@ extern const u8 gText_ThrowInPremierBall[]; extern const u8 gText_ShopBuy[]; extern const u8 gText_ShopSell[]; extern const u8 gText_ShopQuit[]; +extern const u8 gText_ThatItemIsSoldOut[]; extern const u8 gText_SoldOut[]; -extern const u8 gText_SoldOut2[]; extern const u8 gText_OhABite[]; extern const u8 gText_PokemonOnHook[]; diff --git a/src/shop.c b/src/shop.c index 6f4e09356..b4978f063 100644 --- a/src/shop.c +++ b/src/shop.c @@ -640,7 +640,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y) } if (ItemId_GetImportance(itemId) && (CheckBagHasItem(itemId, 1) || CheckPCHasItem(itemId, 1))) - StringCopy(gStringVar4, gText_SoldOut2); + StringCopy(gStringVar4, gText_SoldOut); else StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); x = GetStringRightAlignXOffset(FONT_NARROW, gStringVar4, 120); @@ -993,7 +993,7 @@ static void Task_BuyMenu(u8 taskId) sShopData->totalCost = gDecorations[itemId].price; if (ItemId_GetImportance(itemId) && (CheckBagHasItem(itemId, 1) || CheckPCHasItem(itemId, 1))) - BuyMenuDisplayMessage(taskId, gText_SoldOut, BuyMenuReturnToItemList); + BuyMenuDisplayMessage(taskId, gText_ThatItemIsSoldOut, BuyMenuReturnToItemList); else if (!IsEnoughMoney(&gSaveBlock1Ptr->money, sShopData->totalCost)) { BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList); diff --git a/src/strings.c b/src/strings.c index dd632a32b..75ff2ef99 100644 --- a/src/strings.c +++ b/src/strings.c @@ -341,8 +341,8 @@ const u8 gText_Var1DisdainfullyAteVar2[] = _("{STR_VAR_1} disdainfully ate the\n const u8 gText_ShopBuy[] = _("BUY"); const u8 gText_ShopSell[] = _("SELL"); const u8 gText_ShopQuit[] = _("QUIT"); -const u8 gText_SoldOut[] = _("I'm sorry, but that item is sold out.\p"); -const u8 gText_SoldOut2[] = _("SOLD OUT"); +const u8 gText_ThatItemIsSoldOut[] = _("I'm sorry, but that item is sold out.{PAUSE_UNTIL_PRESS}"); +const u8 gText_SoldOut[] = _("SOLD OUT"); const u8 gText_InBagVar1[] = _("IN BAG: {STR_VAR_1}"); const u8 gText_QuitShopping[] = _("Quit shopping."); const u8 gText_Var1CertainlyHowMany[] = _("{STR_VAR_1}? Certainly.\nHow many would you like?"); From d3fed5639b4b56836221ccf6232387e2d63a3eed Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Wed, 19 Apr 2023 15:54:57 -0700 Subject: [PATCH 123/129] Added config to enable NEW_ROCKS_PARTICLE (#2929) Co-authored-by: LOuroboros --- include/config/battle.h | 1 + src/data/battle_anim.h | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index ad3162162..3e9ec9b9a 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -195,6 +195,7 @@ #define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle. #define B_NEW_LEECH_SEED_PARTICLE FALSE // If set to TRUE, it updates Leech Seed's animation particle. #define B_NEW_HORN_ATTACK_PARTICLE FALSE // If set to TRUE, it updates Horn Attack's horn particle. +#define B_NEW_ROCKS_PARTICLE TRUE // If set to TRUE, it updates rock particles. #define B_NEW_LEAF_PARTICLE FALSE // If set to TRUE, it updates leaf particle. #define B_NEW_EMBER_PARTICLES FALSE // If set to TRUE, it updates Ember's fire particle. #define B_NEW_MEAN_LOOK_PARTICLE FALSE // If set to TRUE, it updates Mean Look's eye particle. diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h index b1f158310..46293e3a0 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1079,7 +1079,7 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_RedFist, 0x0200, ANIM_TAG_RED_FIST}, {gBattleAnimSpriteGfx_SlamHit, 0x1000, ANIM_TAG_SLAM_HIT}, {gBattleAnimSpriteGfx_Ring, 0x0180, ANIM_TAG_RING}, -#if NEW_ROCKS_PARTICLE +#if B_NEW_ROCKS_PARTICLE == TRUE {gBattleAnimSpriteGfx_NewRocks, 0x0C00, ANIM_TAG_ROCKS}, #else {gBattleAnimSpriteGfx_Rocks, 0x0C00, ANIM_TAG_ROCKS}, @@ -1529,7 +1529,7 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_HumanoidFoot, ANIM_TAG_RED_FIST}, {gBattleAnimSpritePal_SlamHit, ANIM_TAG_SLAM_HIT}, {gBattleAnimSpritePal_Ring, ANIM_TAG_RING}, -#if NEW_ROCKS_PARTICLE +#if B_NEW_ROCKS_PARTICLE == TRUE {gBattleAnimSpritePal_NewRocks, ANIM_TAG_ROCKS}, #else {gBattleAnimSpritePal_Rocks, ANIM_TAG_ROCKS}, From 216b7a4dfd4521104ca4f1a2a07bf58fd56539a7 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Thu, 20 Apr 2023 09:44:18 +0200 Subject: [PATCH 124/129] fix dire hit and paralyze heal --- src/item.c | 2 ++ src/item_use.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/item.c b/src/item.c index da57c4076..b2b19480a 100644 --- a/src/item.c +++ b/src/item.c @@ -973,6 +973,8 @@ u32 GetItemStatus1Mask(u16 itemId) const u8 *effect = GetItemEffect(itemId); switch (effect[3]) { + case ITEM3_PARALYSIS: + return STATUS1_PARALYSIS; case ITEM3_FREEZE: return STATUS1_FREEZE; case ITEM3_BURN: diff --git a/src/item_use.c b/src/item_use.c index 8bcadfb2e..3a838288b 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1154,7 +1154,7 @@ static bool32 CannotUseBagBattleItem(u16 itemId) } // Dire Hit if (battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY - && !(gBattleMons[gBattlerInMenuId].status2 & STATUS2_FOCUS_ENERGY)) + && (gBattleMons[gBattlerInMenuId].status2 & STATUS2_FOCUS_ENERGY)) { cannotUse++; } From 3aec63b8cfb23b0983b92ba03e89c31db84b20a1 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 20 Apr 2023 15:08:42 +0200 Subject: [PATCH 125/129] new define to restore items after battle --- include/battle.h | 4 ++-- include/battle_util.h | 2 +- include/config/battle.h | 1 + src/battle_main.c | 6 +++--- src/battle_script_commands.c | 14 +++++++------- src/battle_util.c | 18 ++++++++++-------- 6 files changed, 24 insertions(+), 21 deletions(-) diff --git a/include/battle.h b/include/battle.h index 46975bec3..f86a5c975 100644 --- a/include/battle.h +++ b/include/battle.h @@ -517,7 +517,7 @@ struct ZMoveData u8 splits[MAX_BATTLERS_COUNT]; }; -struct StolenItem +struct LostItem { u16 originalItem:15; u16 stolen:1; @@ -640,7 +640,7 @@ struct BattleStruct u16 moveEffect2; // For Knock Off u16 changedSpecies[PARTY_SIZE]; // For Zygarde or future forms when multiple mons can change into the same pokemon. u8 quickClawBattlerId; - struct StolenItem itemStolen[PARTY_SIZE]; // Player's team that had items stolen (two bytes per party member) + struct LostItem itemLost[PARTY_SIZE]; // Player's team that had items consumed or stolen (two bytes per party member) u8 blunderPolicy:1; // should blunder policy activate u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky u8 forcedSwitch:4; // For each battler diff --git a/include/battle_util.h b/include/battle_util.h index 0661081e4..b83209a69 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -197,7 +197,7 @@ bool32 IsPartnerMonFromSameTrainer(u8 battlerId); u8 GetSplitBasedOnStats(u8 battlerId); void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast); bool32 TestSheerForceFlag(u8 battler, u16 move); -void TryRestoreStolenItems(void); +void TryRestoreHeldItems(void); bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item); void TrySaveExchangedItem(u8 battlerId, u16 stolenItem); bool32 IsPartnerMonFromSameTrainer(u8 battlerId); diff --git a/include/config/battle.h b/include/config/battle.h index 3e9ec9b9a..4bead3ae8 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -126,6 +126,7 @@ #define B_X_ITEMS_BUFF GEN_LATEST // In Gen7+, the X Items raise a stat by 2 stages instead of 1. #define B_MENTAL_HERB GEN_LATEST // In Gen5+, the Mental Herb cures Taunt, Encore, Torment, Heal Block, and Disable in addition to Infatuation from before. #define B_TRAINERS_KNOCK_OFF_ITEMS TRUE // If TRUE, trainers can steal/swap your items (non-berries are restored after battle). In vanilla games trainers cannot steal items. +#define B_RESTORE_HELD_BATTLE_ITEMS TRUE // In Gen9 all non berry items are restored after battle. #define B_SOUL_DEW_BOOST GEN_LATEST // In Gens3-6, Soul Dew boosts Lati@s' Sp. Atk and Sp. Def. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead. #define B_NET_BALL_MODIFIER GEN_LATEST // In Gen7+, Net Ball's catch multiplier is x5 instead of x3. #define B_DIVE_BALL_MODIFIER GEN_LATEST // In Gen4+, Dive Ball's effectiveness increases by when Surfing or Fishing. diff --git a/src/battle_main.c b/src/battle_main.c index a5a9b5bbf..01d79db3e 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3189,7 +3189,7 @@ static void BattleStartClearSetData(void) { gBattleStruct->usedHeldItems[i][B_SIDE_PLAYER] = 0; gBattleStruct->usedHeldItems[i][B_SIDE_OPPONENT] = 0; - gBattleStruct->itemStolen[i].originalItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + gBattleStruct->itemLost[i].originalItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); gPartyCriticalHits[i] = 0; gBattleStruct->allowedToChangeFormInWeather[i][B_SIDE_PLAYER] = FALSE; gBattleStruct->allowedToChangeFormInWeather[i][B_SIDE_OPPONENT] = FALSE; @@ -5387,9 +5387,9 @@ static void HandleEndTurn_FinishBattle(void) TestRunner_Battle_AfterLastTurn(); BeginFastPaletteFade(3); FadeOutMapMusic(5); - #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE + #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE || B_RESTORE_HELD_BATTLE_ITEMS == TRUE if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - TryRestoreStolenItems(); + TryRestoreHeldItems(); #endif for (i = 0; i < PARTY_SIZE; i++) { diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 4e1494ce3..228cbb812 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7892,7 +7892,7 @@ static void BestowItem(u32 battlerAtk, u32 battlerDef) // Called by Cmd_removeitem. itemId represents the item that was removed, not being given. static bool32 TrySymbiosis(u32 battler, u32 itemId) { - if (!gBattleStruct->itemStolen[gBattlerPartyIndexes[battler]].stolen + if (!gBattleStruct->itemLost[gBattlerPartyIndexes[battler]].stolen && gBattleStruct->changedItems[battler] == ITEM_NONE && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_EJECT_BUTTON && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_EJECT_PACK @@ -11264,7 +11264,7 @@ static void Cmd_various(void) // Open party menu, wait to go to next instruction. else - { + { BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); MarkBattlerForControllerExec(gBattlerAttacker); } @@ -16469,7 +16469,7 @@ void BS_ItemRestoreHP(void) { } if (hp + healAmount > maxHP) healAmount = maxHP - hp; - + // Heal is applied as move damage if battler is active. if (battlerId != MAX_BATTLERS_COUNT && hp != 0) { @@ -16494,10 +16494,10 @@ void BS_ItemRestoreHP(void) { void BS_ItemCureStatus(void) { NATIVE_ARGS(); struct Pokemon *party = (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; - + // Heal Status1 conditions. HealStatusConditions(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], gBattleStruct->itemPartyIndex[gBattlerAttacker], GetItemStatus1Mask(gLastUsedItem), gBattlerAttacker); - + // Heal Status2 conditions if battler is active. if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) { @@ -16506,10 +16506,10 @@ void BS_ItemCureStatus(void) { else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) { - gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); gBattlerTarget = BATTLE_PARTNER(gBattlerAttacker); } - + if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; diff --git a/src/battle_util.c b/src/battle_util.c index ac274bf0f..e057b78dc 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10536,18 +10536,20 @@ void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast) } } -void TryRestoreStolenItems(void) +void TryRestoreHeldItems(void) { u32 i; - u16 stolenItem = ITEM_NONE; + u16 lostItem = ITEM_NONE; for (i = 0; i < PARTY_SIZE; i++) { - if (gBattleStruct->itemStolen[i].stolen) + #if B_RESTORE_HELD_BATTLE_ITEMS == FALSE + if (gBattleStruct->itemLost[i].stolen) + #endif { - stolenItem = gBattleStruct->itemStolen[i].originalItem; - if (stolenItem != ITEM_NONE && ItemId_GetPocket(stolenItem) != POCKET_BERRIES) - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &stolenItem); // Restore stolen non-berry items + lostItem = gBattleStruct->itemLost[i].originalItem; + if (lostItem != ITEM_NONE && ItemId_GetPocket(lostItem) != POCKET_BERRIES) + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &lostItem); // Restore stolen non-berry items } } } @@ -10601,8 +10603,8 @@ void TrySaveExchangedItem(u8 battlerId, u16 stolenItem) if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && GetBattlerSide(battlerId) == B_SIDE_PLAYER - && stolenItem == gBattleStruct->itemStolen[gBattlerPartyIndexes[battlerId]].originalItem) - gBattleStruct->itemStolen[gBattlerPartyIndexes[battlerId]].stolen = TRUE; + && stolenItem == gBattleStruct->itemLost[gBattlerPartyIndexes[battlerId]].originalItem) + gBattleStruct->itemLost[gBattlerPartyIndexes[battlerId]].stolen = TRUE; #endif } From 6c7f5881e453631a1f336618b7e0120c33b7f140 Mon Sep 17 00:00:00 2001 From: citrusbolt <32605812+citrusbolt@users.noreply.github.com> Date: Thu, 20 Apr 2023 08:05:32 -0600 Subject: [PATCH 126/129] Add two EV-related configs (#2825) --- include/config/item.h | 13 +++++++------ include/config/pokemon.h | 1 + include/constants/pokemon.h | 4 ++++ src/pokemon.c | 12 ++++++++++-- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/include/config/item.h b/include/config/item.h index f707b7a54..09008d0f2 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -2,12 +2,13 @@ #define GUARD_CONFIG_ITEM_H // Item config -#define I_SHINY_CHARM_REROLLS 3 // Amount of re-rolls if the player has the Shiny Charm. Set to 0 to disable Shiny Charm's effects. -#define I_KEY_FOSSILS GEN_LATEST // In Gen4+, all Gen 3 fossils became regular items. -#define I_KEY_ESCAPE_ROPE GEN_LATEST // In Gen8, Escape Rope became a Key Item. Keep in mind, this will make it free to buy in marts. -#define I_HEALTH_RECOVERY GEN_LATEST // In Gen7+, certain healing items recover a different amount of HP than they used to. -#define I_SITRUS_BERRY_HEAL GEN_LATEST // In Gen4+, Sitrus Berry was changed from healing 30 HP to healing 25% of Max HP. -#define I_VITAMIN_EV_CAP GEN_LATEST // In Gen8, the Vitamins no longer have a cap of 100 EV per stat. +#define I_SHINY_CHARM_REROLLS 3 // Amount of re-rolls if the player has the Shiny Charm. Set to 0 to disable Shiny Charm's effects. +#define I_KEY_FOSSILS GEN_LATEST // In Gen4+, all Gen 3 fossils became regular items. +#define I_KEY_ESCAPE_ROPE GEN_LATEST // In Gen8, Escape Rope became a Key Item. Keep in mind, this will make it free to buy in marts. +#define I_HEALTH_RECOVERY GEN_LATEST // In Gen7+, certain healing items recover a different amount of HP than they used to. +#define I_SITRUS_BERRY_HEAL GEN_LATEST // In Gen4+, Sitrus Berry was changed from healing 30 HP to healing 25% of Max HP. +#define I_VITAMIN_EV_CAP GEN_LATEST // In Gen8+, the Vitamins no longer have a cap of 100 EV per stat. +#define I_BERRY_EV_JUMP GEN_LATEST // In Gen4 only, EV-lowering Berries lower a stat's EV to 100 if it is above 100. // TM config #define I_REUSABLE_TMS FALSE // In Gen5-8, TMs are reusable. Setting this to TRUE will make all vanilla TMs reusable, though they can also be cherry-picked by setting their importance to 1. diff --git a/include/config/pokemon.h b/include/config/pokemon.h index ce5faf2a6..1cde573c9 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -21,6 +21,7 @@ // Other settings #define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs. +#define P_EV_CAP GEN_LATEST // Since Gen 6, the max EVs per stat is 252 instead of 255. // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index cf6cc8751..ddf879854 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -201,7 +201,11 @@ #define MAX_PER_STAT_IVS 31 #define MAX_IV_MASK 31 #define USE_RANDOM_IVS (MAX_PER_STAT_IVS + 1) +#if P_EV_CAP >= GEN_6 +#define MAX_PER_STAT_EVS 252 +#else #define MAX_PER_STAT_EVS 255 +#endif #define MAX_TOTAL_EVS 510 #if I_VITAMIN_EV_CAP >= GEN_8 #define EV_ITEM_RAISE_LIMIT MAX_PER_STAT_EVS diff --git a/src/pokemon.c b/src/pokemon.c index 46eca90b2..e82cb98c3 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5854,7 +5854,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (itemEffect[10] & ITEM10_IS_VITAMIN) evCap = EV_ITEM_RAISE_LIMIT; else - evCap = 252; + evCap = MAX_PER_STAT_EVS; if (dataSigned >= evCap) break; @@ -5880,6 +5880,10 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; } dataSigned += evChange; + #if I_EV_LOWERING_BERRY_JUMP == GEN_4 + if (dataSigned > 100) + dataSigned = 100; + #endif if (dataSigned < 0) dataSigned = 0; } @@ -6030,7 +6034,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (itemEffect[10] & ITEM10_IS_VITAMIN) evCap = EV_ITEM_RAISE_LIMIT; else - evCap = 252; + evCap = MAX_PER_STAT_EVS; if (dataSigned >= evCap) break; @@ -6056,6 +6060,10 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; } dataSigned += evChange; + #if I_BERRY_EV_JUMP == GEN_4 + if (dataSigned > 100) + dataSigned = 100; + #endif if (dataSigned < 0) dataSigned = 0; } From ae80d545c5b4f2f86baf702d4527d88c11b935b0 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 20 Apr 2023 16:12:11 +0200 Subject: [PATCH 127/129] Support for multi battles where Trainer has only one mon (#2670) --- src/battle_controller_opponent.c | 12 +++++++----- src/battle_interface.c | 5 +++++ src/battle_main.c | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index cb0499ac8..4eda81b09 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -228,9 +228,11 @@ static void Intro_DelayAndEnd(void) } } -static bool32 TwoIntroMons(u32 battlerId) // Double battle with both player pokemon active. +static bool32 TwoIntroMons(u32 battlerId) // Double battle with both opponent pokemon active. { - return (IsDoubleBattle() && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]])); + return (IsDoubleBattle() + && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[battlerId]]) + && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]])); } static void Intro_WaitForShinyAnimAndHealthbox(void) @@ -1969,7 +1971,7 @@ static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite) static void Task_StartSendOutAnim(u8 taskId) { - u8 savedActiveBank = gActiveBattler; + u8 savedActiveBattler = gActiveBattler; gActiveBattler = gTasks[taskId].data[0]; if ((!TwoIntroMons(gActiveBattler) || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) && !BATTLE_TWO_VS_ONE_OPPONENT) @@ -1977,7 +1979,7 @@ static void Task_StartSendOutAnim(u8 taskId) gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); } - else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) + else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) || (BATTLE_TWO_VS_ONE_OPPONENT && !TwoIntroMons(gActiveBattler))) { gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); @@ -1992,7 +1994,7 @@ static void Task_StartSendOutAnim(u8 taskId) gActiveBattler ^= BIT_FLANK; } gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; - gActiveBattler = savedActiveBank; + gActiveBattler = savedActiveBattler; DestroyTask(taskId); } diff --git a/src/battle_interface.c b/src/battle_interface.c index 7f7e1d20f..bbe61a372 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -690,12 +690,17 @@ static void InitLastUsedBallAssets(void) } // This function is here to cover a specific case - one player's mon in a 2 vs 1 double battle. In this scenario - display singles layout. +// The same goes for a 2 vs 1 where opponent has only one pokemon. u32 WhichBattleCoords(u32 battlerId) // 0 - singles, 1 - doubles { if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT && gPlayerPartyCount == 1 && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) return 0; + else if (GetBattlerPosition(battlerId) == B_POSITION_OPPONENT_LEFT + && gEnemyPartyCount == 1 + && !(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) + return 0; else return IsDoubleBattle(); } diff --git a/src/battle_main.c b/src/battle_main.c index a5a9b5bbf..2eecda65b 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -594,6 +594,7 @@ static void CB2_InitBattleInternal(void) if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && !BATTLE_TWO_VS_ONE_OPPONENT) CreateNPCTrainerParty(&gEnemyParty[PARTY_SIZE / 2], gTrainerBattleOpponent_B, FALSE); SetWildMonHeldItem(); + CalculateEnemyPartyCount(); } gMain.inBattle = TRUE; From 4a08ede2c49ba55ac9d358d95ee240b238325192 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 21 Apr 2023 20:13:30 +0200 Subject: [PATCH 128/129] Add GetMovesArray in GetMovesArray --- src/battle_ai_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 05e7aec58..53b5ebed6 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -477,7 +477,7 @@ bool32 IsAiBattlerAware(u32 battlerId) { if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_OMNISCIENT) return TRUE; - + return BattlerHasAi(battlerId); } @@ -1129,7 +1129,7 @@ bool32 CanTargetFaintAi(u8 battlerDef, u8 battlerAtk) { s32 i, dmg; u32 unusable = AI_DATA->moveLimitations[battlerDef]; - u16 *moves = gBattleResources->battleHistory->usedMoves[battlerDef]; + u16 *moves = GetMovesArray(battlerDef); for (i = 0; i < MAX_MON_MOVES; i++) { From 30204e99533bf826486c3cd535a04a2c97dc5e09 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 21 Apr 2023 20:59:54 +0200 Subject: [PATCH 129/129] fix wrong z-move ususage --- src/battle_z_move.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 104a44daa..f435253c7 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -215,11 +215,7 @@ bool32 IsViableZMove(u8 battlerId, u16 move) if (move != MOVE_NONE && zMove != MOVE_Z_STATUS && gBattleMoves[move].type == ItemId_GetSecondaryId(item)) { - if (IS_MOVE_STATUS(move)) - gBattleStruct->zmove.chosenZMove = move; - else - gBattleStruct->zmove.chosenZMove = GetTypeBasedZMove(move, battlerId); - + gBattleStruct->zmove.chosenZMove = GetTypeBasedZMove(move, battlerId); return TRUE; } }